c语言笔试题总结Word文档下载推荐.docx
《c语言笔试题总结Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《c语言笔试题总结Word文档下载推荐.docx(30页珍藏版)》请在冰豆网上搜索。
C)软件结构测试
D)软件控制过程
B
从工程管理角度来看,软件设计分两步完成:
概要设计和详细设计。
概要设计(又称结构设计)将软件需求转化为软件体系结构、确定系统级接口、全局数据结构或数据库模式。
(7)模块本身的内聚是模块独立性的重要性度量因素之一。
在7类内聚中,具有最强内聚
的一类是_______。
A)顺序性内聚
B)过程性内聚
C)逻辑性内聚
D)功能性内聚
D
内聚性是一个模块内部各元素间彼此结合的紧密程度的度量。
内聚共有7类,它们之间的内聚性由弱到强排列顺序为:
偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚和功能内聚。
(8)数据存储和数据流都是_______,仅仅是所处的状态不同。
A)分析结果
B)事件
C)动作
D)数据
数据流图有4种成分:
源点或终点、处理、数据存储和数据流。
数据存储是处于静止状态的数据,数据流是处于运动中的数据。
(9)数据的完整性是指数据的正确性、有效性和_______。
A)可维护性
B)独立性
C)安全性
D)相容性
数据模型的完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定符合数据模型的数据库状态及其状态的变化,以保证数据的正确性、有效性和相容性。
(10)关系代数运算是以_______为基础的运算。
A)关系运算
B)谓词运算
C)集合运算
D)代数运算
关系代数运算是以关系代数作为运算对象的一组高级运算的集合。
它的基本操作是并、交、差、笛卡尔积,另外还包垂直分割(投影)、水平分割(选择)、关系的结合(连接)等。
(11)能将高级语言程序转换成目标语言程序的是_______。
A)调试程序
B)解释程序
C)编译程序
D)编辑程序
用高级语言编写的程序称为“源程序”,而计算机只能识别和执行由0和l组成的二进制指令,所以高级语言必须先用一种称为“编译程序”的软件,把源程序翻译成二进制形式的“目标程序”。
(12)_______是构成c语言程序的基本单位。
A)函数
B)过程
C)子程序
D)子例程
c程序是由函数构成的。
一个c源程序至少包含一个main函数,也可以包含一个main函数和若干个其他函数,因此,函数是c程序的基本单位。
(13)可以在C语言中用做用户标识符的是_______。
A)void
B)as_b3
C)for
D)2c
define
_123
-abc
Do
WORD
If
cas
SIG
c语言规定,标识符只能由字母、数字和下划线三种符号组成,而且第一个字符必须是字母或下划线。
另外还需要注意的是关键字不能作标识符。
选项A中void,C中for都为关键字,D中2c以字母开头。
(14)若有以下类型说明语句:
charw;
intx;
floaty,z;
则表达式w*x+z-y的结果为________类型。
A)float
B)char
C)int
D)double
在进行运算时,不同类型的数据参加运算,需要先将其转换成同一类型的数据,然后再进行运算。
转换的顺序由低到高为:
char,short→int→unsigned→long→double→float,故结果为float型。
(15)main(()
{
floatx=123A56;
printf(“%-5.2f\n”,x);
}
以上程序输出的结果是________。
A)123.4
B)123.5
C)123.45
D)123.46
f格式符,用来输出实数,以小数形式输出。
“%-m.nf”的含义是:
输出数据共占m列,其中n位小数,如果输出位数小于m。
则右端补空格。
如果总长度大于列数,则按实际情况四舍五入输出。
(16)下面语句的输出结果是________。
Printf(“%d\n”,strlen(“\t\”\065\xff\n”));
A)14
B)8
C)5
D)输出项不合法,无正常输出
在c语言中,以“\”开头的字符均为转义字符,其中“\”后可跟l~3位八进制数或在“\”后跟字母x及l~2位十六进制数,以此来代表一个特定的字符。
(17)下列程序的输出结果是________。
main()
inta=0,b=0,c=0;
if(++a>
0lI++b>
0)++c;
printf(“\na=%d,b=%d,c=%d”,a,b,C);
A)a=0,b=0,c=0
B)a=l,b=l,c=1
C)a=l,b=O,c=I
D)a=0,b=1.c=1
“︱︱”是或运算,它有个“短路”的特点需特别注意,当“︱︱”运算符左边的表达式的值为真时,则程序就不再对“︱︱”右边的表达式的值进行运算,而是使得整个表达式的值直接为真。
(18)下列程序的输出结果是_________。
Main()
inti;
for(i=1;
i+l;
i++)
if(i>
4){printlf(”%d”,i++);
break;
printf(“%d”,i++);
A)55
B)56
C)程序错误,没有输出
D)循环条件永远为真,死循环
本程序中有个for循环,但注意到for循环的条件是“i+l”,也就是只要i+l的值为真(非零值均为真),就执行循环。
当i=l的时,i+l的值为真,判断if条件不成立,执行i++,输出i的值为5。
(19)下列程序的输出结果是_________。
#defineA100
inti=O,sum=O;
do{
if(I==(i/2)*2)continue;
sum+=i;
}while(++i<
A);
printf(“%d\n”,sum);
A)2500
B)2050
C)4
D)O
本题程序的功能是求1到_99之问(包括1和99)所有奇数之和。
程序中的while循环的终止条件为++i=100,在while循环体内,如果i是偶数,则执行continue,跳过这一次循环,执行下一次循环,否则求和。
最后输出的值是1到99之间(包括l和99)所有奇数之和(1+99)*50/2=2500。
(20)下列程序的输出结果是_________。
intI=3;
switch(i)
{case1:
case2:
printf(”%d”,i);
case3:
case4:
default:
printf(”OK”);
A)0
B)3
C)OK
D)没有任何输出
在题中,i的值为3,由于“case3:
”后面没有break语句,所以继续向下执行“case4:
”后面的语句,由于“case4:
”后面的语句为break强行退出switch语句,所以,本题没有任何输出。
(21)下列程序执行后的输出结果是________。
intm[][3]={1,4,7,2,5,8,3,6,9};
inti,k=2:
for(I=0;
i<
3;
{printf(”%d”,m[k][i]);
A)456
B)258
C)369
D)789
根据二维数组的定义得出:
m[O][O]=1,m[O][1]=4,m[O][2]=7,m[1][0]=2,rail][1]=5,m[1][2]=8,m[2][0]=3,m[2][l]=6,m[2][2]=9,所以本题的输出是第3行的值m[2][0],m[2][1],m[2][2],即369。
(22)设已定义洱口k为int类型变量,则以下for循环语句_________。
for(i=0;
k=-1,k=1;
i++,k++)
printf(”****\n”);
A)判断循环结束的条件不合法
B)是无限循环
C)循环一次也不执行
D)循环只执行一次
本题定义了一个for循环,循环变量是i,但由于本题并没有设置循环条件,所以循环的条件永远默认为真,即无限次执行循环。
(23)下面程序的输出结果是___________。
unsignedfun(unsignednum)
unsignedk=1;
do{
k*=num%lO;
num/=lO;
}while(num);
return(k);
unsignedn。
26;
printf(”%d\n”,fun(n));
B)4
C)12
D)无限次循环
本题定义了一个fun函数,用于num求和,具体执行过程如下:
num=26:
k=k*(num%10)=1*(26%10),所以k=6,num=num/10=2;
num=2:
k=k*(num%10)=6*(2%10),所以k=12,num=num/lO=O;
num=O:
while条件不成立,所以返回k的值12.
(24)已知字母A的ASCII码值是65,字母a的ASCII码值是97,以下程序_______。
chara=‘A’;
intb=20;
printf(“%d,%o”,(a=a+a,a+b,b),a+‘a’-‘A’,b);
A)表达式非法,输出零或不确定值
B)因输出项过多,无输出或输出不确定值
C)输出结果为20,141
D)输出结果为20,141,20
本题中首先输出逗号表达式“a=a+a,a+b,b”的值,即20。
然后以八进制的形式输出a+‘a’-‘A’的值为97对应的八进制数141,由于最后一个表达式b没有对应输出格式的输出项表列就不会输出。
(25)C语言函数返回值的类型是由__________决定的。
A)return语句中的表达式类型
B)调用函数的主调函数类型
C)调用函数时临时
D)定义函数时所指定的函数类型
函数值的类型应当是在定义函数时指定的。
在定义函数时对函数值说明的类型一般应该和return语句中的表达式类型一致,如果不_致,则以函数类型为准,即函数类型决定返回值的类型。
(26)下列程序执行后输出的结果是___________。
intd=l:
fun(intp)
intd。
5;
d+=p++;
printf(”%d,”,d);
inta=3;
fun(a);
d+=a++:
printf(”%d\n”,d);
A)8,12
B)9,13
C)8,4
D)9,5
本题执行过程如下:
首先调用fun函数,使得实参a的值3传递给形参p,得到局部变量d=8,打印出局部变量d的值8;
返回主函数执行“d+=a++”,此处的d为全局变量,所以d=1+3=4(由于本题是值传递,所以在函数fun中对p值的改变并不能引起a的改变),故本题的输出是8,4。
(27)已知下面的程序段,正确的判断是_________。
#defineA3
#defineB(A)((_A+1)‘a)
inta=3:
……
X=3*(A+B(7));
A)程序错误,不允许嵌套定义
B)X=93
C)X=8l
D)程序错误,宏定义不允许有参数
本题的宏定义是合法的,宏定义展开为3*(3+((A+1)*a))=3*(3+((7+1)*3))=81。
(28)定义int*swap()指的是_______。
A)一个返回整型值的函数swap()
B)一个返回指向整型值指针的函数swap()
C)一个指向函数swap()的指针,函数返回一个整型值
D)以上说法均错
一个函数可以带回一个整型值、字符值、实型值等,但也可以带回指针型数据,即地址。
本题的定义中,包括括号和·
号,由于f)优先级高于t。
故它是一个返回整型指针的函数。
(29)以下程序段的输出结果是__________。
chars1[10],s2[10],s3[10];
scanf(”%s”,s1);
gets(s2);
gets(s3);
puts(s1);
puts(s2);
puts(s3);
输入数据如下:
(此处代表回车符)
aaa
bbb
A)aaa
B)aaa
C)aaa\0bbb\0
D)aaabbb
scanf是标准输入函数,在输入字符串aaa时,实际的内容为“aaa\0”,“\0”是由系统自动加入的;
gets的功能是从终端读入一行字符,即一直读到换行符为止,并由系统自动以“\0”代替换行符。
(30)下述函数功能是________。
Intfun(char*x)
char*y=x;
while(*y++);
returny-x-l;
A)求字符串的长度
B)求字符串存放的位置
C)比较两个字符串的大小
D)将字符串x连接到字符串y后面
在函数体内定义一字符型指针并指向形参,然后遍历其中各字符直到NULL,最后返回字符串首尾地址的差值,即字符串的长度。
(31)以下程序的输出结果是_________。
{charstr[12]={‘s’,‘t’,‘r’,‘i’,‘n’,‘g’};
printf(”%d\n”,strlen(str));
A)6
B)7
C)ll
D)12
在c语言中,字符串的长度是其首字符到NULL(不含)字符的总字符个数。
本题定义字符数组str的同时,对第7个元素,由系统自动添加上“\0”,故字符串的长度为6。
(32)请读程序段:
charstr[]=”ABCD”,*p=str;
printf(”%d\n”,*(p+4));
程序段的输出结果是_________。
A)68
B)0
C)字符‘D’的地址
D)不确定的值
在对字符数组赋字符串值时,系统会自动在字符串的末尾加上一个字符串结束标志“\0”,故指向字符数组的指针p的+(p+4)的值为“\0”。
由于“\0”的编码值就是0,所以本题输出为0。
(33)若有定义:
inta[4][10];
,则以下选项中对数组元素a[i][j]引用错误的是________。
(0<
=i<
4,0<
=j<
10)
A)*(&a[O][O]+10*i+j)
B)*(a+i)+j
C)*(*(a+i)+j)
D)*(a[i]+j)
本题中选项B是错误的引用,*(a+i)+j只代表了a[i][i]的地址。
(34)设有以下语句:
charstrl[]=”string”,str2[8],。
str3,。
str4=”strin∥;
则__________不是对库函数的正确调用。
A)strcpy(strl,”HELLOl”);
B)strcpy(str2,”HELL02”);
C)strcpy(str3,”HELL03”);
D)strcpy(str4,”HELL04”);
c语言中:
sgcpy(stl,st2);
,其两个参数均为字符指针或字符数组,选项c中的目的串指针str3没有指向具体有效的存储单元,故是错误的调用。
(35)请读程序:
#include
char*sl=”AbCdEf”,*s2=”aB”;
s1++;
s2++;
printf(”%d\n”,strcmp(s1,s2));
上面程序的输出结果是___________。
A)正数
B)负数
C)零
函数strcmp的功能是比较字符串s1和s2,如果sl>
s2,则返回个正数;
如果sls2,所以函数的值为正数。
(36)下面程序的输出是_________。
chars[]=”ABcD”;
char*p;
for(p=s;
p<
s+4;
p++)
printf(”%s\n”,p);
A)ABCD
B)A
C)D
D)ABCD
BCD
B
C
ABC
CD
AB
D
A
在第一次执行for循环时,字符数组的首地址赋给了指针变量p,使得指针变量p指向了s的首地址,输出p所指向的字符串;
第二次执行for循环时,p值增加1,p指向了s的第二个元素输出BCD;
第三次输出CD;
第四次输出D;
直到p指向字符串的结束字符“\0”,for循环终止执行。
(37)以下程序输出的结果为__________。
{
char*alpha[6]={“ABCD”,EFGH”,”IJKL”,”MNOP”,”QRST”,”UVwX”};
char**p;
inti:
p=alpha;
4;
printf(”%s”,p[I]);
A)ABCDEFGHIJKL
B)ABCD
C)ABCDEFGHIJKLMNOP
D)AEIM
评析:
alpha[O]指向“ABCD”的首地址;
alpha[1]指向“EFGH”的首地址;
alpha[2]指向“IJKL”的首地址,依此类推。
当执行p=alpha后,p指向指针数组alpha的首地址。
for循环中输出了4个字符串。
(38)下面程序的输出结果是_________。
char*p[]={”B00L”,”0PK”,”H”,”SP”};
for(i=3;
i>
=0;
i–,i–)
printf(“%c”,*p[i]);
printf(”\n”);
A)SO
B)SP
C)SPOPK
D)SHOB
p[0]存放的是“BOOL\0”的首地址;
p[1]存放的是“OPK\0”的首址等。
在printf语句中输出的+p[I]表示p[i]字符串的第一个字符。
在for循环中,i的初值为3,那么输