一、填空题
-
若变量已正确定义,要求用语句scanf("%f%c%f%c",&a,&c1,&b,&c2);给c1赋予字符%,给c2赋予字符#,给a赋予2.0,给b赋予4.0,则正确的输入形式是 2.0%цц4#(ц代表空格,代表回车) 。解析:字符在输入时,前面的变量输入完毕后,直接输入字符可以,若有其他字符出现,如空格、回车都会被%c对应的变量所接收,而数值型数据不会受影响。
-
函数的实参传递到形参有两种方式:___值传递___和___引用传递___。
- 假定一个二维数组的定义为“double b[4][5];”,则在VC编译系统中,这个数组所占存储空间的字节数为___160___。 解析:double占8个字节
- 设有定义int a[5]={1,2,3,4,5},*p=a;则p+2表示的意思是 a[2]的地址 。
- 以数组名作函数参数时,传递的不是整个数组元素,而是 数组的首地址 。
二、单选题
-
若有以下定义:int x[10];int *pt=x;则对x数组元素的正确引用是( D )。
A.pt+3 B.*&x[10] C.*(pt+10) D.*(x+3) 解析:pt是int类型指针,指向int数组x的首部。D项,*(x+3)相当于x[3];A项,int类型指针,指向x中第3个元素,并非是对x数组元素的引用。
-
一个C语言程序的执行是从( C )。
A.第一个语句开始,直到最后一个语句结束
B. 第一个函数开始,直到最后一个函数结束
C. main函数开始,直到main函数结束
D. main函数开始,直到最后一个函数结束
-
以下叙述中正确的是( B )。
A.C语言的函数必须有一个返回值 B.C语言的函数至多有一个返回值
C.C语言的函数可以有多个返回值 D.C语言的函数不能有返回值
-
若变量已经正确定义并赋值,则以下选项是合法的表达式的是( B )。
A. a=a+7; B. a=7+b+c,a++ C. int(12%4) D. a=a+7=c+b 解析:A是语句,不是表达式;B是逗号表达式;C %要求两边对象都必须是整形;D “=”左边不能有表达式,给表达式是不能赋值的
-
下列叙述中正确的是( D)
A.每个C程序文件中都必须要有一个main()函数
B.在C程序中main()函数的位置是固定的
C.C程序中所有函数之间都可以相互调用,与函数所在位置无关
D.在C程序的函数中不能定义另一个函数 解析:每一个C程序中都必须有且只有一个main()函数,但一个C程序可以由多个程序文件组成,所以并非每个C程序文件中都必须要有一个main()函数,故选项A)不正确。C语言并未对main()函数的位置作要求,因此选项B)也是错误的。C语言中,在一个函数被调用之前一定要先声明该函数,所以定义靠后的函数若在前面没有声明该函数的原型,是不能被定义靠前的函数所调用的,即函数之间的调用并非与函数所在位置无关,所以选项C)不正确。故本题的正确答案应该为选项D)。
-
下面各语句行中, 能正确进行赋字符串操作的语句行是( C)
A.char st[4][5]={"ABCDE"};
B.char s[5]={'A','B','C','D','E'};
C.char *s; s="ABCDE";
D.char *s; scanf("%s",s); 解析:A不用说了.
B是一个合法的“字符数组”初始化语句,但是不是一个正确的“字符串”赋值语句,因为字符串要求最后有字符串结束标志'\0'.
C对."ABCDE"是一个字符串常量,它存储在静态数据区中.
D不对.这个语句跟下面这种情况类似:
int *p;
scanf("%d", p);
p是一个野指针,不能直接往p指向的内存空间中输入数据.对于这个题目来说,只能用:
char s[10];
scanf("%s", s);这种操作.
三、判断题
-
函数的声明包括函数头和函数体两部分。(F) 解析:函数的声明包括函数头和分号两部分。
-
在定义数组时,数组长度可以为变量,只要变量中有确定的值就可以。(F) 解析:数组长度不可以为变量
-
C语言标准输入操作中,gets()函数一次只能读取一个字符。(F)
-
运算符*为间接访问运算符,后跟一个指针变量,表示取这个指针变量所指向的变量的值。(T)解析:*值 &地址
-
在C程序中,除了主函数外,任何一个函数都不能独立地在程序中存在。(T)
-
C程序是由函数组成的,函数是由语句组成的。(F)解析:一个程序由一个或多个源程序文件组成
-
可以在一个函数中定义另一个函数。(F)解析:C语言只允许在函数中声明和嵌套调用