期末考试复习题-C语言
- 格式:docx
- 大小:23.46 KB
- 文档页数:12
期末考试复习题-C语言
一、单选题(每题1分共三十分)
1、以下叙述不正确的是 D 。
A、一个C源程序可由一个或多个函数组成
B、一个C源程序必须包含一个main函数
C、C程序的基本组成单位是函数
D、在C程序中,注释说明只能位于一条语句的后面
2、下列运算符中,优先级最高的是_A____。
A、->
B、++
C、&&
D、=
3、表达式!(x>0&&y>0) 等价于__A__。
A、!(x>0)||!(y>0)
B、!x>0||!y>0
C、!x>0&&!y>0
D、!(x>0)&&!(y>0)
4、设有说明;char w;int x;float y;double z;则表达式w-x+z-y值的数据
类型为 D 。
A、float
B、char
C、int
D、double.
5、能正确表示“当x取值在[1,10]和[200,210]范围内为真,否则为假”的表达式是 B 。
A、(x>=1)&&(x<=10)&&(x>=200)&&(x<=210)
B、(x>=1)&&(x<=10)||(x>=200)&&(x<=210)
C、(x>=1)||(x<=10)||(x>=200)||(x<=210) D、(x>=1)&&(x<=10)||(x>=200)||(x<=210)
6、以下程序的运行结果是 D 。
main()
{int k=4,a=3,b=2,c=1;
printf(“\n%d\n”,k
A、4
B、3
C、2
D、1
7、语句while(!E);中的表达式!E等价于 A 。
A、E= =0
B、E!=1
C、E!=0
D、E= =1
8、判断字符串s1是否大于字符串s2,应当使用 D 。
A、if(s1>s2)
B、if(a==b)
C、if(strcpy(s2,s1)>0)
D、if(strcmp(s1,s2)>0)
9、表达式__C__的值不是1。
A、0?0:1
B、5%4
C、!EOF
D、!NULL
10、以下有关函数的形参和实参的说法中正确的是 A 。
A、实参和与其对应的形参各占用独立的存储单元
B、实参和与其对应的形参各占用一个的存储单元
C、只有当实参和与其对应的形参同名时才占用一个的存储单元
D、形参是虚拟的,不占用存储单元
11、以下有关宏替换的叙述不正确的是 D 。 A、宏替换不占用运行时间
B、宏名无类型
C、宏替换只是字符替换
D、宏名必须用大写字母表示
12、下面判断正确的是 C 。
A、char *a=”china”;等介于char *a;*a=”china”;
B、char str[10]={”china”};等介于char
str[10];str[]={”china”};
C、cha r *s=”china”;等介于char *s;s=”china”;
D、char *s=”china”;等介于char s[10];*s=”china”;
13、设p1和p2是指向同一个字符串的指针变量,,c为字符变量,则以下不能正确执行赋值语句的是 B 。
A、c=*p1+*p2
B、p2=c
C、p1=p2
D、c=*p1*(*p2)
14、函数f定义如下,执行语句“sum=f(5)+f(3);”后,sum的值应为 A 。
int f(int m)
{ static int i=0;int s=0;
for(;i<=m;i++) s+=i;return s;
}
A、 21
B、 16
C、 15
D、 8
15、声明语句为“int a[3][4];”,下列表达式中与数组元素a[2][1]等价的是 A 。
A、*(a[2]+1)
B、a[9] C、*(a[1]+2)
D、*(*(a+2))+1
16、设有如下定义:
int (*ptr)();
则以下叙述中正确的是C 。
A、ptr是指向一维组数的指针变量
B、ptr是指向int型数据的指针变量
C、ptr是指向函数的指针,该函数返回一个int型数据
D、ptr是一个函数名,该函数的返回值是指向int型数据的指针
17、设有以下宏定义:
#define N 3
#define Y(n) ( (N+1)*n)
则执行语句:z=2 * (N+Y(5+1));后,z的值为 D 。
A、出错
B、42
C、48
D、54
18、给出以下定义:
char x[ ]="abcdefg";
char y[ ]={'a','b','c','d','e','f','g'};
则正确的叙述为 C 。
A、数组x和数组y等价
B、数组x和数组y的长度相同
C、数组x的长度大于数组y的长度
D、数组x的长度小于数组y的长度
19、若有以下说明:
int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则数值为6的表达式是 C 。
A、*p+6
B、*(p+6) C、*p+=5
D、p+5
20、不能把字符串:Hello!赋给数组b的语句是 B 。
A、char b[10]={'H','e','l','l','o','!'};
B、char b[10];b="Hello!";
C、char b[10];strcpy(b,"Hello!");
D、char b[10]="Hello!";
21、main()
{int a[10]={1,2,3,4,5,6,7,8,9,0},*p;
p=a;
printf("%x\n",p);
printf("%x\n",p+9); }
该程序有两个printf 语句, 如果第一个printf 语句输出的是194,
则第二个printf语句的输出结果是D 。
A、203
B、204
C、1a4
D、1a6
22、左移运算:int a=16,c=a<<2; 变量c的值是。
A、67
B、4
C、1
D、64
23、数组定义为“int a[4][5];”,引用“a[1]+3”表示 A 。
A、a数组第2行第4列元素的地址
B、a数组第2行第4列元素的值
C、a数组第4行的首地址
D、a数组第1行第4列的首地址
24、定义带参数的宏“#define jh(a,b,t) t=a;a=b;b=t”,使两个参数a、b的值交换,下列表述中哪个是正确的 D 。 A、不定义参数a和b将导致编译错误
B、不定义参数a、b、t将导致编译错误
B、不定义参数t将导致运行错误 D、不必定义参数a、b、t类型
25、下列各语句序列中,能够将变量u、s中最大值赋值到变量t中的是 B 。
A、if(u>s)t=u; t=s;
B、t=s; if(u>s)t=u;
C、if(u>s)t=s; else t=u;
D、t=u; if(u>s)t=s;
26、两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是 A 。
main( )
{ int x;
scanf("%d",&x);
if(x + + 〉5)printf("%d",x);
else printf("%d\n",x - -); }
A、7和5
B、6和3
C、7和4
D、6和4
27、char *aa[2]={"abcd","ABCD"};
则以下就法中正确的是 D 。
A、aa数组元素的值分别是"abcd"和ABCD"
B、aa是指针变量,它指向含有两个数组元素的字符型一维数组
C、aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址
D、aa数组的两个元素中各自存放了字符'a'和'A'的地址
28、int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*prt)[3]=a,*p=a[0]
则下列能够正确表示数组元素a[1][2]的表达式是D 。 A、*((*prt+1)[2])
B、*(*(p+5))
C、(*prt+1)+2
D、*(*(a+1)+2)
29、下列程序的输出结果是 D 。
main( )
{ char*p1,*p2,str[50]="xyz";
p1="abcd";
p2="ABCD";
strcpy(str+2,strcat(p1+2,p2+1));
printf("%s",str); }
A、xyabcAB
B、abcABz
C、ABabcz
D、xycdBCD
30、struct stu
{ int num;
char name[10];
int age; };
void fun(struct stu *p)
{ printf("%s\n",(*p).name); }
main()
{ struct stu students[3]={ {9801,"Zhang",20},
{9802,"Wang",19},
{9803,"Zhao",18} };
fun(students+2); }
输出结果是 B 。
A、Zhang
B、Zhao
C、Wang