第十三章 考试模拟试卷及解析
13.1 模拟试卷1及解析
一、单项向选择题(每小题1.5分,共30分)
1. 关于C语言的叙述,不正确的是( )。
A) C程序必须包含一个main()函数
B) C程序可由一个或多个函数组成
C) C程序的基本组成单位是函数
D) 注释说明只能位于一条语句的后面
分析:注释可以出现在语句的前面、后面或中间。例如,
#include<stdio.h>
void main(void){ /*计算1+2+3+4+…100的值 */
int i;
long s=0;
for( i=1; i<= /* 不要丢掉'='号!*/ 100; i++)
s+=i;
/* 注意以下输出语句中long int 数据的输出控制格式”%ld” */
printf("s=%ld\n",s);
}
答案选D。
2.以下( )是正确的字符常量。
A) "c" B) '\t' C) '12' D) "\\"
分析:A)中的"c"为字符串常量,B)中的'\t'为转义字符,请大家注意常用转义字符的表示方法(参见教材),C)中'12'表示错误,因为单引号里面只能含有1个字符。 D)中表示的是一个字符串(双引号),尽管这个字符串中只含有一个转义字符'\\'。答案选B。
3.设char ch='c';,则表达式ch+1的值为( )。
A) 97 B) 98 C) 99 D) 100
分析:字符变量存储的是所对应字符的ASCII值,26个字母之间的ASCII值按字母顺序是连续的,即字母'a'的ASCII值为十进制的97,字母'b'的ASCII值为十进制的98,依次类推。大家应记住常用字符的ASCII值,如,'A'为65,'c语言中struct0'为48等。答案选D。
4.下面关于算术运算符的叙述,错误的是( )。
A) 其运算对象不包含函数表达式
B) 运算符%的运算对象只能为整型
C) 算术运算符的结合方向是"自左至右"
D) 自加和自减运算符的结合方向是"自右至左"
分析:运算符的运算对象可以是一个函数表达式,如sin(x)+10。答案选A 。
5.getchar()函数的功能是从终端输入( )。
A) 一个整型变量值 B) 一个实型变量值
C) 多个字符 D) 一个字符
答案选D。
6.若有定义:int i=7,j=8;,则表达式 i>=j||i<j 的值为( )。
A) 1 B) 变量i的值 C) 0 D) 变量j的值
分析:表达式i>=j||i<j等价于(i>=j)||(i<j),其实不管变量i和j的值为多少,整个表达式的结果总是为“真”。答案选A。
7.已知int a='R'; 则正确的表达式是( )。A
A) a%10 B) a=int(3e2) C) 2*a=a++ D) a=a+a=a+3
分析:B错误,应在转换目标的类型两边加上括号,即(int)(3e2),C表达式错误,因为赋值等号的左边不是“左值”,D的错误类似于C。答案选A。
8.设有定义int x=5;,则以下语句执行后,变量x值为6的是( )。
A) printf("%d",x++); B) if(x=0) x=6;
C) 2==1? x++:x--; D) if(x++<6) x++;
分析:执行A语句,输出表达式x++的值5,变量x的值变为6。B语句中条件表达式为假,不执行赋值操作,变量x的值为0。C为条件表达式,由于表达式2==1的值为假,故执行表达式 x--,使得变量x的值为4。D语句中条件表达式x++<6的值为真,x变量的值自增了两次,即x值变为7。答案选A。
9. 在c语言中while循环和do~while循环的主要区别是( )。
A) do~while循环体内可以使用break语句,while循环体内不能使用break语句
B) do~while的循环体至少无条件执行一次,while的循环体不是
C) do~while循环体内可以使用continue语句,while循环体内不能使用continue语句
D) while的循环体至少无条件执行一次,do~while的循环体不是
答案选B。
10. 以下能对一维数组a进行正确初始化的语句是( )。
A) int a[5]=(0,0,0,0,0); B) int a[5]=[0];
C) int a[5]={1,2,3,4,5,6,7}; D) int a[]={0};
分析:A中的(0,0,0,0,0)应为{0,0,0,0,0};B中的[0]应为{0};C中提供的初始值超过了数组的长度。答案选D。
11.设有如下程序段
int a[3][3]={1,0,2,1,0,2,1,0,1},i,j,s=0;
for(i=0;i<3;i++)
for(j=0;j<i;j++)
s=s+a[i][j];
则执行该程序段后,s的值是( )。
A) 0 B) 1 C) 2 D) 3
分析:对二维数组中的“下三角元素”(不包括对角线)求和。答案选C。
12. 若有定义:int a=2;,则语句a=strcmp("miss","miss");运行后a的值为( )。
A) 1 B) 0 C) -1 D) 2
分析:函数strcmp(s1,s2)返回两个字符串s1所指向的字符串和s2所指向的字符串内容的比较(依据对应位置各个字符的ASCII值)结果。若s1>s2,返回1,若s1<s2,返回-1,若 s1==s2,则返回0。答案选B。
13. 以下程序的运行结果是( )。
void fun(int array[4][4]){
int j;
for(j=0;j<4;j++) printf("%-2d",array[2][j]);
printf("\n");
}
void main(void){
int a[4][4]={0,1,2,0,1,0,0,4,2,0,0,5,0,4,5,0};
fun(a);
}
A) 2 0 0 5 B) 1 0 0 4 C) 0 1 2 0 D) 0 4 5 0
答案选A。
14. 若有以下宏定义:
#define MOD(x,y) x%y
则执行以下程序段后,z的值是( )。
int z,a=15,b=100;
z=MOD(b,a);
A)100 B)15 C)11 D)10
分析:#define MOD(x,y) x%y是带参数的宏定义,注意表达式中括号的使用。答案选D。
15. 以下程序段运行后*(++p)的值为( )。
char a[5]="work";
char *p;
p=a;
A)'w' B)存放'w'的地址 C)'o' D)存放'o'的地址
分析:p=a;使得指针p指向数组a的首元素,即指向字符'w',++p后使p增1,指向了下一个字符'o'。答案选C。
16. 若函数fun的函数原型为:int fun(int i, int j);
函数指针变量p定义为:int (*p)(int i, int j);
则要使指针p指向函数fun的赋值语句是( )。
A)p=*fun; B)p=fun; C)p=fun(i,j); D) p=&fun;
分析:函数名就是一个指向函数的指针,可以将函数名直接赋给一个指向函数的指针变量。答案选B。
17. 若有定义:
struct teacher{
int num;
char sex;
int age;
}teacher1;
则下列叙述不正确的是( )。
A) struct是结构体类型的关键字
B) struct teacher是用户定义的结构体类型
C) num,sex,age都是结构体变量teacher1的成员
D) teacher1是结构体类型名
分析:teacher1是一个结构体类型的变量。答案选D。
18. 若有定义:
struct node{
int data;
struct node *next;
};
及函数:
void fun(struct node *head){
struct node *p=head;
while(p){
struct node *q=p->next;
free(p);
p=q;
}
}
调用时head是指向链表首结点的指针,整个链表的结构如下所示:
head
…
15
2
27
∧
则函数fun()的功能是( )。
A)删除整个单向链表
B)删除单向链表中的一个结点
C)显示单向链表中的所有数据
D)创建单向链表
分析:开始时,p指向单链表中的第一个结点,q指向第二个结点,删除p所指结点后,p再指向第二个结点,q指向第三个结点,再删除p所指结点,如此下去,直到所有的结点删除完为止。答案选A。
19. 在对于无符号数的位运算中,操作数右移一位相当于( )。
A)操作数除以2 B)操作数乘以2
C)操作数除以4 D)操作数乘以4
答案选A。
20. 以下程序的可执行文件名为tt.exe,若程序运行后屏幕显示:3, We are,则在DOS提示符下输入的命令是( )。
void main(int argc, char * argv[]){
int i;
printf("%d,",argc);
for(i=1;i<argc;i++)
printf("%s ",argv[i]);
}
A. tt B. tt We C. tt We are D.tt We are happy!
分析:使用命令行参数时,argc表示命令行中参数的个数(包括程序名),argv[]是一个指针数组,它的每一个元素argv[0]~argv[argc-1]分别指向命令行中的各个字符串。答案选C。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论