C语言作业问题

C语言作业问题,第1张

楼上那位基本是对的,只是第二个没有看清要求,可以这样改:

int

main()

{

int

a,b;

void

num(int

a,int

b);

scanf("%d,%d",a,b);

num(a,b);

return

0;

}

void

num(int

a,int

b)

{

int

i,t;

int

mid;

srand((int)time(0));

if(a<b)

{t=a;a=b;b=t;}

while(1)

{

mid=rand();

if(mid>a

&&

mid<b)

{

printf("%d\t",i);

break;

}

else

continue;

}

}

2 4

0 0

2 2

4 8

解释一下。第一次循环结束的时候,va的值是{0,1,2}vb是{0,2,4}

第二次循环时,输出的内容相当于va[i]+i和vb[i]i

这个考的是指针的用法,pa,pb是指针,当对指针进行自加自减时,变化的是指针指向的内存地址。

你可能会疑问第二个循环中的pa++和第一个中的pa++不一样,那我告诉你的是pa++相当于pa;pa++;

第一题、

当然不会把2437作为一个整体,因为2437不是一个数字,你使用的是getchar()函数,该函数把2437当作的是4个字符,即字符'2'(也就是ASCII51),'4','3','7',而且使用getchar每次读入的是一个字符,而没有被读入的字符,仍然被留在缓存中,当下次再使用getchar()时,则是直接从缓存中取值,而不会再提醒你对其输入值了。可以验证,比如int a; int b; a=getchar(); b=getchar();如果你连续输入两个数54,则a的值将是字符'5'的ASCII码,而字符b就是'4'的ASCII码值,同样,如果你输入一个数字4,再按回车,则a的值是'4'的ASCII码,而b是回车的ASCII码。getchar()会把回车也当作一个字符。

第二题,相对简单一些

while (ch=getchar()= ='A');主要是考查对运算符优先级的熟练度。赋值运算符的优先级底于关系运算符,因此对于ch=getchar()= ='A'应先执行getchar()=='A',如果输入字符A,那么getchar()与'A'是相等的,结果ch的值应为1,答案怎么可能会是0哦。

第三题,因为函数void swap (int a,int b);的参数是int 型的,在进行函数调用时是进行的引用调用,也就是把变量x和y的地址传给了指针a和b,那么指针a就指向了变量x的地址,指针b指向了变量y的地址,因此在swap中,对a和b所指向的地址中的值(a所对应的是x)的更改会影响到变量x和y的值。所以对a和b的更改会影响到变量x和y,所以结果变量x和y的值被交换了。

第4题

void sub(double x,double y,double z) //这里应该把y改为y吧。

{y= y -10; z= z+x;}

main()

{double a=25,b=90,pa,pb;

pa=&a;pb=&b;

sub(b-a,pa,pa); printf("%f\n",a);

}

解释,sub(b-a,pa,pa)表示把b-a的值赋给x,把pa的地址赋给指针y,同时把pa地址赋给z。因此y和z都是指的指针y和z所指向的地址的值,也就是变量a的值,因此y和z是表示的同一个值。

分析sub函数中的计算。

y= y -10; //因为y=a,所以y=25-10=15;

z= z+x; //因为指针y改变了他所指向的内存中的值(即a的值),而z也是指现同一块内存中的值的,因此z的值也被改变为15了,所以z=z+x=15+65=80,因为x=b-a=9-25=65,所以最后变量a的值为80,所以程序最后输出8000000

你的答案是否有误,正确答案应是8000000

以上就是关于C语言作业问题全部的内容,包括:C语言作业问题、c程试题,下程序运行后是什么结果,为什么、C语言帝进来,小弟请教问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9876574.html

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

发表评论

登录后才能评论

评论列表(0条)

保存