最近学习C语言,发现有几个测试题是最容易错的,不知道学习C语言的朋友也会犯这样的错误呢?
1.大家看以下代码会输出什么( ).
... {
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 < string .h >
void main()
... {
char str1[]="abcdefgh";
char str2[]="ABCD";
char *p = 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语言代码:
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程序段后,输出结果是()。(选择一项)
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程序段:
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个元素。为它动态赋值的话可表示为:
for (i = 0 ;i < 5 ;i ++ )
for (j = 0 ; j < 4 ; j ++ )
... {
scanf("%d",&a[i][j]);
}
我们这里考查的是for循环的第二个表达式,如果表达式为真就执行循环,如果为假则退出循环。参考上一题可得出本题答案为:a 。