
scanf( "%4c%4c", &c1, &c2 );
它的作用是把你输入的前4个字符放入地址&c1, 再把后4个字符放入地址&c2
因为c1 c2本身都只占一个字节, 你放如4个字节, 会造成内存益处。 最后你可能看到正确结果, 也可能得到错误结果。。
比如输入
abcd7890
可能得到:(可能性不大)
a 7
也可能得到:(最有可能)
8 7
(因为c1 c2是连续地址, 第二次把8放如了c1)
总之应避免这样使用scanf
n%10 是n除以10取余数 如果n=12那么n%10=2
因为你定义的n是INT类型的,所以输出n%10后,它执行n=n/10,正因为N是INT类型的,所以N/10是取整数部分的,如果N=13,那么N/10=1
当你输入小于0的N时,它不满足WHILE条件,所以一次都不循环
当你输入大于0的N时,它才开始循环,一旦N小于10了,它就跳出循环了
因为N小于10,那么它除以10的结果的整数部分一定为0,就不满足WHILE的条件了
现在懂了吗?
1max=-32768;
min=32767;
如果你编译平台是16位的 如TC 那么int类型变量分配16位二进制数 第一位为符号位 有15位表示数值 则其取值范围-2的15次方到2的15次方减1
即-2^15~2^15-1 得-32768~32767 所以 int最小数就是 -32768最大数就是
32767
如果你编译平台是32位的 int 范围是-2^31~2^31-1
2sum +=integer; 就是sum=sum+integer c语言提供这样sum +=integer语法 死规绝
3程序定义max=-32768; min=32767;最大数max先赋最小值 最小数min先赋最大值
如果你不赋初始值 max和min随即取数 判断将不准确
比较是经过if(integer>max)max=integer;if(integer<min)min=integer;这两条语句实现 系统不会默认自动比较
int FindSamdData(int a, intb, int length)
{
int i,j;
for (i=0,j=0; (i<length)&&(j<length);)
{
while (a < b) //有序排列,挨个比较
{
a++;
i++;
}
while (a > b)
{
b++;
j++;
}
if (a == b) return a;
}
}
int main(void)
{
int a[ ]={1,3,5,7,9,13,15,27,29,37};
int b[ ]={2,4,6,8,10,13,14,27,29,37};
int c;
c = FindSamdData(a, b ,sizeof(a));
}
增加出错的程序。出错的最好使用一个单独参数,我为了方便没有增加参数。
//有序数组查找相同数据,数组等长
//length为0未找到相同数据,
int FindSamdData(int a, intb, int length)
{
int i,j;
for (i=0,j=0; (i<length)&&(j<length);)
{
while (a < b) //有序排列,挨个比较
{
a++;
i++;
if (i>=length)break;
}
while (a > b)
{
b++;
j++;
if (j>=length)break;
}
if (a == b)
{
length = 1;
return a;
}
}
length = 0;
return 0; //
}
//数组不等长
//al或bl超出数组长表示出错,
int FindSamdData2(int a, intb, int al, int bl)
{
int i,j;
for (i=0,j=0; (i<al)&&(j<bl);)
{
while (a < b) //有序排列,挨个比较
{
a++;
i++;
if (i>=al) break;
}
while (a > b)
{
b++;
j++;
if (j>=bl) break;
}
if (a == b)
{
al = i;
bl = j;
return a;
}
}
al = i;
bl = j;
return 0;
}
void main(void)
{
int a[]={1,3,5,7,9,13,15,27,29,37};
int b[]={2,4,6,8,10,13,14,27,29,37};
int la = sizeof(a);
int lb = sizeof(b);
int c;
c = FindSamdData(a, b ,&la);
if (la == 0) printf("No same!");
la = sizeof(a); //la会被函数 FindSamdData 修改
c = FindSamdData2(a, b ,&la, &lb);
if ((la >=sizeof(a)) || (la >=sizeof(a))) printf("No same!");
}
我们知道char型可以和int型相互运算,二者可以互相转换。
char型的字母或者符号有唯一的ASCII码一一对应;该码值就是一般的int型所对应的数值;
回到题目上来:"char a=176,b=219;"意思是:定义的char型变量分别被赋值176,219;176,219是int型的数,但是我们已经定义a,b是char型,所以系统会根据强制类型转换原理将ASCII码值为176,219所对应的符号分别送给a,b;即 a=‘ ° ’,b=‘ Û ’;以后输出的结果自然就是这些符号组合成的图形了。
/我用c++做一下,你可以把输入输出自己转化一下/
#include<iostreamh>
#define MaxSize 100
int data[MaxSize][MaxSize];
void func(char str[],int n)// str 是字符串,n是串长度
{
int i,j;
i=0;
for(i=0;i<n;i++)
{
j=0;
while(str[j]!='\0')
{
data[i][j]=(int)(str[(j+i)%n]-0x30);
j++;
}
}
}
void main()
{
char str[]="123";
/也可以自己输入串并检测串长度,这只是个测试程序/
int n=3;
func(str,3);
for(int i=0;i<n;i++)
{
int j=0;
while(j!=n)
{
cout<<data[i][j]<<' ';
j++;
}
cout<<endl;
}
}
以上就是关于C语言小程序解疑全部的内容,包括:C语言小程序解疑、C语言的小程序的解析,帮我分析下吧,大虾们!、关于C语言一个小程序的疑惑,谢谢了!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)