如何备考C语言二级考试之程序运行结果分析篇

作者:滴水穿石 | 创建时间: 2023-08-01
在C语言二级考试中,给出C语言小程序,让考生分析运行结果的题目比较多,相对来说这方面的题目比较简单,只要细心推导,得出结果不难。下面就由电仔谈谈这方面的解题,主要是把我解题的过程写出来,而不是讲解理论。...
如何备考C语言二级考试之程序运行结果分析篇

操作方法

程序: #include <stdio.h> int main(int argc,char **argv) { int x=10,y=20,t=0; if(x==y)t=x;x=y;y=t; printf(“%d %d\n”,x,y); return 0; } 分析程序运行结果为? 电仔的解题步骤: 把  if(x==y)t=x;x=y;y=t; 语句这样书写 if(x==y) t=x; x=y; y=t; 或者干脆这样书写 if(x==y) { t=x; } x=y; y=t; 可以看出  x==y  为假,  t=x; 语句不执行 x=y,也就是x=20,t不变,也就是t=0 那么 printf(“%d %d\n”,x,y ); 语句打印输出 20 0 图为在Linux系统下编程验证,图中黑色部分为程序输出结果

程序: #include <stdio.h> main() { int  i,n[5]={0}; for(i=1;i<=4;i++); { n[i]=n[i-1]*2+1;    printf("%d",n[i]) } printf("\n"); } 则程序输出结果是? 电仔的解题步骤: for(;1<4;i++); { n[1]=n[1-1]*2+1;    printf("%d",n[1]); } 上面是第一次循环,n[1]=0*2+1=1,则  printf("%d",n[i]);  输出 1 for(;2<4;i++); { n[2]=n[2-1]*2+1;    printf("%d",n[2]); } 上面是第二次循环,n[2]=n[1]*2+1=3,则  printf("%d",n[i]); 输出 3 for(;3<4;i++); { n[3]=n[3-1]*2+1;    printf("%d",n[3]); } 上面是第三次循环,n[3]=n[2]*2+1=3,则  printf("%d",n[i]); 输出 7 for(;4==4;i++); { n[4]==n[4-1]*2+1;    printf("%d",n[4]); } 上面是第四次循环,n[4]=n[3]*2+1=3,则  printf("%d",n[i]);  输出 15 结束循环后执行  printf("\n");  输出换行 最后我们可以看到的输出为 13715 图为在Linux系统下编程验证,图中黑色部分为程序输出结果

程序: #include<stdio.h> main() { char c1,c2; scanf(“%d”,(int *)&c1); c2=c1+9; printf(“%c%c\n”,c1,c2); } 字符0的ASCII码值为48,若程序运行时从键盘输入48后回车,则输出结果为? 电仔的解题步骤: 执行完   scanf(“%d”,(int *)&c1);  后,c1的值为 48,对应的ASCII码为字符 0 执行完   c2=c1+9;  后,c2的值为57,对应的ASCII码为字符 9(0+9) 那么执行    printf(“%c%c\n”,c1,c2);  输出 09 图为在Linux系统下编程验证,图中黑色部分为程序输出结果

程序: #include <stdio.h> main( ) { int a=1, b=0; if( !a )  b++; else if( 0==a)  if(a) b+=2; else b+=3; printf( "%d\n",b ); } 程序运行的输出结果是? 电仔的解题步骤: 为了方便理解,我把主函数整理为等效的布局和表达形式 main( ) { int a=1, b=0; if( !a ) { b++; } else if( a==0) { if(a) { b=b+2; } else { b=b+3; } } printf( "%d\n",b ); } 这样就容易看出, !a  为假, a==0  也为假,所有条件语句括号内的语句都得不到执行,变量b的值不变所有   printf( "%d\n",b );  输出 0 对这题还不能理解的读者欢迎在评论中提出,图为在Linux系统下编程验证,图中黑色部分为程序输出结果

程序: #include <stdio.h> main( ) { int  a=1, b=2; while( a<6 )   { b+=a;  a+=2;  b%=10;  } printf( "%d, %d\n",a, b ); } 则程序的运行结果是? 电仔的解题步骤: 同理,我也把main函数整理一下 main( ) { int a=1, b=2; while( a<6 )  { b=b+a;   a=a+2;   b=b%10; } printf( "%d, %d\n",a, b ); } 接着推导while循环何时结束 while( 1<6 )  { b=2+1;   a=1+2;   b=3%10; } 上面是第一循环,最后 b=3 ,a=3 while( 3<6 )  { b=3+3;   a=3+2;   b=6%10; } 上面是第一循环,最后 b=6 ,a=5 while( 5<6 )  { b=6+5;   a=5+2;   b=11%10; } 上面是第一循环,最后 b=1,a=7 while( 1<6 ) 条件不成立,循环结束执行   printf( "%d, %d\n",a, b );  输出 7, 1 图为在Linux系统下编程验证,图中黑色部分为程序输出结果

程序: #include <include> main( ) { char s[ ]="rstuv"; printf( "%c\n",*s+2 ); } 电仔的解题步骤: 这题牵涉到指针数组,有时间我再写个指针数组的专题 *s+2  等效为 (*s)+2 也就是  'r'+2  ,换句话说取出字符ASCII的码值加2,刚好是 t的码值 输出和"rstuv"的‘t’没有一点关系, *s+2  要是理解为 *(s+2)  输出也是 t 但是这样理解是错的,比如把对应该语句改为  char s[ ]="rsuuv"; 那么输出结果是 t而不是u 图为在Linux系统下编程验证,图中黑色部分为程序输出结果

温馨提示

这是个人的解题思路,读者如果有更好更快的步骤欢迎反馈
文中可能存在的错误,读者如果发现请务必指出
点击展开全文

更多推荐