c语言的基础题求解
1、main() { int a;char c=10; float f=100.0;double x; a=f/=c*=(x=6.5); printf("%d %d %3.1f %3.1f\n",a,c,f,x); } char c=10,是将字符10赋值给c吗???字符10是什么???表只有0-9有字符对应的ASCII码,10是什么? 2、设变量x为float型且已赋值,则以下语句能将x中的数值保留到小数点后两为,并且将第三位四舍五入的是 A)x=x*100+0.5/100.0 B)x=(x*100+0.5)/100.0 C)x=(int)(x*100+0.5)/100.0 D)x=(x/100+0.5)*100.0 此类题目如何思考呢? 3、 main() { int i=1,j=2,k=3; if(i++==1&&(++j==3||k++==3)) printf("%d %d %d\n",i,j,k); } ++j使j=3 k++使k=4 i++使i=2 但是答案为什么是2 3 3呢? 4、 void f(int y,int *x) { y=y+*x;*x=*x+y; } main() { int x=2,y=4; f(y,&x); printf("%d %d\n",x,y); } 求这题f()函数里的计算过程 5、 void swap(int *a,int *b) { int *t; t=a;a=b;b=t; } main() { int x=3,y=5,*p=&x,*q=&y; swap(p,q); printf("%d %d\n",*p,*q); } 解题过程 我做出来是5 3,答案是3 5,不解???
简单回答一下学姐的问题: 1、由于字符在内存中是以int类型存储,所以int型和char型在一定程度是可以通用的。所以整数10是可以赋值给char变量c的。只不过,在输出的时候,可以通过%c或%d来控制就是了。ASCII码当然是单个字符的字符集了,而10就是一个整数。
2、答案应该是C。对于此类问题,要考虑float类型在内存中存储的是一个近似值,是有实际误差的。所以放大缩小时必须要用相同的倍数,而且四舍五入要通过强制类型转换来实现。C答案实际上最接近,理论上加上0。5就可以,但实际上未必,你可以测试一下。
至于其它的表达式,差的就远了。 3、标准答案当然是对的,至于为什么变量k的值不是4,这是由于在判断表达式(++j==3||k++==3)时,逻辑或||后面的k++并没有计算。这是因为逻辑或表达式,只要前面的表达式为真,后面的就不再计算。而表达式++j==3,非零,为真,满足条件,所以后面的不计算,所以k值仍然是3。
4、f(y,&x)函数计算过程。调用时,实参y值是4,实参&x是变量x的地址,地址所指向的变量值2。 所以表达式y=y+*x中,y值是4,*x值是2,最终y值6,计算*x=*x+y时,y值是6,*x是2,所以*x最终值是8,也就是x变量值为8。
同时要注意,参数y是传值方式,传给函数内部的是y变量的复本,并不会影响函数外部的y值,所以在函数外输出时,仍然是y变量的初始值4,所以输出结果是:8 4 5、答案为什么是3 5?这是因为swap函数,仅仅是通过指针变量t,把两个参数指针的地址进行了交换,并没有把指针所指向的变量值进行交换,所以输出结果是:3 5。
如果把函数内部修改成下面的代码,则真的是把变量值进行交换了。int t; t=*a;*a=*b;*b=t; 。
答:设正方形顶点B(x,y),则A(-x,y),C((-x,-y),D(x,-y), |AB|=|BC|,→2x=2y,→x=y, B在椭圆上:x^2/a^2+y^...详情>>
问:挺简单的一C函数,不过我是初学者,暂时还不会写,请好心人多多帮忙!
答:int mystrlen(char *str) { int n = 0; while (*str) { n++; str++;} return n; } voi...详情>>