趣百科

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

编辑:Simone 2024-11-29 21:32:42 581 阅读

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

在C语言二级考试中,给出C语言小程序,让考生分析运行结果的题目比较多,相对来说这方面的题目比较简单,只要细心推导,得出结果不难。下面就由电仔谈谈这方面的解题经验,主要是把我解题的过程写出来,而不是讲解理论。

程序:

#include

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

main()

{

int i,n={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=n*2+1; printf("%d",n);

}

上面是第一次循环,n=0*2+1=1,则 printf("%d",n[i]); 输出1

for(;2<4;i++);

{

n=n*2+1; printf("%d",n);

}

上面是第二次循环,n=n*2+1=3,则 printf("%d",n[i]); 输出3

for(;3<4;i++);

{

n=n*2+1; printf("%d",n);

}

上面是第三次循环,n=n*2+1=3,则 printf("%d",n[i]); 输出7

for(;4==4;i++);

{

n==n*2+1; printf("%d",n);

}

上面是第四次循环,n=n*2+1=3,则 printf("%d",n[i]); 输出15

结束循环后执行 printf("\n"); 输出换行

最后我们可以看到的输出为

13715

图为在Linux系统下编程验证,图中黑色部分为程序输出结果

程序:

#include

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

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

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

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系统下编程验证,图中黑色部分为程序输出结果

版权声明:本站【趣百科】文章素材来源于网络或者用户投稿,未经许可不得用于商用,如转载保留本文链接:https://www.qubaik.com/life/87099.html

相关推荐