《C语言程序设计习题集》由会员分享,可在线阅读,更多相关《C语言程序设计习题集(171页珍藏版)》请在金锄头文库上搜索。
1、C C C C程序设计习题程序设计习题程序设计习题程序设计习题9/7/20241C C语言程序设计习题语言程序设计习题第一章第一章 程序设计基本概念程序设计基本概念 第二章第二章 C C程序设计的初步知识程序设计的初步知识 第三章第三章 顺序结构顺序结构 第四章第四章 选择结构选择结构 第五章第五章 循环结构循环结构 第六章第六章 字符型数据字符型数据 第七章第七章 函数函数 第八章第八章 指针指针 9/7/20242C C语言程序设计习题语言程序设计习题第九章第九章 数组数组 第十章第十章 字符串字符串 第十一章第十一章 对函数的进一步讨论对函数的进一步讨论第十二章第十二章 C C语言中标识
2、符的作用域语言中标识符的作用域 和存储类和存储类第十三章第十三章 编译预处理和动态存储分配编译预处理和动态存储分配第十四章第十四章 结构体、共用体和用户定义类型结构体、共用体和用户定义类型 第十五章第十五章 位运算位运算 第十六章第十六章 文件文件 9/7/20243 1.2 C语言源程序文件的后缀是语言源程序文件的后缀是 _, 经过编译经过编译后后, 生成文件的后缀是生成文件的后缀是 _,经过连接后,经过连接后, 生成文生成文件的后缀是件的后缀是_。 第一章第一章 程序设计基本概念程序设计基本概念 1.1 在在TURBO C环境中用环境中用RUN命令运行一个命令运行一个C程程序时,所运行的程
3、序的后缀是序时,所运行的程序的后缀是 。.EXE1.3 结构化程序由结构化程序由 、 和和 三三种基本结构组成种基本结构组成 。.C.OBJ.EXE顺序顺序选择(分支)选择(分支)循环循环9/7/20244第二章第二章 C程序设计的初步知识程序设计的初步知识 一一 、 选选 择择 题题 2.1 以下选项中正确的整型常量是以下选项中正确的整型常量是 。A) 12. B) -20 C) 1,000 D) 4 5 62.2 以下选项中正确的实型常量是以下选项中正确的实型常量是 A) 0 B) 3. 1415 C) 0.329*102 D).8712.3 以下选项中不正确的实型常量是以下选项中不正确的
4、实型常量是A) 2.607E-1 B) 0.8103e 2 C) -77.77 D) 456e-22.4 以下选项中不合法的用户标识符是以下选项中不合法的用户标识符是A) abc.c B) file C) Main D) PRINTF2.5 以下选项中不合法的用户标识符是以下选项中不合法的用户标识符是A) _123 B) printf C) A$ D) Dim9/7/202452.6 C语言中运算对象必需是整型的运算符是语言中运算对象必需是整型的运算符是 A) % B) / C) ! D) *2.7 可在可在C程序中用作用户标识符的一组标识符是程序中用作用户标识符的一组标识符是 A) void
5、 B) as_b3 C) For D) 2c define _123 -abc DO WORD If case SIG关键字关键字不能有不能有- -数字开头数字开头2.8 若变量已正确定义并赋值,符合若变量已正确定义并赋值,符合C语言语法的表达式语言语法的表达式是是A)a=a+7; B)a=7+b+c,a+ C)int(12.3%4) D)a=a+7=c+b语句,不是表达式语句,不是表达式要求整型数要求整型数号前是变量号前是变量9/7/202462.10 以下叙述中正确的是以下叙述中正确的是)在)在C程序中无论整数还是实数,只要在允许的范围内程序中无论整数还是实数,只要在允许的范围内都能准确无
6、误的表示。都能准确无误的表示。)C程序由主函数组成。程序由主函数组成。)C程序由函数组成。程序由函数组成。)C程序由函数和过程组成。程序由函数和过程组成。2.9以下叙述中正确的是以下叙述中正确的是)a是实型变量,是实型变量,C允许进行以下赋值允许进行以下赋值a=10,因此可,因此可以这样说:实型变量允许赋值整型值。以这样说:实型变量允许赋值整型值。)在赋值表达式中,赋值号左边既可以是变量也可以)在赋值表达式中,赋值号左边既可以是变量也可以是任意表达式。是任意表达式。)执行表达式)执行表达式a=b后,在内存中后,在内存中a 和和 b存储单元中的原存储单元中的原有值都将被改变,有值都将被改变,a的
7、值已由原值改变为的值已由原值改变为b 的值,的值, b 的值由的值由原值变为原值变为0。)已有)已有a=3,b=5。当执行了表达式。当执行了表达式 a=b ,b=a 之后,之后,已使已使a 中的值为中的值为5,b 中的值为中的值为3。9/7/202472.11 TURBO C中中int 类型变量所占字节数是类型变量所占字节数是A)1 B)2 C)3 D)4 2.12 不合法的八进制数是不合法的八进制数是A)0 B)028 C)077 D)012.13 不合法的十六进制数是不合法的十六进制数是A)oxff B)0Xabc C)0x11 D)0x19二、填空题二、填空题2.14 若若k为为int整
8、型变量且赋值整型变量且赋值11。请写出运算。请写出运算k+后表达后表达式的值式的值A)_和变量和变量k的值的值B)_。2.15 若若x为为double型变量,请写出运算型变量,请写出运算x=3.2,+x后表达式的后表达式的值值A)_和变量和变量x的值的值B)_。11129/7/202482.16 函数体由符号函数体由符号_开始,用符号开始,用符号_结束。函数体的结束。函数体的前面是前面是部分,其后是部分,其后是部分。部分。2.17 C语言中的标识符可分为语言中的标识符可分为_、和预、和预定义标识符三类。定义标识符三类。2.18 在在C语言程序中,用关键字语言程序中,用关键字_定义基本整型变定义
9、基本整型变量,用关键字量,用关键字_定义单精度实型变量,用关键字定义单精度实型变量,用关键字_定义双精度实型变量。定义双精度实型变量。2.19 把把a1、a2定义成单精度实型变量,并赋初值定义成单精度实型变量,并赋初值1的的定义语句是定义语句是 。2.20 C程序中定义的变量,代表内存中的一个程序中定义的变量,代表内存中的一个 。定义说明定义说明执行语句执行语句关键字关键字用户标识符用户标识符intfloatdoublefloat a=1,b=1;不能用不能用float a=b=1;存储单元存储单元9/7/202492.21 表达式表达式3.5+1/2的计算结果是的计算结果是_。2.22 对以
10、下数学式,写出三个等价的对以下数学式,写出三个等价的C语言表达式语言表达式_、 、 。 abb c c 2.23 表达式表达式s=10应当读做应当读做“_”。2.24 计算机中内存储器的最小存储单位称计算机中内存储器的最小存储单位称_,其中,其中能容纳的数是能容纳的数是_。2.25 通常一个字节包含通常一个字节包含_个二进制位。在一个字节中个二进制位。在一个字节中能存放的最大能存放的最大(十进制十进制)整数是整数是_,它的二进制数的形式是,它的二进制数的形式是_;最小;最小(十进制十进制)整数是整数是_,它的二进制数,它的二进制数的形式是的形式是_。.不是4.5!a*b/ca/c*bb/c*a
11、条件:a,b,c是实数是实数S赋值为赋值为10bit(位)(位)12712701111111-128-12810000000(补码)(补码)9/7/2024102.27 在在C语言中整数可用语言中整数可用_进制数、进制数、_进制数和进制数和_进制数三种数制表示。进制数三种数制表示。2.26 当计算机用两个字节存放一个整数时,其中能存放的最当计算机用两个字节存放一个整数时,其中能存放的最大大(十进制十进制)整数是整数是_、最小、最小(十进制十进制)整数是整数是_,它的,它的二进制数的形式是二进制数的形式是 。32767-3276810816三、上机改错题三、上机改错题(读者最好在读者最好在TUR
12、BO C环境下上机试环境下上机试一试,以便熟悉出错信息一试,以便熟悉出错信息)。2.28 请指出以下请指出以下C程序的错误所在程序的错误所在#include stdio.h ;main( ); /* main function */ float r,s; /*/*r is radius*/,/*s is area of circular*/*/ r=5.0; s=3.14159*r*r; printf(“ %fn”,s)“”运行结果:运行结果:9/7/2024112.29 请指出以下请指出以下C程序的错误所在程序的错误所在#include stdio.h main /*main functio
13、n*/ float a,b,c,v; /*a,b,c are sides, v is volume of cube*/ v=a*b*c; printf(“ %fn” ,v) ( );运行结果:运行结果:【2-28】(正确)#include “stdio.h”main() /* main function */ float r,s; /* r is radius, s is area of circular */ r=5.0; s=3.14159*r*r; printf(%fn,s); 9/7/202412【2-29-2】(正确)#include main() /* main function
14、*/ float a,b,c,v; /* a,b,c are sides, v is volume of cube */ a=2.0; b=3.0; c=4.0; v=a*b*c; printf(%fn,v);9/7/202413第三章第三章 顺序结构顺序结构 一、选择题一、选择题 3.1 3.1 若若a a、b b、c c、d d、都是、都是intint类型变量且初值为类型变量且初值为0 0,以下选项中不,以下选项中不正确的赋值语句是正确的赋值语句是 。A) a=b=c=d=100A) a=b=c=d=100; B) d+; C) c+b B) d+; C) c+b; D) d=(c=22)
15、-(b+); D) d=(c=22)-(b+);3.2 以下选项中不是以下选项中不是C语句的是语句的是 。A) int i; i+; printf(“%dn”,i); B) ; C) a=5,c=10 D) ; 3.3 以下合法的以下合法的C语言赋值语句是语言赋值语句是 。A) a=b=58 B) k=int(a+b); C) a=58,b=58 D) -i;3.4 以下程序的输出结果是以下程序的输出结果是 。A) 0 B) 1 C) 3 D) 不确定的值不确定的值 main( ) int x=10, y=3; printf(“%dn”,y=x/y); 应为应为(int)(a+b);9/7/2
16、024143.5 若变量已正确说明为若变量已正确说明为int类型,要给类型,要给a、b、c输入数据,以输入数据,以下正确的输入语句是下正确的输入语句是 。A)read(a,b,c); B)scanf(“ %d%d%d” ,a,b,c);C)scanf(“ %D%D%D” ,&a,%b,%c);D)scanf(“ %d%d%d”,&a,&b,&c);3.6 若变量已正确说明为若变量已正确说明为float类型,要通过以下赋值语句给类型,要通过以下赋值语句给a赋予赋予10、b赋予赋予22、c赋予赋予33,以下不正确的输入形式是,以下不正确的输入形式是。A)10 B)10.0,22.0,33.0 C)
17、10.0 D)10 22 22 22.0 33.0 33 33 scanf(“ %f %f %f” ,&a,&b,&c);3.7 若变量已正确定义,要将若变量已正确定义,要将a和和b中的数进行交换,下面不中的数进行交换,下面不正确的语句组是正确的语句组是。A)a=a+b,b=a-b,a=a-b; B)t=a,a=b,b=t; C)a=t;t=b;b=a; D)t=b;b=a;a=t;9/7/2024153.8 若变量已正确定义,以下程序段的输出结果是若变量已正确定义,以下程序段的输出结果是。) 输出格式说明与输出项不区配,输出无定值输出格式说明与输出项不区配,输出无定值 B ) x=5.168
18、94; printf(“ %fn”,(int)(x*1000+0.5)/(float)1000);3.9 若有以下程序段,若有以下程序段,c3中的值是中的值是 。 A) 0 B) 1/2 C) 0.5 D) 1 int c1=1,c2=2,c3; c3=c1/c2;3.10 若有以下程序段若有以下程序段 ,其输出结果是,其输出结果是A)0,0,-10 B)0,0,5 C)-10,3,-10 D)3,0,-10int a=0,b=0,c=0;c=(a-=a-5),(a=b,b+3); printf(“ %d,%d,%dn”,a,b,c); (int)(x*1000+0.5)= (int)(516
19、9.44)= 51699/7/2024163.11 当运行以下程序时,在键盘上从第一列开始输入当运行以下程序时,在键盘上从第一列开始输入9876543210(此处此处代表代表Enter),则程序的输出结果是,则程序的输出结果是。A)a=98,b=765,c=4321 B)a=10,b=432,c=8765C)a=98,b=765.000000,c=4321.000000 D)main() int a; float b,c; scanf(“ %2d%3f%4f”,&a,&b,&c); printf(“ na=%d,b=%f,c=%fn”,a,b,c);3.12 以下程序的输出结果是以下程序的输出
20、结果是A)a=%2,b=%5 B)a=2,b=5C)a=%d,b=%d D)a=%d,b=%dmain( )int a=2,b=5;printf(“a=%d,b=%dn”,a,b);输出输出9/7/2024173.13 若若int类型占两个字节,则以下程序段的输出是类型占两个字节,则以下程序段的输出是。A)-1,-1 B)-1,32767 C)-1,32768 D)-1,65535int a=-1; printf(“ %d,%un”,a,a);- -补码:补码:3.14 以下程序段的输出是以下程序段的输出是 A) *496 * B) * 496* C) *000496* D) 输出格式符不合法
21、输出格式符不合法 int x=496; Printf(“ *%-06d*n”,x);“*%06d*n”“*%06d*n”:输出输出*000496*3.15 以下程序段的输出是以下程序段的输出是 A)|3.1415| B)| 3.0| C)| 3| D)| 3.| float a=3.1415; Printf(“ |%6.0f|n”,a);3.16 以下程序段的输出是以下程序段的输出是 A) |2345.67800| B) |12345.6780| C) |12345.67800| D) |12345.678| printf(“ |%10.5f|n”,12345.678);突破场宽!突破场宽!9
22、/7/2024183.17 以下程序段的输出是以下程序段的输出是A)*0000057.66* B)* 57.66* C)*0000057.67* D)* 57.67*float a=57.666;pirntf(“ %010.2fn”,a);3.18若从终端输入以下数据,要给变量若从终端输入以下数据,要给变量c赋以,则正确的输入语赋以,则正确的输入语句是句是 A) scanf(“ %f”,&c); B) scanf(“ %8.4f”,&c); C) scanf (“ %6.2f”,&c); D) scanf(“ %8”,&c); 283.1900scanf中禁用中禁用”%*.*f”!赋予,赋予,
23、b赋予、给赋予、给a若变量已正确说明,要求用以下语句给若变量已正确说明,要求用以下语句给3.19 (则正确的输入形式是则正确的输入形式是 )代表空格代表空格 A) 3.12 9.0 B) a= 3.12b= 9 C) a=3.12,b=9 D) a=3.12 ,b=9 scanf(“ a=%f,b=%f”,&a,&b);9/7/2024193.20 以下程序的输出结果是以下程序的输出结果是 A) 9 8 B) 8 9 C) 6 6 D) 以上三个都不对以上三个都不对#include “ math.h”main( ) double a=-3.0,b=2; printf(“ %3.0f %3.0f
24、n”,pow(b,fabs(a),pow(fabs(a),b);2|-3| , |-3|2二、填空题二、填空题3.21 若有以下定义,请写出以下程序段中输出语句执行后的若有以下定义,请写出以下程序段中输出语句执行后的输出结果。输出结果。(1)_ (2) (3)_int i=-200,j=2500;printf(“ (1) %d %d”,i,j);printf(“ (2) i=%d,j=%dn” ,i,j);printf(“ (3) i=%dn j=%dn”,i,j);-200 2500-200 2500i=-200, j=2500i=-200, j=2500i=-200i=-200j=2500
25、j=25009/7/2024203.22 变量变量i、j、k已定义为已定义为int类型并有初值类型并有初值0,用以下语句进行,用以下语句进行输入时输入时:scanf(“ %d”,&i); scanf(“ %d”,&j); scanf(“ %d” ,&k);当执行第一个输入语句,从键盘输入:当执行第一个输入语句,从键盘输入: 12.3 表示表示Enter键键则变量则变量i、j、k的值分别是的值分别是_、_、_。12003.23 复合语句在语法上被认为是复合语句在语法上被认为是_。空语句的形式是。空语句的形式是 。一条语句一条语句;3.24 C语句的最后用语句的最后用_结束。结束。;3.25 以下
26、程序段,要求通过以下程序段,要求通过scanf语句给变量赋值,然后输出变语句给变量赋值,然后输出变量的值。写出运行时给量的值。写出运行时给k输入输入100,给,给a输入,给输入,给x输入输入1.89234 时的时的三种可能的输入形式三种可能的输入形式_、_、_。int k; float a; double x; scanf(“ %d%f%lf”,&k,&a,&x);pirntf(“ k=%d,a=%f,x=%fn”,k,a,x);1001001001009/7/2024213.26 以下程序段的输出结果是以下程序段的输出结果是 。 int x=0177; printf(“ x=%3d,x=%6
27、d,x=%6o,x=%6x,x=%6un”,x,x,x,x,x);x=(0177)8=127=(0000000001111111)2=(007F)16x=127,x= 127,x= 177,x= 7F, x= 1273.27 以下程序段的输出结果是以下程序段的输出结果是。 int x=0177; printf(“ x=%-3d, x=%-6d,x=$%-06d, x=$%06d,x=%06dn”,x,x,x,x,x); x=127,x=127 ,x=$127 ,x=$000127, x=%06d3.28 以下程序段的输出结果是以下程序段的输出结果是 。 double a=513.789215;
28、 printf(“ a=%8.6f,a=%8.2f,a=%14.8f,a=%14.8lfn”,a,a,a,a);a=,a= 513.79 ,a= ,a= 9/7/202422三、编程题和改错题三、编程题和改错题3.29 以下程序多处有错。要按下面指定的形式输入数据和输以下程序多处有错。要按下面指定的形式输入数据和输出数据时,请对该程序做相应的修改。出数据时,请对该程序做相应的修改。main double a,b,c,s,v; printf(input a,b,c:n); scanf(“%d%d%d”,a,b,c); s=a*b; /*计算长方形面积*/ v=a*b*c; /*计算长方体体积*/
29、 printf(“%d %d %d”,a,b,c); printf(“s=%fn”,s,”v=%dn”,v); 当程序执行时,屏幕的显示和要求输入形式如下:当程序执行时,屏幕的显示和要求输入形式如下: input a,b,c:2.0 2.0 3.0 此处的此处的2.0 是用户输入的数据是用户输入的数据 a=2.000000,b=2.000000,c=3.000000 此处是要求的输出形式此处是要求的输出形式 9/7/202423【3-293-29】( (正确正确) )mainmain( )( ) floatfloat a,b,c,s,v;a,b,c,s,v; printf(printf( in
30、put a,b,cinput a,b,c: : ); ); scanf(% scanf(%f f %f f % %f f:,:,& &a a, ,& &b b, ,& &c);c); s=a*b;s=a*b; v=a*b*c; v=a*b*c; printf(printf(a=a=%f,b=f,b=%f,c=f,c=%fnfn,a,b,a,b,c);c); printf(s=%f,v=%fn, printf(s=%f,v=%fn,s,vs,v); ); 【3-293-29】( (错误错误) ) mainmain double a,b,c,s,v; double a,b,c,s,v; print
31、f(input a,b,c:n); printf(input a,b,c:n); scanf(“%d%d%d”,a,b,c); scanf(“%d%d%d”,a,b,c); s=a*b; s=a*b; v=a*b*c; v=a*b*c; printf(“%d %d %d”,a,b,c); printf(“%d %d %d”,a,b,c); printf(“s=%fn”,s,printf(“s=%fn”,s,“v=%dn”,v); “v=%dn”,v); 当程序执行时,屏幕的显示和要当程序执行时,屏幕的显示和要求输入形式如下:求输入形式如下: input a,b,c:2.0 2.0 3.0 此处
32、的此处的2.0 是用户输入的数据是用户输入的数据 a=2.000000,b=2.000000,c=3.000000 此处是要求的输出形式此处是要求的输出形式 9/7/2024243.30 编写程序,把编写程序,把560分钟换算成用小时和分钟表示,然后进分钟换算成用小时和分钟表示,然后进行输出。行输出。【参考答案】【参考答案】main(main() ) int h,m;int h,m; h=560/60;h=560/60; m=560%60; m=560%60; printf(%dh:%dm,h,m);printf(%dh:%dm,h,m); getch(getch(); ); 3.31 编写程
33、序,输入两个整数:编写程序,输入两个整数:1500和和350,求出它们的商数,求出它们的商数和余数并进行输出。和余数并进行输出。【参考答案】【参考答案】main() int m,n; printf(input m & n:); scanf(%d%d,&m,&n); printf(“n%d,%dn”,m/n,m%n); getch();9/7/2024253.32 编写程序,读入三个双精度数,求它们的平均编写程序,读入三个双精度数,求它们的平均值并保留此平均值小数后一位数,对小数点后第二位数值并保留此平均值小数后一位数,对小数点后第二位数进行四舍五入,最后输出结果。进行四舍五入,最后输出结果。【
34、参考答案】【参考答案】main(main() ) double x,y,z,s; double x,y,z,s; printf(input x,y,z: ); printf(input x,y,z: ); scanf(%lf%lf%lf,&x,&y,&z); scanf(%lf%lf%lf,&x,&y,&z); s=(x+y+z)/3.0; s=(x+y+z)/3.0; printf(nAverage=%6.1lfn,s); printf(nAverage=%6.1lfn,s); getch( getch(););9/7/2024263.33 编写程序,读入三个整数给编写程序,读入三个整数给a
35、、b、c,然后交换它们中,然后交换它们中的数,把的数,把a中原来的值给中原来的值给b,把,把b中原来的值给中原来的值给c, 把把c中原来的中原来的值给值给 a。【参考答案】【参考答案】main(main() ) int a,b,c,t; int a,b,c,t; printf(Input a,b,c: ); printf(Input a,b,c: ); scanf(%d%d%d,&a,&b,&c); scanf(%d%d%d,&a,&b,&c); t=c; t=c; c=b; c=b; b=a; b=a; a=t; a=t; printf(na,b,c=%d,%d,%dn,a,b,c); pr
36、intf(na,b,c=%d,%d,%dn,a,b,c); getch( getch(); ); 9/7/202427第四章第四章 选择结构选择结构一、选择题一、选择题一、选择题一、选择题4.1 4.1 下列运算符中优先级最高的运算符是下列运算符中优先级最高的运算符是A A)!)! B B)% % C)-= C)-= D)&D)&单目运单目运算符算符4.2 下列运算符中优先级最低的运算符是下列运算符中优先级最低的运算符是 A)| B)!= C) =y=z, 应使用的应使用的C语言表达式是语言表达式是 A) (x=y)&(y=z) B) (x=y)AND (y=z) C) (x=y=z) D)
37、(x=y)&(y=z)4.4 设设 a、b 和和c 都是都是int 型变量,且型变量,且a =3,b=4, c=5;则以下;则以下的表达式中,值为的表达式中,值为0的表达式是的表达式是 A) a&b B) a=b C) a|b+c&b-c D) !(ab)&!c|1)9/7/2024284.5 以下程序的输出结果是:以下程序的输出结果是: A) 0 B) 1 C) 2 D) 3 main( ) int a=2,b=-1,c=2; if (ab) if (b0) c=0; else c+=1; printf(“%dn”,c); 4.6 以下程序的输出结果是以下程序的输出结果是: A) 1 B)
38、2 C) 3 D) 4 main( ) int w=4,x=3,y=2,z=1; printf(“%dn”,(wx?w:zy?z:x); z9/7/2024294.7 若执行以下程序时从键盘上输入若执行以下程序时从键盘上输入3和和4,则输出结果是,则输出结果是 A)14 B)16 C)18 D)20 main( ) int a, b,s; scanf(“%d%d”,&a,&b); s=a; if (ab) s=b; s*=s; printf(“%dn”,s); 341644.8 下面的程序片段所表示的数学函数关系是下面的程序片段所表示的数学函数关系是 。 -1(x0) 1(x0) 0(x0)
39、0(x0) -1(x0) 0(x0)y=-1;if (x!=0)y=1; if (x0) y=1; else y=0;9/7/2024304.9 4.9 运行以下程序后,输出运行以下程序后,输出 A)# B)& A)# B)& C)#& D) C)#& D)有语法错误不能通过编译有语法错误不能通过编译 main( ) main( ) int k=-3; int k=-3; if (k=0) printf(“*n”) if (k=0) printf(“*n”) else printf(“&n”) else printf(“&n”); ;9/7/2024314.10 若若a和和b均是正整数型变量,
40、以下正确的均是正整数型变量,以下正确的switch语句是语句是。)switch ( pow(a,2)+pow(b,2) (注:调用求幂的数学函数注:调用求幂的数学函数) case 1: case 3: y=a+b; break ; case 0: case 5: y=a-b; )switch (a*a+b*b); case 3: case 1: y=a+b; break ; case 0: y=b-a; break; )switch a default : x=a+b; case 10 : y=a-b;break; case 11 : y=a*d; break; )switch(a+b) ca
41、se10: x=a+b; break; case11: y=a-b; break; 缺少圆括号缺少圆括号缺少空格缺少空格9/7/202432二、二、二、二、 填空题填空题填空题填空题4.11 C语言中用语言中用_表示逻辑值表示逻辑值“真真”,用,用_表示逻辑值表示逻辑值“假假”。非零非零零零4.12 C语言中的关系运算符按优先级别是语言中的关系运算符按优先级别是 、_。,=,=,!= =,!= 4.13 C语言中的逻辑运算符按优先级别是语言中的逻辑运算符按优先级别是_、 _ 、_。! !&|4.14 C语言中的关系运算符和逻辑运算符的优先级别是语言中的关系运算符和逻辑运算符的优先级别是 _、_
42、、_、_。! !&|,=,=,!= =,!= 4.15 C语言中逻辑运算符语言中逻辑运算符_的优先级高于算术运算符。的优先级高于算术运算符。! !4.16 将下列数学式改写成将下列数学式改写成C语言的关系表达式或逻辑表达式语言的关系表达式或逻辑表达式A)和和 B)_A) a=b 或或 a4a=b|a44.17 请写出以下程序的输出结果请写出以下程序的输出结果_。 main() int a=100; if (a100) printf(“%dn”,a100); else printf(“%dn”,a0) B) !0xc) b=a; a=c; c=b;3224.20 若变量巳正确定义,以下语句段的输
43、出结果是若变量巳正确定义,以下语句段的输出结果是_。 x=0;y=2;z=3; switch(x) case 0: switch (y=2) case 1: printf(“*”); break; case 2: printf(“%”); break; case 1: switch(z) case 1: printf(“$”); case 2: printf(“*”);break; default: printf(“#”); *#加一个加一个break, break, 什么结果?什么结果?9/7/202434三、三、三、三、 编程题编程题编程题编程题4.21 4.21 请将以下语句改写成请将以
44、下语句改写成switchswitch语句。语句。 if ( a30) m=1;if ( a30) m=1; else if (a40) m=2; else if (a40) m=2; else if (a50) m=3; else if (a50) m=3;else if (a60) m=4;else if (am0)|(m1=m0)&(d1=d0) age=y1-y0; else age=y1-y0-1; printf(nThe student age is %d,age); getch();9/7/2024364.25 有一函数:有一函数: x (-5x0) y= x-1 (x=0) x+
45、1 (0x-5)&(x0)&(x-5)&(x0)&(x10) y=x+1; printf(nx is %d , y is %d,x,y); getch();9/7/2024374.25 有一函数:有一函数: x (-5x0) y= x-1 (x=0) x+1 (0x-5)&(x0)&(x10) y=x+1; printf(nx is %d , y is %d,x,y); getch();【4-25-4参考答案】参考答案】main() int x,y; printf(ninput x: ); scanf(%d,&x); switch(x) case -4: case -3: case -2: c
46、ase -1: y=x;break; case 0 : y=x-1;break; case 1 : case 2 : case 3 : case 4 : case 5 : case 6 : case 7 : case 8 : case 9 : y=x+1;break; default : printf(“Input x error ! %c”,7); printf(“nx is %d , y is %d”,x,y); getch();9/7/202438第五章第五章 循环结构循环结构 一一一一. .选择题选择题选择题选择题5.1 以下程序段的输出结果是以下程序段的输出结果是A) 9 B) 1
47、C) 11 D) 10 int k,j,s; for (k=2;k6;k+,k+) s=1; for (j=k; j6; j+) s+=j; printf(“%dn”,s);K=2 s=1 s=1+(2+3+4+5)K=2 s=1 s=1+(2+3+4+5)K=4 s=1 s=1+(4+5)=10K=4 s=1 s=1+(4+5)=10K=6 K=6 退出退出5.2 以下程序段的输出结果是以下程序段的输出结果是 A)12 B)15 C)20 D)25int i,j,m=0;for (i=1;i=15;i+=4)for (j=3;j7) n-; printf(“%dn”,n); n- n- 打印
48、打印n=10 n7 9n=10 n7 9 n7 8 n7 88 8 n7 7 n7 77 7n=7 n=7 退出退出5.4 以下程序段的输出结果是以下程序段的输出结果是A) 1 B)3 0 C) 1 2 D)死循环死循环int x=3; do printf(“%3d”,x-=2);while (!(-x); x=3 x=3进入循环执行进入循环执行x-=2 x-=2 打印打印判定判定!0 !0 是真执行是真执行x-=2 x-=2 打印打印判定判定! !(-2) -2) 是假结束循环是假结束循环9/7/2024405.5 以下程序的输出结果是以下程序的输出结果是A) 15 B)14 C)不确定不确
49、定 D)0main() int i,sum; for (i=1;i0;y-)if (y%3=0) printf(“%d”,-y); continuey=10 y 9 整除打印整除打印 8 6 整除打印整除打印 5 3 整除打印整除打印 2 0 退出退出9/7/2024415.7 若若x 是是int 型变量,以下程序段的输出结果是型变量,以下程序段的输出结果是A) *3 B) #3 C) #3 D) *3#4 #4 *4 *4#5 *5 *5 #5 for (x=3;x6;x+) printf(x%2)?(“*%d”):(“#%dn”),x);x=3 打印打印 *3x=4 打印打印 #4+回车回
50、车x=5 打印打印 *6x=6 退出退出5.8 以下程序的输出结果是以下程序的输出结果是 A) *#*#*#$ B) #*#*#*$ C) *#*#$ D) #*#*$main( ) int i; for (i=1;i=5;i+) if (i%2) printf(“*”);else continue;printf(“#”);printf(“$n”);i=1 打印打印 *#i=2 continuei=3 打印打印 *# i=4 continuei=5 打印打印 *# i=6 打印打印 $+回车回车 9/7/2024425.9 以下叙述正确的是以下叙述正确的是A)do-while语句构成的循环不能
51、用其他语句构成的循环代替语句构成的循环不能用其他语句构成的循环代替.B)do-while语句构成的循环只能用语句构成的循环只能用break语句退出语句退出C)用用do-while语句构成循环时,只有在语句构成循环时,只有在while后的表达式为非后的表达式为非零时结束循环零时结束循环 D)用用do-while语句构成循环时,只有在语句构成循环时,只有在while后的表达式为零后的表达式为零时结束循环时结束循环5.10 以下程序的输出结果是以下程序的输出结果是 A) 39 81 B) 42 84 C) 26 68 D) 28 70main( ) int x,i; for (i=1;ib; +b)
52、 i+;while (a+c) j+;do k+; while (ad+);for: a=10 b=5,6,7,8,9,10 i=5while: a=10 c=6,7,8,9,10 j=4do while: k=16 d=510 k=65465.12 以下程序段的输出结果是以下程序段的输出结果是 。 int k,n,m; n=10;m=1;k=1; while (k=n) m*=2; printf(“%dn”,m);死循环死循环While语句中语句中k和和n都不变,无限循环都不变,无限循环5.13 以下程序段的输出结果是以下程序段的输出结果是_. main() int x=2; while (
53、x-); printf(“%dn”,x); - -1While语句中对语句中对x是先判后减,当是先判后减,当x=0时时结束循环,然后结束循环,然后x=-1=-1,打印出来,打印出来9/7/2024445.14 以下程序段的输出结果是以下程序段的输出结果是_. int i=0,sum=1; do sum+=i+; while (i5); printf(“%dn”,sum);16sum+0=1 i5 i=1sum+1=2 i5 i=2sum+2=4 i5 i=3sum+3=7 i5 i=4 sum+4=11 i5 i=5sum+5=16 i=5 (退出)退出)i=5.15 有以下程序段:有以下程序
54、段: s=1.0; for(k=1;k=n;k+) s=s+1.0/(k*(k+1); printf(“%fn”,s);请填空,使下面的程序段的功能完全与之等同。请填空,使下面的程序段的功能完全与之等同。s=0.0;_;k=0;do s=s+d; _; d=1.0/(k*(k+1); while (_);printf(“%fn”,s);d=1k+kamax) amax=x; if (_) amin=x; scanf(“%f”,&x); printf(“namax=%fnamin=%fn”,amax,amin); x=0xamin9/7/202446三编程题三编程题5.17 编写程序,求编写程序
55、,求1-3+5-7+-99+101的值。的值。【参考答案】【参考答案】main() int i,s=1,k=-1; for (i=1;i=50;i+) s=s+k*(2*i+1); k=-k; printf(s=%d,s); getch();/*/*初始化初始化s s,k k*/*/*/*循环循环5050次次*/*/*/*用来控制各项符号用来控制各项符号*/*/运行结果:运行结果:9/7/2024475.18 编写程序,求编写程序,求e 的值。的值。e 1+1/1!+1/2!+1/3!+.+1/n! ()用()用for循环,计算前循环,计算前50项。项。 ()() 用用while循环,要求直至
56、最后一项的值小于循环,要求直至最后一项的值小于10-4【参考答案(【参考答案(1)】)】main() int i=1; double e=1.0,s=1.0; for(i=1;i=1e-04) /* 8 times */ s=s*i; i+; e=e+1/s; printf(e=%10.6f,e); getch();运行结果:运行结果:运行结果:运行结果:9/7/2024485.19 编写程序,输入从公元编写程序,输入从公元1000年至年至2000年所有闰年的年号。年所有闰年的年号。每输出每输出3个年号换一行。判断公元年是否为闰年的条件是:个年号换一行。判断公元年是否为闰年的条件是:公元年数如
57、能被公元年数如能被4 4整除,而不能被整除,而不能被100100整除,则是闰年;整除,则是闰年;公元年数能被公元年数能被400400整除也是闰年。整除也是闰年。【参考答案】【参考答案】main() int y,k=0; for(y=1000;y=2000;y+) if (y%4=0&y%100!=0|y%400=0) printf(%10d,y);k+; if (k%3=0) printf(n); getch();9/7/2024495.20 编写程序,打印以下图:编写程序,打印以下图: * * * * * * * * *分析:分析:菱形分上、下两个部分,上半部菱形分上、下两个部分,上半部i=
58、1n(n是是边长边长,输输入)入)进进行循行循环环;下;下半部半部i=n+12n-1进进行循行循环环;图形放图形放在屏幕中间,第一行前有在屏幕中间,第一行前有3939(40-i40-i)个空格;)个空格;上半部上半部每行前空每行前空40-i个空格,打印个空格,打印2i-1个号;下半部每行前空个号;下半部每行前空40-2n+i40-2n+i个空格,打印个空格,打印4n-1-2i4n-1-2i个号个号【参考答案】【参考答案】#include main()int i,j,n; printf(Input n (1-10):); do scanf(%d,&n); while (n10);for (i=1
59、;i=n;i+) for (j=1;j=40-i;j+) printf( );for (j=1;j=2*i-1;j+) printf(*); printf(n); for (i=n+1;i=2*n-1;i+) for (j=1;j=40-2*n+i;j+) printf( ); for (j=1;j=4*n-1-2*i;j+) printf(*); printf(n); getch();9/7/202450第六章第六章 字符型数据字符型数据一、选择题一、选择题一、选择题一、选择题6.1 C6.1 C语言中的简单类型有语言中的简单类型有A A)整型,实型,逻辑型)整型,实型,逻辑型 B B)整型
60、,实型,字符型)整型,实型,字符型C C)整型,字符型,逻辑型)整型,字符型,逻辑型 D D)整型,实型,逻辑型,字符型)整型,实型,逻辑型,字符型C C语言中无单语言中无单独的逻辑型数独的逻辑型数据据6.2 C语言中,字符型(语言中,字符型(char)数据在微机内存中的存储形式)数据在微机内存中的存储形式是是A)反码)反码 B)补码)补码 C)EBCDIC码码 D)ASCII码码6.3 设有语句设有语句char a=72;,则变量,则变量a A)包含)包含1个字符个字符 B)包含)包含2个字符个字符 C)包含)包含3个字符个字符 D)说明不合法)说明不合法6.4 C语言中不合法的字符常量是语
61、言中不合法的字符常量是 A)0XFF B) 65 C) & D) 0286.5 C语言中不合法的字符串常量是语言中不合法的字符串常量是 A)121 B)Y= C)nn D)ABCDX6d9/7/2024516.6 判断判断char型变量型变量C是否为大写字母的最简单且正确的表达式是是否为大写字母的最简单且正确的表达式是A)A =A)&(C=Z)C)(A=C) D) (C=A)&(C=A& x=Z)?(x+32):x; printf(%cn,x);9/7/202452 6.9 以下程序的输出结果是以下程序的输出结果是 A) 67,C B) B,C C) C,D D) 不确定的值不确定的值main
62、( ) char ch1,ch2; ch1=A+5-3; ch2=a+5-3; printf(%d,%cn,ch2); 6.10 对以下程序对以下程序,从第一列开始输入数据从第一列开始输入数据:2473,代表代表ENTER,程程序的输出结果是序的输出结果是 A) 668977 B) 668966 C) 66778777 D) 6688766#include stdio.hmain( ) int c; while(c=getchar()!=n) switch(c-2) case 0: case 1: putchar(c+4); case 2: putchar(c+4); break; case
63、3: putchar(c+3); default : putchar(c+2); break; prinf(n); c: 2 c-2: 0 打印打印 66 4 2 8 7 5 9 3 1 77 9/7/202453 6.11 若变量已正确说明若变量已正确说明,要求用以下语句给要求用以下语句给C1赋予字符赋予字符%,给给C2赋予字赋予字符符#,给给a赋予赋予2.0,给给b赋予赋予4.0,则正确的输入形式是则正确的输入形式是: A) 2.0 % 4.0 # B) 2.0%4.0# C) 2% 4# D) 2 % 4 scanf(%f%c%f%c,&a,&c1,&b,&c2);二、填空题二、填空题二
64、、填空题二、填空题6.12 EOF的十进制值是的十进制值是。26(z,F6)Page 2556.13 C语言中语言中,字符占内存字符占内存_个字节个字节.16.14 调用调用C语言对字符处理的库函数时语言对字符处理的库函数时,在在#include命令行中命令行中应包含的文件是应包含的文件是。上机时、都可;上机时、都可;标准中应为标准中应为ctype.h6.15 若输入字符若输入字符A,在以下在以下WHILE语句执行后语句执行后ch的值是的值是_. while(ch=getchar( )=A);19/7/2024546.16 若要通过以下语句给若要通过以下语句给a,b,c,d分别输入字符分别输入
65、字符A,B,C,D,给给w,x,y,z分别输入分别输入10,20,30,40,正确的输入形式是正确的输入形式是 请用请用代表代表ENTER键键. scanf(%d%c%d%c%d%c%d%c,&w,&a,&x,&b,&y,&c,&z,&d);10A20B30C40D6.17 若有以下说明和输入语句若有以下说明和输入语句,要求给要求给c1,c2输入字符输入字符 A,B,给给a1,a2输入输入7.29和和101.298,从键盘正确输入数据的形式是从键盘正确输入数据的形式是。 char c1,c2; float a1,a2; scanf(%f%f,&a1,&a2); scanf(%c%c,&c1,&
66、c2);7.29 101.298AB6.18 若有以下说明和输入语句若有以下说明和输入语句,要求给要求给c1,c2输入字符输入字符 A,B,给给a1,a2输入输入7.29和和101.298,从键盘正确输入数据的形式是从键盘正确输入数据的形式是。 char c1,c2; float a1,a2; scanf(%c%f%c%f,&c1,&a1,&c2,&a2);7.29B101.2986.19 若有以下说明和输入语句若有以下说明和输入语句,要求给要求给c1,c2,c3输入字符输入字符 A,B,C,从键盘正确输入数据的形式从键盘正确输入数据的形式. char c1,c2,c3; scanf(%4c,
67、&c1); scanf(%4c,&c2);scanf(%4c,&c3); B C 9/7/202455三、三、三、三、 编程题编程题编程题编程题6.20 请编写程序请编写程序,输入一行字符输入一行字符(用回车结束用回车结束),输出每个字符输出每个字符以及与之对应的以及与之对应的ASCII代码值代码值,每行输出三对每行输出三对.【参考答案】【参考答案】#include main() int k=0; char ch; while(ch=getchar()!=10) k+; printf(%4c%4d,ch,ch); if(k%3=0) printf(n); getch();9/7/2024566
68、.21 请编写程序请编写程序,输入一行数字字符输入一行数字字符(用用EOF结束结束),每个数字字符每个数字字符的前后都有空格的前后都有空格.请编程请编程,把这一行中的数字转换成一个整数把这一行中的数字转换成一个整数.例例如如:若输入若输入: 2 4 8 3 则输出整数则输出整数:2483.【参考答案】【参考答案】#include main() long k=0; char ch; while(ch=getchar()!=EOF) if (ch=0&ch=9) ch=ch-0; k=k*10+ch; printf(%ld,k);getch();9/7/2024576.22 请编写程序统计输入的行
69、数请编写程序统计输入的行数,输入用输入用EOF结束结束 .【参考答案】【参考答案】#include main() int flag,k=0; char ch; while(ch=getchar()!=EOF) if (ch=10) k+; flag=0; else flag=1; if (flag=1) k+; printf(n The line number is %dn,k);getch();9/7/2024586.23 请编写程序统计输入的一行中小写字母的个数请编写程序统计输入的一行中小写字母的个数.【参考答案】【参考答案】#include main() int k=0; char ch
70、; while(ch=getchar()!=10) if (ch=a&ch=z) k+; printf(n The lower letter number is %dn,k);getch();6.24 请编写输入以下图案的程序请编写输入以下图案的程序,图案的行数由输入的值确定图案的行数由输入的值确定. A BBB CCCCC DDDDDDD EEEEEEEEE【参考答案】【参考答案】#include main() int i,j,n; printf(Input line number : ); scanf(%d,&n); for(i=1;i=n;i+) for (j=1;j=40-i;j+)
71、printf( ); for(j=1;jb)c=1; else if(a=b)c=0; else c=-1; return(c); 9/7/2024617.6 以下程序的输出结果是以下程序的输出结果是A)0 B)1 C)6 D)无定值无定值 fun( int a, int b, int c) c=a*b; main() int c; fun(2,3,c); printf(%dn,c); 缺少缺少return语句语句7.7 以下程序的输出结果是以下程序的输出结果是A)5.500000 B)3.000000 C)4.000000 D) double f(intn) int i; doubles;
72、s=1.0; for(i=1; i=n; i+) s+=1.0/i; return s; main() int i,m=3; floata=0.0; for(i=0; ieps;n+) s+=t; t=n*t/(2*n+1); return (2.0*_); n=1s7.12 以下函数用以求以下函数用以求x的的y次方次方.请填空请填空. double fun(double x,int y) int i; double z=1; for(i=1; i_; i+) z=_; return z; =yz*x9/7/2024657.13 以下程序的功能是计算以下程序的功能是计算S= K!.请填空请填空
73、. long f(int n) int i; long s; s=_; for(i=1; i=n; i+) s=_; return s; main( ) long s; int k,n; scanf(%d,&n); s=_; for(k=0; k=n; k+)s=s+_; printf(%ldn,s); 1s*i 0f(k)9/7/202466三、程序调试和编程题三、程序调试和编程题三、程序调试和编程题三、程序调试和编程题7.14 以下以下fun函数用以判断函数用以判断n是否是素数是否是素数,fun函数中有逻辑错函数中有逻辑错,请调试改正请调试改正. fun(int n) int k,yes;
74、 for(k=2; k=n/2; k+) if(n%k=0) yes=0; else yes=1; return yes; 【7-14 (正确正确)】main( )int m; printf(Input a number: ); scanf(%d,&m); m=fun(m); if (m=1) printf(nThis number is a primer !n); else printf(nThis number is not a primer !n);getch( ); fun(int n) int k,yes=1; for (k=2;k=n/2;k+) if (n%k=0) yes=0;
75、 return yes;9/7/2024677.15 编写函数编写函数 int mymod ( int a, int b)用以求用以求a被被b除之后的余除之后的余数数.【参考答案】【参考答案】main()int a,b; printf(Input a & b:); scanf(%d%d,&a,&b); printf(n%d%d=%d,a,b,mymod(a,b); getch();mymod(int a, int b)int z; z=a%b; return z; 9/7/202468【参考答案】【参考答案】float fun(int n)return (1.0/n);main()int i,
76、n,k=1; float s=0.0; printf(Input n:); scanf(%d,&n); for(i=1;i=n;i+) s+=k*fun(i); k=-k; printf(ns=%8.6f,s); getch();7.16 编写程序求编写程序求:1-1/2+1/3-1/4+1/5-1/6+1/7-.+1/n9/7/2024697.17 编写函数编写函数,根据整型形参根据整型形参m的值的值,计算如下公式的值计算如下公式的值. t=1-1/2*2-1/3*3-.-1/m*m例如例如,若若m=5,则应输出则应输出0.536389.【参考答案】【参考答案】float f(int m)
77、float t=1.0; int i; for (i=2;i=m;i+) t-=1.0/(i*i); return t;main()int n; printf(Input n:); scanf(%d,&n); printf(nt=%8.6f,f(n); getch();9/7/2024707.18 编写函数用以求表达式编写函数用以求表达式x*x-5*x+4,x作为参数传送给函数作为参数传送给函数,调用此函数求调用此函数求: y1=2*2-5*2+4 y2=(x+15)*(x+15)-5*(x+15)+4 y3=sinx*sinx-5*sinx+4 【参考答案】【参考答案】#include fl
78、oat f(float x) float z; z=x*x-5*x+4; return z;main()float x,y1,y2,y3; printf(Input x: ); scanf(%f,&x); y1=f(2); y2=f(x+15); y3=f(sin(x); printf(y1=%10.4fn,y1); printf(y2=%10.4fn,y2); printf(y3=%10.4fn,y3); printf(n* END *); getch();9/7/202471第八章第八章 指针指针一、一、 选择题选择题 8.1 8.1 若有定义若有定义: int x,*pb;: int x
79、,*pb;则在以下正确的赋值表达式是则在以下正确的赋值表达式是 A A) pb=&x B pb=&x B) pb=x C pb=x C) *pb=&x D *pb=&x D) *pb=*x *pb=*x8.2 8.2 以下程序的输出结果是以下程序的输出结果是 A A)因变量无定义输出不定值)因变量无定义输出不定值 B B) 0 C 0 C) -1 D -1 D) 1 1 #include stdio.h#include stdio.h main() main() printf(%dn,NULL); printf(%dn,NULL); 8.3 8.3 以下程序的输出结果是以下程序的输出结果是 A
80、 A) 5,2,3 B 5,2,3 B) -5,-12,-7 C -5,-12,-7 C) -5,-12,-7 D -5,-12,-7 D) 5,-2,-7 5,-2,-7 void sub(int x,int y,int *z)void sub(int x,int y,int *z) *z=y-x; *z=y-x; main() main() int a,b,c; int a,b,c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf(%d,%d,%dn,a,b,c);
81、 printf(%d,%d,%dn,a,b,c); sub(10,5,&a) sub(10,5,&a) 返回返回 a=5-10=-5 a=5-10=-5sub(7,-5,&b) sub(7,-5,&b) 返回返回 b=-5-7=-12 b=-5-7=-12sub(-5,-12,&c) sub(-5,-12,&c) 返回返回 c=-12+5=-7 c=-12+5=-79/7/2024728.4 8.4 以下程序的输出结果是以下程序的输出结果是 A A) 4 B 4 B) 6 C 6 C) 8 D 8 D) 10 10 main( )main( ) int k=2,m=4,n=6; int k=2
82、,m=4,n=6; int *pk=&k,*pm=&m,*p; int *pk=&k,*pm=&m,*p; *(p=&n)=*pk*(*pm); *(p=&n)=*pk*(*pm); printf(%dn,n); printf(%dn,n); 8.5 8.5 已知指针已知指针P P的指向如图所示,则表达式的指向如图所示,则表达式*P+*P+的值是的值是 A A) 20 B 20 B) 30 C 30 C) 21 D 21 D) 31 31 a0 a1 a2 a3 a4 a0 a1 a2 a3 a4 10 20 30 40 50 10 20 30 40 50 P P8.8. 已知指针已知指针P
83、P的指向如上图所示,则表达式的指向如上图所示,则表达式* + P* + P的值是的值是 A A) 20 B 20 B) 30 C 30 C) 21 D 21 D) 31 31 8.7 8.7 已知指针已知指针P P的指向如上图所示,则表达式的指向如上图所示,则表达式+*P+*P的值的值 A A) 20 B 20 B) 30 C 30 C) 21 D 21 D) 31 31*(p=&n)=n=2*4=89/7/2024738.8 8.8 以下程序的输出结果是以下程序的输出结果是 A A) 23 B 23 B) 24 C 24 C) 25 D 25 D) 26 26 void prtv(int *
84、x)void prtv(int *x) printf (%dn,+*x); printf (%dn,+*x); main() main() int a=25; int a=25; prtv(&a); prtv(&a); 8.9 8.9 以下程序的输出结果是以下程序的输出结果是 A A) 运行出错运行出错 B B)100 C100 C)a a的地址的地址 D D)b b的地址的地址 main ( )main ( ) int *k, *a, b=100; int *k, *a, b=100; a=&b;k=&a; a=&b;k=&a; printf(%dn,*k); printf(%dn,*k);
85、 kaB=1008.10 8.10 以下程序的输出结果是以下程序的输出结果是 A A) 4,3 B 4,3 B)2,3 C2,3 C) 3,4 D 3,4 D) 3,2 3,2 void fun(float *a,float *b) void fun(float *a,float *b) float w; float w; *a=*a+*a; *a=*a+*a; w=*a; w=*a; *a=*b; *a=*b; *b=w; *b=w; main( ) float x=2.0, 7=3.0; foaat *px=&x,*p7=&y; fun(px,py); printf(%2.0f,%2.0f
86、n,x,y); 9/7/2024748.11 8.11 以下程序的输出结果是以下程序的输出结果是 void sub(float x,float *y,float *z) *y=*y-1.0; *z=*z+x; main( ) float a=2.5,b=9.0,*pa,*pb; pa=&a; pb=&b; sub(b-a,pa,pa); printf(:%fn,a); sub(9.0-2.5,2.5,2.5)2.5ab9.0papb9.0-2.5papbxyz9/7/2024758.12 8.12 以下四个程序中不能对两个整型值进行交换的是以下四个程序中不能对两个整型值进行交换的是 A A)
87、main( ) main( ) int a=10,b=20; int a=10,b=20; swap(&a,&b); swap(&a,&b); printf(%d%dn,a,b); printf(%d%dn,a,b); swap(int *p,int*q); swap(int *p,int*q); int *t,a; int *t,a; t=&a; t=&a; *t=*p; *p=*q; *q=*t; *t=*p; *p=*q; *q=*t; B B) main( ) main( ) int a=10,b=20; int a=10,b=20; swap(&a,&b); swap(&a,&b);
88、 printf(%d%dn,a,b); printf(%d%dn,a,b); swap(int *p,int*q); swap(int *p,int*q); int t; int t; t=*p; *p=*q; *q=t; t=*p; *p=*q; *q=t; C) main( ) int *a,*b; *a=20,*b=20; swap(a,b); printf(%d%dn,*a,*b); swap(int *p,int*q) int *t; t=p; p=q; q=t; D) main( ) int a=10,b=20; int *x=&a,*y=&b; swap(x,y); printf
89、(%d%dn,a,b); swap(int *p,int*q) int t; t=*p;*p=*q; *q=t; 9/7/202476二、二、二、二、 填空题填空题填空题填空题 8.13 以下程序段的输出结果是以下程序段的输出结果是_. int *var,b; ab=100; var =&ab; ab=*var+10; printf (%dn, *var);1108.14 以下程序的输出结果是以下程序的输出结果是_. int ast(int x, int y, int *cp,int *dp)*cp=x+y; *dp=x-y;main()int a,b,c,d;a=4;b=3;ast(a,b,
90、&c,&d);printf(%d%dn,c,d);71a=4b=3c=?d=?43 xycpdpc=7d=19/7/2024778.15 若有定义:若有定义:char ch;(1)使指针使指针p可以指向变量可以指向变量ch的定义语句是的定义语句是。(2)使指针使指针p可以指向变量可以指向变量ch的赋值语句是的赋值语句是。(3)通过指针通过指针p给变量给变量ch读入字符的读入字符的scanf函数调用语句是函数调用语句是。(4)通过指针通过指针p给变量给变量ch赋字符的语句是赋字符的语句是。(5)通过指针通过指针p输出输出ch中字符的语句是中字符的语句是。char *p=ch; (char *p;
91、 p=&ch;)p=&ch;scanf(“%c”,p);*p=ch; *p=a;printf(“%c”,*p);8.16 8.16 若有五个连续的若有五个连续的intint类型类型 的的 存储单元并赋值如图存储单元并赋值如图, ,且且 p p和和s s的基本类的基本类型皆为型皆为int *pint *p已指向存储单元已指向存储单元a1.a1.(1)(1)通过指针通过指针p, p,给给s s赋值赋值, ,使其指向最后一个存储单元使其指向最后一个存储单元a4a4的语句是的语句是_._.(2)(2)用以移动指针用以移动指针s, s,使之指向中间的存储单元使之指向中间的存储单元 a2 a2的表达式是的
92、表达式是_._.(3)(3)已知已知k=2,k=2,指针指针s s已指向存储单元已指向存储单元a2a2,表达式,表达式*(S+k)*(S+k)的值是的值是_._.(4)(4)指针指针s s已指向存储单元已指向存储单元a2,a2,不移动指针不移动指针s, s,通过通过s s引用存储单元引用存储单元a3a3的的 表达式是表达式是_._.(5)(5)指针指针s s指向存储单元指向存储单元a2,pa2,p指向存储单元指向存储单元a0,a0,表达式表达式s-ps-p的值是的值是_._.(6)(6)若若p p指向存储单元指向存储单元a0,a0,则以下语句的输出结果是则以下语句的输出结果是_._. for(
93、i=0;i5;i+)printf(%d,*(p+i);for(i=0;i*a) max=*b; if (*bmax) max=*c; if (*cmin) min=*c; *a=max;*c=min;main()int a,b,c; printf(“Input a,b,c: ”); scanf(%d%d%d,&a,&b,&c); printf(before call function:n); printf(a=%d b=%d c=%dn,a,b,c); fun(&a,&b,&c); printf(after call function:n); printf(max=%d min=%dn,a,c
94、); getch();9/7/202480第九章第九章 数组数组一、选择题一、选择题一、选择题一、选择题9.1 9.1 若已定义:若已定义: int aint a=0,1,2,3,4,5,6,7,8,9,*p=a,i;=0,1,2,3,4,5,6,7,8,9,*p=a,i;其中其中0 0i=9,i=9,则对则对a a数组元素的引用不正确的是数组元素的引用不正确的是A) A) ap-a ap-a B) B) *(&ai) *(&ai) C) C) pi pi D) D) *(*(a+i)*(*(a+i)9.2 9.2 以下程序段数组所有元素输入数据,应在下划线填入的是以下程序段数组所有元素输入数
95、据,应在下划线填入的是 A) a+(i+) A) a+(i+) B) &ai+1 B) &ai+1 C) a+i C) a+i D) &a+iD) &a+imain(main() ) int a10,i=0; int a10,i=0; while(i10) scanf(%d, while(i10) scanf(%d,); . . ); . . 9.3 9.3 以下程序的输出结果是以下程序的输出结果是 A) A) 3 3 B) B) 4 4 C) C) 1 1 D)D) 2 2main(main() ) int a10=1,2,3,4,5,6,7,8,9,10,*p=a; int a10=1,2
96、,3,4,5,6,7,8,9,10,*p=a; printf(%dn,*(p+2); printf(%dn,*(p+2); 9/7/202481初始值初始值n0=0 n1=0n0=0 n1=0i=j=0 1 0i=j=0 1 0i=0,j=1 1 2i=0,j=1 1 2i=1,j=0 3 2i=1,j=0 3 2i=j=1 3 3i=j=1 3 39.4 9.4 以下程序的输出结果是以下程序的输出结果是 A) A) 不确定的值不确定的值 B) B) 3 3 C) C) 2 2 D) D) 1 1main(main() ) int n2=0,i,j,k=2; int n2=0,i,j,k=2;
97、 for(i=0;ik;i+) for(i=0;ik;i+) for(j=0;ik;j+) nj=ni+1; for(j=0;ik;j+) nj=ni+1; printf(“%dn”,nk); printf(“%dn”,nk); 循环次,循环次,i,ji,j从从0 0到到1,1,但但k=2k=2无变化无变化, ,因此因此nknk为不确定值为不确定值9.5 9.5 以下程序的输出结果是以下程序的输出结果是 A) 17 B) 18 C) 19 D) 20 A) 17 B) 18 C) 19 D) 20main( )main( ) int a =2,4,6,8,10,y=1,x,*p; int a
98、=2,4,6,8,10,y=1,x,*p; p=&a1; p=&a1; for(x=0;x3;x+) y+=*(p+x); for(x=0;x3;x+) y+=*(p+x); printf(%dn,y); printf(%dn,y); y=1+4+6+8=19y=1+4+6+8=199/7/2024829.6 9.6 以下程序的输出结果是以下程序的输出结果是 A) 6 B) 8 C) 4 D) 2 A) 6 B) 8 C) 4 D) 2main( )main( ) int a =2,4,6,8,*p=a,i; int a =2,4,6,8,*p=a,i; for(i=0;i4;i+) ai=*
99、p+; for(i=0;i4;i+) ai=*p+; printf(%dn,a2); printf(%dn,a2); aiai值值未变未变9.7 9.7 以下程序的输出结果是以下程序的输出结果是 A) 720 B) 120 C) 24 D) 6 A) 720 B) 120 C) 24 D) 6f(int b ,int n)f(int b ,int n) int i,r=1; int i,r=1; for(i=0;i=n;i+) r=r*bi; for(i=0;i=n;i+) r=r*bi; return r; return r; main( )main( ) int x,a =2,3,4,5,
100、6,7,8,9; int x,a =2,3,4,5,6,7,8,9; x=f(a,3); x=f(a,3); printf(%dn,x); printf(%dn,x); R=1*2*3*4*5=12R=1*2*3*4*5=120 09/7/2024839.8 9.8 以下程序中若第一个以下程序中若第一个printfprintf语句输出的是语句输出的是194194,则第二个,则第二个printfprintf语句的语句的输出结果是输出结果是 A) 212 B) 204 C) 1a4 D) 1a6 A) 212 B) 204 C) 1a4 D) 1a6main( )main( ) int a =1,
101、2,3,4,5,6,7,8,9,0,*p; int a =1,2,3,4,5,6,7,8,9,0,*p; p=a; p=a; printf(%xn, p); printf(%xn, p); printf(%xn,p+9); printf(%xn,p+9); 2*9=182*9=18个字节个字节打印打印194 (16进制)进制)+) 12 (16进制)进制)1a69.9 以下程序的输出结果是以下程序的输出结果是 A) 0987654321 B) 4321098765 C) 5678901234 D) 0987651234fun(int *s,int n1,int n2) int i,j,t; i
102、=n1; j=n2; while(ij) t=*(s+i); *(s+i)=*(s+j); *(s+j)=t; i+; j-; main( ) int a10=1,2,3,4,5,6,7,8,9,0,i,*p=a; fun(p,0,3); fun(p,4,9); fun(p,0,9); for(i=0;i10;i+) printf(%d,*(a+i);9/7/202484fun(int *s,int n1,int n2) int i,j,t; i=n1; j=n2; while(ij) t=*(s+i); *(s+i)=*(s+j); *(s+j)=t; i+; j-; main( ) int
103、 a10=1,2,3,4,5,6,7,8,9,0,i,*p=a; fun(p,0,3); fun(p,4,9); fun(p,0,9); for(i=0;i10;i+) printf(%d,*(a+i);1 2 3 4 5 6 7 8 9 0a1:4 3 2 12:0 9 8 7 6 53:5 6 7 8 91 2 3 409/7/2024859.10 9.10 以下程序的输出结果是以下程序的输出结果是 A) 4 4 B) 2 2 C) 2 4 D) 4 6 A) 4 4 B) 2 2 C) 2 4 D) 4 6main( )main( ) int a5=2,4,6,8,10,*p,*k; i
104、nt a5=2,4,6,8,10,*p,*k; p=a; k=&p; p=a; k=&p; printf(%d,*(p+); printf(%d,*(p+); printf(%dn,*k); printf(%dn,*k); 9.11 当运行以下程序时输入三行,每行都是在第一列上开始,当运行以下程序时输入三行,每行都是在第一列上开始,CR代表代表Enter键;键; a b cdef则程序的输出结果是则程序的输出结果是 A) abcdef B) a C) a D) a b b b c cd cdef d e f#include stdio.h#define N 6main( ) char cN;
105、int i=0; for(i=0;iN;i+) ci=getchar(); for(i=0;iN;i+) putchar(ci);9/7/2024869.12 9.12 若有定义和语句:若有定义和语句: int c45, (*cp)5; cp=c;int c45, (*cp)5; cp=c;则对则对C C数组元素的引用正确的是数组元素的引用正确的是 A) cp+1 B) *(cp+3) C) *(cp+1)+3 D) *(*cp+2) A) cp+1 B) *(cp+3) C) *(cp+1)+3 D) *(*cp+2)9.13 9.13 若已定义:若已定义: int a43=1,2,3,4,
106、5,6,7,8,9,10,11,12,(*prt)3=a,*p=a0;int a43=1,2,3,4,5,6,7,8,9,10,11,12,(*prt)3=a,*p=a0;则能够正确表示数组元素则能够正确表示数组元素a12a12的表达式是的表达式是 A) *(*prt+1)2) B) *(*(p+5) C) (*prt+1)+2 D) *(*(a+1)+2) A) *(*prt+1)2) B) *(*(p+5) C) (*prt+1)+2 D) *(*(a+1)+2)9.14 9.14 若有定义和语句若有定义和语句: : int a43=1,2,3,4,5,6,7,8,9,10,11,12,(
107、*prt)3=a,*p4,i;int a43=1,2,3,4,5,6,7,8,9,10,11,12,(*prt)3=a,*p4,i; for(i=0;i4;i+) pi=ai; for(i=0;i4;i+) pi=ai;则下能够正确表示则下能够正确表示a a数组元素的表达式是数组元素的表达式是 A) a43 B) p00 C) prt22 D)(*(p+1)1 A) a43 B) p00 C) prt22 D)(*(p+1)19/7/2024879.15 9.15 以下程序的输出结果是以下程序的输出结果是 A) 23 B) 26 C) 33 D) 36 A) 23 B) 26 C) 33 D)
108、 36main( )main( ) int aa33=2,4,6,i,*p=&aa00; int aa33=2,4,6,i,*p=&aa00; for(i=0;i2;i+) for(i=0;i2;i+) if(i=0) aaii+1=*P+1; if(i=0) aaii+1=*P+1; else +p; else +p; printf(%d,*p); printf(%d,*p); printf(n); printf(n); 9.16 9.16 以下程序的输出结果是以下程序的输出结果是 A) 60 B) 68 C) 99 D) 108 A) 60 B) 68 C) 99 D) 108main(
109、)main( ) int a34=1,3,5,7,9,11,13,15,17,19,21,23; int a34=1,3,5,7,9,11,13,15,17,19,21,23; int (*p)4=a,i,j,k=0; int (*p)4=a,i,j,k=0; for(i=0;i3;i+) for(i=0;i3;i+) for(j=0;j2;j+) for(j=0;j2;j+) k+=*(*(p+i)+j); k+=*(*(p+i)+j); printf(%dn,k); printf(%dn,k); 9/7/2024889.17 9.17 以下程序的输出结果是以下程序的输出结果是 A) 1,5
110、,9, B) 1,4,7, C) 3,5,7, D) 3,6,9, A) 1,5,9, B) 1,4,7, C) 3,5,7, D) 3,6,9,main( )main( ) int i,x33=1,2,3,4,5,6,7,8,9; int i,x33=1,2,3,4,5,6,7,8,9; for(i=0;i3;i+) printf(%d,xi2-i); for(i=0;i3;i+) printf(%d,xi2-i); 9.18 若有定义语句若有定义语句int (*p)M; 其中的标识符是其中的标识符是 A) M个指向整型变量的指针个指向整型变量的指针 B) 指向指向M个整型变量的函数指针个整
111、型变量的函数指针 C) 一个指向具有一个指向具有M个整型元素的一维数组指针个整型元素的一维数组指针 D) 具有具有M个指针元素的一维指针数组,每个元素都只能指向整个指针元素的一维指针数组,每个元素都只能指向整型量型量 9/7/202489二、填空题二、填空题二、填空题二、填空题 9.19 9.19 若有以下定义:若有以下定义: double w10; double w10;则数组元素下标的上限是则数组元素下标的上限是 ,下限是,下限是 。909.20 9.20 以下程序的输出结果是以下程序的输出结果是 。main( )main( ) int a =2,4,6,*ptr=&a0,x=8,y,z;
112、 int a =2,4,6,*ptr=&a0,x=8,y,z; for(y=0;y3;y+) for(y=0;y3;y+) z=(*(prt+y)x)?*(prt+y):x; z=(*(prt+y)x)?*(prt+y):x; printf(%dn,z); printf(%dn,z); 69.21 9.21 以下程序的输出结果是以下程序的输出结果是 。main( )main( ) int arr10,i,k=0; int arr10,i,k=0; for(i=0;i10;i+) arri=i; for(i=0;i10;i+) arri=i; for(i=0;i4;i+) k+=arri+i;
113、for(i=0;i4;i+) k+=arri+i; printf(%dn,k); printf(%dn,k); 129/7/2024909.22 9.22 以下程序的输出结果是以下程序的输出结果是 . .#define N 5#define N 5fun(char *s,char a,int n)fun(char *s,char a,int n) int j; int j; *s=a; j=n; *s=a; j=n;while(asj) j-;while(asj) j-; return j; return j; main( )main( ) char sN+1; int k,p; char s
114、N+1; int k,p; for(k=1;k=N;k+) sk=A+k+1; for(k=1;k=10) uun+=t/10; uun=t%10; else uun=t; main( ) int i,n,aa10=0; scanf(%d%d%d,&n,&aa0,&aa1); for(i=1;in;i+) sub(i,aa); for(i=0;i=n;i+) printf(%d,aai); printf(n); sC D E F G 0 1 2 3 4 5 62721计算计算t=nnn+3*nnn-1t=nnn+3*nnn-1若若t10 uun=tt10 uun=t的十位数的十位数uun+1=
115、tuun+1=t的个位数的个位数若若t10 uun=tt10 uun=t开始:开始:n=3n=320 0 00 0 0 0 01i=1i=17i=2i=22 19/7/2024919.24 以下程序的输出结果是以下程序的输出结果是 .main( )main( ) int i,j,row,col,m; int i,j,row,col,m; int arr33=100,200,300,28,72,-30,-850,2,6; int arr33=100,200,300,28,72,-30,-850,2,6; m=arr00; m=arr00; for(i=0;i3;i+) for(i=0;i3;i+
116、) for(j=0;j3;j+) for(j=0;j3;j+) if(arrijm) if(arrijm) m=arrij; row=i; col=j; m=arrij; row=i; col=j; printf(%d,%d,%dn,m,row,col); printf(%d,%d,%dn,m,row,col); -850,2,0100 200 300101 28 72 -30102-850 2 6row=2 col=09.25 以下以下findmax返回数组返回数组s中最大元素的下标,数组中元素的中最大元素的下标,数组中元素的个数由个数由t传入,请填空。传入,请填空。findmax(int
117、s ,int t)findmax(int s ,int t) int k,p; int k,p; for(p=0,k=p;pt;p+) for(p=0,k=p;psk) if(spsk) ; ; return return ; ; k=p(k)9/7/2024929.26 以下程序统计从终端入的字符中每个大写字母的个数,以下程序统计从终端入的字符中每个大写字母的个数,中统计字母的个数,其它依次类推。用号结束输入,请填空。中统计字母的个数,其它依次类推。用号结束输入,请填空。#include stdip.h#include stdip.h#include ctype.h#include ctyp
118、e.hmain( )main( ) int num26=0,i; char c; int num26=0,i; char c; while( while( !=#)!=#) if(isupper(c) num if(isupper(c) num +=1;+=1; for(i=0;i26;i+) for(i=0;i26;i+) if(numi) printf(%c:%dn,i+A,numi); if(numi) printf(%c:%dn,i+A,numi); c=getchar( )c-659/7/202493三、编程题三、编程题 9.27 9.27 输入一行数字字符输入一行数字字符, ,请用
119、数组元素作为计数器来统计每个数字字符的个请用数组元素作为计数器来统计每个数字字符的个数。用下标为数。用下标为0 0元素统计字符元素统计字符“1”“1”的个数,下标为的个数,下标为1 1的元素统计字符的元素统计字符“2”“2”的的个数,个数,. .。【参考答案】【参考答案】#include #include main(main() ) char *s,a100; char *s,a100; int i,k=0,num10=0; int i,k=0,num10=0; s=a; s=a; printf(Input an number string: ); printf(Input an number
120、 string: ); scanf(%s,s); scanf(%s,s); while(*s!=0) while(*s!=0) if (isdigit(*s)&(*s0)if (isdigit(*s)&(*s0) num*s-49+; num*s-49+; if (*s=48) num9+; if (*s=48) num9+; s+; s+; for (i=0;i%3dn,i+1,numi); printf( 0-%3dn,num9); printf(* TOTAL *n); for (i=0;i=9;i+) k+=numi; printf( %d ,k); getch();9/7/20249
121、4【参考答案】【参考答案】move(int a10,int n)int i; for (i=n;i10;i+) ai-1=ai;a9=0;main()int x10,i,n; printf(input 10 number:); for(i=0;i10;i+) scanf(%d,&xi); printf(ninput the N:); scanf(%d,&n); move(x,n); printf(nAfter move tne member list is :n); for (i=0;i10;i+) printf(%d ,xi); getch();9.28 9.28 编写函数,对具有效期编写函
122、数,对具有效期0 0个整数的数组进行如下操作:个整数的数组进行如下操作:从第从第n n个元素开始直到最后一个元素,依次向前移动一个位置。个元素开始直到最后一个元素,依次向前移动一个位置。输出移动后的结果。输出移动后的结果。9/7/202495【参考答案】【参考答案】main()int a100=0,b100=0,i,j; printf(nInput the number list (end with 32767) :n ); for(i=0;i100;i+) scanf(%d,&ai); if ( ai=32767) break; i-; odd(a,b,i); printf(narray B
123、 :n); for (i=0;i100;i+) if (bi!=0) printf(%d ,bi); else break; getch();odd(int a100,int b100,int n) int i,j=0; for(i=0;i=n;i+) if(ai%2!=0) bj+=ai;9.29 9.29 编写函数把数组中所有奇数放在另一个数组中返回。编写函数把数组中所有奇数放在另一个数组中返回。9/7/2024969.30 编写函数对字符数组中的输入字母,按由大到小的字母顺编写函数对字符数组中的输入字母,按由大到小的字母顺序进行排序。序进行排序。 【参考答案】【参考答案】#include
124、 #include sort(char ssort(char s,int n),int n) int i,j,p,t;int i,j,p,t; for(j=0;j(n-1);j+) for(j=0;j(n-1);j+) p=j;p=j; for(i=j+1;in;i+) for(i=j+1;in;i+) if(spsi) p=i; if(sp=ai-1) i+; while(ai-1!=32767); printf(nInput inserted number: ); scanf(%d,&n); p=a; insert(p,n); p=a+1; printf(nOutput array a:n
125、); do if (*p!=32767) printf(%d ,*p+); while (*p!=32767); getch();insert( int *q, int n) int *k; k=q; while (*q!=32767) q+; *(q+1)=*q; while(qk) if (n*(q-1) *q=n; break; else q-; *(q+1)=*q; 9.31 9.31 输入若干有序数放在数组中。然后输入一个数,插入到此输入若干有序数放在数组中。然后输入一个数,插入到此有序数列中,插入后,数组中的数仍然有序。请对以下三种情况有序数列中,插入后,数组中的数仍然有序。请对以
126、下三种情况运行你的程序,以便验证你的程序是否下确。运行你的程序,以便验证你的程序是否下确。 (1 1)插在最前)插在最前 (2 2)插在最后)插在最后 (3 3)插在中间)插在中间 9/7/2024989.32 9.32 编写函数把任意十进制下整数转换成二进制数。提示:把十编写函数把任意十进制下整数转换成二进制数。提示:把十进制数不断被进制数不断被2 2除余数放在一个一维数组中,直到商数为零。在主除余数放在一个一维数组中,直到商数为零。在主函数中进行输出,要求不得按逆序输出。函数中进行输出,要求不得按逆序输出。【参考答案】【参考答案】main()int n,a16=0,*p; printf(n
127、Input an number:); scanf(%d,&n); p=a; change(a,n,p); printf(n=%dn,n); while(p=a+15) printf(%d,*p+);change(x,n,p)int x16,n,*p; p=x+15; *p=0; if(n=0) return(0); while(n!=0) *p=n%2; p-; n/=2; 9/7/2024999.33 9.33 编写函数调用随机函数产生编写函数调用随机函数产生0 0到到1919之间的随机数,在数组中之间的随机数,在数组中存入存入1515个互不重复的整数。要求在主函数中输出结果。若已定义个互不
128、重复的整数。要求在主函数中输出结果。若已定义为类型,调用随机函数步骤如下:为类型,调用随机函数步骤如下: #include stdlib.h#include stdlib.h . . . . x=rand( x=rand()%20 /*)%20 /*产生产生0 0到到1919的随机数的随机数*/*/ 【参考答案】【参考答案】#include main()int a15,*p,i; p=a; frandm(a); printf(nThe array a is: ); for(i=0;i15;i+) printf(%d ,*p+);frandm( a);int k=0,i,x,*q; for (i
129、=0;i15;i+) ai=20; while(k15) x=rand()%20; for (i=0;i15;i+) if (ai=x ) continue; else ak+=x; 9/7/20241009.34 编写程序求任意方阵每行、每列、两对角线一元素之和。编写程序求任意方阵每行、每列、两对角线一元素之和。【参考答案】【参考答案】#define N 20main()int aNN,xN=0,yN=0,i,j,m,sum=0; printf(n Input N (20) :); scanf(%d,&m); printf(n Input array a%d%d:n,m,m); for(i=
130、0;im;i+) for(j=0;jm;j+) scanf(%d,&aij); xi+=aij; yj+=aij; if (i=j ) sum+=aii; printf(n After compute : n); for (i=0;im;i+) for (j=0;jm;j+) printf(%5d,aij); printf(%5dn,xi); for (i=0;im;i+) printf(%5d,yi);printf(nnSum=%dn,sum);getch();9/7/20241019.35 编写程序求两个矩阵的和。编写程序求两个矩阵的和。【参考答案】【参考答案】#define N 20ma
131、in()int aNN,bNN,cNN,m,n,i,j; printf(n Input m,n (20) :); scanf(%d%d,&m,&n); printf(n Input array A%d%d:n,m,n); for(i=0;im;i+) for(j=0;jn;j+) scanf(%d,&aij); printf(n Input array B%d%d:n,m,n); for(i=0;im;i+) for(j=0;jn;j+) scanf(%d,&bij); cij=aij+bij; printf(n After compute array C: n); for (i=0;im;i
132、+) for (j=0;jn;j+) printf(%5d,cij); printf(n); getch();9/7/20241029.36 编写程序打印出以下形式的乘法九九表。编写程序打印出以下形式的乘法九九表。 * A MULTIPCATION TABLE * (1) (1) (2) (2) (3)(3) (4) (4) (5) (5) (6) (6) (7) (7) (8) (8) (9)(9) (1) (1) 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 (2) (2) 2 2 4 4 6 6 8 8 10 10 12 12 14 14 16 16 1818
133、(3) (3) 3 3 6 6 9 9 12 12 15 15 18 18 21 21 24 24 27 27 (4) (4) 4 4 8 8 12 12 16 16 20 20 24 24 28 28 32 32 36 36 (5) (5) 5 5 10 10 15 15 20 20 25 25 30 30 35 35 40 40 45 45 (6) (6) 6 6 12 12 18 18 24 24 30 30 36 36 42 42 48 48 54 54 (7) (7) 7 7 14 14 21 21 28 28 35 35 42 42 49 49 56 56 64 64 (8) (8
134、) 8 8 16 16 24 24 32 32 40 40 48 48 56 56 64 64 72 72 (9) (9) 9 9 18 18 27 27 36 36 45 45 54 54 63 63 2 2 81 81 9/7/2024103【参考答案】【参考答案】main()int i,j,k; printf(n * A MULTIPLICATION TABLE *n); printf( ); for(i=1;i10;i+) printf(%3d),i); printf(n -n); for(i=1;i10;i+) for(j=0;j10;j+) if(j=0) printf( %d),
135、i); else printf(%5d,i*j); printf(n); printf(n -n); getch();9/7/20241049.37 9.37 调用随机函数为调用随机函数为5*45*4的矩阵置的矩阵置100100以内的整数,输出该矩阵,求出每以内的整数,输出该矩阵,求出每行元素之和,并把和值最大的那一行与第一行上的元素对调。若已定义行元素之和,并把和值最大的那一行与第一行上的元素对调。若已定义x x为为intint类型,调用随机函数步骤如下:类型,调用随机函数步骤如下: #include stdlib.h . .#include stdlib.h . . x=rand( x=r
136、and()%100 /*)%100 /*产生产生0 0到到100100的随机数的随机数*/ */ 【参考答案】【参考答案】#include stdio.h#include stdlib.hmain()static int m55=0,i,j; int k=0; printf(nBefore :n); for (i=0;i5;i+) for(j=0;j5;j+) mij=rand()%100; printf(%4d,mij); if (+k)%5=0) printf(n); printf(nAfter:n); for (i=0;i5;i+) for(j=0;ji;j+) k=mij; mij=m
137、ji; mji=k; k=0; for (i=0;i5;i+) for(j=0;j5;j+) printf(%4d,mij); if (+k)%5=0) printf(n); printf(n Program end ! n);9/7/20241059.38 9.38 调用随机函数为调用随机函数为5555的矩阵置的矩阵置100100以内的整数,输出该矩以内的整数,输出该矩阵,然后逆置该矩阵。即将第一列的元素放在第一行上、第二阵,然后逆置该矩阵。即将第一列的元素放在第一行上、第二列的元素放在第二行上、其它依次类推。列的元素放在第二行上、其它依次类推。 【参考答案】【参考答案】#include s
138、tdio.hmain() int m55=0,i,j; int k=0; printf(nBefore :n); for (i=0;i5;i+) for(j=0;j5;j+) mij=rand()%100; printf(%4d,mij); if (+k)%5=0) printf(n); printf(nAfter:n); for (i=0;i5;i+) for(j=0;ji;j+) k=mij; mij=mji; mji=k; printf(%4d,mij); if (+k)%5=0) printf(n); k=0; for (i=0;i5;i+) for(j=0;j5;j+) printf
139、(%4d,mij); if (+k)%5=0) printf(n); printf(n Program end ! n); getch();9/7/2024106第十章第十章 字符串字符串 一一.选择题选择题10.1 以下能正确进行字符串赋值、赋初值的语句组是以下能正确进行字符串赋值、赋初值的语句组是 A) char s5=a,e,i,o,u; B) char *s; s=good!; C) char s5=good!; D) char s5; s=good; 赋数组赋数组5个字符,无个字符,无法加入法加入0赋数组赋数组5个字符,无法个字符,无法加入加入0,s5应改应改为为s6不可以对数组名直
140、接赋值不可以对数组名直接赋值10.2 以下程序的输出结果是以下程序的输出结果是A) 68 B) 0 C) 字符字符D的地址的地址 D)不能确定的值不能确定的值 char str =ABCD,*p=str; printf (%dn,*(p+4);10.3 以下程序段的输出结果是以下程序段的输出结果是A) 11 B) 10 C) 9 D) 8 printf (%dn,strlen(ATSn0121) ;9/7/2024107【10.410.4】当运行以下程序时输入当运行以下程序时输入OPEN THE DOOR(此处此处代表代表Enter 键键), 则输出的结果是则输出的结果是 A) opEN tH
141、E dOOR B) open the door C) OPEN THE DOOR D) Open The Door #include stdio.h char fun ( char *c ) if ( *c = A) *c - =A-a; return *c; main( ) char s81 , *p=s; gets(s); while(*p) *p=fun(p);putchar(*p); p+ putchar ( “ n “ ); 9/7/202410810.5 以下程序的输出结果是以下程序的输出结果是 A) GFEDCBA B) AGAAGAG C) AGAAGAG D) GAGGAGA
142、 #include stdio.h#include string.hvoidfun ( char *w, int m )chars, *p1 , *p2 ;p1=w;p2=w+m-1;while(p1p2) s=*p1+; *p1=*p2- *p2=s; main( )chara =ABCDEFG;fun ( a , strlen(a) );puts(a);A B C D E FG0AGAp1p2GA9/7/202410910.6 以下程序的输出结果是以下程序的输出结果是A) ABCDB) A C) DD) ABCD BCD B C ABC CD C B AB D D A Amain ( )
143、chars =ABCD, *p; for( p=s; ps+4; p+ ) printf(%sn,p);10.7 设有如下定义设有如下定义: char*aa2 = abcd , ABCD ;则以下说法正确的是则以下说法正确的是A) aa数组元素的值分别是数组元素的值分别是abcd 和和 ABCDB) aa是指针变量是指针变量,它指向含有两个数组元素的字符型一维数组它指向含有两个数组元素的字符型一维数组C) aa数组的两个元素分别存放的是含有四个字符的一维数组数组的两个元素分别存放的是含有四个字符的一维数组的首地址的首地址 D) aa数组的两个元素中各自存放了字符数组的两个元素中各自存放了字符
144、a 和和 A 的首地址的首地址aa0aa1a b cd0A B C D09/7/202411010.8 以下程序的输出结果是以下程序的输出结果是 A)6385B) 69825 C) 63825 D) 693825main( )charch25 = 6937,8254 , *p2; inti , j , s = 0 ;for ( i=0 ; i 2 ; i+ )pi=chi;for ( i=0 ; i0 &pij=9;j+=2) s=10*s+pij-0;printf(%dn,s); P0P16937082540j=0j=2j=0j=29/7/202411110.9 以下程序的输出结果是以下程序
145、的输出结果是 A) ABCDEFGHIJKL B) ABCD C) ABCDEFGHIJKLMNOP D) AEIMmain( )char*alpha6= ABCD,EFGH,IJKL,MNOP,QRST,UVWX;char *p;int i;p=alpha;for( i=0;i&b0) putchar(*chp);putchar(n);GFEDCBGFEDCBA B C D E F G 0bchp9/7/202411310.12 以下程序的输出结果是以下程序的输出结果是_。 #includestdio.h void fun(char *a1, char *a2, int n) int k;
146、for (k=0;k=0;i-,i-) printf(%c,*pi); printf(n); SOSOP0P1P2P3BOOL0OPK0H0SP09/7/202411410.14 当运行以下程序时从键盘输入字符串当运行以下程序时从键盘输入字符串qwerty和和abcd,则程序的输出结则程序的输出结果是果是_。 #include stdio.h#include string.h strle (char a , char b ) int num=0,n=0; while (*(a+num)!=0) num+; while (bn)*(a+num)=bn; num+;n+ return(num);
147、main( ) char str181,str281,*p1=str1,*p2=str2; gets(p1);gets(p2); printf(%dn,strle(p1,p2); 10q w e r t y 0 0 0aba b c d 09/7/202411510.15 以下程序的输出结果是以下程序的输出结果是_。 #include string.h #include ctype.h void fun(char str ) int i , j ; for(i=0,j=0; stri; i+) if ( isalpha (stri) ) strj+=stri; stri=0; main( )
148、char ss80=It is!; fun(ss); printf(%sn,ss); ItisItis!00Itis00010.16 以下以下fun函数的功能是将一个字符串的内容颠倒过来,请填空。函数的功能是将一个字符串的内容颠倒过来,请填空。 #include string.h void fun(char str ) int i , j , k ; for ( i=0 , j= ; i j ; i+ , _ ) k=stri; stri=strj; strj=k; strlen(str)j-9/7/202411610.17 以下程序的输出结果是以下程序的输出结果是_。 printf(%dn,
149、strlen(sn0160end) );310.18 以下程序的输出结果是以下程序的输出结果是_。 char s20=goodgood!,*sp=s; sp=sp+2; sp=to; puts(s);goodgood!S未改变!未改变!三三.编程题编程题10.19 请编写函数请编写函数mygets和和myputs,其功能分别与其功能分别与gets和和puts相同相同, 函数中用函数中用getchar和和putchar读入和输出字符。读入和输出字符。9/7/202411710.19 请编写函数请编写函数mygets和和myputs,其功能分别与其功能分别与gets和和puts相同相同, 函数中用
150、函数中用getchar和和putchar读入和输出字符。读入和输出字符。【参考答案】【参考答案】#include #include mygets(s)char *s; char ch; ch=getchar(); while (ch!=10) *s=ch; s+;ch=getchar(); *s=0;myputs(s)char *s; int i,n; n=strlen(s); for(i=0;in;i+) putchar(*s+);main()char *str,s80; str=s; printf(Input a string:); mygets(str); printf(nOutput
151、the string:n); myputs(str); printf(n); getch();9/7/202411810.20 请编写函数,判断一字符串是否是回文。若是回文函数返回值为请编写函数,判断一字符串是否是回文。若是回文函数返回值为1;否;否则返回值为则返回值为0。回文是顺读和倒读都一样的字符串。回文是顺读和倒读都一样的字符串。 【参考答案】【参考答案】#include main() char *str ; str=(char*)malloc(1); printf(Input a string:n ); gets(str); if (fun(str) printf(nThis is b
152、ack-round-textn); else printf(nThis is not back-round-textn); getch();fun(char *s)int n,i,j, flag=1; n=strlen(s); for (i=0,j=n-1;ij;i+,j-) if(*(s+i)!=*(s+j) flag=0; return(flag); 9/7/202411910.21 请编写函数,删除字符串中指定位置上的字符。删除成请编写函数,删除字符串中指定位置上的字符。删除成功函数返回被删字符;否则返回空值。功函数返回被删字符;否则返回空值。 【参考答案】【参考答案】#include
153、#include char deltet(s,n)char *s; int n; char ch; if (nstrlen(s) printf(nCANNOT DELETE IT ! %c,007); return(0); else ch=*(s+n); do *(s+n)=*(s+n+1); n+; while(*(s+n-1)!=0); return(ch); main()char str80,*p,ch; int n; printf(nInput a string:n); p=str+1; gets(p); printf(nDelete the nth character: ); sca
154、nf(%d,&n); ch=deltet(str,n); printf(“nAfter delete the string :(ch=%c)n,ch); for(n=1;n2) return (fib(n-1)+fib(n-2); else erturn(2); main( ) printf(“%ldn”,fit(6) ); fib(6)=fib(5)fib(4)fib(4)fib(3)fib(3)fib(2)fib(3)fib(2)fib(2)fib(1)fib(2)fib(1)fib(2)fib(1)22222222=169/7/202412211.5 假定以下程序经过编译和连接后生成可执
155、行文件假定以下程序经过编译和连接后生成可执行文件PROG.EXE,如果在如果在DOS提示符下键入提示符下键入: PROG ABCD EFGH IJKL (表示表示Enter键键), 则输出结果是则输出结果是:_.main( )(int atgc, char *argv) while(-argc0) printf(%s, argvargc);printf(n); 二二二二. .填空题填空题填空题填空题IJKLEFGHABCD11.6 以下程序的输出结果是以下程序的输出结果是_.fun(int x)int p; if(x=0|x=1) return(3); p=x-fun(x-2); return
156、 p;main( ) printf(%dn, fun(9); 7Fun(9)返回返回p=9-fun(7)p=7-fun(5)p=5-fun(3)p=3-fun(1)305279/7/202412311.7 以下程序的输出结果是以下程序的输出结果是_.fun (int n,int *s) int f1,f2; if (n=1|n=2) *s=1; else fun(n-1,&fi); fun(n-2,&f2); *s=f1+f2; main( ) int x; fun(6,&x); pirntf(%dn,x); 8斐波那切数列:斐波那切数列:1, 1, 2, 3, 5, 8, 13, 21,89
157、/7/202412411.8 以下程序调用以下程序调用invert函数按逆序重新放置函数按逆序重新放置a数组中元素的数组中元素的值值,a数组中的值在数组中的值在main函数中读入函数中读入. 请填空请填空.#define n 10void invert (int *s, int i , int j) int t; if(ij) t=*(s+i); *(s+i)= ; *(s+j)=t; invert (s, ,j-1); main( ) int aN,i; for(i=0;iN;i+) scanf(%d,a+_); invert(a,0,N-1); for(i=0;iN;i+) printf(
158、%d,ai); printf(n);*(s+j)i+1i9/7/202412511.9 以下程序的输出结果是以下程序的输出结果是_.funa(int a, int b) return a+b;funb(int a, int b) return a-b;sub (int(*t)( ), int x, int y) return(*t)(x,y); main( ) int x,(*p)(int,int); p=funa; x=sub(p,9,3); x+=sub(funb,8,3); printf(“%dn”,x); 17x=12x=12+5=179/7/202412611.10 以下程序中以下程
159、序中trap函数是一个用梯形法求定积分的通用函数,梯形法求函数是一个用梯形法求定积分的通用函数,梯形法求定积分定积分s的公式为:的公式为: n-1n-1 s= s=(f f(a a)+f+f(b b)/2+ f/2+ f(a+i*ha+i*h)*h h=|(a-b)/n|*h h=|(a-b)/n| i=1 i=1 其中,其中,n为积分小区间数,以下程序调用为积分小区间数,以下程序调用trap函数求定积分,被积函数是:函数求定积分,被积函数是: f(x)=x*x+3*x+2, 且且 n=1000,a=0,b=4.#include “math.h”double trap (double ,dou
160、ble a, double b) double t, h; int i, n=1000; t=0.5*(*fun)(a)+(*fun)(b); h=fabs(a-b) / (double)(n); for( i=1;i=n-1;i+) t=t+ ; t=t*h; return(t); double mypoly (double x) return (x*x+3.0*x+2.0); main( ) double y,(*pf) (double, double ); pf= ; y=trap (pf, 0.0, 4.0); printf (“%fn”,y); (*fun)( )(*fun)(a+i
161、*h )mypolyxabyh9/7/2024127三、编程题三、编程题11.1111.11编写程序编写程序outchoutch,程序读入一行字符,根据命令行中的参数不同的,程序读入一行字符,根据命令行中的参数不同的输出。输出。若有命令行:若有命令行:outch -2outch -2 程序对所读入的一行字符输出最后两个字符。程序对所读入的一行字符输出最后两个字符。 若有命令行:若有命令行:outch +6outch +6程序对所读入的一行字符输出开头程序对所读入的一行字符输出开头6 6个字符。个字符。若命令行中没有参数,则隐含规定输出最后若命令行中没有参数,则隐含规定输出最后1010个字符。个
162、字符。为简单起见,命令行的参数中只含一个数字。为简单起见,命令行的参数中只含一个数字。【参考答案】【参考答案】#include main(int argc, char *argv) char *str, *p; int i,k; str=(char*)malloc(50); printf(nInput a text line ( 10 letters):n); scanf(%s,str); p=argv1; k=strlen(str); if (argc=2) if (*p=+) for (i=0;i(*(p+1)-0);i+) printf(%c,*(str+i); else if (*p=
163、-) for(i=k-*(p+1)+0; i=k;i+) printf(%c,*(str+i); else for( i=k-10; ik; i+) printf(%c,*(str+i); getch( );9/7/202412811.12 请写递归函数,把输入的一个整数转换成二进制数输出。请写递归函数,把输入的一个整数转换成二进制数输出。【参考答案】【参考答案】int i;ten_to_two(int a ,int n) if (n=0) ai=0; else if (n=1) ai=1; else ai+=n%2; n=n/2; ten_to_two(a,n); main()int a16
164、=0; int n,k; i=0 ;error:printf(nInput an number: ); scanf(%d,&n); if (n=0;k-) printf(%d,ak); getch();9/7/202412911.13 请用递归算法,求请用递归算法,求1+2+3+n,n由键盘输入。由键盘输入。【参考答案参考答案】Sumf(int m) if (m=1) return(1); else return(m+sumf(m-1);main() int n; printf(Input n: ); scanf(%d,&n); if (n0) printf(%d,sumf(n); else
165、printf(Input error ! %c,7); getch();9/7/202413011.14 请用递归算法,求斐波拉切级数。求请用递归算法,求斐波拉切级数。求n阶斐波拉切级数阶斐波拉切级数的公式如下:的公式如下: 1 当当n=0n=0时时 F(n)= 1 当当n=1n=1时时 F(n-1)+F(n-2) 当当n1n1时时【参考答案】【参考答案】long fib(int n)if (n=0|n=1) return(1); else return(fib(n-2)+fib(n-1);main() int n; printf(nInput n(=0) printf(%ld,fib(n);
166、 else printf(nInput error ! %c,7); getch();9/7/2024131第十二章第十二章第十二章第十二章 C C语言中用户标识符的作用域和存储类语言中用户标识符的作用域和存储类语言中用户标识符的作用域和存储类语言中用户标识符的作用域和存储类一一一一. .选择题选择题选择题选择题12.1 以下程序的输出结果是以下程序的输出结果是A) 1,6,3,1,3 B) 1,6,3,2,3 C) 1,6,3,6,3 D)1,7,3,2,3main() int i=1, j=3; printf(“%d,”,i+); int i=0; i +=j *2; printf(“%d
167、,%d,” , i, j); printf(“%d,%dn” , i, j);i=6,j=3,i=1,i=2,j=39/7/202413212.2 以下程序的输出结果是以下程序的输出结果是 A) 1 2 3 4 B) 4 3 2 1 C) 0 0 0 0 D) 4 4 4 4main( ) int a =1,2,3,4 ,i,x=0; for(i=0; i4; i+) sub(a,&x); printf(“%d”, x); printf(“n”); sub( int *s, int *y) static int t=3; *y=st; t- ; t=3 *y=4t=2 *y=3t=1 *y=2
168、t=0 *y=112.3 以下程序的输出结果是以下程序的输出结果是 A) 8,17 B) 8,16 C) 8,20 D) 8,8main( ) int k=4, m=1,p; p=func(k,m); printf(“%d,”,p); p=func(k,m); printf(“%dn”,p);func( int a, int b); static int m, i=2;i+=m+1;m=i+a+b;return(m);41i=2+0+1=3m=3+4+1=8返回返回m=8(打印)(打印)41i=3+8+1=12m=12+4+1=17返回返回m=17(打印)(打印)9/7/202413312.4
169、 以下程序的输出结果是以下程序的输出结果是 A) 34756 B) 23445 C) 35745 D) 12345void fun(int *s) static int j=0; do sj+=sj+1; while(+j2);main( ) int k,a10=1,2,3,4,5; for (k=1; k3; k+) fun(a); for (k=0; k5; k+) printf(“%d”,ak ); 1234500000ak=1,j=035k=2,j=279/7/202413412.5 以下程序的输出结果是以下程序的输出结果是 A) 3 B) 6 C) 5 D) 4f(int a) in
170、t b=0; static int c=3; a=c +, b +; return( a );main( ) int a=2,i,k; for(i=0 ; i2; i+) k=f(a+); printf(“%dn”,k);优先优先 a=3 a=3 a=49/7/202413512.6 以下程序的输出结果是以下程序的输出结果是 A) 1 B) 2 C) 7 D) 10int m=13;int fun2(int x, int y) int m=3; return(x * y m);main( ) int a=7,b=5; printf(“%dn”,fun2(a,b)/m ); 757*5- -3=
171、3232/13=212.7 C语言中语言中, 形参的缺省的存储类说明是形参的缺省的存储类说明是 A) auto ( 自动自动 ) B) static ( 静态静态 ) C) register ( 寄存器寄存器 ) D) extern ( 外部外部 )12.8 以下叙述不正确的是以下叙述不正确的是A)一个变量的作用域完全取决于变量定义语句的位置)一个变量的作用域完全取决于变量定义语句的位置.B)全局变量可以在函数以外的任何部位进行定义)全局变量可以在函数以外的任何部位进行定义.C)局部变量的)局部变量的”生存期生存期”只限于本次函数调用只限于本次函数调用,因此不可能将局部变量的因此不可能将局部变
172、量的运算结果保存至下一次调用运算结果保存至下一次调用.D)一个变量说明为)一个变量说明为static存储类是为了限制其它编译单位的引用存储类是为了限制其它编译单位的引用.还取决于变量类型还取决于变量类型还取决于变量类型还取决于变量类型9/7/202413612.9 以下程序的输出结果是以下程序的输出结果是 。main( ) int a=3, b=2, c=1; c-=+b; b*=a+c; int b=5, c=12; c/=b*2; a-=c; printf(“%d,%d,%d,”,a,b,c); a+=- -c; printf(“%d,%d,%dn”,a,b,c);二二二二. . 填空题填
173、空题填空题填空题2,5,1,2,3,-2c=c-(+b)=-2c=c-(+b)=-2b=b*(a+c)=3*(3-2)=3b=b*(a+c)=3*(3-2)=3c=c=1212/( /(5 5*2)=*2)=1 1a=a-c=3-1=2a=a-c=3-1=2打印打印,a=a+(-c)=2+a=a+(-c)=2+0 0=2=2打印打印,3 3 3 3,-2 -2-2 -29/7/202413712.10 以下程序的输出结果是以下程序的输出结果是_.void fun( ) static int a; a +=2; printf(“%d”,a ); main( ) int cc; for(cc=1;
174、 cc=4 ; cc+) fun( ); printf(“n”) 2468a的初值是的初值是0 调用调用fun( )4次:次:a=a+2=2 a=a+2=2 打印打印 2 a=a+2=4 打印打印 4 a=a+2=6 打印打印 6 a=a+2=8 打印打印 89/7/2024138第十三章第十三章 编译预处理和动态存储分配编译预处理和动态存储分配一一一一. . 选择题选择题选择题选择题13.1 以下程序的输出结果是以下程序的输出结果是A) 15 B) 100C) 10D) 150#define MIN(x,y) (x)(y)?(x):(y)main( ) int i,j,k; i=10: j=
175、15; k=10*MIN(i,j); printf(%dn,k); k=10*(10)(15)?(10):(15) =100(15)?(10):(15) =0?(10):(15) =15 9/7/202413913.2 以下程序中的以下程序中的for循环执行的次数是循环执行的次数是A) 5 B) 6C) 8 D) 9#define N 2#define M N+1#define NUM (M+1)*M/2main( ) int i; for (i=1:i=NUM; i+); printf(%dn,i);i=(2+1+1)*2+1/2=813.3 以下程序的输出结果是以下程序的输出结果是A) 1
176、1 B) 12C) 13 D) 15#define FUDGF(y) 2.84+y#define PR(a) printf(%d,(int)(a)#define PRINT1(a) PR(a): putchar(n)main() int x=2; PRINT1(FUDGF(5)*x);printf(“%d”,12);putch(n);printf(“%d”,12);putch(n);9/7/202414013.4 以下程序的输出结果是以下程序的输出结果是A) 1 B) 7C) 9 D) 11fut(int *s, int P23) *s=p11; main( ) int a23=1,3,5,7
177、,9,11 ,*p; p=(int *)malloc(sizeof(int); fut(&p,a); printf(%dn,*p);a1 3 57 9 11*s13.5 若要使指针变量若要使指针变量P指向一个指向一个double类型的动态存储单元类型的动态存储单元,在下在下划线处应填入划线处应填入 A) double B) double*C) (*double) D) (double *)double *p;p=_malloc(sizeof(double);9/7/202414113.6 以下程序的输出结果是以下程序的输出结果是 void fun(float *p1,float *p2,flo
178、at *s) s=(float *)calloc(1,sizeof(float) ); *s=*p1+*p2+;main( ) float a2=1.1, 2.2,b2=10.0, 20.0,*s=a; fun(a,b,s); printf(%5.2fn,*s);*p1*p213.7 以下叙述中正确的是以下叙述中正确的是A) 用用#include包含的头文件的后缀不可以是包含的头文件的后缀不可以是.a. B) 若一些源程序中包含某个头文件若一些源程序中包含某个头文件; 当该头文件有错时当该头文件有错时,只只需对该头文件进行修改需对该头文件进行修改, 包含此头文件所有源程序不必重新进包含此头文件
179、所有源程序不必重新进行编译行编译.C) 宏命令行可以看做是一行宏命令行可以看做是一行C语句语句.D) C编译中的预处理是在编译之前进行的编译中的预处理是在编译之前进行的.9/7/2024142二二. 填空题填空题13.8 以下程序的输出结果是以下程序的输出结果是。#define PR(ar) printf(ar=%d ,ar)main( ) int j,a=1,3,5,7,9,11,13,15,*p=a+5; for (j=3; j; j-)switch(j)case 1 : case 2 : PR(*p+); break; case 3 : PR(*(-p); ar=9 ar=9 ar=11
180、pj=3 -p 先减后打印先减后打印 ar=9j=2 p+ 先打印后加先打印后加 ar=9pp ppj=1 p+ 先打印后加先打印后加 ar=11pp9/7/202414313.9 下面程序调用下面程序调用getone函数开辟一个动态存储单元函数开辟一个动态存储单元,调用调用assone函数把数据输入此动态存储单元函数把数据输入此动态存储单元, 调用调用outone函数输出此函数输出此动态存储单元中的数据动态存储单元中的数据.请填空请填空.#include stdlib.hgetone(int *s) *s=(_)malloc(sizeof(int); assone(int *s) scanf
181、(%d,_);outone int *b) printf(%dn,_);main() int *P; getone(&p); assone(p);outone(p);int*s*b9/7/2024144三三. 编程题编程题13.10 请写出一个宏定义请写出一个宏定义MYALPHA(C),用以判断用以判断C是否是字母是否是字母字符字符,若是若是,得得1,否则得否则得0.【参考答案】【参考答案】#include #define MYALPHA(C) (isalpha(C)main() char ch; printf(Input a character: ); scanf(%c,&ch); if (
182、MYALPHA(ch) printf(nThis is a letter !); else printf(nThis is not a letter ! ); getch();9/7/202414513.11 请写出一个宏定义请写出一个宏定义swap(t,x,y)用以交换用以交换t类型的两个参数类型的两个参数. 提示提示:用复合语句的形式用复合语句的形式.【参考答案】【参考答案】#define SWAP(t,x,y) (t)=(x);(x)=(y);(y)=(t);main()int x,y,t; printf(nInput x & y :); scanf(%d%d,&x,&y); SWAP(
183、t,x,y) printf(nx=%d y=%d,x,y); getch();9/7/202414613.12 请编写程序请编写程序,利用利用malloc函数开辟动态存储单元函数开辟动态存储单元,存放输入存放输入的三个整数的三个整数. 然后按从小到大的顺序输出这三个数然后按从小到大的顺序输出这三个数.【参考答案】【参考答案】main()int w,*px,*py,*pz; px=(int *)malloc(sizeof(int); py=(int *)malloc(sizeof(int); pz=(int *)malloc(sizeof(int); printf(nInput three nu
184、mber :); scanf(%d%d%d,px,py,pz); if(*px*py) w=*px;*px=*py;*py=w; if(*px*pz) w=*px;*px=*pz;*pz=w; if(*py*pz) w=*py;*py=*pz;*pz=w; printf(nAfter exchange : ); printf(%d %d %d,*px,*py,*pz); getch();9/7/2024147第十四章第十四章 结构体、共用体和用户定义类型结构体、共用体和用户定义类型一一. 选择题选择题14.1 根据以下的定义根据以下的定义,能输出字母能输出字母M的语句是的语句是)printf(
185、%cn,class3.name);)printf(%cn,class3.name1);)printf(%cn,class2.name1); )printf(%cn,class2.name0); struct person char name9;int age; struct person class10=John,17, Paul,19, Mary,18, “Adam”,16,;14.2 以下程序的输出结果是以下程序的输出结果是A)0B)1C)3D)6main()struct cmplxint x; int y; cnum2=1,3,2,7; printf(“%dn”,cnum0.y/cnum
186、0.x*cnum1.x);cnum0cnum1xy3/1*2=69/7/202414814.3 若有以下说明和语句若有以下说明和语句,则值为则值为6的表达式是的表达式是 A) p+- -n B) p- -n+C) (*p).n+D) +p- -nstruct st int n; struct st *next; ;struct st a3,*p;a0.n=5; a0.next=&a1;a1.n=7; a1.next=&a2;a2.n=9; a0.next=0;p=&a0;a0a1a2579 0p555614.4 已知字符已知字符0的的ASCII代码值的十进制数是代码值的十进制数是48,且数组的
187、第,且数组的第0个元素在低位,个元素在低位,以下程序的输出结果是以下程序的输出结果是 A) 39 B) 9 C) 38 D) 8main( ) union int i2; long k;char c4;r,*s=&r; s-i0=0x39;s-i1=0x38; printf(%xn,s-c0);c3c2c1c000380039i1i0 k9/7/202414914.5 以下程序的输出结果是以下程序的输出结果是 A) 32B) 16C) 8 D) 24typedef union long x2; int y4; char z8; MYTYPE;MYTYPE them;main( ) printf
188、(“%dn”,sizeof(them); 2*4=84*2=88*1=8max=89/7/202415014.6 以下程序的输出结果是以下程序的输出结果是 A) 10B) 50C) 51D) 60 20 60 60 70 20 21 11 31 struct st int x; int *y; *p; int dt4=10,20,30,40; struct st aa4=50,&dt0,60, &dt0,60, &dt0,60, &dt0,; main( ) p=aa; printf(“%dn”,+p-x); printf(“%dn”,(+p)-x); printf(“%dn”,+(*p-y)
189、; 10203040dt50606060aapyx打印打印51,p未改变未改变打印打印60,p先加后取值先加后取值打印打印119/7/202415114.7 若已建立下面的链表结构若已建立下面的链表结构,指针指针p,s分别指向图中所示结点分别指向图中所示结点,则不能将则不能将s所指的结点插入到链表末尾的语句是所指的结点插入到链表末尾的语句是A) s-next=NULL; p=p-next; p-next=s;B) p=p-next;s-next=p-next;p-next=s;C) p=p-next; s-next=p; p-next=s;D) p=(*p).next; (*s).next=(
190、*p).next=s;datanextheadpsEF 0G9/7/202415214.8 以下程序的输出结果是以下程序的输出结果是A) 25B) 30C) 18D) 8 typedef union long i; int k5; char c; DATE; struct date int cat; DATE cow; double dog; too; DATE max; main( ) printf(“%dn”,sizeof(struct date)+sizeof(max); 4101max=102108相加相加=2020109/7/2024153 二二. 填空题填空题14.9 为建立如图结
191、构为建立如图结构(每个节点有二个域每个节点有二个域:data是数是数据域据域,next是指针域是指针域)请填空。请填空。struct link char data ; ; node;data nextstruct link *next9/7/202415414.10 以下以下min 函数的功能是:查找带有头结点的单向链表中,函数的功能是:查找带有头结点的单向链表中,结点数据域的最小值作为函数值返回。请填空。结点数据域的最小值作为函数值返回。请填空。 struct node int data; struct node *next; ;int min (struct node *first) st
192、ruct node *p; int m; p=first-next; m=p-data; for (p=p-next;p!=0; p=_) if(_) m=p-data; return m; data nextfirstp-nextp-nextp-datadatadata=ch;q-next=p;q=P;ch=getchar( );p-next=0;_; (struct list *)struct list (struct list *)struct list return(h) 9/7/2024156三三三三 、编程题、编程题、编程题、编程题 14.12 设有以下结构类型说明:设有以下结构类
193、型说明:struct stud char num5,name10;int s4;double ave;请编写:请编写:(1) 函数函数readrec把把30名学生的学号、姓名、四项成绩以及平均分放在一名学生的学号、姓名、四项成绩以及平均分放在一个结构体数组中,学生的学号个结构体数组中,学生的学号、姓名和四项成绩由键盘输入,然后计算出平、姓名和四项成绩由键盘输入,然后计算出平均分放在结构体对应的域中。均分放在结构体对应的域中。(2) 函数函数writerec输入输入30名学生的记录。名学生的记录。(3) main函数调用函数调用readrec函数和函数和writerec函数,实现全部程序功能(注
194、:函数,实现全部程序功能(注:不允许使用全局变量,函数之间的数据全部使用参数传递)。不允许使用全局变量,函数之间的数据全部使用参数传递)。14.13 已知已知head指向一个带头结点的单向链表指向一个带头结点的单向链表,链表中每个结点包含数据域链表中每个结点包含数据域(data)和指针域和指针域(next),数据域为整型。请分别编写函数,在链表中查找数据域值最大的结点:数据域为整型。请分别编写函数,在链表中查找数据域值最大的结点:(1) 由函数值返回找到的最大值由函数值返回找到的最大值(2) 由函数值返回最大值所在结点的地址值由函数值返回最大值所在结点的地址值9/7/2024157【参考答案】
195、【参考答案】struct studchar num5,name10; int s4; float ave;typedef struct stud STU;STU readrec(a)STU a31; int i; for(i=0;i4;i+) a0.si=0; printf(n Input 30 students data:n ); printf(- num name s1 s2 s3 s4 -n); for (i=1;i5 ;i+) printf(%d: ,i); scanf(%s%s%d%d%d%d,ai.num,ai.name,&ai.s0,&ai.s1, &ai.s2,&ai.s3);
196、 ai.ave=(ai.s0+ai.s1+ai.s2+ai.s3)/4.0; a0.s0+=ai.s0;a0.s1+=ai.s1; a0.s2+=ai.s2;a0.s3+=ai.s3; printf(n); a0.s0/=4;a0.s1/=4;a0.s2/=4;a0.s3/=4;9/7/2024158STU writerec(a)STU a31;int i; printf(n Output 30 students data: n); printf(- num name s1 s2 s3 s4 ave -n); for(i=1;i5 ;i+) printf(n%5s %10s %4d %4d %
197、4d %4d %6.2f,ai.num,ai.name, ai.s0,ai.s1, ai.s2,ai.s3,ai.ave); printf(nn AVE: %d %d %d %d , a0.s0,a0.s1,a0.s2,a0.s3);main()STU x31; readrec(x); writerec(x); getch();9/7/2024159第十五章第十五章 位运算位运算一一一一 选择题选择题选择题选择题15.1 以下程序的输出结果是以下程序的输出结果是A) 100B) 160C) 120D) 64main()char x=040;printf(%dn,x=x1);数据左移一位,值增大
198、一倍数据左移一位,值增大一倍040(8进制进制)0100 (8进制进制)64(10进制进制)15.2 以下程序中以下程序中C的二进制值是的二进制值是A) 00011011 B) 00010100 C) 00011100 D) 00011000char a=3,b=6,c;c=ab2;a=00000011b=00000110优先优先b2=00011000a=00000011 ab=000110119/7/202416015.3 以下程序的输出结果是以下程序的输出结果是A) 0B) 1C) 2D) 3 main( ) int x=35; char z=A; printf(“%dn”,(x&15)&
199、(zb)&(n=cd); 009/7/2024161二二二二. . 填空题填空题填空题填空题15.5 变量变量a的二进制数是的二进制数是00101101,若想通过运算若想通过运算ab使使a 的高四的高四位取反低四位不变,变量位取反低四位不变,变量b的二进制数是的二进制数是 。1111000015.6 a是任意整数能将变量是任意整数能将变量a清零的表达式是清零的表达式是 。a&015.7 a是任意整数能将变量是任意整数能将变量a中各二进制均置的表达式是中各二进制均置的表达式是 。a|0xFF15.8 能将两字节变量能将两字节变量x的高位均置,低字节不变的表达式的高位均置,低字节不变的表达式是是
200、。x|0xFF00运用位运算运用位运算,能将八进制数能将八进制数012500除以除以4.然后然后,赋给变量赋给变量a的表达的表达式是式是 。a=0125002 运用位运算运用位运算,能将变量能将变量ch中的大写字母转换成小写字母的表达中的大写字母转换成小写字母的表达式是式是 。 ch|0x20或者或者ch|329/7/2024162第十六章第十六章 文件文件一一.选择题选择题 标准库函数标准库函数fgets(s,n,f)fgets(s,n,f)的功能是的功能是A)A)从文件从文件f f中读取长度为中读取长度为n n的字符串存入指针的字符串存入指针s s所指的内存所指的内存B)B)从文件从文件f
201、 f中读取长度不超过中读取长度不超过n-1n-1的字符串存入指针的字符串存入指针s s 所指的内存所指的内存C)C)从文件从文件f f中读取中读取n n个字符串存入指针个字符串存入指针s s 所指的内存所指的内存D)D)从文件从文件f f中读取长度为中读取长度为n-1n-1的字符串存入指针的字符串存入指针s s所指的内存所指的内存 若若fp是指向某文件的指针是指向某文件的指针,且已读到文件末尾且已读到文件末尾,则库函数则库函数feof(fp)的返回值是的返回值是 A) EOF B) -1 C) 非零值非零值 D) NULL9/7/2024163二二.填空题填空题 以下以下C程序将磁盘中的一个文
202、件复制到另一个文件中程序将磁盘中的一个文件复制到另一个文件中,两个文两个文件名在命令行中给出件名在命令行中给出,(假定文件名无误假定文件名无误), 请填空请填空. #include stdio.h main(int argc, char *argv ) FILE *f1,f2; char ch; if(argc_) printf(命令行参数错命令行参数错!n); exit(0); f1=fopen(argv1,r); f2=fopen(argv2,w); while(_) fputc(fgetc(f1),_); _; _; !feof(f1)f2fclose(f1)fclose(f2)9/7/
203、2024164以下程序由终端键盘输入一个文件名以下程序由终端键盘输入一个文件名,然后把终端键盘输入的字然后把终端键盘输入的字符依次存放到该文件中符依次存放到该文件中,用用#作为结束的标志作为结束的标志.请填空请填空.#include stdio.hmain( ) FILE *fp char ch,fname10;prinhtf(Enter the mane of filen); gets(fname);if( (fp= )=NULL) printf(Open errorn); exit(0);printf(Enter data:n):while(ch=getchar( )!#) fputc(_
204、,fp);fclose(fp);fopen(fname,”w”)ch9/7/2024165以下文件用来统计文件中字符的个数以下文件用来统计文件中字符的个数,请填空请填空.#include “stdio.h”main( ) FILE *fp ; long num=0; if(fp=fopen(“fname.dat”, _)=NULL) printf(“Open errorn”); exit(0); while_ _; num+; printf(“num=%dn”,num); fclose(fp); “r”!feof(fp)fseek(fp,1,1)9/7/2024166 以下程序编译以下程序编译
205、.连接后生成可执行文件连接后生成可执行文件CPY.EXE.假定磁盘当前目录下有三假定磁盘当前目录下有三个文本文件个文本文件,其文件名和内容分别为其文件名和内容分别为:文件名文件名 内容内容a aaaa#b bbbb#c cccc#在在DOS当前目录下键入当前目录下键入:cpy a b c (此处此处代表代表ENTER键键),则程序输出则程序输出_.#include “stdio.h”void fc(FILE *);main(int argc,char *argv )FILE *fp; int i=1; while(-argc0) fp=fopen(argv i+,”r”);fc(fp);fcl
206、ose(fp);void fc(FILE *fp);char c;while(c=getc(ifp)!=#)putchar(c-32);AAAABBBBCCCC/*依次打开argv1、 argv2 、 argv3 内容*/*argc初值为4,执行三次循环*/*读出ifp文件中字符,打印相应大写字母,直到遇到号*/9/7/2024167三三.编程题编程题16.7 请调用请调用FPUTS函数函数,把戏把戏10个字符串输入到文件中个字符串输入到文件中,再从再从此文件中读入这十个字符串放在一个字符串数组中此文件中读入这十个字符串放在一个字符串数组中,最后把字符最后把字符串中的字符串输出到终端屏幕串中的
207、字符串输出到终端屏幕,以检验所有操作是否正确以检验所有操作是否正确.【参考答案】【参考答案】#include stdio.hmain() char *s,a200; int i; FILE *fp; if(fp=fopen(file_a,w+)=NULL) printf(nCannot open file ! %c%c,7,7); exit(0); printf(nInput 10 string :); for(i=1;i11;i+) printf(n%d: ,i); scanf(%s,s); fputs(s,fp); 接下一页9/7/2024168i=0; rewind(fp); while
208、(!feof(fp) fscanf(fp,%c,&ai+); ai=0; i=0; printf(nThe array a is :n); while(ai!=0) printf(%c,ai+); fclose(fp); getch();16.8 从键盘输入十个浮点数从键盘输入十个浮点数,以二进制形式存入文件中以二进制形式存入文件中,再从再从文件中读出数据显示在屏幕上文件中读出数据显示在屏幕上,修改文件第四个数修改文件第四个数.再从文件中读再从文件中读出数据显示在屏幕上出数据显示在屏幕上,以验证修改是否正确以验证修改是否正确.【参考答案】【参考答案】#include stdio.hmain()
209、 float x; int i; FILE *fp; if(fp=fopen(file_b,wb+)=NULL) printf(nCannot open file ! %c%c,7,7); exit(0); 接下一页接下一页9/7/2024169rewind(fp); printf(nInput 10 number:n); for(i=1;i11;i+) printf(%d: ,i); scanf(%f,&x); fwrite(&x,4,1,fp); /* cannot use fprintf */ rewind(fp); while(!feof(fp) fread(&x,4,1,fp);printf(n*%f,x); /* cannot use fscanf */ printf(n-); printf(nthe 4th number chang to : ); scanf(%f,&x); fseek(fp,3L*sizeof(float),0); fwrite(&x,4,1,fp); rewind(fp); while(!feof(fp) fread(&x,4,1,fp);printf(n*%f,x); fclose(fp); getch();9/7/20241709/7/2024171