计算机等级考试二级C语言考前密卷[2]下
(26)下列程序的输出结果是_ _ _ _ _ _ _ _ _。
# define P1(x)printf(x)
main()
{
char d[].“p”;
Pl(d);
P1(" d ");
}
A)PD B)D " D " C)" P " D)" P " " D "
答案:A
备注:带参数的宏定义的一般形式是:#define宏名(参数表)string [宏替换后是printf(D);,所以输出字符串p;程序中的PL(" D ");宏替换后的Printf("d ")。
(27)下列选项中,能把S定义为合法结构变量的是_ _ _ _ _ _ _ _ _。
A) typedef结构ABC
{ double A;
charb[10];
} s;
B)struct
{ double a;
char b[10];
} s;
C)结构ABC
{ double a;
char b[10];
}
ABC s:
D)typedef ABC
{ double a;
char b[10];
}
ABC S:
答案:B
备注:用结构类型定义变量有三种方法:
①先定义结构类型,再定义变量名;②定义变量的同时定义类型:③直接定义结构类型变量,即没有结构名:选项B符合第三种定义方法。
(28)请阅读程序:
# include
# include
main()
{
char * S1 = " abcdef ",* S2 = " ab ";
s1++;s2++;
printf("%d、n ",strcmp(S1,S2));
}
上述程序的输出结果是_ _ _ _ _ _ _ _。
A)正B)负C)零D)不确定值
答案:A
备注:strcmp(X1,X2)是一个字符串比较函数。在这个问题中,“s1”和“s2”分别代表这两个字符串中第一个字符s1++和S2的地址。在字符串比较中,大小由每个字符串对应位置的字符的ASCII码值决定,sl > s2,返回值为正。
(29)请阅读程序:
# include
main()
{
int a = 5,b=7,c = 9;
printf("%d,%d,",a,b,c);
printf("%d,%d,%d," a,b);
}
上述程序的输出结果是_ _ _ _ _ _ _ _。
A)5,7,9,5,7 B)5,7,5,7 C)5,7,不定,7,9 D)5,7,5,7,不定
回答:D
备注:printf函数遵循格式如果格式控制器的个数大于输出表列的个数,则输出格式控制器对应的输出表列的数据,格式控制器多的部分输出的数据是随机的。
(30)请阅读程序:
# inciude
Fun C (int A,int B){
int C;
C = a+b:
return C:
}
main(){
int x = 6,y=7,z=8,r;
r=func((x -,y++,x+y),z-);
printf("%d\n ",r);
}
上述程序的输出结果是_ _ _ _ _ _ _ _。
A)ll B)20 C)2l D)31
答案:C
备注:函数func()用于返回两个参数之和。第一个参数是x和y的和,其中(x-,y++,x)x+y)的值是13,而第二个参数的值是8(按照语法的规则,应该是先用后递增),所以func()的返回值是13+8=21。(31)请阅读程序:
# include
main()
{
int a,b;
for(a=l,b = 1;aif(b>=20)中断;
if(b % 3 = = 1){ b+= 3;继续;}
B- = 5:
}
printf(" % d \ n ",a);
}
上述程序的输出结果是_ _ _ _ _ _ _ _ _。
A)7 B)8 C)9 D)10
答案:B
注释:break语句用于跳出循环;continue语句的作用就是跳出这个循环。执行第一个循环时,(b% 3 = = 1)为真,b=4,继续下一个循环,以此类推。当b=22时,循环结束,循环共8次,即a=8。
(32)如果变量X是float类型并已赋值,下面的语句可以将X中的值保留到两位小数,并将第三位四舍五入到_ _ _ _ _ _ _ _。
a)x = x * 100+0.5/100.0 b)x =(x * 100+0.5)/100
c)x =(int) (x * 100+0.5)/100.0d)x注释:本题实现了保留两位小数并通过算术表达式四舍五入的运算,其中(int)(x * 100+0.5)表示将(x * 100+0.5)的值强制转换为整数。
(33)请读取程序片段(字符串中没有空字符):
printf ("%d \ n ",strlen(" ATS \ n012 \ 1 \ \ ");
上述程序片段的输出结果是_ _ _ _ _ _ _ _ _ _ _ _ _ _。
A)ll B)10 C)9 D)8
答案:C
备注:该语句的目的是输出字符串“ATS \ n012 \ 1 \ \”的长度,其中“\”代表一个“\”。
(34)运行下面的程序后,如果从键盘输入中国支持,输出结果是_ _ _ _ _ _ _ _ _ _ _ _ _ _。
# include
main()
{
int v1 = 0,v2 = 0;char ch:
while((ch=getchar())!= ' # ')
switch(ch)
{
case ' a ':
case ' h ':
默认值:v1++;
case“0”:v2++:
}
printf(" % d,%d\n ",v1,v2);
}
A) 2,0b) 5,0c) 5,5d) 2,5
答案:C
评价:执行完一个案例后的语句,进程控制转移到下一个案例继续执行。“case常量表达式”只是作为一个语句标签,而不是条件判断。执行switch语句时,根据switch后表达式的值找到匹配的入口标签,会从这个标签开始执行,不做判断。
(35)请选择一组识别标志_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
a)void B)a3 . b3c)for d)2a
define-123-ABC do
word if case sizeof
答案:B
注释:C语言规定标识符只能由字母、数字和下划线组成。 选项A中的Void是C语言的关键字,不合法;选项C中的case与C语言中的关键字同名,不合法;选项D中的2a以数字开头并且sizeof和C中的关键字同名,这是非法的。
(36)下列能正确定义数组并正确赋值的语句是_ _ _ _ _ _ _ _ _ _ _。
a) int n = 5,b [n] [n] b] int a [1] [2] = {{1},{3}}
C)int c[2][]={{1,2},{3,4如int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12 } };
2。你可以把所有的数据写在一个花括号里,按照数组排列的顺序给每个元素赋值初始值。如:
int a [3] [4] = {1,2,3,4,5,6,7,8;9,10,1 l,12);
3。有些元素可以给初始值:int a[3][4]={{1},{5},{ 9 } };
它的作用是只给每行第一列的元素赋初始值,其他元素的值会自动为0。
4。如果所有元素都给定了初始值(即提供了所有的初始数据),则在定义数组时可以不指定第一维的长度,但不能保存第二维的长度。如int a [3] [4] = {1,2,3,4,5,6,7,8,9,10,11,12 };
等价于如下定义:int a [] [4] = {1,2,3,4,5,6,7,8,9,10,1L,12 };
(37)请选择以下程序的输出结果_ _ _ _ _ _ _ _ _ _。
#include
sub(int*s,int y)
{ static int t = 3;
y = s[t];t-;
}
main()
{ int a[]= { 1,2,3,4},I,x = 0;
for(I = 0;isub(a,x);printf("%d ",x);)
printf(" \ n ");
}
a)1234 b)432 l C)0000d)4444
答案:C
备注:当x作为函数sub()的自变量时,函数对x的值的改变并不返回到主函数,主函数并不改变x的值,所以打印出来。(38)假设下面这个程序的可执行文件名是prghelo,在程序所在的子目录中输入命令行:prghelo
good后,程序的输出结果是_ _ _ _ _ _ _ _ _。
main(int argc,char * argv[])
{
int I;
for = 1;I }
A)Heuo Good B)Hg C)Hel D)Hello Good
答案:B
备注:带参数的main()函数通常采用main (int argc,char)的形式。* argv []),其中整型变量argc用于记录参数个数是C程序运行时自动计算的。字符指针数组argv的第一个元素存储命令名,后面是命令行中每个参数的第一个地址。数组的大小由argc决定。for循环语句实现了每个参数第一个字母的输出。
(39)如果有以下解释和陈述,请选择哪一个是对数组C中元素的正确引用_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
int C[4][5],(* CP)[5];
CP = c;
A)cp+LB)*(CP+3)C)*(CP+1)+3D)*(* CP+2)
回答:D
注释:cp=c该语句将数组第0行的地址赋给CP。Cp+1使指针指向二维数组C的第一行;+(cp+3)是数组C第三行第0列的地址值;+(cp+1)+3是数组c第一行第三列的地址值
(40)下列选项中,不能正确定义结构的是_ _ _ _ _ _ _ _ _。
A)type de f struct B)struct color C1
{ int red;{ int red
int green;int绿色;
int blue;int蓝;
}颜色;};
彩色cl;
C)结构颜色D)结构
{ int red;{ int red
int green;int绿色;
int blue;int蓝;
} cl;} cl
答案:B
备注:将变量定义为标准类型和定义为结构类型的区别在于,后者不仅需要将变量指定为结构类型,还需要指定具体的结构类型(例如struct color),而不是只指定结构名称。其中没有出现结构名,答案D是默认的结构名。变量名列表必须放在成员列表之后,所以答案B不能正确定义c1为结构变量。
(41)有如下语句
char a = 3,b = 6,c;
c = a b (42)具有以下定义
structss
{ charname[10];
int age;
char sex;
}std[3],* p = std
下列输入语句中错误的是_ _ _ _ _ _ _ _。
a) scanf ("%d ",&(* p)。年龄);B)scanf("%s ",& STD . name);
c)scanf("%c ",&std[O]。性);D)SCanf("%c ",&(p-> SEX));
答案:B
点评:在C语言中,引用结构变量有三种等价的方式:
1。结构变量。成员姓名;2.(* P)。成员姓名;3.p->成员名称。
因为std.name是一个字符数组名,-本身代表地址,前面不能用“&”号,所以选项B是错误的。
(43)with
static char str[]= " Beijing ";
然后
printf (%d \ n ",strlen (strcpy (str," China "))将被执行;
输出结果是_ _ _ _ _ _ _ _ _ _。
A)5 B)7 C)12 D)14
答案:A
备注:在执行printf()函数之前,数组str的长度是7,但是当strcpy()函数给str赋值新值时,strlenr)函数应该返回当前str字符串的字符。(44)下列程序段中,不是无限循环的是_ _ _ _ _ _ _ _ _。
A)int I = 100;b)无符号k = 0;
while(1)do
{ {
I = I % 100+l:++ k;
if(I > = 100)break;}
} while(k > = 0);
C)for(;;);d)int s = 3379;
while(s++ % 2+s % 2)s++;
答案:A
注释:当表达式为非零值时,执行while语句中嵌入的语句,用break语句跳出循环,用continue语句结束这个循环。选项A不是无限循环。当i=100时,它跳出循环。选项c是空循环语句。
(45)下列程序的输出结果是_ _ _ _ _ _。
# include
main()
{ int I;
for(I = l;Iif (I% 2)打印剃须');
否则继续;
printf("≠f ");
}
printf(" $ \ n ");
}
a)* # * # $ b)# * # * $ C)* # * # $ d)# * # $
答案:C
注释:printf("#当I不能被2整除时。循环结束后,打印“$”。
(46)库函数strcpy用于复制字符串,如果有以下定义和语句:
charstrl [] = "China ",str2 [10],* str3,* str4 = " China
对库函数strcpy的正确调用是_ _ _ _ _ _ _ _。
A)strcpy(strl," people ");B)strcpy(str2,“人”);
C)strcpy(str3,"人");D)strcpy(str4,“人”);
答案:B
注释:strcpy(字符数组1,字符串2)用于将字符串2复制到字符数组L中
注意:(1)字符数组L必须定义得足够大;(2)“字符数组1”必须以数组名的形式书写;(3)复制时将字符串后的' \ 0 '复制到字符数组1。
(47)有以下程序
# include
main()
{ int c;
while((c=getchar())!= ' \ n '){
switch(C-' 2 '){
case 0:case 1:putchar(C+4);
案例二:putchar(c+4);打破;
案例三:putchar(c+3);
默认值:putchar(c+2);打破;}
}
}
从第一列输入以下数据,↙表示回车。
2473↙
程序的输出结果是_ _ _ _ _ _。
A)668977 b)668966 c)6677877d)6688766
答案:A
注释:getchar()函数接受键盘的一个字符输入;当用户输入的字符不是回车时,会进入多分支选择语句,根据C-'2 '的值进行分支选择;Putchar()是在屏幕上打印一个字符,最终结果应该是668977。
(48)下列程序的输出结果是_ _ _ _ _ _。
Union un
{ int a[4];
long b:
char c[6];}
main()
{
union un u:
printf(" % d % d ",sizeof(u),sizeof(u . a));
}
A)82b)88c)188d)182
答案:B
备注:sizeof函数计算一个已知类型占用的字节数。共享变量的内存长度等于最长成员的长度。
(49)下列程序的输出结果是_ _ _ _ _ _。
main()
{ int w = 5;乐趣(w);printf(" \ n ");}
fun(int k)
{ if(k > 0)fun(k-1);
printf("%d.t,k);
}
A)5 4 3 2 L B)0 1 2 3 4 5
C)L 2 3 4 5d)5 4 3 2 L 0
答案:B
注释:函数的递归调用是指函数本身在调用过程中被直接或间接调用。fun函数被调用了6次,分别是fun(5),fun(4),fun(3),fun(2),to n(1),fun(0)。其中fun(5)由主函数调用。
(50)如果毛巾是指向一个文件的指针,并且已经读取了文件的结尾,那么函数feof(f1))的返回值是
A)EOF B)O C)非零值D)NULL
答案:C
注释:函数feof是用来判断一个文件是否。二。填写空题(每题2分空,共40分)
请将每题空的正确答案写在答题卡序号[1]至[20]的横线上,该答案不在试卷上计分。
(1)算法的复杂度主要包括时间复杂度和[1]复杂度。
回答:[1]空
点评:习惯上把重复语句的数量作为算法运行时间的相对度量,称为算法的时间复杂度。算法运行过程中需要辅助存储的空的大小称为算法的空复杂度。
(2)计算机存储机房中数据的物理结构的存储形式空称为数据的[2]。
答案:[2]内部模式或物理模式或存储模式
评价:一个数据库只有一个内部模式,是对数据的物理结构和存储方式以及数据库内部的表示方法的描述。比如记录按顺序存储,索引以什么方式组织;数据是否被压缩和存储、加密等。
(3)根据功能,软件测试方法通常分为[3]测试法和黑盒测试法。
回答:[3]白盒
点评:软件测试有三种方法:动态测试、静态测试和正确性证明。一般来说,设计测试用例有两种方法:黑盒测试法和自盒测试法。
(4)数据库三层模型架构的划分有利于数据库的维护[4]。
回答:[4]数据独立性
评价:数据库的三层模型架构将数据的组织和管理分开,将数据的具体组织留给DBMS进行管理,这样用户就可以对数据进行逻辑和抽象的处理,而不必关心数据在计算机中的具体表示和存储,从而保证了数据的独立性。
(5)在关系运算中,寻找满足一定条件的元组的运算称为[5]。
回答:[5]选择
评价:在关系数据库中,选择操作也是一种元操作,选择操作后的关系R仍然是关系(而选择的逻辑条件是由操作给出的)。这种关系由R中满足逻辑条件的元组组成。
(6)在C语言中(以16位PC为例),内存中一个浮点数据的字节数为4;内存中双精度数据的字节数是[6]。
回答:[6] 8
点评:在一般的16位PC中,一个浮点数据占用内存中的4个字节(32位),一个双精度数据占用8个字节。
(7)定义以下变量并赋予一定的值,
char w;int x;浮动y;双z;
那么表达式:w*x+z-y得到的数据类型就是[7]。
答案:[7] Double或double-precision
评价:①先进行W*X的运算,先将字符类型W转换为整数,运算结果为整数;②将W*X的结果加到z上,先将第一步中的整数转换成double,结果为double;③最后用Y减去W*X+Z的结果,先把浮点型Y转换成双精度型,结果是双精度型。
(8)如果在运行时给变量X输入12,下面程序的运行结果是[8];
main(){
int,y;
scanf(""%d " ",& X);
y=x>12?x+lO:x-12;
printf(" % d \ n " ",y);
}
答案:[8] 0
备注:三元运算符的形式为(表达式1)7(表达式2):(表达式3)。当(表达式1)的值为真时,返回(表达式2)的值;如果为false,则返回(表达式3)的值。因为x>t2为假,所以结果为x-12,即0。
(9)四句话:x++;+;、++ x;、x = x+l;、x = l+x;执行后,变量X的值将增加l,请用相同的函数写一个赋值语句(与列出的不一样)[9]。
答案:[9] x+=1:
点评:问题中四个语句的作用是给x的值加1,C中给变量加1的方法有很多种,可以用C的复合赋值运算符+=来实现,这个问题的答案是x+=1:。
(10)具有以下定义和陈述,则*(*(p+2)+1)的值为[10]。
int[3][2] ={10,20,30,40,50,60},(* p)[2];
p = a;
答案:[10] 60
备注:本题定义了一个3行2列的二维数组A,并定义了一个指向两个元素的一维数组指针P,使P指向二维数组A的第一行. *(*(p+2)+1)是引用a[2][1],其值为60。
(11)要使指针p指向一个双精度型动态存储单元,请填写空。
p =【11】malloc(sizeof(double));
答案:[11] (double *)
备注:函数malloc返回void*,所以如果你想让指针指向double类型,就必须进行类型转换。类型转换的格式为:(数据类型*)。
(12)下面这个程序的作用:输出100以内所有能被3整除的,个位数为6的整数。请完成它们。
main()。
{ int ij;
for(I = O;【12】 ;i++)
{ j = I * 10+6;
if( 【13】)继续;
printf("%d ",j);
}
}
回答:[12] I [13] J% 3!=0
备注:此题要求100以内所有能被3整除且位数为6的整数。在程序中,J = I * 10+6;语句是求一个个位数为6的整数,由此可以得出程序的循环次数是i(13)函数mycmp(char*s,char。t)的作用是比较字符串s和t的大小,当s等于t时返回0,当s>t时
返回正值,当s mycmp (char * s,char * t)
{ while(* s = = * t)
{ if(* s = =
++ s;++ t;
}
return(【14】);
}
答案:[14] *s-*t或-*t+*s
备注:函数的两个参数是双字符指针变量,字符串的第一个地址是指针变量的值,*s和*t代表字符串数组S和t的第一个字符,在while循环中,下面程序运行后的(14)输出结果是[15]。
void fun(、)
{
static int a = 0:
a+= 2;printf("%d ",a);
}
main()
{ int cc;
for(CC = 1;ccprintf(" \ n ");
}
回答:[15] 2 4 6
备注:static声明的外部变量只被本文档引用,不能被其他文档引用。用static声明一个变量的作用有:①用static声明一个局部变量时,为该变量分配的空在整个程序执行过程中一直存在;②如果所有变量都用static声明,那么这个变量的作用域只限于这个文件模块(即声明的文件)。
(15)下面这个程序的运行结果是[16]。
main()
{ union EXAMPLE
{ struct
{ int x;int y;}在;
int a;
int b:
} e;
e . a = 1;e . b = 2;
e . in . x = e . a * e . b;
e . in . y = e . a+e . b;
printf("%d,%d\n ",e.in.x,e . in . y);
}
答案:[16] 4,8
点评:C语言规定一个公共体中的每个成员变量占用同一个内存单元,即e.in.x和e.a、e.b占用同一个内存单元,因为e.in.x和e.a,。
(16)在操作一个文件的过程中,如果要求文件的位置回到文件的开头,应该调用的函数是[17] function。
回答:[17] [nnlrewind或fseek
备注:在操作一个文件的过程中,如果希望文件的位置回到文件的开头,可以调用rewind或fseek函数。rewind函数用于将位置指针返回到文件的开头,而fseek函数可以定位文件指针。
(17)以下函数用于查找2×4矩阵中元素的值。
max _ value(arr)
int arr[][4];
{
int I,J,max
max = alT[0][0];
for(I = 0;ifor(j = 0;【18】 ;j++)
if(【19】> max)max =[2Q];
return(max);
}
回答:[18]j[19]arr[I][j]
[20]arr[I][j]
评价:2*4矩阵其实是一个二维数组,结合这个问题应该是arr。第二条横线是判断当前数组元素值是否大于max,所以要填arr[I][j];在第三个水平线,当前大于max的数组元素的值被赋给了变量max,所以要填入“arr[i][il”。
< p>
(29)请阅读程序:
# include
main()
{
int a = 5,b=7,c = 9;
printf("%d,%d,",a,b,c);
printf("%d,%d,%d," a,b);
}
上述程序的输出结果是_ _ _ _ _ _ _ _。
A)5,7,9,5,7 B)5,7,5,7 C)5,7,不定,7,9 D)5,7,5,7,不定
回答:D
备注:printf函数遵循格式如果格式控制器的个数大于输出表列的个数,则输出格式控制器对应的输出表列的数据,格式控制器多的部分输出的数据是随机的。
(30)请阅读程序:
# inciude
func (int a,int b){
int c;
C = a+b:
return C:
}
main(){
int x = 6,y=7,z=8,r;
r=func((x -,y++,x+y),z-);
printf("%d\n ",r);
}
上述程序的输出结果是_ _ _ _ _ _ _ _。
A)ll B)20 C)2l D)31
答案:C
备注:函数func()用于返回两个参数之和。第一个参数是x和y的和,其中(x-,y++,x)x+y)的值是13,而第二个参数的值是8(按照语法的规则,应该是先用后递增),所以func()的返回值是13+8=21。(31)请阅读程序:
# include
main()
{
int a,b;
for(a=l,b = 1;aif(b>=20)中断;
if(b % 3 = = 1){ b+= 3;继续;}
B- = 5:
}
printf(" % d \ n ",a);
}
上述程序的输出结果是_ _ _ _ _ _ _ _ _。
A)7 B)8 C)9 D)10
答案:B
注释:break语句用于跳出循环;continue语句的作用就是跳出这个循环。执行第一个循环时,(b% 3 = = 1)为真,b=4,继续下一个循环,以此类推。当b=22时,循环结束,循环共8次,即a=8。
(14)下面的程序运行后的输出结果是[15]。
void fun(、)
{
static int a = 0:
a+= 2;printf("%d ",a);
}
main()
{ int cc;
for(CC = 1;ccprintf(" \ n ");
}
回答:[15] 2 4 6
备注:static声明的外部变量只被本文档引用,不能被其他文档引用。用static声明一个变量的作用有:①用static声明一个局部变量时,为该变量分配的空在整个程序执行过程中一直存在;②如果所有变量都用static声明,那么这个变量的作用域只限于这个文件模块(即声明的文件)。
(15)下面这个程序的运行结果是[16]。
main()
{ union EXAMPLE
{ struct
{ int x;int y;}在;
int a;
int b:
} e;
e . a = 1;e . b = 2;
e . in . x = e . a * e . b;
e . in . y = e . a+e . b;
printf("%d,%d\n ",e.in.x,e . in . y);
}
答案:[16] 4,8
点评:C语言规定一个公共体中的每个成员变量占用同一个内存单元,即e.in.x和e.a、e.b占用同一个内存单元,因为e.in.x和e.a,。
(16)在操作一个文件的过程中,如果要求文件的位置回到文件的开头,应该调用的函数是[17] function。
回答:[17] [nnlrewind或fseek
备注:在操作一个文件的过程中,如果希望文件的位置回到文件的开头,可以调用rewind或fseek函数。rewind函数用于将位置指针返回到文件的开头,而fseek函数可以定位文件指针。
(17)以下函数用于查找2×4矩阵中元素的值。
max _ value(arr)
int arr[][4];
{
int I,J,max
max = alT[0][0];
for(I = 0;ifor(j = 0;【18】 ;j++)
if(【19】> max)max =[2Q];
return(max);
}
回答:[18]j[19]arr[I][j]
[20]arr[I][j]
评价:2*4矩阵其实是一个二维数组,结合这个问题应该是arr。第二条横线是判断当前数组元素值是否大于max,所以要填arr[I][j];在第三个水平线,当前大于max的数组元素的值被赋给了变量max,所以要填入“arr[i][il”。
0条评论