1、C语言程序设计练习题题型单选题程序填空程序运行结果程序改错编程总分分值2*20=402*10=202*5=103*5=156+9=15100考生注意:所有答案均要填写在答题卡上否则不得分数!一、单项选择题1、下列转义字符中,错误的是(C)。 转义字符可以用八进制表示 ddd, 0=d= y) & (y = z) B、 (x = y) AND (y = z)C、 (x = y = z) D、 (x = y) & (y = z)14、定义如下变量和数组: int i, x33=1,2,3,4,5,6,7,8,9;则下面语句for(i=0;i3;i+) printf(“%d”,xi2-i); 的输出
2、结果是(C )A、1 5 9 B、 1 4 7 C、3 5 7 D、 3 6 915、 设有定义:char str = ABCD, *p = str; 则语句 printf(%dn, *(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 static char word =Turbo0
3、;17、 有以下定义:struct personchar name9;int age;struct person class10 = John, 17, Paul, 19, Mary, 18, Adam, 16;则下面能输出字母 M 的语句是_D_。A、 printf(%cn, class3.name); B、 printf(%cn, class3.name1);C、 printf(%cn, class2.name1); D、 printf(%cn, class2.name0);18、 C 语言中,字符(char)型数据在微机内存中的存储形式是_D_。A、 反码 B、 补码C、 DBCDIC
4、码 D、 ASCII 码19、 C 语言中,下列不合法的字符常量是_D_。A、 xff B、 65C、 & D、 02820、 已定义了以下函数fff(float x)printf(%dn, x * x);该函数的类型是_C_。 函数没有声明类型为int型A、 与参数 x 的类型相同 B、 void 类型C、 int 类型 D、 无法确定21、有以下程序:#include #define N 2 定义N=2#define M N + 1 M=2+1=3#define NUM (M + 1) * M /2 NUM=(3+1)*3/2=6void main() 用#define也可定义函数int
5、i;for (i = 1; i NUM; i+);printf(%dn, i);程序运行后的结果是_B_。A、 5 B、 6C、 8 D、 922、 若有定义:int x, *pb; 则正确的赋值表达式是_A_。A、 pb = &x B、 pb = xC、 *pb = &x D、 *pb = *x23、若已定义:int a9, *p=a;并在以后的语句中未改变p的值,不能表示a1地址的表达式为(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
6、+(i-1)*2 C、P+(i-1) D、P+i25、 若有以下程序:void main()int k = 2, m = 4, n =6, *pk = &k, *pm = &m, *p;*(p = &n) = *pk * (*pm);printf(%dn, n);程序的输出结果是_C_。A、 4 B、 6C、 8 D、 1027、 若指针 p 已正确定义并指向如下图所示存储单元:a0a1a2a3a41020304050p则表达式 *+p 的值是_B_。A、 20 B、 30C、 21 D、3127、 语句 printf(%dn, strlen(ATSn0121); 的输出结果是_C_。n,1,
7、均为转义字符算一个A、 11 B、 10C、 9 D、 828、 若已定义:int a = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, *p = a, i;其中0i9,则对 a 数组元素的引用不正确的是 ( D) *是取地址的值的运算A、 ap - a B、 *(&ai)C、 pi D、 *(*(a + i)29、设FILE *fp; char ch; , 则从fp所指向文件中读入一个字符,正确的语句是(B)。 Afgetc(ch, fp);Bch=fgetc(fp);Cgetchar(ch);Dfgetc(fp,ch);30、 有以下程序: 通过#define预定义函数 宏定
8、义#include FUDGF(y)=2.84+y 返回整型数 7#define FUDGF(y) 2.84 + y PR(a)输出a a=12#define PR(a) printf(%d, (int)(a) PRINT1(a) 调用PR(a) 输出换行符#define PRINT1(a) PR(a); putchar(n) 本题属于C语言预处理的内容,如要详细void main() 了解,请学习预处理部分int x = 2;PRINT1(FUDGF(5) * x);程序运行后的结果是_B_。A、 11 B、 12C、 13 D、 15二、程序填空1、从键盘上输入10个数,求其平均值。mai
9、n()int i;float f,sum;for(i=1,sum=0.0;i11;i+) _【1】_; scanf(“%f”,&f) _【2】_; sum=sum+fprintf(“average=%fn”,sum/10);2、输入一行字符,统计其中的英文字符、数字字符、空格及其它字符的个数。#include #include #define ARR_SIZE 80main()char strARR_SIZE;int len, i, letter=0, digit=0, space=0, others=0; gets(str); for (i=0; 【1】 ; i+) stri!=0 if (
10、 【2】 ) (stri=65&stri=97&stri=48&stri=57) digit +; else if ( 【4】 ) stri= ; space +; else others +; printf(English character: %dn, letter); printf(digit character: %dn, digit); printf(space: %dn, space); printf(other character: %dn, others);3、将从键盘输入的字符串逆序显示。 #include main()int n;char str80, *p;printf(
11、Input a string:);gets(str);/*输入字符串*/n=strlen(_【1】_); /*第一空*/ strp=str+_【2】_-1; /*第二空*/ nwhile (p=str)printf(%c, *p);_【3】_;/* 第三空 */ p-printf(/n);4、不用函数strcat(),编程实现字符串连接函数strcat()的功能,将字符串srcStr连接到字符串dstStr的尾部。#include #include main()void MyStrcat(char dstStr, char srcStr);char s80, t80;printf(Please
12、 enter 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 (dstStri != 0) 【1】 ; i+ /*起到目标串尾 */ for (j=0; 【2】 ; j+, i+) srcStrj!=0 【3】 ; dstStri=srcStrj 【4】 = 0;
13、 dstStri5、给定一3*4的矩阵,求出其中值最大的元素的值,及所在的行列号。main() int i,j,row=0,colum=0,max; static int a34=1,2,3,49,8,7,610,-10,-4,4; 【1】 ; max=a00for(i=0;i=2;i+) for(j=0;jmax) 【2】 ; max=aij row=i; coum=j; printf(“max=%d,row=%d,colum=%dn”,max,row,colum);三、读程序,写出运行结果1、int x=6,y=7;printf(“%d,”,x+);printf(“%dn”,+y);程序的
14、输出结果是_6,8_.2、#include ”stdio.h” func(int b) int j;for(j=0;j4;j+) bj=j; main() int a4,k;func(a);for(k=0;k4;k+)printf(“%dn”,ak); 上述程序运行的结果: 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=%dn”,a);
15、main() int m;for(m=0;m=1;m+)fun();上述程序运行的结果: 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.hvoid test(int *x,int*y);void main()int a=10,b=20;print
16、f(“a=%d,b=%dn”,a,b);test(&a,&b);printf(“a=%d,b=%dn”,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 main()int i, j, m;int a25 = 1,20,32,14,5,62,87,38,9,10; m = a00;for (i=0; i2; i+) for (j=0; j5; j+) if( myear = 2000; p-month = 5; p-day = 22;main() struct
17、date d; d.year = 1999; d.month = 4; d.day = 23; printf(“%d,%d,%dn”,d.year, d.month, d.day); func(&d); printf(“%d,%d,%dn”,d.year, d.month, d.day);上述程序运行的结果: 1999,4,23 2000,5,229、#includevoid fun1(int x)x=20;void fun2(int b4)int j; for(j=0; j4; j+) bj=j; main() int x = 10; int a4 = 1,2,3,4, k; fun1(x)
18、; printf(x = %dn, x); fun2(a); for(k=0; k4; k+) printf(%dn, ak);上述程序运行的结果: x=10 0 1 2 310、main()int a,b;for (a=1,b=1;a=20) break;if(b%3=1)b+=3;continue;b-=5; 程序的输出结果a的值为_7_.11、main()int i=10;switch(i)case 9: i+=1;case 10: i+=1;case 11: i+=1;default : i+=1;printf(“%d”,i);上述程序运行的结果: 13 12、a=3;a+=(a1)?
19、a:1; printf(“%d”,a);结果是_4_.13、 #includeint s();int x,y;main() int n; x=1;y=2 n=s(); printf(“x=%d,y=%d,n=%dn”,x,y,n);int s(); int z;x=3;y=4;z=x+y;return(z);上述程序运行的结果: x=3,y=4,n=7 14、#includestdio.h #includestring.h main() char*s1=engraft,*s2=engrave;while(*s1+=*s2+);printf(%d,strcmp(s1,s2);上述程序运行的结果:
20、 大于0的整数 /*当s1,s2指向a时,条件仍成立,继续指向f和v,条件不成立,但此时s1,s2再次指向下一位 te 结果得到大于0的整数15、main( ) int a5=2,4,6,8,10,*P,* *k;p=a; k=&p;printf(“%d,”,*(p+);printf(“%dn”,* *k); 程序的输出结果是_2,4_.四、程序改错题在下面给出的5个程序中,共有10处错误,请找出其中的错误,并改正之。注意不得增行或删行,也不得更改程序的结构;多找、少找、找错、改错均不得分!1、程序的功能是:程序中函数fun的功能是将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从
21、此文本文件中逐个读入并显示在终端屏幕上。#include void fun(char *s, int a, double f) file *fp; FILE *fp;char ch; fp = fopen(file1.txt, w); fprintf(fp, %s %d %fn, s, a, f); fclose(fp); fp = fopen(file1.txt, r); printf(nThe result :nn); ch = fgetc(fp); while (!feof(fp) putchar(fp); ch = fgetc(fp); putchar(ch);ch=fgetc(fp)
22、;putchar(n); fclose(fp); main() char a10=Hello!; int b=12345; double c= 98.76; fun(&a,&b,&c); fun(a,b,c); 2、 下面的程序是求500以内的所有的素数之和。请修改程序中的错误,使它能得出正确的结果,并给出正确结果。程序: #include #include #include int prime(int n) int yes, i; if(n=1) return 1; yes=1; for(i=2; i=sqrt(n); i+) if(n%i=0) yes=0; continue; * yes
23、=0;break; return 1; * return yes; main() int sum=0, i; clrscr(); for(i=2;i=500; i+) if(prime(i) sum+=i; printf(%dn, sum);3、序是求1,450之间同时满足除3余2和除5余3条件的数的个数。请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。程序: #include #include #include main()int count;int i;count=0;for (i=1;i=450;i+) if (fmod(i,3)=2 & fmod(i,5)=3)
24、 count+=i; * count+; clrscr();printf(%ldn,count); * printf(“%dn”,count);4、24有8个因子,而24正好被8整除。下面程序求50,250之间有多少个整数能被其因子的个数整除,请修改程序中的错误,使它能得出正确的结果,并给出正确结果,填入相应窗口。程序: #include #include #include main() int a,b,c,n,count=0; for (a=50; a=250; a+) b=0; for (c=1;c=a;c+) if (a%c =0 ) b+=c; * b+; if (a%b=0) cou
25、nt=count+a; * count+; printf(n count = %d,count);5、程序的功能是:输入一个整数k(2k10000),打印出它的所有质因子(即所有为素数的因子)。#include #include IsPrime(int n); int i, m;m = 1;for (i=2; in; i+)if !(n%i) if(n%i=0)m = 0;break;return(m);main()int j, k;printf(nplease enter an integer number between 2 and 10000:);scanf(%d, &k);printf
26、(nnThe prime factor(s) of %d is(are):, k);for (j=2; jk; j+)if (!(k%j) & (IsPrime(j) printf( %4d, j);printf(n);五、程序设计题1、求1!+3!+5!+7!+19!的和。long tm=1,sum=0;int i,j;for(i=1;i=19;i+=2) tm=1; for(j=1;j=i;j+)tm=tm*j;sum=sum+tm;printf(“totle=%dn”,sum);2、从键盘输入某学生的成绩(0score100)后,先输出该同学的成绩,再按下列条件 输出 int score
27、;printf(“please input the scoren”);doscanf(“%d”,&score);while(score100);if(score=80)printf(“%d Goodn”,score); else if(score=60)printf(“%d Passn”,score); else printf(“%d No passn”,score);3、试编程序,找出1至99之间的全部同构数。同构数是这样一组数:它出现在平方数的右边。例如:5是25右边的数,25是625右边的数,5和25都是同构数。int i,k;for(i=1;i=99;i+) if(i10)k=i*i%10; else k=i*i%100; if(i=k)printf(“%4d”,i); 1 5 6 25 764、用选择法或者冒泡法对10个整数排序(从大到小)。(选择算法)int s10=4,8,7,2,5,9,0,1,3,6;int i,j,k,t;for(i=0;i9;i+) k=i; for(j=i+1;jsk)k=j; t=sk;sk=ski;si=t;(冒泡算法)int s10=4,8,7,2,5,9,0,1,3,6;int i,j,t;for(i=0;i9;i+) for(j=0;j9-i;j+) if(sjsj+1) t=sj;sj=skj+1;sj+1=t; 第14 页