欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言题目

程序员文章站 2024-03-21 15:14:52
...

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;
}