admin 管理员组文章数量: 887032
2023年12月22日发(作者:jackbear)
二级C语言笔试318
(总分100, 做题时间90分钟)
一、选择题
在下列各题的A) 、B) 、C) 、D) 四个选项中,只有一个选项是正确的。
1.
结构化程序设计主要强调的是
SSS_SINGLE_SELA 程序的规模
B 程序的效率
C 程序设计语言的先进性
D 程序易读性
分值: 2
答案:D
[解析] 结构化程序设计方法的主要原则可以概括为自顶向下、逐步求精、模块化及限制使用goto语句,总的来说可使程序结构良好、易读、易理解、易维护。
2.
若有条件表达式(exp)?a++:b--,则以下表达式中能完全等价于表达式(exp)的是
SSS_SINGLE_SEL
A (exp==0)
B (exp!=0)
C (exp==1)
D (exp!=1)
分值: 2
答案:B
[解析] 条件运算符要求有3个操作对象,称三日(元)运算符,它是C语言中唯一的一个三目运算符。条件表达式的一般形式为:表达式17表达式2:表达式3。
其求解顺序是:先求解表达式1,若为非0(真)则求解表达式2,此时表达式2的值就作为整个条件表达式的值。若表达式1的值为0(假),则求解表达式3,表达式3的值就是整个条件表达式的值,注意++、--的用法。
3.
将E-R图转换到关系模式时,实体与联系都可以表示成
SSS_SINGLE_SEL
A 属性
B 关系
C 键
D 域
分值: 2
答案:B
[解析] 关系数据库逻辑设计的主要工作是将E-R图转换成指定RDBMS中的关系模式。。首先,从E-R图到关系模式的转换是比较直接的,实体与联系都可以表示成关系,E-R图中属性也可以转换成关系的属性,实体集也可以转换成关系。
4.
下面判断正确的是
A char*a="china";等价于char*a;*a="china";
B char str[5]={"china"};等价于char str[]={"china"};
C char *s="china";等价于char *s;s="china";
D char c[4]="abc",d[4]="abc";等价于char c[4]=d[4]="abc";
分值: 2
答案:C
[解析] 选项A) char *a;*a=“china”应改为a=china;,选项B) 应该是char str[6];D) 项表述方法有错误。
5.
下列有关数据库的描述,正确的是
A 数据处理是将信息转化为数据的过程
B 数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变
C 关系中的每一列称为元组,一个元组就是一个字段
D 如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系的关键字,则称其为本关系的外关键字
分值: 2
答案:D
[解析] 数据处理是指将数据转换成信息的过程,故选项A) 叙述错误;数据的物理独立性是指数据的物理结构的改变,不会影响数据库的逻辑结构,故选项B) 叙述错误;关系中的行称为元组,对应存储文件中的记录,关系中的列称为属性,对应存储文件中的字段,故选项C) 叙述错误。
6.
有以下程序段 char ch; int k; ch='a'; k=12;
printf("%c,%d,",ch,ch,k); printf("k=%dn",k); 已知字符a的ASCII码值为97,则执行上述程序段后输出结果是
A 因变量类型与格式描述符的类型不匹配输出无定值
B 输出项与格式描述符个数不符,输出为零值或不定值
C a,97,12k=12
D a,97,k=12
分值: 2
答案:D
[解析] 输出格式控制符%c表示将变量以字符的形式输出;输出格式控制符%d表示将变量以带符号的十进制整型数输出,所以第一个输出语句输出的结果为a,97;第二个输出语句输出的结果为k=12。
SSS_SINGLE_SELSSS_SINGLE_SELSSS_SINGLE_SEL
7.
下列选项中,不属于模块间耦合的是
SSS_SINGLE_SEL
A 数据耦合
B 标记耦合
C 异构耦合
D 公共耦合
分值: 2
答案:C
[解析] 模块之间的耦合程度反映了模块的独立性,也反映了系统分解后的复杂程度。按照耦合程度从强到弱分别是:内容耦合、公共耦合、外部耦合、控制耦合、标记耦合、数据耦合和非直接耦合,没有异构耦合这种方式。
8.
若有以下说明和定义 union dt {int a;char b;double
c;}data; 以下叙述中错误的是
A data的每个成员起始地址都相同
B 变量data所占内存字节数与成员c所占字节数相等
C 程序段:data=5;printf("%fn",dat;输出结果为5.000000
D data可以作为函数的实参
分值: 2
答案:D
[解析] 选项A) ,共用体的每个成员的起始地址都相同;选项B) ,共用体变量所占的内存长度等于最长的成员的长度;选项C) 因为每个成员的起始地址相同,所以整型数5以浮点型输出时为5.000000;选项D) C语言规定,不能把共用体变量作为函数的参数。
9.
若已定义 int a[]={0,1,2,3,4,5,6,7,8,9},*p=a,i; 其中0≤i≤9,则对a数组元素不正确的引用是
SSS_SINGLE_SELSSS_SINGLE_SELA a[p-a]
B *(&
C p
D a[10]
分值: 2
答案:D
[解析] 通常,引用一个数组元素可以用下标法,如a[p-a]形式,或指针法,如*(&a[i])的形式。本题中 a[9]=9,a[10]显然超出了数组范围,注意,数组的下标是从0开始的。
10.
下列可用于C语言用户标识符的一组是
SSS_SINGLE_SEL
A void,define,WORD
B a3_b3,_123,Car
C For,-abc,IF Case
D 2a,DO,sizeof
分值: 2
答案:B
[解析] C语言规定标识符只能由字母、数字和下画线3种字符组成,且第一个字符必须为字母或下画线,排除选项C) 和D) ;C语言中还规定标识符不能为C语言的关键字,而选项A) 中void为关键字,故排除选项A) 。
11.
若变量均已正确定义并赋值,以下合法的C语言赋值语句是
SSS_SINGLE_SEL
A x=y==5;
B x=n%2.5;
C x+n=i;
D x=5=4+1;
分值: 1
答案:A
[解析] 赋值运算符左侧的操作数必须是一个变量,而不能是表达式或者常量,选项C) 和D) 错误。“%”运算符两侧都应当是整型数据,选项B) 错误。
12.
当变量c的值不为2、4、6时,值也为“真”的表达式是
A (c==2)||(c==4)||(c==6)
B (c>=2&&c<=6)||(c!=3)||(c!=5)
C (c>=2&&c<=6)&&! (c%2)
D (c>=2&&c<=6)&&(c%2!=1)
分值: 1
答案:B
[解析] 满足表达式(c>=2&&c<=6)的整型变量c的值是2,3,4,5,6。当变量c的值不为2,4,6时,其值只能为3或5,所以表达式c!=3和c!=5中至少有一个为真,即不论c为何值,选项B中的表达式都为“真”。
13.
下列程序执行后的输出结果是 void func(int *a,int
b[]) { b[0]= *a+6; } main() { int a,b[5]; a=0; b[0] =3; func(&a,b);printf("%dn",b[0]);}
SSS_SINGLE_SELSSS_SINGLE_SELA 6
B 7
C 8
D 9
分值: 1
答案:A
[解析] 函数的参数不仅可以是整型、实型、字符型等数据,还可以是指针型。它的作用是将一个变量的地址传递到另一个函数中。当数组名作参数时,如果形参数组中的各元素的值发生变化,实参数组元素的值也将随之发生变化。
14.
对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法是
SSS_SINGLE_SEL
A 快速排序
B 冒泡排序
C 直接插入排序
D 堆排序
分值: 1
答案:D
[解析] 在最坏情况下,快速排序、冒泡排序和直接插入排序需要的比较次数都为n(n-1)/2,堆排序需要的比较次数为nlog2n。
15.
有如下程序 main() { char ch[2][5]={"6937","8254"},*p[2]; int i,j,s=0; for(i=0;i<2;i++)p[i]=ch[i]; for(i=0;i<2;i++) for(j=0;p[i][j]>'0'; j+=2) s=10*s+p[i][j]-'0'; printf("%dn",s);} 该程序的输出结果是
SSS_SINGLE_SEL
A 69825
B 63825
C 6385
D 693825
分值: 1
答案:C
[解析] 该题稍微难一点。主要要搞清楚以下几点:①定义了一个指针数组char *p[2]后,程序中第一个循环 for(i=0;i<2;i++)p[i]=ch[i];的作用,是使指针数组的p[0]元素(它本身是一个指针)指向了二维数组ch的第一行字符串,并使指针数组的p[1]元素指向二维数组ch的第二行字符串。这样,就使指针数组p和二维数组ch建立起了一种对应关系,以后对二维数组ch的某个元素的引用就有两种等价的形式:ch[i][j]或p[i][j]。②对二维数组ch的初始化,使其第一行ch[0]中存入了字符串“6937”,第二行ch[1]中的内容为字符串“8254”。③程序中第二个循环中的循环体s=s*10+p[i]
[j]-'0';的功能是这样的,每执行一次,将s中的值乘以10(也即将s中的数值整体向左移动一位,并在空出来的个位上添一个0),再将当前p[i][i]中的字符量转换为相应的数字,然后把这个数字加到s的个位上。④注意到内启循环的循环条件 p[i][j]>'0'是指p[i][j]中的字符只要不是字符串结束标志'0'就继续循环。语句j+=2;是使下标j每次增加2,也即一个隔一个地从p[i]所指向的字符串中取出字符。经过上述解析后,不难看出,该程序首先从p[0]所指向的字符串“6937”中一个隔一个地取出字符,分别是“6”和
“3”,然后从p[1)所指向的字符串“8254”中一个隔一个地取出字符,分别是“8”和“5”,同时经过转换和相加运算后,结果s中的值应该是6385。
16.
以下错误的定义语句是
A int x[][3]={{0},{1},{1,2,3}};
B int x[4][3]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};
C int x[4][]={{1,2,3},{1,2,3},{1,2,3},{1,2,3}};
D int x[][3]={1,2,3,4};
分值: 1
答案:C
[解析] 本题考查的是二维数组的定义和初始化方法。C语言中,在定义并初始化二维数组时,可以省略数组第一维的长度,但是不能省略第二维的长度。故选项C) 错误。
17.
已知函数的调用形式为fread(buf,size,count,fp),参数buf的含义是
A 一个整型变量,代表要读入的数据项总数
B 一个文件指针,指向要读的文件
C 一个指针;指向要读入数据的存放地址
D 一个存储区,存放要读的数据项
分值: 1
答案:C
[解析] 这是一道考查fread函数的题。buf是一个指针,fread是读入数据的存放地址;fwrite是输出数据的地址(以上指的是起始地址)。
18.
已知字母A的ASCII代码值为65,若变量kk为char型,以下不能正确判断出kk中的值为大写字母的表达式是
SSS_SINGLE_SELSSS_SINGLE_SELSSS_SINGLE_SEL
A kk>='A'&&kk<='Z'
B !(kk>='A'||kk<="Z")
C (kk+32)>='a'&&(kk+32)<='Z'
D isalpha(k&&(kk<91)
分值: 1
答案:B
[解析] C语言的字符以其ASCII码的形式存在,所以要确定某个字符是大写字母,只要确定它的ASCII码在“A”和“Z”之间就可以了,选项A) 和C) 符合要求。函数isalpha用来确定一个字符是否为字母,大写字母的ASCII码值的范围为65-90,所以如果一个字母的ASCII码小于91,那么就能确定它是大写字母。
19.
以下不正确的叙述是
A 在C程序中,逗号运算符的优先级最低
SSS_SINGLE_SEL
B 在C程序中,APH和aph是两个不同的变量
C 若a和b类型相同,在计算了赋值表达式a=b后,b中的值将放入a中,而b中的值不变
D 当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值
分值: 1
答案:D
[解析] 在C语言所有的运算符中,逗号运算符的优先级最低。C语言中区分大小写,所以APH和aph是两个不同的变量。赋值表达式a=b表示将b的值赋给a,而b本身的值保持不变;通过键盘可以向计算机输入允许的任何类型的数据。选项D) 中当从键盘输入数据时,对于整型变量可以输入整型数值和字符,对于实型变量可以输入实型数值和整型数值等。
20.
变量a中的数据用二进制表示的形式是01011101,变量b中的数据用二进制表示的形式是11110000。若要求将a的高位取反,低4位不变,所要执行的运算是
SSS_SINGLE_SEL
A a^b
B a|b
C a&b
D a<<4
分值: 1
答案:A
[解析] 本题考查的是位运算的知识,对于任何二进制数,和1进行异或运算会让其取反,而和0进行异或运算不会产生任何变化。
21.
程序流程图中带有箭头的线段表示的是
SSS_SINGLE_SEL
A 图元关系
B 数据流
C 控制流
D 调用关系
分值: 2
答案:C
[解析] 程序流程图是人们对解决问题的方法、思路或算法的一种图形方式的描述。其中,图框表示各种操作的类型,图框中的文字和符号表示操作的内容;流程线表示操作的先后次序。带箭头的线段在数据流程图中表示数据流;带箭头的线段在程序流程图中表示控制流。题中给出的选项中,在图元之间用带有箭头的线段表示图元关系。在模块之间用带有箭头的线段表示调用关系。
22.
下面程序段中,输出*的个数是 char *s="ta018bc"; for(;*s!='0';s++)printf("*");
SSS_SINGLE_SELA 9
B 5
C 6
D 7
分值: 2
答案:C
[解析] 本题中,格式符0表示的是八进制无符号形式输出整型数(不带前导0),字符常量在内存中占一个字节,存放的是ACSII码代码值。C语言规定,所有字符常量都作为整型量来处理,在计算机内部,其对应的整数值就是ACSII字符集中该字符的序号,即&*s中有几个字符就输出几个*。
23.
阅读下列程序,当运行函数时,输入asd af aa z67,则输出为 #include <stdio.h> #include <ctype.h> #inelude <string.h> int fun(char *str) { int
i,j=0; for(i=0;str[i]!='0';i++) if(str[i]!='')str[j++]=str[i]; str[j]='0';
} main() { char str[81]; int
n; printf("Input a string:"); gets(str); puts(str); fun(str);
printf("%sn",str); }
SSS_SINGLE_SEL
A asdafaaz67
B asd af aa z67
C asd
D z67
分值: 2
答案:A
[解析] 本题题意要求删除所有空格,即除了空格以外的其他所有字符都要留下。由于C语言中没有直接删除字符的操作,所以我们对于删除字符的操作都是采用“留下”字符的算法,以前的题目亦是如此。用str[i]从串头到串尾逐一走动,每走到一个字符都判断其是否为空格,若不是空格(注意在if()的单引号之间有一个空格),则将其保存str[j]中。注意 j的下标变化、初值及最后加串结束符“0”。
24.
有以下程序 #include<string.h> main() { char
p[]={'a','b','c'},q[10]={'a','b','c'}; printf("%d%dn",strlen(p),strlen(q));} 以下叙述中正确的是
A 在给p和q数组置初值时,系统会自动添加字符串结束符,故输出的长度都为3
B 由于p数组中没有字符串结束符,长度不能确定,但q数组中字符串长度为3
C 由于q数组中没有字符串结束符,长度不能确定,但p数组中字符串长度为3
SSS_SINGLE_SEL
D 由于p和q数组中都没有字符串结束符,故长度都不能确定
分值: 2
答案:A
[解析] 在给p和q数组赋初值时,系统会自动添加字符串结束符,从题目中可以看出数组p和q都有3个字符,所以长度均为3。
25.
若有语句:char*line[5];,以下叙述中正确的是
A 定义line是一个数组,每个数组元素是一个基类型为char的指针变量
B 定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组
C 定义line是一个指针数组,语句中的。号称为间址运算符
D 定义line是一个指向字符型函数的指针
分值: 2
答案:A
[解析] C语言中[]比*优先级高,因此line先与[5]结合,形成line[5]形式,这是数组形式,它有5个元素,然后再与line前面的“*”结合,表示此数组是一个指针数组,每个数组元素都是一个基类型为char的指针变量。
26.
以下叙述中错误的是
A 在程序中凡是以“#”开始的语句行都是预处理命令行
B 预处理命令行的最后不能以分号表示结束
C #define MAX是合法的宏定义命令行
D C程序对预处理命令行的处理是在程序执行的过程中进行的
分值: 2
答案:D
[解析] C语言中的预处理命令以符号#开头,这些命令是在程序编译之前进行处理的,选项D) 的描述错误。
27.
在C语言中,只有在使用时才占用内存单元的变量,其存储类型是
SSS_SINGLE_SELSSS_SINGLE_SELSSS_SINGLE_SEL
A auto和register
B extern和register
C auto和static
D static和register
分值: 2
答案:A
[解析] 在C语言中只有自动变量和寄存器变量在使用时才占用内存单元。
28.
算法的时间复杂度是指
A 执行算法程序所需要的时间
B 算法程序的长度
C 算法执行过程中所需要的基本运算次数
SSS_SINGLE_SEL
D 算法程序中的指令条数
分值: 2
答案:C
[解析] 算法的复杂度主要包括算法的时间复杂度和空间复杂度。所谓算法的时间复杂度是指执行算法所需要的计算工作量,即算法执行过程中所需要的基本运算的次数;算法的空间复杂度一般是指执行这个算法所需要的内存空间。
29.
下面程序段的运行结果是 char*s="abcde"; s+=2;printf("%d",s);
SSS_SINGLE_SEL
A cde
B 字符'c'
C 字符'c'的地址
D 无确定的输出结果
分值: 2
答案:C
[解析] 对于字符串指针,其保留的是整个串的首地址,即第一个字符的起始地址;当该指针做算术运算时,就是该指针根据其类型向后移动相应的存储空间。
30.
下列程序执行后的输出结果是 main() { int a[3][3],*p,i; p=&a[0][0]; for(i=1;i<9;i++)p[i]=i+1; printf("%dn",a[1][2]);}
SSS_SINGLE_SEL
A 3
B 6
C 9
D 随机数
分值: 2
答案:B
[解析] 本题中,a[1][2]是二维数组中的第6个元素,对应for循环中i的值为5,p[5]=5+1。
31.
栈底至栈顶依次存放元素A、B、C、D,在第五个元素E入栈前,栈中元素可以出栈,则出栈序列可能是
SSS_SINGLE_SELA ABCED
B DCBEA
C DBCEA
D CDABE
分值: 2
答案:B
[解析] 栈操作原则上“后进先出”,栈底至栈顶依次存放元素A、B、C、D,则表明这4个元素中D是最后进栈, B、C处于中间,A最早进栈,所以出栈时一定是先出D,再出C,最后出A。
32.
有以下程序 #include <stdio.h> int
f(int x) { int y; if(x==0||x==1) return(3); y=x*x-f(x-2); return y; } main() { int z;
z=f(3); printf("%dn",z); } 程序的运行结果是
SSS_SINGLE_SEL
A 0
B 9
C 6
D 8
分值: 2
答案:C
[解析] 函数int f(int x)是一个递归函数调用,当x的值等于0或1时,函数值等于3,其他情况下y=x2-f(x -2),所以在主函数中执行语句z=f(3)时,y=3*3-f(3-2)=9-f(1)=9-3=6。
33.
以下选项中,不能作为合法常量的是
SSS_SINGLE_SEL
A 1.234e04
B 1.234e0.4
C 1.234e+4
D 1.234e0
分值: 2
答案:B
[解析] C语言的语法规定,字母e(E)之前必须有数字,且e(E)后面的指数必须是整数,而选项B) 中,e(E)后面的指数是小数,所以不合法。
34.
若有以下定义: struct link { int data; strnct
link *next; } a,b,c,*p,*q; 且变量a和b之间已有如下图所示的链表结构: 指针p指向变量a,q指向变量c。则能够把c插入到a和b之间并形成新的链表的语句组是
SSS_SINGLE_SELA next=c;next=b;
B next=q;next=next;
C p->next=&c;q->next=p->next;
D (*.next=q;(*.next=&b;
分值: 2
答案:D
[解析] 本题考查链表的数据结构,必须利用指针变量才能实现,即一个结点中应包含一个指针变量,用它存放下一结点的地址。
35.
关系表中的每一横行称为一个
SSS_SINGLE_SELA 元组
B 字段
C 属性
D 码
分值: 2
答案:A
[解析] 关系表中,每一行称为一个元组,对应表中的一条记录;每一列称为一个属性,对应表中的一个字段;在二维表中凡能唯一标识元组的最小属性集称为该表的键或码。
36.
已知 #int t=0; while(t=1) {...} 则以下叙述正确的是
A 循环控制表达式的值为0
B 循环控制表达式的值为1
C 循环控制表达式不合法
D 以上说法都不对
分值: 2
答案:B
[解析] t=1是将t赋值为1,所以循环控制表达式的值为1。判断t是否等于1时,应用t==1,注意“=”与“==”的用法。
37.
有定义语句:char s[10];,若要从终端给s输入5个字符,错误的输入语句是
SSS_SINGLE_SELSSS_SINGLE_SEL
A gets(&s[0]);
B scanf("%s",s+1);
C gets(;
D scanf("%s",s[1]);
分值: 2
答案:D
[解析] 在格式输入中,要求给出的是编译的地址,而D) 答案中给出的s[1]是一个值的表达式。
38.
需求分析阶段的任务是确定
SSS_SINGLE_SEL
A 软件开发方法
B 软件开发工具
C 软件开发费用
D 软件系统功能
分值: 2
答案:D
[解析] 需求分析是软件定义时期的最后一个阶段,它的基本任务就是详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统的工作概况,明确用户的各种需求,然后在此基础上确定新系统的功能。选项A) 软件开发方法是在总体设计阶段需完成的任务;选项B) 软件开发工具是在实现阶段需完成的任务;选项C) 软件开发费用是在可行性研究阶段需完成的任务。
39.
以下叙述中错误的是
A gets函数用于从终端读入字符串
B getchar函数用于从磁盘文件读入字符
C fputs函数用于把字符串输出到文件
D fwrite函数用于以二进制形式输出数据到文件
分值: 2
答案:B
[解析] getchar函数的作用是从终端读入一个字符。
40.
有以下程序 #include <stdio.h> main() { int x=1,y=0,a=0,b=0; switch(x) { case 1: switch(y) { case 0:a++; break; case 1:b++; break; } case 2:a++;b++; break; case 3:a++;b++; } printf("a=%d,b=%dn",a,b); } 程序的运行结果是
SSS_SINGLE_SELSSS_SINGLE_SELA a=1,b=0
B a=2,b=2
C a=1,b=1
D a=2,b=1
分值: 2
答案:D
[解析] 本题考查switch语句,首先,x=1符合条件case 1,执行switch(y)语句。y=0符合case 0语句,执行 a抖并跳出switch(y)语句,此时a=1。因为case 1语句后面没有break语句,所以向后执行case 2语句,执行a++,b++,然后跳出switch(x),得a=2,b=1。
二、填空题
请将每一个空的正确答案写在【1】~【15】序号的横线上。
1.
测试用例包括输入值集和 【1】 值集。
SSS_FILL
分值: 2
答案:输出
[解析] 软件测试用例是为了有效发现软件缺陷而编写的包含测试目的、测试步骤、期望测试结果的特定集合。正确认识和设计软件测试用例可以提高软件测试的有效性,便于测试质量的度量,增强测试过程的可管理性。软件测试用例包括:输入值集和输出值集。测试用例是软件测试的核心。
2.
某二叉树中度为2的结点有18个,则该二叉树中有 【2】 个叶子结点。
SSS_FILL
分值: 2
答案:19
[解析] 在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。
3.
数据结构分为逻辑结构与存储结构,线性链表属于 【3】 。
SSS_FILL
分值: 2
答案:存储结构
[解析] 数据的逻辑结构是指反映数据元素之间逻辑关系的数据结构;数据的存储结构是指数据的逻辑结构在计算机存储空间中的存放形式。在数据的存储结构中,不仅要存放各数据元素的信息,还需要存放各数据元素之间前后件关系的信息。
4.
在关系模型中,把数据看成一个二维表,每一个二维表称为一个 【4】 。
SSS_FILL
分值: 2
答案:关系
[解析] 在关系模型中,把数据看成一个二维表,每一个二维表称为一个关系。表中的每一列称为一个属性,相当于记录中的一个数据项,对属性的命名称为属性名;表中的一行称为一个元组,相当于记录值。
5.
数据库设计分为以下6个设计阶段:需求分析阶段、 【5】 、逻辑设计阶段、物理设计阶段、实施阶段、运行和维护阶段。
SSS_FILL
分值: 2
答案:概念设计阶段
[解析] 数据库设计分为以下6个设计阶段:需求分析阶段、概念设计阶段、逻辑设计阶段、物理设计阶段、实施阶段及数据库运行和维护阶段。
6.
以下程序的输出结果是 【6】 。
main()
{ char c='z';
printf("%c",c-25);}
SSS_FILL 分值: 2
答案:a
[解析] “z”的ASCII码值为122,经过c-25运算后得97,以字符形式输出是a。
7.
函数fun的返回值是 【7】 。
fun(char *a,char *b)
{ int num=0,n=0;
while(*(a+num)!='0')num++;
while(b[n]){ *(a+num)=b[n];num++;n++;}
return num;
}
SSS_FILL
分值: 2
答案:字符串a和b的长度之和
[解析] 本题首先通过第一个while循环计算字符串a的长度,再通过第二个循环,将字符串a和b相连,最后返回连接后的总长度。
8.
下列程序的输出结果是 【8】 。
main()
{ int i;
for(i=1;i+1;i++)
{ if(i>4)
{ printf("%dn",i);
break;}
printf("%dn",i++);}}
SSS_FILL
分值: 2
答案:1
3
5
[解析] 本题考查了for循环语句的使用,break语句用在本题中是结束for循环直接跳出循环体外。当i=1时,因为if语句条件不满足,所以直接执行printf("%dn",i++);输出1,同时i自加1;执行第二次for循环时,i=3;同样的if语句条件不满足,所以直接执行printf("%dn",i++);输出3,同
时i自加1;执行第三次for循环时,i=5,if语句条件满足,所以执行printf("%dn",i),输出5,然后break语句跳出了for循环。
9.
以下程序的运行结果是 【9】 。
#include <stdio.h>
main()
{ int x=1,y=0,a=0,b=0;
switch(x)
{ case 1:
switch(y)
{ case 0:a++; break;
case 1: b++; break;
}
case 2:a++; b++;break;
case 3:a++;b++;
}
printf("a=%d,b=%dn",a,b);
}
SSS_FILL
分值: 2
答案:a=2,b=1
[解析] 本题考查了switch结构的内容。C语言中,程序执行完一个case标号的内容后,如果没有break语句,控制结构会转移到下一个case继续执行,因为case常量表达式只是起语句标号作用,并不是在该处进行条件判断。本题程序在执行完内部switch结构后,继续执行了外部switch结构的case 2分支,最后a和b的值分别为2和1。
10.
以下程序的输出结果是 【10】 。
#include <stdio.h>
void swap(int *a, int *b)
{ int *t;
t=a; a=b; b=t;
}
main()
{ int i=3,j=5,*p=&i,*q=&j;
swap(p,q); printf("%d %dn",*p,*q);
}
SSS_FILL
分值: 2
答案:3 5
[解析] 函数swap(int *a,int *b)的功能是实现*a和*b中两个数据的交换,在主函数中调用swap(p,q)后,形参指针变量a和b分别指向i和j,在
swap(int *a,int *b)执行完后,指针变量a和b分别指向j和i,而指针变量p,q所指向变量的值没有发生变化,所以输出结果为3 5。
11.
函数my_cmp()的功能是比较字符串s和t的大小,当s等于t时返回0,否则返回s和t的第一个不同字符的ASCII码差值,即s>t时返回正值,当s<t时返回负值。请填空。
my_cmp(char *s,char *t)
{ while(*s==*t)
{ if(*s=='0')return 0;
++s; ++t;
}return 【11】 ;
}
SSS_FILL
分值: 2
答案:*s-*t
[解析] 两字符串大小比较必须从它们的首字符开始,在对应字符相等情况下循环,直至不相等结束。相等时,若字符串已到了字符串的结束标记符,则两字符串相同,函数返回。值;如还有后继字符,则准备比较下一对字符。对应字符不相同,循环结束。循环结束时,就以两个当前字符的差返回,所以在空框处应填入*s-*t,保证在s>t时,返回正值,当s<t时,返回负值。
12.
以下程序的输出结果是 【12】 。
float fun(int x,int y)
{ return(x+y);}
main()
{ int a=2,b=5,c=8;
printf("%3.0fn",fun((int)fun(a+c,b),a-c));}
SSS_FILL 分值: 2
答案:9
[解析] 本题考查函数的综合知识。首先,我们可以利用强制转换类型转换运算符,将一个表达式转换成所需类型。如: (double)a是将a转换成double类型;(int)(x+y)是将x+y的值转换成整型。
本题可按部就班地逐步运算:
fun((int)fun(a+c,b),a-c)
fun((int)fun(10,5),2-8)
fun((int)15.000000,-6)
fun(15,-6)
9
13.
以下说明语句中, 【13】 是结构体类型名。
typedef struct
{ int n;
char ch[8];
}PER;
SSS_FILL
分值: 2
答案:PER
[解析] 本题中,typedef声明新的类型名PER来代替已有的类型名,PER代表上面指定的一个结构体类型,此时,也可以用 PER来定义变量。
14.
fseek函数的正确调用形式是 【14】 。
SSS_FILL
分值: 2
答案:fseek(文件指针,位移量,起始点)
[解析] 本题考查函数fseek的用法。fseek函数的调用形式为:
fseek(文件指针,位移量,起始点)
“起始点”用0,1或2代替,其中,0代表“文件开始”;1为“当前位置”;2为“文件末尾”。“位移量”指以“起始点”为基点,向前移动的字节数。ANSI C和大多数C版本要求位移量是long型数据,这样当文件的长度大于64k时不致出现问题。 ANSI C标准规定在数字的末尾加一个字母L,就表示long型。
15.
以下程序的作用是:从名为filea.dat的文本文件中逐个读入字符并显示在屏幕上。请填空。
#include <stdio.h>
main()
{FILE *fp; char ch;
fp=fopen( 【15】 );
ch=fsetc(fp);
while(! feof (fp)) { putchar(ch); ch=fgetc(fp); }
putchar('n'); fclose(fp);
}
SSS_FILL
分值: 2
答案:"","r"
[解析] fopen函数的调用方式通常为fopen(文件名,使用文件方式)。本题中要求程序可以打开文件,并且是要读取文件中的内容,所以空白处应当填入"filea.dat","r"。
1
版权声明:本文标题:二级C语言笔试318_真题(含答案与解析)-交互 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1703230438h443208.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论