C语言题目

  • Post author:
  • Post category:其他


1、给定c语言代码段:

t=0;
while(printf("*"))
{
t++;
if(t<3) break;
}

下面描述正确的是:

A 其中循环控制表达式与0等价


B 其中循环控制表达式与’0’等价


C 其中循环控制表达式是不合法的

D 以上说法都不对


解释


他说的是printf(”

“)与‘0’等价

其实是这样的 printf这个函数的返回值是输出字符的个数

现在printf(”

“)的返回值是1

在while里只有0 和非0两种

所以只要选排一个非0的就能说是等价的

而‘0’需要转成ASCII码看是不为0的,是48 所以选B

2、若变量a,i已正确定义,且i已正确赋值,合法的语句是?

A.a==1 B.++i; C.a=a++=5; D.a=int(i);


解释


首先A选项就不是语句没有用分号结尾


B选项是对的


C不对,a++是将a自增在赋值

D选项首先,如果int()是函数,很明显和关键字重复,所以它不是函数

其次,如果是强制转换,形式应该是(int)i

3、若有定义:float w;int a,b;,则合法的switch语句是

A switch(w)

{ case1.0:printf(“*\n”);

case 2.0:printf(“**\n”);

}

B:switch(w);

{ case 1:printf(“*\n”);

case 2:printf(“**\n”);

}

C:switch(b)

{ case1:printf(”

\n”);

default:printf(“\n”)

case 1+2:printf(“**\n”);

}

D:switch(a+b);

{ case1:printf(”

\n”)

case 2:printf(“**\n”)

}


解释


switch后的括号里只能是整型常量(包括能转换为int型的数据,如:int,char和枚举类型),显然w的都不对,a+b也不对,因为它们不是确定的整数。A 、B

错误

B、D中,switch();包含分号,所以错误。

选C

4、 若有说明:int a[][4]={0,0};则下面不正确的叙述是

A)数组a的每个元素都可得到初值0

B)二维数组a的第一维大小为1

C)当初值的个数能被第二维的常量表达式的值除尽时,所得商数就是第一维的大小

D)只有元素a[0][0]和a[0][1]可得到初值,其余元素均得不到确定的初值

正确答案:

D


https://kaoshi.china.com/ncre/learning/950220-1.htm

5、以数组名作函数参数时,实参数组与形参数组都不必定义长度,因此实参以数组名作函数参数时,实参数组与形参数组都不必定义长度,因此实参与形参的结合方式是地址结合,与数组长度无关,这句话对吗


解释



不对


形参可以不定义长度,因为等效于指针。

但实参 必须定义长度

即使是指针类型 ,也需要指向特定空间,或者分配动态内存,实际上 还是有长度约束的。

最后一句实参与形参的结合方式是地址结合,与数组长度无关 这个是对的。

6、

主函数

只能调用其他函数,

不能调用自身

;其他函数可以自己调用自己,递归调用。

7、若有宏定义:#define S(a,b) t=a;a=b;b=t由于变量t没定义,所以此宏定义是

正确

的.。


解释


宏就是符号定义,宏扩展时只是字符串替换,所以这个宏是正确的,也能正常使用。如:

#include "stdio.h"

#define s(a,b) t=a;a=b;b=t

int main(int argv,char *argc[]){

int x=4,y=123,t;

printf("x = %d\ty = %d\n",x,y);

s(x,y);

printf("x = %d\ty = %d\n",x,y);

return 0;
}



版权声明:本文为wqy1837154675原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。