C语言程序与设计第5章实验及习题答案.docx
- 文档编号:14984035
- 上传时间:2023-06-29
- 格式:DOCX
- 页数:21
- 大小:42.78KB
C语言程序与设计第5章实验及习题答案.docx
《C语言程序与设计第5章实验及习题答案.docx》由会员分享,可在线阅读,更多相关《C语言程序与设计第5章实验及习题答案.docx(21页珍藏版)》请在冰点文库上搜索。
C语言程序与设计第5章实验及习题答案
第5章实验及习题答案
5.6实验
实验任务1一维数组程序设计
二、实验内容
1.验证性实验
(1)验证【例5-2】程序(输入10个整数,存入数组中,分别按原序、逆序输出),回答题后问题。
①运行程序时如何输入数据?
请举例:
12345678910↙(也可用回车符间隔数据)。
②输入的10个数据分别存放在a[0]~a[9]中。
③若要计算10个整数的和,请写出此程序段并验证。
(2)验证【例5-4】程序(选择法排序),回答题后问题。
①语句“if(w!
=i){t=a[i];a[i]=max;a[w]=t;}”
实现的操作是在第i趟排序中,如果找出的最大数a[w]不在最前面,则与a[i]交换,否则不交换。
②请将随机产生的数据改为从键盘输入。
③请修改程序实现从小到大排序。
2.设计性实验
(1)把一组数{3,4,6,7,1,8,9,13,2,5,11,14}中的所有奇数找出,放在另一个数组中并输出,数据由初始化方式提供。
参考程序:
#include
main()
{inta[12]={3,4,6,7,1,8,9,13,2,5,11,14},b[12],i,j,m;
for(i=0;i<12;i++)/*输出原始数据*/
printf("%4d",a[i]);
printf("\n");
m=0;
for(i=0;i<12;i++)/*找奇数*/
if(a[i]%2==1){b[m]=a[i];m++;}
for(j=0;j printf("%4d",b[j]); } (2)利用随机数函数产生20个三位数,将这20个数从小到大排列并输出。 参照【例5-4】P127页选择法排序程序,只需做下列修改: ✧将N的值改为20 ✧将语句: a[i]=rand()%100;改为: a[i]=rand()%900+100; 也可参照【例5-4】和【例5-5】写出用冒泡法排序的程序。 (3)已知一个有序数列{3,5,6,8,11,14,19,23,25,35,41},要求从键盘输入一个任意数,将其插入到合适位置仍使数列有序,输出插入前、后的数列。 参照【例5-7】,参考程序如下: #include #defineN11 main() {inti,b[N+1]={3,5,6,8,11,14,19,23,25,35,41},x; printf("thesourceorderis: \n"); for(i=0;i printf("%4d",b[i]); printf("\n"); printf("Pleaseinputinsertdata: ");/*提示信息*/ scanf("%d",&x);/*输入插入的数据*/ for(i=N-1;i>=0;i--)/*后移数据*/ if(x elsebreak; b[i+1]=x;/*插入数据*/ printf("theresultis: \n"); for(i=0;i printf("%5d",b[i]); } (4)输入一个十进制数,将其转换成八进制数后输出结果。 参照【例5-8】只需将程序中的2改为8即可,也可用别的方法实现。 实验任务2二维数组程序设计 二、实验内容 1.验证性实验 (1)验证【例5-10】程序(二维数组求最小值及所在的位置),回答题后问题。 ①“printf("\n");”语句的作用是按行输出或输出换行。 ②不给min赋初值或给min赋初值为0,程序的运行结果会是什么? (有时会出现错误结果) ③输出时为什么要用row+1,col+1? (因为在数组中,行、列是从0数起的) (2)验证【例5-13】程序(杨辉三角形),回答题后问题。 ①语句“y[m][0]=1;y[m][m]=1;”实现的操作是给第1列和对角线上的元素赋值为1。 ②语句“if(n==0||n==m)y[m][n]=1;”实现的操作是作用同①。 ③语句“y[m][n]=y[m-1][n-1]+y[m-1][n];”实现的操作是给第1列和对角线上之外的元素赋值。 2.设计性实验 (1)设有二维数组如下: {{1,11,19,9,12},{2,5,20,1,18},{3,4,16,6,10},{4,15,2,17,3},{5,14,7,13,8},请按行(第2~5行)、按列(第2~5列)求和及总和,然后以二维表形式输出数据及求和结果,数据由初始化方式提供。 参照【例5-11】,参考程序如下: #include main() {inta[5+1][5+1]={{1,11,19,9,12},{2,5,20,1,18},{3,4,16,6,10}, {4,15,2,17,3},{5,14,7,13,8}},i,j,sum; for(i=1;i<=4;i++)/*按行求和*/ {sum=0; for(j=1;j<=4;j++) sum+=a[i][j]; a[i][5]=sum; } for(j=1;j<=5;j++)/*按列求和及总和*/ {sum=0; for(i=1;i<=4;i++) sum+=a[i][j]; a[5][j]=sum; } /*——————————————输出结果—————————————*/ for(i=0;i<=5;i++) {printf("\n"); for(j=0;j<=5;j++) printf("%4d",a[i][j]); } } (2)对一个m×n的矩阵,分别求两个对角线上的所有元素之和,然后输出这个矩阵及计算结果。 矩阵的数据由键盘输入。 参考程序: #include #defineM5 #defineN5 main() {inta[M][N],i,j,sum1=0,sum2=0; printf("请输入M行N列的矩阵: \n"); for(i=0;i {for(j=0;j scanf("%d",&a[i][j]); } for(i=0;i {sum1+=a[i][i];sum2+=a[i][M-1-i]; } for(i=0;i {for(j=0;j printf("%4d",a[i][j]); printf("\n"); } printf("sum1=%d,sum2=%d",sum1,sum2); } (3)对一个m×n的矩阵,交换指定的两列元素。 交换的两列列号由用户从键盘指定。 输出交换前后的矩阵。 矩阵的数据由初始化方式提供。 参考程序: #include #defineM3 #defineN5 main() {inta[M][N]={{1,11,19,15,2},{2,5,20,14,7},{3,4,16,4,5}}, i,j,m1,m2,t; printf("输出M行N列的矩阵: \n"); for(i=0;i {for(j=0;j printf("%4d",a[i][j]); printf("\n"); } printf("请输入要交换的两列列号: "); scanf("%d,%d",&m1,&m2); for(i=0;i {t=a[i][m1-1];a[i][m1-1]=a[i][m2-1];a[i][m2-1]=t; } printf("输出交换列后的矩阵\n"); for(i=0;i {for(j=0;j printf("%4d",a[i][j]); printf("\n"); } } 实验任务3字符串及数组综合程序设计 二、实验内容 1.验证性实验 (1)验证【例5-17】程序(输出一个字符串),回答题后问题。 ①输入字符串使用语句: scanf("%s",s3);。 ②输出字符串使用语句: printf("%s",s3);。 ③数组名s3代表数组s3的首地址。 (2)验证【例5-21】程序(输入/输出多个字符串),回答题后问题。 ①输入字符串使用语句: gets(city[i]);。 ②输出字符串使用语句: prints("%s\t",city[i]);。 ③city[i]代表二维数组city每行的首地址。 2.设计性实验 (1)从键盘输入自己的QQ号和密码,进行保存,并将密码加密(加密规则自定),然后将QQ号和加密后的密码输出。 设加密规则为: 按密码字母顺序依次加1,2,3…… 参考程序: #include #include #defineM10/*M代表字符串的最大长度*/ main() {charuser[M],pass1[M],pass2[M]; inti; printf("请输入用户名: "); gets(user); printf("请输入用户名密码: "); gets(pass1); for(i=0;i pass2[i]=pass1[i]+i+1; pass2[i]='\0'; puts(user); puts(pass1);puts(pass2); } (2)删除一个字符串中的所有空格字符,使非空格字符连续存放。 (算法提示1: 借助一个数组存放非空格字符。 算法提示2: 借助两个变量,在本字符串中进行删除、移动) 算法1参考程序: #include #include #defineM40/*M代表字符串的最大长度*/ main() {chars1[M],s2[M]; inti,n=0; printf("请输入带空格的字符串: "); gets(s1); for(i=0;i if(s1[i]! =''){s2[n]=s1[i];n++;} s2[n]='\0'; puts(s1); puts(s2); } (3)期末班级成绩处理。 设有学生5人,每人5科成绩,统计每个学生的总分、不及格课程门数,并按总分排名次,按下面格式输出排名后的成绩单。 数据由初始化方式提供。 学号姓名科目1科目2科目3科目4科目5总分名次不及格门数 实现的程序可参考(P164~165) 习题5 一、选择题 1.以下关于数组描述正确的是(C)。 A.数组的大小是固定的,但可以有不同类型的数组元素。 B.数组的大小是可变的,但所有数组元素的类型必须相同。 C.数组的大小是固定的,所有数组元素的类型必须相同。 D.数组的大小是可变的,可以有不同类型的数组元素。 2.以下不能正确定义一维数组的选项是(D)。 A.inta[5]={1,2,3,4,5};B.inta[]={1,2,3,4,5}; C.inta[5];D.intn=5,a[n]; 3.设有“inti,a[10];且0 A.a[10]B.a[i]C.a[2]D.a[10-i] 4.设有语句“inta[10]={1,2,3,4},i=0;”,则a[i+1]的值为(B)。 A.1B.2C.3D.4 5.若有“inta[8]={1,3,5,7,9,11};”,则a数组中的元素个数是(D)。 A.不确定B.6C.7D.8 6.若有“inta[10]={0,1,2,3,4,5};”,则对a数组元素的引用范围是(D)。 A.a[10]B.a[1]~a[10]C.0~5D.a[0]~a[9] 7.设有语句“inta[10]={1,3,5,7,9,11};”,则a[1]的值为(C)。 A.1B.2C.3D.4 8. 设有“inta[6]={1,2,3,4},i;”,不能正确输出a中所有元素值的语句是(A)。 A.B. C.D. 9.设有“inta[][2]={1,2,3,4,5,6,7};”,则值为3的数组元素是(C)。 A.a[1][3]B.a[2][1]C.a[1][0]D.a[3][1] 10.以下数组定义有错误的语句是(B)。 A.intx[][3]={0}; B.intx[2][3]={{l,2},{3,4},{5,6}}; C.intx[][3]={{l,2,3},{4,5,6}}; D.intx[2][3]={l,2,3,4,5,6}; 11.若有“intx[][2]={1,3,5,7,9,11,13};”,则x数组的行数为(C)。 A.2B.3C.4D.无确定值 12.设有“intx[3][4]={{1},{2},{3}};”,那么元素x[1][1]的取值是(A)。 A.0B.1C.2D.不确定 13.执行下面程序后的输出结果是(D)。 main() {inti,b[][3]={9,8,7,6,5,4,3,2,1}; for(i=0;i<3;i++) printf("%d",b[i][i]); } A.987B.357C.963D.951 14.以下不能正确初始化字符数组的选项是(D)。 A.charstr[10]="abcdef";B.charstr[]={"abcdef"}; C.charstr[10]="abc\0def";D.charstr[]={abcdef}; 15.设有“charstr[]="ABCDE";”,则能够正确输出str中字符串的语句是(C)。 A.printf("%c",str[0]);B.printf("%s",str[0]); C.printf("%s",str);D.printf("%s",&str); 16.有两个字符数组x、y,则能够正确对x、y进行输入的语句是(B)。 A.gets(x,y)B.scanf("%s%s",x,y); C.scanf("%s%s",&x,&y);D.gets("x");gets("y"); 17.下面程序运行后的输出结果是(C)。 (注: 请此题中p、q改为s1、s2) main() {chars1[]={'a','b','c'},s2[]="abc"; printf("%d%d\n",sizeof(s1),sizeof(s2)); } A.44B.33C.34D.43 18.判断字符串a和b是否相等,应当使用(D)。 A.if(a==b)B.if(a=b) C.if(strcpy(a,b))D.if(strcmp(a,b)) 19.以下程序的输出结果是(A)。 main() {charstr[20]="hello\0OK"; printf("%d,%s",strlen(str),str); } A.5,helloB.9,helloC.5,helloOKD.7,helloOK10 20.设有“chars1[20]="abc",s2[20]="123";”,能将s2连接到s1后面的语句是(D)。 A.strcmp(s1,s2);B.strcpy(s1,s2); C.s1=s1+s2;D.strcat(s1,s2); 二、阅读下面程序,写出运行结果,并回答题后问题 1.下面程序的输出结果为s=25。 程序实现的功能是: 求x数组中第1,3,5,7,9个整数的和。 main() {intx[10]={1,2,3,4,5,6,7,8,9,10},s=0,i; for(i=0;i<10;i++,i++) s+=x[i]; printf("s=%d\n",s); } 2.下面程序的输出结果为4,3,2,1,。 程序实现的功能是: 逆序输出x数组中的内容 main() {intx[4]={1,2,3,4},i; for(i=3;i>=0;i--) printf("%d,",x[i]); } 3.下面程序的输出结果为424。 程序实现的功能是: 统计a数组中各种元素值的个数,即统计1的个数,2的个数,3的个数. main() {inta[10]={1,2,3,2,3,1,3,1,3,1},n[4]={0},i; for(i=0;i<10;i++) n[a[i]]++; for(i=1;i<=3;i++) printf("%d",n[i]); } 4.下面程序的输出结果为482。 程序实现的功能是: 输出二维数组中每行第4列的元素。 (注: 此题初始化时多了数字,请去掉最后的3,4) main() {inta[3][4]={1,2,3,4,5,6,7,8,9,10,1,2},i; for(i=0;i<3;i++) printf("%d",a[i][3]); } 5.下面程序的输出结果为21。 程序实现的功能是: 求a数组第1列和第1行的累加和。 main() {inta[3][3]={{1,2,9},{3,4,8},{5,6,7}},i,s=0; for(i=0;i<3;i++) s+=a[i][0]+a[0][i]; printf("%d\n",s); } 6.下面程序的输出结果为cdefgcabcdefg。 main() {charstr[10]="abcdefg"; printf("%s\t",&str[2]);printf("%c\t",str[2]);printf("%s",str); } ①输出整个字符串使用语句printf("%s",str);。 ②输出字符串中的一个字符,使用语句: printf("%c",str[2]);。 7.下面程序的输出结果为12+34,abcdef
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 程序 设计 实验 习题 答案