-
1. 以下对 C 语言函数的有关描述中,正确的是( )。
(A)在C中,调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参
(B)C 函数既可以嵌套定义又可以递归调用
(C)函数必须有返回值,否则不能使用函数
(D)C 程序中有调用关系的所有函数必须放在同一个源程序文件中
答案:B选项。不能嵌套定义。C选项,函数可以没有返回值。D选项,没有必要放在同一个c文件中,用其他c文件的函数可以给其定义的地方函数名前面加extern修饰。
2.递归函数的两个要素是( )。
A、递归表达式、递归方程
B、递归出口、边界条件
C、函数头、函数体
D、边界条件、递归方程
答案:D选项。
3.【单选题】一个递归算法必须包括()。
- A、循环部分
- B、终止条件和循环部分
- C、递归部分
- D、终止条件和递归部分
我的答案:D
4
【单选题】下述对C语言字符数组的描述中错误的是( )。
- A、字符数组中的字符串可以整体输入、输出
- B、字符数组可以存放字符串
- C、可以在赋值语句中通过赋值运算符"="对字符数组整体赋值
- D、不可以用关系运算符对字符数组中的字符串进行比较
我的答案:C得分: 6.6分
解析:a)字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素。
char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'};
即把10个字符分别赋给str[0]到str[9]10个元素。
如果花括号中提供的字符个数大于数组长度,则按语法错误处理;若小于数长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即'\0' )。
b)可以用字符串常量来初始化字符数组:
char str[ ]={"I am happy"}; 可以省略花括号,如下所示
char str[ ]="I am happy";
注意:上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值,下面的赋值方法是错误的
char str[ ];
str="I am happy";
不是用单个字符作为初值,而是用一个字符串(注意:字符串的两端是用双引
号“”而不是单引号‘’括起来的)作为初值。显然,这种方法更直观方便。(注意:
数组str 的长度不是10,而是11,这点请务必记住,因为字符串常量"I am happy"
的最后由系统自动加上一个'\0')
因此,上面的初始化与下面的初始化等价
char str[ ]={'I',' ','a','m',' ','h','a','p','p','y','\0'};
而不与下面的等价
char str[ ]={'I',' ','a','m',' ','h','a','p','p','y'};
前者的长度是11,后者的长度是10.
说明:字符数组并不要求它的最后一个字符为'\0',甚至可以不包含'\0',向下面
这样写是完全合法的。
char str[5]={'C','h','i','n','a'};
++++++++
可见,用两种不同方法初始化字符数组后得到的数组长度是不同的。
5
【单选题】在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是( )。
- A、单向值传递
- B、由实参传给形,再由形参传回实参
- C、传递方式由用户指定
- D、地址传递
我的答案:A得分: 6.6分
6
【单选题】对以下定义,若要使指针变量p指向data中的成员a,则下列正确的赋值语句是__________。
struck sk{ int a; float b; }data;
int *p;
- A、p=&a;
- B、*p=data.a;
- C、p=&(data.a);
- D、p=data.a;
我的答案:C得分: 6.7分
7
【单选题】对于以下结构定义,++p->str中的++加在( )。
struct {
int len;
char *str;
} *p;
- A、语法错误
- B、str指向的内容上
- C、指针str上
- D、指针p上
我的答案:A 得分: 0.0分
正确答:C
解析:->的等级大于++的等级,所以先p->str,然后+1。相当于++(p->str)。
8
【单选题】变量的指针是指变量的( )。
- A、名
- B、地址
- C、值
- D、内存单元
我的答案:B得分: 6.7分
9
【单选题】关于函数递归,下列说法不正确的是:
- A、实际上递归的思路是把一个不能或者不好直接求解的“大问题”转化为一个或者几个“小问题”来解决。
- B、一般地,一个递归模型是由递归出口和递归体两部分组成,后者确定递归到何时结束。
- C、若调用自身,称之为直接递归;若过程或函数p调用过程或函数q,而q又调用p,称之为间接递归。
- D、在定义一个过程或函数时出现调用本过程或本函数的成分,称之为递归。
我的答案:B得分: 6.7分
10
【单选题】有定义语句“char s[10];”可以把字符串常量"123456"赋值给字符数组s的语句正确的是 ( )。
- A、strcpy(s,"123456");
- B、s[]="123456";
- C、strcmp(s,"123456");
- D、s="123456";
我的答案:A得分: 6.7分
解析:s是数组首地址,不能把字符串的地址赋值给s,s不能被改变。 如若赋值成功,则s被改变,原来的数组就无法通过某个值访问了。
11
【单选题】以下叙述中正确的是( )。
- A、
结构体类型的变量,不能在声明结构体类型组成时一起定义
- B、
元素为结构体类型的数组,只能在声明过结构体类型之后,单独进行定义
- C、
使用typedef定义新类型名后,新类型名与原类型名实际上是等价的
- D、
结构体类型中的各个成分均不能是数组或指针
我的答案:C得分: 6.7分
12
【单选题】关于数组名作为函数参数的说法错误的是( )。
- A、通过数组名作为函数参数,可以达到返回多个值的目的
- B、参数传递时,实参数组的首地址传递给形参数组
- C、在函数调用期间,形参数组和实参数组对应的是不同的数组
- D、在函数调用期间,形参数组的改变就是实参数组的改变
我的答案:C得分: 6.7分
解析:数组传递时,等价于地址传递,对应的值会发生改变。
13
【单选题】关于函数递归,下列说法不正确的是:
- A、一般地,一个递归模型是由递归出口和递归体两部分组成,后者确定递归到何时结束。
- B、若调用自身,称之为直接递归;若过程或函数p调用过程或函数q,而q又调用p,称之为间接递归。
- C、实际上递归的思路是把一个不能或者不好直接求解的“大问题”转化为一个或者几个“小问题”来解决
- D、在定义一个过程或函数时出现调用本过程或本函数的成分,称之为递归。
我的答案:A得分: 6.7分
14
【单选题】结构体定义如下:
struct date
{
int month;
int day;
int year;
};
struct student
{
char name[10];
int age;
char gender;
struct date birthday;
}std[30],*p=std;
相关程序的如下语句有错误的是( )。
- A、scanf("%d",&p.age);
- B、scanf("%c",&p->gender);
- C、printf("%c",(*(p+5)).gender);
- D、(*p).birthday.day = std[15].birthday.day;
我的答案:A得分: 6.7分
15
【单选题】定义下列结构体数组:
struct stu{
char name[10];
int age;
}a[5]={"ZHOU", 18, "WU", 19, "ZHENG", 20, "WANG", 21};
执行语句printf("%d, %s", a[2].age, a[1].name);的输出结果为( )。
- A、19, ZHOU
- B、21, WANG
- C、18, ZHENG
- D、20, WU
我的答案:D
16
【单选题】若定义pf为指向float类型变量f的指针,下列语句中__是正确的。
- A、float f, *pf = f;
- B、float *pf = &f, f;
- C、float f, *pf =0.0;
- D、float f, *pf = &f;
我的答案:A
正确:D 解析:读题,是让pf指向f,而不是指向f的指针。
17
【单选题】C语言规定,程序中各函数之间( )。
- A、不允许直接递归调用允许间接递归调用
- B、既允许直接递归调用也允许间接递归调用
- C、允许直接递归调用不允许间接递归调用
- D、不允许直接递归调用也不允许间接递归调用
我的答案:A
正确答案:待补充
18
【单选题】设有如下定义:
char* aa[2] = {"abcd", "ABCD"};
则以下说法中正确的是( )。
- A、aa数组的元素的值分别是字符串“abcd”和“ABCD”的内容
- B、aa数组的两个元素中各自存放了字符串“a”和“A”
- C、aa是指针变量,它指向含有两个数组元素的字符型一维数组
- D、aa数组的两个元素分别存放的是字符串的首地址
我的答案:D得分: 6.7分
解析:
这种定义方式:char * aa[2]定义的是一个指针数组,数组的成员是字符指针,而非字符串数据。
在这里,数组中的两个字符指针,分别指向了常量字符串"abcd"和"ABCD",换句话说,这两个指针的值就是这两个字符串的首地址。
A.数组中元素的值不是字符串,而是字符串"abcd"和"ABCD"的首地址
B.aa是指针数组,不是指针变量(aa是数组名字,aa[i]才是指针变量)
C.因为字符串隐含的有’\0’字符,作为结束,所以应该是含有5个字符的一维数组。
19
若有定义typedef struct {int n;char ch[8];} PER;以下叙述中正确的是( )。
- A、PER是结构体类型名
- B、PER是结构体变量名
- C、typedef struct 是结构体类型
- D、struct 是结构体类型名
我的答案:A