楼上那位基本是对的,只是第二个没有看清要求,可以这样改:
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语言帝进来,小弟请教问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)