C语言小程序解疑

C语言小程序解疑,第1张

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语言一个小程序的疑惑,谢谢了!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9266162.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存