《C程序设计》期末复习练习题及参考答案(3)
一、单项选择题
1.若有定义int (*p)[4],则标识符p是一个。
A)指向整型变量的指针变量
B)指向函数的指针变量
√C)指向有四个整型元素的一维数组的指针变量
D)指针数组名,有四个元素,每个元素均为一个指向整型变量的指针2.下列对字符串的定义中,错误的是:。
√A) char str[7] = "FORTRAN";
B) char str[] = "FORTRAN";
C) char *str = "FORTRAN";
D) char str[] = {'F','O','R','T','R','A','N',0};
3.针对下面程序段,下面哪些说法是正确的?
#include
void Swap(int *x, int *y);
main()
{ int a, b;
a = 5;
b = 9;
Swap(&a, &b);
printf("a=%d,b=%d",a,b);
}
void Swap(int *x, int *y)
{ int *pTemp;
*pTemp = *x;
*x = *y;
*y = *pTemp;
}
A) 程序运行结果为乱码;
B) 程序运行后将导致程序崩溃;
C) 程序编译时出错导致程序无法运行;
√ D) 程序执行了危险的操作;
4.已知学生记录描述为:
struct student
{ int no;
char name[20];
char sex;
struct
{ int year;
char month[15];
int day;
}birth;
};
struct student s;
设变量s中的生日是1984年11月11日,下列对生日的正确赋值方式是_____
A) s.birth.year = 1984; s.birth.month = "11"; s.birth.day = 11;
B) s.birth.year = 1984; s.birth.month = 11; s.birth.day = 11;
√ C) s.birth.year = 1984; strcpy(s.birth.month, "11"); s.birth.day = 11;
D) s.birth.year = 1984; strcpy(s.birth.month, 11); s.birth.day = 11;
5. 要使下面程序的输出1, 2, 34,则从键盘输入的数据格式应为。
#include
main()
{ char a,b;
int c;
scanf("%c%c%d",&a,&b,&c);
printf("%c,%c,%d\n",a,b,c);
}
A)1 2 34 B)1, 2, 34 C)’1’,’2’,34 √ D)12 34
6. 以下选项中为合法整型常量的是()。
A) -080 √B) -80 C) -8e1.0 D) -80.0e
7.若x,i,j和k都是int型变量,则计算表达式x=(i=4,j=16,k=32)后,x的值为()。
A) 4 B) 16 √C) 32 D) 52
8.下列程序执行后的输出结果是()。
#include
void func(int *a, int b[])
{ b[0]=*a+6; }
main()
{ int a,b[5];
a=0; b[0]=3;
func(&a,b); printf("%d\n",b[0]);
}
√A)6 B)7 C)8 D)9
9.设有定义char grade = 'A'; 则以下给出的程序运行结果或说法正确的是()。
switch(grade)
{ case 'A':
case 'B':
case 'C': printf(">= 60 pass!\n");
case 'D': printf("< 60\n");
default : printf("error!\n");
}
A) >= 60 pass! B) < 60 C) error! √D) 以上结果都不正确
10.以下程序执行后的输出结果是()。
#include
int main()
{ int i = 1, j = 1, k = 2;
if((j++ || k++ ) && i++ )
printf("%d,%d,%d\n", i, j, k);
return 0;
}
A) 1,1,2 B) 2,2,1 √C) 2,2,2 D) 2,2,3
11.执行完循环语句for(i = 1; i < 10; i++); 后,以下关于变量i的值及循环体的执行次数的
说法正确的是()。
A) i的值是9,循环体执行9次B) i的值是9,循环体执行10次
√C) i的值是10,循环体执行9次D) i的值是10,循环体执行10次
12.以下程序的运行结果是()。
#include
int main()
{ int m, n;
for(m = 0, n = 10; m < n; m+=3, n--);
printf("%d,%d\n",m,n);
return 0;
}
A) 6,7 B) 7,6 √C) 9,7 D) 7,9
13.以下程序的运行结果是()。
#include
int main()
{ int i;
int a[3][3]={1,2,3,4,5,6,7,8,9};
for(i = 0; i < 3; i++)
printf("%d ",a[2-i][i]);
return 0;
}
A) 1 5 9 √B) 7 5 3 C) 3 5 7 D) 5 9 1
14.下列可用于C语言用户标识符的一组是()。
A)void, define, WORD √B)a3_3,_123,Car
C)For, -abc, IF Case D)2a, DO, sizeof
15.若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为
()。.
A) a<>0 B) !a C) a=0 √D) a!=0
16.以下程序的输出结果是()。
#include
void main()
{ int x=10,y=10;
printf("%d %d\n", x--, --y);
}
A) 9 9 √B) 10 9 C) 9 10 D) 10 10
17.若有定义:char *name[] = {"Follow me","BASIC","Great Wall","FORTRAN"};,则name[2]
的值是()。
A) 字符'G' B) 字符串"Great Wall"
√C) 字符串"Great Wall"的首地址D) 不确定
18.有以下程序,程序执行后的输出结果是()。
#include
void fun(char *p)
{ char *q = p;
while( *q != '\0')
{ (*q) ++;
q++;
}
}
int main()
{ char a[] = {"Program"}, *p;
p = &a[3];
fun(p);
printf("%s\n",a);
return 0;
}
√A) Prohsbn B) Prphsbn C) Progsbn D) Program
19.下面列出的C语言提供的合法的数据类型关键字是()。
A) Double √B) short C) integer D) Char
20.字符(char)型数据在微机内存中的存储形式是()。
A) 反码B) 补码C) EBCDIC码√D) ASCII码
21.设int a=12,则执行完语句a+=a-=a*a后,a的值是()。
A) 552 B) 264 C) 144 √D) -264
23.能够完成如下函数计算的程序段是()。
-1 x<0
Y= 0 x=0
1 x>0
A) y=1; √B) if (x>=0)
if(x!=0) if(x>0) y=1;
if(x>0) y=1; else y=0;
else y=0; else y=-1;
C) y=0; D) y=-1;
if (x>=0) if (x>0) y=1;
if (x>0) y=1; else y=0;
else y=-1;
24.有如下程序
#include
void main( )
{ int x=1,a=0,b=0;
switch(x)
{
case 0: b++;
case 1: a++;
case 2: a++;b++;
}
printf("a=%d,b=%d\n",a,b);
}
该程序的输出结果是()。
√A) a=2,b=1 B) a=1,b=1 C) a=1,b=0 D) a=2,b=2
25.下面程序的输出结果是()。
#include
void main( )
{ int i;
for(i=1;i<6;i++)
{ if (i%2!=0) {printf("#");continue;}
printf("*");
}
printf("\n");
}
√A) #*#*# B) ##### C) ***** D) *#*#*
26.C语言中while 和do-while 循环的主要区别是()。.
√A) do-while的循环体至少无条件执行一次
B) while 的循环控制条件比do-while 的循环控制条件严格
C) do-while 允许从外部转到循环体内
D) do-while 的循环体不能是复合语句
27.当对两个字符串进行比较时,应该使用的函数是()。
A)strcat √B)strcmp C)strcpy D)strlen 28.以下程序的运行结果是()。
#include
void main( )
{ int *p, a=1;
p=&a;
*p=10;
printf("%d\n", a);
}
A) 1 √B) 10 C) 不能确定D) 11
29.设有定义int a[ ]={1,5,7,9,11,13}, *p=a+3; 则*(p-2) , *(a+4) 的值是()。
√A)5 11B)1 9 C)5 9 D)有错误
30.若i为整型变量,则以下循环的次数是()。
for(i=2;i==0;)printf(“%d”,i--);
A)无限次√B)0次C)1次D)2次
二、填空题
1. C语言标识符由___字母______、____数字______和______下划线_____来构造。2.设有定义:FILE *fp;,请将以下打开文件的语句补充完整,以便可以向文本文件readme.txt的最后续写内容。fp = fopen("readme.txt", “a” );
3. 若有说明和语句:int a=25,b=60;b=++a;则b的值是 26 。
4. 若int x=5;while(x>0)printf(“%d”,x--);的循环执行次数为 5 。
5. 若有int a[5],*p=a;则p+2表示第三个元素的地址。
6. 若有说明和语句:int a=5,b=6,y=6;b-=a;y=a++则b和y的值分别是 1 、 5 。
7. 已知整型变量a=3,b=4,c=5,写出逻辑表达式a||b+c>c&&b-c的值是 1 。
8.在C语言中,变量的存储类别有四种,它们是:
自动(auto)、寄存器(register)、静态(static) 、外部(extern)。
9.如果一个变量在某个范围内是有效的,该范围就称为变量的作用域。自动(auto)存储类别的局部变量,其作用域为:从定义的位置起,到函数体(或复合语句)结束为止
10.设有定义int a,b;写出满足条件“a是3的倍数,或者b不是5的倍数”的逻辑表达式:a%3==0 || b%5!=0 。
三、程序运行结果分析题
1.
main()
{ int i,j,x =0;
for(i=0;i<2;i++)
{
x++;
for(j=0;j<3;j++)
{
if(j%2) continue;
x++;
}
x++;
}
printf("x=%d\n",x);
}
程序运行结果是:x=6
2.
#include
struct date
{ int year;
int month;
int day;
};
struct date func(struct date p)
{ p.year = 2000;
p.month = 5;
p.day = 22;
return p;
}
main()
{ struct date d;
d.year = 1999;
d.month = 4;
d.day = 23;
printf("%d/%d/%d\n", d.year, d.month, d.day);
d = func(d);
printf("%d/%d/%d\n", d.year, d.month, d.day);
}
程序的运行结果是:
1999/4/23
2000/5/22
3.
#include
main()
{
char a[] = "Hello" ;
char *p = NULL;