C语言几个精典的测试题

 

 最近学习C语言,发现有几个测试题是最容易错的,不知道学习C语言的朋友也会犯这样的错误呢?

1.大家看以下代码会输出什么( ).

void  main()
{
        
char ch;
        ch 
= 'a' + 3;
        putchar(ch);
}

a)    a             b)   100          c)              c             d)            d

我们知道声明了一个字符型变量,同时给它初始化为ch='a'+3;那么这里就应该输出'd'.我们知道字符型变量在内存中是以整型存储的,通过ASCII码知道'a'对应的整数是97.那么97+3就是100对应的字符'd'.所以选d).

2.分析下面的C程序:

#include  < stdio.h >
#include 
< string .h >
void  main()
{
char str1[]="abcdefgh";
char str2[]="ABCD";
char *= str1 + 3;
printf(
"%d ",strlen(strcat(p,str2)));
}

输出结果是( ).(选择一项)

a)    9      b)        12            c)       13            d)           8

在我们学习C语言的过程中,我们知道对字符串的操作是通过字符数组来表示字符串的,如char ch[ ] = "abcdefgh";

这里我们知道字符串是以'/0'来表示字符串的结束,那么使用strlen(str)这个函数计算字符串的长度并不计算字符串的结束符'/0'.

首先我们声明了一个指针变量char *p;让它指向str1的首地址,然后"+3"那么指向的是数组的第四个元素'd'.那么这里我们又通过strcat(str1,str2)函数,它表示将源字符串的str2连接到str1字符串的后面.那么p的值就是"defgh",同时相应的字符串长度就是5+4等于9.

3.分析下面的C语言代码:

int  a = 1 ,b = 10 ;
do {
     b 
-= a;
     a
++;
}
while (b --< 0 );

则执行循环语句后b的值为( )。(选择一项)

a)             9              b)                -2                  c)                -1                      d)                   8

我们来回顾一下do--while语句的用法:它是先执行后判断,无论条件为真或为假,循环体里的语句至少执行一次;而while循环是:先判断后执行,如果条件不成立那么就退出循环。那么我们再来看一下for循环,它的语法为:for(表达式1;表达式2;表达式3){}它首先给表达式1赋初值,然后再判断表达式2的值是否为真,如果为真的话就执行循环体中的语句,执行完后再计算表达式3的值来更新变量的值而改变循环条件,至到循环结束;如果表达式2为假的话就退出循环。

我们来看这一题,首先b -= a,这个表达式考察了我们学习C语言中的复合赋值运算符,可表示为:b = b - a; b = 9;执行完后就判断循环条件: b -- < 0;条件为假,循环退出。我们知道b-- ,它是先赋值,之后自身减 1(如:b=9,c = b-- .执行过程为:c=9, b = b - 1 ;)那么所得结果就是:8 所以答案为:d.

4.执行下面的C程序段后,输出结果是()。(选择一项)

int  a  =   5 ;
while  ( a  -- );
printf(
" %d " ,a);

a)          54321        b)         4321                c)                  0                    d)            -1

我们来分析一下这一道题,看似简单,但是做起来容易出错。我们知道C语言中无论是循环条件或者是逻辑表达式,它所计算所得的结果为:真或假。C语言中真的值就是 !  ,假的值为: 0 。那么我们来看while(a--);当条件a--的值为假时,循环退出,即:a -- = 0时,那么a 的值也就为: - 1;我们这里要知道这个循环总共循环执行了 5 次。答案就选择:d。

5.研究下面的C程序段:

int  i,j;
for (i  =   5 ; i; i  -- )
    
     
for (j  =   0 ; j  <   4 ; j ++ )

           
{ ..........}

循环体的总执行次数是()。(选择一项)

a)               20                b)           25                      c)             24                  d)                      30

我们看到题之后首先应该想到的是,它是一个嵌套的for循环,相当于一个二维数组。如:a[5][4],我们知道它是有5行4列组成,共有5X4=20个元素。为它动态赋值的话可表示为:

int  a[ 5 ][ 4 ], i,  j;
for (i = 0 ;i < 5 ;i ++ )

        
for  (j  = 0 ; j  <   4 ; j ++ )

         
{
              scanf(
"%d",&a[i][j]);
         }

我们这里考查的是for循环的第二个表达式,如果表达式为真就执行循环,如果为假则退出循环。参考上一题可得出本题答案为:a 。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值