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

2025-10-29 05:27:45

1、程序:

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

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

2、程序:

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

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

3、程序:

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

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

4、程序:

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

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

5、程序:

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

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

6、程序:

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

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

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢