C语言练习题---(二)(易错)

1、已知 a b c int 类型,执行语句 scanf("a=%d,b=%d,c=%d",&a,&b,&c); ,若要使得 a 为 1, b 2 c 3 ,则以下选项中正确的输入形式是()
 A a=1     B 1,2,3     C a=1,b=2,c=3      D 1 2 3
        b=2
        c=3
答案:C。
scanf函数中“”中的数据,除去格式(带%的部分)外,是输入者必须输入的部分,这部分程序不解释成数据,忽略之,但是不输入就会导致程序错误的解释(看来程序挺傻的),如:a=%d,输入时就必须写a=1,程序才会将1存入到a

2、 设有 int x; flfl oat y=5.5;,则执行语句x=y*3+(int)y%4 ;后,x的值为_____

答案:17。

首先强制类型转换,y转换为int型时是取整操作,即舍弃小数部分,所以得到的是5,
5%4=1,即5除以4的余数是1,y*3=5.5*3=16.5,16.5+1=17.5,由于x是整形变量,所以包含一个隐式的类型转换,即取整,舍去小数部分,为17,赋值给x,即得到x=17。

3、有 程 序 段:char str[]="ab\070\\14\n"; printf("%d\n",strlen(str));,执行后输出结果是______。

 答案:7

strlen():求字符串长度,不包括'\0',  'a','b','\070','\\','1','4','\n',一共7个字符

4、 设 char *s ="\ta\017bc";则指针变量s指向的字符串所占的字节数是_____。

答案:6

'\t','a','\017','b','c','\0'

 5、当x=2时,表达式x/=x+=x的值为______。

答案:1

从右往左计算,x+=x ---> x=x+x=4,x/=4此时x=4,x/=4-->x=1。

6、下列程序输出的结果为______。

int main()

{

    char  st[20] = "hello\0\t\\\";

    printf("%d %d \n",strlen(st)),sizeof(st));

    return 0;

A、9  9    B、5  20    C、13  20    D、20  20

答案:B

strlen():计算字符串长度,从第一个字符开始,一直到第一个'\0'(不包含'\0')。

sizeof():计算数组的大小,是其定义的大小,与其赋值的字符串无关。

7、 下列语句中,只能在循环结构的循环体中使用的是()

A、break语句  B、continue语句  C、 go to 语句  D、return语句

答案:B

continue:结束本次循环,进入下一循环。

break:可用于循环语句和switch语句。 

8、设int a =1,b =2,c =3,d= 4,m = 2,n = 2;执行( m = a > b)&& (n = c > d) 后,n的值为____。 

答案:2

  m = a > b ,a = 1 ,b = 2,a>b条件不成立,m = 0;,

 &&:有一边为0,结果就为0,因此不会执行后面的n = c > d,因此n任然为2。

9、 设a = 3,b = 5,c = 5,则表达式 a||b+c &&b==c的值为____。

答案:1

注意逻辑表达式的优先级:!>& >|

因此先执行后部分,b==c不成立,后部分为0,a!=0,因此结果是1。

 10、设a= -3;执行 (a>0)?a:-a;后,a = ____。

答案:-3

注意:该执行语句并没有对a进行赋值,所以a的值不变。

11、下列程序段正确的是()

A 、char str1[] ="12345",str2 = "abcdef"; strcpy(str1,str2);

B 、char str[10] ,*st = "abcde"; strcat(str,st);

C 、char str[10]="     ",*st = "abcde"; strcat(str,st); 

D、 char *str1 ="12345",*str2 = "abcde"; strcat(str1,str2);

答案:c

A、str1长度小于str2,不能进行复制

B、str没有进行初始化

D、str1,str2都是指向常量的字符串指针,他们的值不允许修改

猜你喜欢

转载自blog.csdn.net/qq_69424518/article/details/130063114