1、C语言程序设计练习题 题型 单选题 程序填空 程序运行结果 程序改错 编程 总分 分值 2*20=40 2*10=20 2*5=10 3*5=15 6+9=15 100 考生注意:所有答案均要填写在答题卡上否则不得分数! 一、单项选择题 1、下列转义字符中,错误的是(C)。 转义字符可以用八进制表示 \ddd, 0<=d<8 A.′\n′ B.′\\′ C.′\108′ D.′\xbb′ 2、以下选项中正确的实型常数是___D____。小于1的实数小数点前的0可以省略 A、12.f B、 3.1415
2、后有空) C、1,000 D、 .876 3、在C语言中,整型常量的书写形式不包括(A)。 A.二进制 B.八进制 C.十进制 D.十六进制 4、在C语言程序中,主函数的摆放位置(D )。 A.必须置于所有函数之首 B.必须置于所有函数之尾 C.不得置于所有函数之尾 D.任意 5、 以下选项中不合法的用户标识符是____A___。标识符只能是字母、下划线、数字 A、 abc.c B、 file C、 Main D、 PRINTF 6、 C 语言中运算对象必须是整型的运算符是____A____。
3、 A、 % B、 / C、 ! D、 * 7、 以下叙述中正确的是____A_____。 A、 a 是实型变量,C 允许进行赋值 a = 10,但不可以这样说:实型变量中允许存放整型值 B、 在赋值表达式中,赋值号左边既可以是变量也可以是任意表达式 C、 执行表达式 a = b 后,在内存中 a 和 b 存储单元中的原有值都将被改变,a 的值已由原值改变为 b 的值,b 的值由原值变为0 D、 已有 a = 3, b = 5,当执行表达式 a = b, b = a 之后,使 a 中的值为5,b 中的值为3 8、以下叙述中正确的是____A_
4、 A、C 程序中各函数之间既允许直接递归调用,也允许间接递归调用 B、C 程序中各函数之间不允许直接递归调用,也不允许间接递归调用 C、C 程序中各函数之间允许直接递归调用,不允许间接递归调用 D、C 程序中各函数之间不允许直接递归调用,允许间接递归调用 9、 若 a、b、c、d 都是 int 型变量且初值为0,以下选项中不正确的赋值语句是____C______。 A、 a = b = c = 100; B、 d++; C、 c + b=a+d; D、 d = (c = 22) - (b++); 10、设有
5、如下定义:char *aa[2]={“abcd”,“ABCD”};则以下说法中正确的是( C )。 A aa数组成元素的值分别是“abcd”和ABCD“ B aa是指针变量,它指向含有两个数组元素的字符型一维数组 C aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址 D aa数组的两个元素中各自存放了字符‘a’和‘A’的地址 11、 若变量已正确定义为 int 型,要给 a、b、c 输入数据,正确的输入语句是___D_______。 A、 read(a, b, c); B、 scanf("%d%d%d", a,
6、b, c); C、 scanf("%D%D%D", &a, &b, &c); D、 scanf("%d%d%d", &a, &b, &c); 12、 若有以下程序段: int c1 = 1, c2 = 2, c3; c3 = c1 / c2; printf("%d\n", c3); 执行后的输出结果是____A______。 A、 0 B、 1/2 C、 0.5 D、 1 13、 为表示关系:x≥y≥z,应使用的 C 语言表达式是_____A_____。 A、 (x >= y) && (y >= z) B、
7、x >= y) AND (y >= z) C、 (x >= y >= z) D、 (x >= y) & (y >= z) 14、定义如下变量和数组: int i, x[3][3]={1,2,3,4,5,6,7,8,9};则下面语句 for(i=0;i<3;i++) printf(“%d”,x[i][2-i]); 的输出结果是( C ) A、1 5 9 B、 1 4 7 C、3 5 7 D、 3 6 9 15、 设有定义:char str[] = "ABCD", *p = st
8、r; 则语句 printf("%d\n", *(p + 4)); 的输出结果是____B______。 A、 68 B、 0 (“ABCD”后面自动加上一个字符’\0’,ASCII值为0) C、 字符 D 的地址 D、 不确定的值 16.字符数组初始化错误的是(D )。 A. static char word [ ]=″Turbo″; B. static char word [ ]={″Turbo″}; C. static char word [ ]={′T′,′u′,′r′,′b′,′o′,′\0′}; D.
9、 static char word [ ]=′Turbo\0′; 17、 有以下定义: struct person { char name[9]; int age;}; struct person class[10] = {"John", 17, "Paul", 19, "Mary", 18, "Adam", 16}; 则下面能输出字母 M 的语句是____D______。 A、 printf("%c\n", class[3].name); B、 printf("%c\n", class[3].name[1]); C、 printf("%c\n", class[2].na
10、me[1]); D、 printf("%c\n", class[2].name[0]); 18、 C 语言中,字符(char)型数据在微机内存中的存储形式是____D______。 A、 反码 B、 补码 C、 DBCDIC 码 D、 ASCII 码 19、 C 语言中,下列不合法的字符常量是___D_____。 A、 '\xff' B、 '\65' C、 '&' D、 '\028' 20、 已定义了以下函数 fff(float x) { printf("
11、d\n", x * x);}
该函数的类型是___C_____。 函数没有声明类型为int型
A、 与参数 x 的类型相同 B、 void 类型
C、 int 类型 D、 无法确定
21、有以下程序:
#include
12、efine NUM (M + 1) * M /2 NUM=(3+1)*3/2=6 void main() 用#define也可定义函数 { int i; for (i = 1; i < NUM; i++); printf("%d\n", i);} 程序运行后的结果是____B______。 A、 5 B、 6 C、 8 D、 9 22、 若有定义:int x, *pb; 则正确的赋值表达式是
13、A_____。 A、 pb = &x B、 pb = x C、 *pb = &x D、 *pb = *x 23、若已定义:int a[9], *p=a;并在以后的语句中未改变p的值,不能表示a[1]地址的表达式为( C )。 A、p+1 B、 a+1 C、 a++ D、 ++p a是固定的,不能做a++运算 24、设A为存放(短)整型的一维数组,如果A的首地址为P,那么A中第i 个元素的地址为( B )。 A、P+i*2 B、P+(i-1)*2
14、 C、P+(i-1) D、P+i 25、 若有以下程序: void main() { int k = 2, m = 4, n =6, *pk = &k, *pm = &m, *p; *(p = &n) = *pk * (*pm); printf("%d\n", n);} 程序的输出结果是_____C_____。 A、 4 B、 6 C、 8 D、 10 27、 若指针 p 已正确定义并指向如下图所示存储单元: a[0] a[1] a[2] a[3] a[4] 10 2
15、0 30 40 50 p↑ 则表达式 *++p 的值是_____B_____。 A、 20 B、 30 C、 21 D、31 27、 语句 printf("%d\n", strlen("ATS\n012\1\\")); 的输出结果是__C____。\n,\1,\\均为转义字符算一个 A、 11 B、 10 C、 9 D、 8 28、 若已定义: int a[] = {0, 1, 2, 3, 4, 5, 6, 7,
16、8, 9}, *p = a, i; 其中0≤i≤9,则对 a 数组元素的引用不正确的是 ( D) *是取地址的值的运算 A、 a[p - a] B、 *(&a[i]) C、 p[i] D、 *(*(a + i)) 29、设FILE *fp; char ch; , 则从fp所指向文件中读入一个字符,正确的语句是(B )。 A.fgetc(ch, fp); B.ch=fgetc(fp); C.getchar(ch); D.fgetc(fp,ch); 30、 有以下程序:
17、 通过#define预定义函数 宏定义
#include
18、char('\n') 本题属于C语言预处理的内容,如要详细 void main() 了解,请学习预处理部分 { int x = 2; PRINT1(FUDGF(5) * x);} 程序运行后的结果是___B_____。 A、 11 B、 12 C、 13 D、 15 二、程序填空 1、从键盘上输入10个数,求其平均值。 main() {int i; float f,sum; for(
19、i=1,sum=0.0;i<11;i++)
{ ___________【1】________________; scanf(“%f”,&f)
____________【2】_________________; sum=sum+f
}
printf(“average=%f\n”,sum/10);
}
2、输入一行字符,统计其中的英文字符、数字字符、空格及其它字符的个数。
#include
20、SIZE]; int len, i, letter=0, digit=0, space=0, others=0; gets(str); for (i=0; 【1】 ; i++) str[i]!=’\0’ { if ( 【2】 ) (str[i]>=65&&str[i]<=80)|| (str[i]>=97&&str[i]<=122) letter ++; else if ( 【3】
21、 ) (str[i]>=48&&str[i]<=57) digit ++; else if ( 【4】 ) str[i]=’ ‘; space ++; else others ++; } printf("English character: %d\n", letter); printf("digit character: %d\n", digit); printf("spa
22、ce: %d\n", space);
printf("other character: %d\n", others);
}
3、将从键盘输入的字符串逆序显示。
#include
23、p>=str)
{printf(″%c″, *p);
____【3】____; /* 第三空 */ p--
}
printf(″/n″);
}
4、不用函数strcat(),编程实现字符串连接函数strcat()的功能,将字符串srcStr连接到字符串dstStr的尾部。
#include
24、nter source string: "); gets(s); printf("Please enter destination string: "); gets(t); MyStrcat(s,t); printf("The concatenate string is: "); puts(s); } void MyStrcat(char dstStr[], char srcStr[]) { int i = 0, j; while (dstStr[i] != '\0') { 【1】 ;
25、 i++ /*起到目标串尾 */ } for (j=0; 【2】 ; j++, i++) srcStr[j]!=’\0’ { 【3】 ; dstStr[i]=srcStr[j] } 【4】 = '\0'; dstStr[i] } 5、给定一3*4的矩阵,求出其中值最大的元素的值,及所在的行列号。 main() {
26、 int i,j,row=0,colum=0,max; static int a[3][4]={{1,2,3,4}{9,8,7,6}{10,-10,-4,4}}; 【1】 ; max=a[0][0] for(i=0;i<=2;i++) for(j=0;j<=3;j++) if(a[i][j]>max) { 【2】 ; max=a[i][j] row=i; coum=j;
27、 } printf(“max=%d,row=%d,colum=%d\n”,max,row,colum); } 三、读程序,写出运行结果 1、int x=6,y=7; printf(“%d,”,x++);printf(“%d\n”,++y); 程序的输出结果是__6,8___. 2、#include ”stdio.h” func(int b[]) { int j; for(j=0;j<4;j++) b[j]=j; } main() { int a[4],k; func(a); for(k=0;k<4;k++) pr
28、intf(“%d\n”,a[k]); } 上述程序运行的结果: 0 1 2 3 3、float f=3.1415927; printf(“%f,%5.4f,%3.3f”,f,f,f); 则程序的输出结果是__3.141593,3.1416,3.142___. 4、#include ”stdio.h” void fun() { static int a=5; a++; printf(“a=%d\n”,a); } main() { int m; for(m=0;m<=1;m++) fun
29、); } 上述程序运行的结果: a=6 a=7 5、#include "stdio.h" union mix { char c; float f;int i; }; main(){ union mix x,*p=&x; *(float *)p=3.110; printf("%f",x.f); *(int *)p=50; printf("%d",x.i); } 上述程序运行的结果: 3.11000050 /* 输出没有分隔符 */ 6、#include "stdio.h" void te
30、st(int *x,int*y);
void main()
{
int a=10,b=20;
printf(“a=%d,b=%d\n”,a,b);
test(&a,&b);
printf(“a=%d,b=%d\n”,a,b);
}
void test(int *x,int*y){
int t;
t=*x;*x=*y;*y=t;
}
上述程序运行的结果: a=10,b=20
a=20,b=10
7、#include






