C语言问题有好几道,请大家耐心解答
第一题:在程序运行时输入a,b的值为1,2,运行结果为()
main()
{
int a,b,t=0;
scanf("%d%d",&a,&b);
if(a<=2){t=a;a=b;b=t;}
printf("%d,%d\n",a,b);
}
第二题:读程序写结果
main()
{
int x=10,y=10,i;
for(i=0;x>8;y=++i)
printf("%d %d",x--,y);
}
第三题:读程序写结果
main()
{
int i=2,p;
p=f(i,i+1);
printf("%d",p);
}
int f(int a,int b)
{
int c;
c=a;
if(a>b) c=1;
else if(a==b) c=0;
else c=-1;
return(c);
}
第四题:下列程序在运行时输入B,结果为?
main()
{
grade=getchar();
switch(grade)
{
case'A':printf("85~100\n");break;
case'B':printf("70~84\n");bread;
case'C':printf("60~69\n");break;
case'D':printf("<60\n");break;
default:printf("error!\n");
}
}
阅读程序写出结果。
main()
{
int i=1,sum=0;
while(i<5)
{
sum=sum+i;
i++;
}
printf("%d\n",sum);
}
第六题:以下程序运行后的记过是?
main()
{
float s,x=2.5,y=4.8;
int a=7,b=4;
s=x+a%3*(int)(x+y)%2/b;
printf("%f\n",s);
}
参考答案:1 结果:2,1
注意a是从0开始的,交换3次。
2 结果:
10 109 1
for语句的执行过程是:先赋初值,再判断,表达式为真执行循环体,再执行累加部分,所以先输出x(10),再执行后缀--,x值为9,此时还未执行y=++i的操作,故输出的y值为10。然后执行累加部分y=++i,y的值为1,再输出x(9),再执行后缀--,x值为8,累加,y的值为2,判断,不满足要求,跳出。
3 结果:-1
调用函数,形参a=i=2,形参b=i+1=3,执行函数体,a<b,c=-1,返回-1。输出p(-1)。
4 结果:70~84
第3行改为char grade=getchar();
第7行改为case'B':printf("70~84\n");break;
输入B后进入switch语句逐一判断,到第7行符合,输出 70~84,break(跳出switch语句)。
5 结果:10
sum=1,i=2,判断,符合,继续;
sum=1+2=3,i=3,判断,符合,继续;
sum=3+3=6,i=4,判断,符合,继续;
sum=6+4=10,i+5,判断,不符合,跳出。
6 结果:2.500000
a模3等于1,x+y=7.3,强制转换成int型后为7,模2等于1,注意此时a%3,(int)(x+y)%2,b都是int型数据,得到的运算结果也是int型的,即1*1/4,结果为0,最后的结果为2.5,即x,默认情况下float数据输出保留6位小数。