C语言程序设计习题与上机实验
(参考答案)
2008年3月30日
第一部分同步习题集
第1章C语言概述
一、判断题
1、正确
2、正确
3、错误
4、错误
二、单项选择题
1、B
2、B
3、A
4、A
5、D
6、C
7、D
8、C
三、填空题
1、/* */
2、函数首部、函数体
第2章算法
一、填空题
1、算法
2、算法、数据结构
3、自然语言、N-S结构图、伪代码
4、顺序结构、选择结构、循环结构
5、程序设计风格、程序结构、清晰的结构
第3章数据类型\运算符与表达式
一、单项选择题
1、D
2、D
3、D
4、D
5、B
6、AB
7、D
8、D
9、C 10、A
11、D 12、C 13、B 14、C 15、C 16、B 17、C
二、填空题
1、2;-32768~72767;4;4
2、1.0/2*(a*x+(a+x)/(4.0*a))
第4章最简单的C程序设计
一、单项选择题
1、B
2、B
3、D
4、C
5、A
6、D
7、D
二、填空题
1、;
2、{}
3、%
4、输入输出函数
三、写结果题
1、a
2、6,5
3、-6
4、11空格10
5、ch:dec=97;oct=141,hex=61,ASCII=a
6、修改题…printf(“%d,%d,%d,%d\n”,++i, j--, i++, --j); 结果为:7,4,5,4
四、程序填空题
1、%c
2、%.2f
3、(1) &x,&y (2) printf(“%d,%d”,x,y);
第5章逻辑运算和判断选择结构
一、单项选择题
1、C
2、A
3、D
4、D
5、B
6、D
7、B
8、B
9、C 10、D
11、C 12、C
二、写运行结果题
1、100
2、6
3、2
4、a=2,b=1
三、程序填空题
1、(1) x>y (2) u>z
2、(1)m= =’c’ (2) m= =’b’
3、(1)ch>=’A’ &&ch<=’Z’ (2) ch=ch-32
4、(1)x>2 && x<=10 (2) x>-1 && x<=2
四、编程题
1、
#include
main( )
{
int a, b, t;
printf(“Please input a,b:”);
scanf(“%d,%d”, &a, &b);
t = a; a = b; b = t;
printf(“a=%d,b=%d”, a, b);
}
2、编程实现以下功能:读入两个运算数(data1和data2)及一个运算符(op),计算表达式
data1 op data2的值,其中op可为‘+’,‘-’,‘*’,‘/’(用switch语句实现)。
#include
main( ) Array {
float data1, data2, result;
char op;
printf(“Please input express (data1 op data2) : ”
scanf(“%f%c%f”, &data1, &op, &data2);
switch (op)
{
case ‘+’: result = data1 + data2; break;
case ‘-’: result = data1 - data2; break;
case ‘*’: result = data1 * data2; break;
case ‘/’: result = data1 / data2; break;
default: printf(“Input error!”); exit(0);
}
Printf(“%g%c%g=%g”
}
3、试编程判断输入的正数是否既是5又是7的倍数。若是,则输出yes,否则输出no。
#include
main( )
{
int x ;
printf(“Please input x”);
scanf(“%d”, &x);
if(x >=0)
if(x %5= =0&& x %7= =0)
printf("yes");
else
printf("no");
else
printf(“Input data error!”);
4、
#include
main( )
{
float x, y ;
printf(“Please input x:”);
scanf(“%f”, &x);
if (x < 1)
y = x;
else if (x < 10)
y = 2 * x - 11;
else
y = 3 * x -11;
printf (“y=%g”, y);
}
5、
#include
main( )
{
char grade ;
float score;
printf(“POlease input grade:”);
scanf(“%c”, &grade);
switch (grade)
{
case ‘A’: case ‘a’: score = 95;break;
case ‘B’: case ‘b’: score = 85;break;
case ‘C’: case ‘c’: score = 75;break;
case ‘D’: case ‘d’: score = 65;break;
case ‘E’: case ‘e’: score = 50;break;
default: printf(“Input error!”); exit(0);
}
printf (“score=%f”, score);
}
第6章循环结构
一、判断题
1、错误
2、正确
3、正确
4、错误
5、正确
二、单项选择题
1、A
2、C
3、A
4、D
5、B
6、B
7、A
8、D
9、A 10、D
11、C 12、B 13、C 14、AC
三、写结果题
1、8,20
2、2581114
3、8
4、8
5、a=16 y=60
6、7 4
7、6 8、a=41 9、10、2,3 * #
1、①c!=’#’②c>=’0’ && c<=’9’
2、①t=t*i ②t=-t/i
3、①i<10 ②10*i+5
4、①i 5、①inword=0②inword=1 五、编程题 1、 #include main( ) { float max, min, score, average; int i; printf(“Please input score:”); scanf(“%f”, &score); max = min = average = score; for ( i=1; i <= 34; i++) { printf(“Please input score:”); scanf(“%f”, &score); if (score < min ) min =score; if (score > max ) max =score; average + = score; } average /= 35.0; printf(“max=%g,min=%g,average=%g”, max,. min, average); } 2、 #include main( ) { int a, b, r, temp; printf(“Please input a,b”); scanf(“%d,%d”, &a, &b); while ( a<=0 || b<=0) { printf(“Try again: ”); scanf(“%d,%d”, &a, &b); } if (a < b) { r = a; a = b; b = r;} temp = a * b; while (b != 0) { r = a % b; a = b ; b = r; } printf(“最大公约数=%d, 最小公倍数=%d”, a , temp / a); } 第7章数组 一、单项选择题 1、C 2、D 3、C 4、C 5、C 6、C 7、D 8、D 9、C 10、B 11、C 12、B 13、C 14、D 15、A 二、写结果题 1、3 2、he 3、AHaMA 4、How does she 5、 三、程序填空题 1、①a[9]=x ②i<9 2、①k=i ② k != i 3、① x !=0 ② t+’0’ 4、①strlen(t) ② t[k] = = c 5、①b[j]!=’\0’ ② a[i]=’\0’ 四、编程题 1、 #include #define N 10 main( ) { int a[N], temp, i; for (i = 0 ; i < N; i++) { printf(“Please input NO %d:”, i+1); scanf(“%d ”, &a[i]); } for (i = 0 ; i <= N/2 -1; i++) { temp = a[i];a[i]=a[N-i-1];a[N-i-1]=temp; } for (i = 0 ; i < N; i++) printf(“%3d ”, a[i]); } 2、输出杨辉三角形前十行。 #include #define N 10 main( ) { int a[N][N]; int i, j; for (i = 0 ; i < N; i++) { a[i][i] = 1; a[i][0] = 1; } for (i = 1 ; i < N; i++) for (j = 1 ; j <= i; j++) a[i][j]=a[i-1][j-1]+a[i-1][j]; for (i = 0 ; i < N; i++) { for (j = 0 ; j <= i; j++) printf(“%5d ”, a[i][j]); printf(”\n ”); } FGH KL 第8章 函数 一、单项选择题 1、D 中加一句z=x+y; 2、选D(题不严密) 3、D 4、A 5、B 6、D 7、B 8、A 9、B 10、D 11、A 12、A 13、B 14、CD 15、A 二、写结果题 1、8 2、4 3、 4、5 三、程序填空题 1、①float fun(float a, float b); 或float fun(float , float ); ②x+y, x-y ③z+y, z-y 2、①i <= 10 ② array[i-1] ③ return avgr 3、①j=num-1 ② array[i]< array[i+1] 4、①t*i ② s+factor(k) 5、① l>h ② s, l+1, h-1 四、编程题 1、 int prime(int x) { int i; int flag=1; for(i=2;i if (x%i ==0) { flag=0; break; } return(flag); } main() { int x, y; printf(“Please input x:”); scanf(“%d ”, &x); y=prime(x); if (y==1) printf("%d is prime!", x); else printf("%d is not prime!", x); } 2、 #include long fun(char str[]); main() i=5 i=2 i=2 i=4 i=2 char datastring[10]; long data; printf(“Please input data string:”); scanf(“%s ”, datastring); data=fun(datastring); printf("output number\n"); printf("%ld", data); } long fun(char str[]) { int i; long data; data=0; for(i=0;str[i]!='\0';i++) data=data*10+(str[i]-'0'); return data; } 第9章 编译预处理 一、单项选择题 1、C 2、B 3、D 4、D 5、B 6、B 7、D 8、D 二、判断题 1、错误 2、正确 3、正确 4、正确 5、错误 6、正确 三、编程题 1、求面积 #include #include #define S(a,b,c) (( (a)+(b)+(c) ) /2.0 ) #define AREA(a,b,c) sqrt(S(a,b,c)*( S(a,b,c)-a) *( S(a,b,c)-b) *( S(a,b,c)-c)) main( ) { double a, b, c, area; printf(“Please input a,b,c:”); scanf (“%lf, %lf, %lf”, &a, &b, &c); area=AREA(a,b,c); printf(“area=%lg”,are a); } 第10章 指针 一、单项选择题 1、B 2、B 3、D (??) 4、D 5、B 6、C 7、D 8、B 9、CD 10、D 11、B 12、C 13、D 14、D 15、C 16、B 17、A 18、D 二、写结果题 1、19 2、60 3、 4、49 5、GOOGLE 6、-2 7、Excute right! 8、xyzabc 9、4321 3 5 5 3 1、①*max=i ②a,7, &max, &min 2、①*p!=’\0’②*p-‘0’③j-->0 3、①s+n-1或p1+n-1 ②p2-- 4、①s1++②*s2③s1=p或puts(p)或return 5、①*q ②str[k]或*(str+k) 四、编程题 1、 #include void swap(int *p1,int *p2) { int t; t= *p1;*p1=*p2;*p2=t; } main() { int a, b; printf(“Please input a,b:”); scanf(“%d,%d”, &a, &b); swap(&a,&b); printf(“a=%d,b=%d”,a,b); } 2、 #include int strlength(char *p) { char *s=p; while(*p) p++; return p-s; } main() { char str[81]; printf(“Please input string:”); gets(str); printf(“length=%d”,strlength(str)); } 第11章结构体和共用体 一、单项选择题 1、A 2、A 3、D 4、D 5、A 6、D 7、D 8、D 9、C 10、B 11、B 12、C 13、A(不严密) 二、写结果题 1、Zhao 2、7,3 3、9 三、程序填空题 1、①p->link ②p!=NULL或p 四、编程题 #include #define N 5 struct student { long num; char name[20]; float score[3]; }; void input(struct student w[], int n); void output(struct student w[], int n); main() { struct student st[N]; int n; printf("Please input the number of worker(<10):"); scanf("%d", &n); input(st, n); output(st, n); } void input(struct student w[], int n) { int i, j; float temp; for(i=0;i { printf("Please input NO %d\n", i+1); printf("Num:"); scanf("%ld",&w[i].num); getchar(); printf("name:"); gets(w[i].name); for (j=0; j < 3; j++) { printf(“Score[%d]=”, j); scanf("%f",& temp ); w[i].score[j] = temp; } } } void output(struct student w[], int n) { int i, j; for(i=0;i { printf("Num:"); printf("%ld",w[i].num); printf("\nname:"); puts(w[i].name); printf("score:"); for (j=0; j < 3; j++) printf("%g ", w[i].score[j]); } } 第12章 位运算 一、单项选择题 1、C 2、B 3、D 4、B 5、0x13(无答案) 6、A 7、A 8、B 二、写结果题 1、108,-2 2、0 3、a=89 4、 第13章 文件 一、单项选择题 1、A 2、D 3、B 4、B 5、A 6、A 7、C 8、C 9、A 10、D 二、程序填空题 1、①fgetc(fp) ②count++ 2、①fname 3、①EOF ②ch, stdout 4、①f2=fopen(argv[2] ②fgetc(f1),f2 5、① ”stu_list ”, ”wb ” ②&stud[i],sizeof(struct student_type),1 三、编程题 1、 #include main() { FILE *fp; char str[255]; int i ; if ((fp=fopen(“d:\\test.txt ”,”r ”))==NULL) { printf(“Open error!”); exit(0); } for (i=1;i<=7;i++) { fgets(str,255,fp); printf(“%s ”, str); } fclose(fp); x=11 y=17 z=11 2、 #include main(int argc , char *argv[]) { FILE *fp1,*fp2; if(argc!=3) { printf("you forgot to enter a filename\n"); exit(0); } if ((fp1=fopen(argv[1],”r”))==NULL) { printf(“Open argument1 file error!”); exit(0); } if ((fp2=fopen(argv[2],”a”))==NULL) { printf(“Open argument2 file error!”); exit(0); } while (!feof(fp1)) fputc(fgetc(fp1),fp2); fclose(fp1); fclose(fp2); } 3、将指定的文本文件中的小写字母改为大写字母。 #include main() { FILE *fp; char filename[81]; char ch; long pos; printf("Please input filename:"); gets(filename); if ((fp=fopen(filename,"r+"))==NULL) { printf("Open error!"); exit(0); } pos=0; while (!feof(fp)) { ch=fgetc(fp); if (ch>='a' && ch<='z') { ch = ch -32; fseek(fp,pos,0); fputc(ch,fp); } pos++; } fclose(fp); } 4、将100~200之间的素数保存到A盘根目录的“test.txt”文本文件中。(每行存5个数,每个数占10列) include main() { FILE *fp; char str[255]; int i, j, count; ; if ((fp=fopen("a:\\test.txt","w"))==NULL) { printf("Open error!"); exit(0); } count = 0; for ( i = 100;i<=200; i++) { for(j = 2; j <= i-1; j++) if (i % j == 0) break; if (j == i ) { count++; fprintf(fp,"%10d", i); if (count % 5 ==0 ) fprintf(fp,"%c", '\n'); } } fclose(fp); } 5、将平均成绩不及格的学生数据保存到A盘的根目录的文件“stud.dat”中。 #include #define N 50 struct student long num; char name[20]; float score[3]; float average; }; void input(struct student w[], int n); void save(struct student w[], int n); main() { struct student st[N]; int n; printf("Please input the number of worker(<10):"); scanf("%d", &n); input(st, n); save(st, n); } void input(struct student w[], int n) { int i, j; float temp; for(i=0;i { printf("Please input NO %d\n", i+1); printf("Num:"); scanf("%ld",&w[i].num); getchar(); printf("name:"); gets(w[i].name); w[i].average = 0; for (j=0; j < 3; j++) { printf("Score[%d]=", j); scanf("%f",& temp ); w[i].score[j] = temp; w[i].average= w[i].average+ w[i].score[j]; } w[i].average = w[i].average / 3.0; } } void save(struct student w[], int n) { FILE *fp; int i; if ((fp=fopen("a:\\stud.dat","wb"))==NULL) printf("Open error!"); exit(0); } for(i=0;i { if (w[i].average < 60) fwrite(&w[i],sizeof(struct student),1,fp); } fclose(fp); } 第二部分综合练习与提高 第3章数据类型、运算符与表达式 一、单项选择题 1-5 CABCD 6-10 BDBBC 11 B 二、填空题 1、(3*a*e)/(b*c) 2、3.5 3、x*x*x*x*x*x-2*x*x*x*x*x+3*x*x*x*x+4*x*x*x-5*x*x+6*x+7 第4章最简单的C程序设计 一、单项选择题 1-4 BCDB 二、填空题 1、a=3 b=7 8.5 71.82 A a 2、a=12345,b=-198.34□□□,c=□□6.5(□表示空格) 3、a=2, b=-1 4、3 3 第5章逻辑运算和判断选择结构 一、单项选择题 1-5 DACBA 6-10 DBBBA 11-14 DBCA 二、读程序写结果 1、0 2、1 0 3、2 4、a=-1 5、*& 三、程序填空题 1、x 2、c 3、x>2&&x<=10 x>-1&&x<=2 4、x= =a || x= =-a x>-a && x 5、a= =0 disc<0 6、(y%4= =0)&&(y%100!=0) f=0 7、x<0 x/10 x<40 四、编程题 1、# include void main() { int n=0; float score=0, max, min, sum=0, average=0; printf("input NO.%d score: ", ++n); scanf("%f",&score); max=min=score; while( n<=3 ) { if(score>max) max=score;