上机实验七答案请自行校对汇总.docx
- 文档编号:11708935
- 上传时间:2023-03-30
- 格式:DOCX
- 页数:14
- 大小:19.01KB
上机实验七答案请自行校对汇总.docx
《上机实验七答案请自行校对汇总.docx》由会员分享,可在线阅读,更多相关《上机实验七答案请自行校对汇总.docx(14页珍藏版)》请在冰豆网上搜索。
上机实验七答案请自行校对汇总
上机实验七二维数组
学号:
姓名:
一.目的要求
1.掌握二维数组的基本概念,如何定义二维数组,如何初始化二维数组。
2.掌握与数组有关的算法,如最大最小值(或位置)、转置数组等。
3.掌握gets(s)、put(s)等字符串函数的作用:
把以回车结束的键盘输入的字符串赋值给字符数组s。
二.实验内容
第1题、求一个3×4矩阵的所有靠外侧的的元素之和。
/*
解题思路:
矩阵外侧元素总共有4部分组成:
第一行、最后一行、第一列和最后一列
*/
#defineN3
#defineM4
#include
voidmain(){
inta[N][M];
inti,j,sum;
printf("请输入%d*%d二维数组的值:
",N,M);
for(i=0;i for(j=0;j scanf("%d",&a[i][j]); //先计算第1行和最后一行所有元素的和 sum=0; for(i=0;i sum+=a[0][i]+a[N-1][i]; //计算第1列和最后1列所有元素的和 for(i=0;i sum+=a[i][0]+a[i][M-1]; //再减去4个角落的元素,因为它们重复计算了一次 sum-=a[0][0]+a[0][M-1]+a[N-1][0]+a[N-1][M-1]; printf("矩阵的外侧元素之和为%d\n",sum); } 第2题、已知一个3×4矩阵a[3][4]={{1,2,3,4},{1,2,3,4},{1,2,3,4}},打印输出其转置矩阵。 #include voidmain(){ inta[3][4]={{1,2,3,4},{1,2,3,4},{1,2,3,4}},b[4][3]; inti,j; printf("矩阵a为: \n"); for(i=0;i<3;i++){ for(j=0;j<4;j++) { b[j][i]=a[i][j]; printf("%5d",a[i][j]); } printf("\n"); } printf("矩阵b为: \n"); for(j=0;j<4;j++){ for(i=0;i<3;i++) { printf("%5d",b[j][i]); } printf("\n"); } } 第3题、给定一个N*N的方阵,求出其上三角元素之和。 /* 解题思路: 上三角形是指主对角线右上角的所有元素 */ #defineN10 #include voidmain(){ inta[N][N]; inti,j,sum; printf("请输入%d*%d二维数组的值: \n",N,N); for(i=0;i for(j=0;j scanf("%d",&a[i][j]); //计算上三角形所有元素之和 sum=0; for(i=0;i //对于第i行,列是从i开始,直到N-1时结束 for(j=i;j sum+=a[i][j]; } printf("上三角形元素之和为: %d\n",sum); } 第4题、打印杨辉三角形前10行(分别用二维数组和一维数组实现)。 1 11 121 1331 14641 15101051 …………………… //杨辉三角形(二维数组) #include main() { inta[10][10]; inti,j,k; for(i=0;i<10;i++){ a[i][0]=1;//第i行的第0个元素是1 a[i][i]=1;//第i行的第i个元素是1 //其它列的元素是由前一行的当前列和前一列的和 for(j=1;j a[i][j]=a[i-1][j-1]+a[i-1][j]; } printf("杨辉三角形为: \n"); for(i=0;i<10;i++){ for(j=0;j<=i;j++) printf("%d",a[i][j]); printf("\n"); } printf("\n"); } //杨辉三角形(一维数组) #include main(){ inta[10]; inti,j,k; printf("杨辉三角形为: \n"); for(i=1;i<=10;i++){ //处理第i行,下面计算第i行各列的值 a[i-1]=1;//最后一列为1 for(j=i-2;j>0;j--){ //第j列是其本身与前一列之和 a[j]=a[j]+a[j-1]; } //打印第i行所有元素 for(j=0;j printf("%d",a[j]); printf("\n"); } printf("\n"); } 第5题、假设一个班级有5名学生,每个学生有6门课的成绩,请求出每个学生的平均成绩和每门课的平均成绩。 #defineN5 #defineM6 #include voidmain(){ floata[N][M];//分数可能为实数 inti,j; floatsum; printf("请输入学生的成绩(%d*%d): \n",N,M); for(i=0;i for(j=0;j scanf("%f",&a[i][j]); //对每个学生,计算其平均成绩 for(i=0;i sum=0; for(j=0;j sum+=a[i][j]; sum=sum/M; printf("第%d个学生的平均成绩为: %.2f\n",i+1,sum); } //对每门课程,计算平均成绩 for(i=0;i sum=0; for(j=0;j sum+=a[j][i]; sum=sum/N; printf("第%d门课的平均成绩为: %.2f\n",i+1,sum); } } 第6题、将一个整数字符串转换为整数输出。 (注: 整数字符串和整数是不同的,比如"123"是一个整数字符串,每个元素都是一个数字,但不能进行数值运算,而123是一个整数,可以进行数值运算。 两者外观形态相似,本质不同) /* 解题思路: 1、先输入一个字符串; 2、将字符串中每个字符分解,并通过ASCII码值转换成数字; 3、将转换后的数字进行合并,组合成一个整数。 */ #defineN10 #include #include voidmain(){ chara[N];//字符数组 inti,k; longsum; printf("请输入一个字符串: \n"); gets(a); //下面对字符串a从第0个,到最后一个字符逐个进行处理 sum=0; for(i=0;a[i]! ='\0';i++){ k=a[i]-48;//把字符的asc码值转换成对应的数字 sum=sum*10+k;//把转换后的k和前面得到的数字进行合并 } printf("转换后,数值为: %ld\n",sum); } 第7题、编写一个字符串复制程序,它的功能是把一个字符串的所有内容复制给另一个字符串,并输出复制后的字符串。 /* 解题思路: 1、先输入一个字符串; 2、对字符串中每个字符,复制到另外一个数组中; 3、复制时,还需要复制字符串结束符'\0'。 */ #defineN100 #include #include voidmain(){ chara[N],b[N];//字符数组 inti; printf("请输入一个字符串: "); gets(a); //下面对字符串a从每个字符逐个进行复制 for(i=0;i ='\0';i++){ b[i]=a[i];//把a[i]中的字符复制到b[i]中 } if(i b[i]='\0'; printf("复制后的字符串为: %s\n",b); } 第8题、编写一个求字符串长度的程序,它的功能求出一个字符串中有效字符的个数。 /* 解题思路: 1、先输入一个字符串; 2、对字符串中每个字符进行计数,直到遇到字符串结束符'\0'时结束; */ #defineN100 #include #include voidmain(){ chara[N];//字符数组 inti; printf("请输入一个字符串: "); gets(a); //下面的for语句也可以改为while语句 for(i=0;a[i]! ='\0';i++){ } printf("字符串长度为: %d\n",i); } 第9题、编写一个字符串连接程序,它的功能是把两个不知道长度的字符串s1、s2的内容连接成为一个字符串,并保存在字符串s1中。 (提示: 要定义足够长的字符串s1) /* 解题思路: 1、先输入两个字符到a和b中; 2、判断字符串a的长度; 3、将b中字符,逐个复制到a中的结束符'\0'的位置上; */ #defineN1000 #include #include voidmain(){ chara[N],b[N];//字符数组 intl,i; printf("请输入第一个字符串a: "); gets(a); printf("请输入第二个字符串b: "); gets(b); //获取字符串a的长度: 用下面的循环语句,或是直接l=strlen(a); l=0; while(a[l]! ='\0') l++; //此时a[l]='\0';下面将b[0]直接赋给a[l] i=0; while(b[i]! ='\0'){ a[i+l]=b[i]; i++; } a[i+l]='\0';//最后还需要将'\0'放到a数组的最后面 /*上面i=0语句开始部分,也可以用下面语句代替: for(i=0;i<=strlen(b);i++) a[i+l]=b[i]; */ printf("连接后的字符串为: %s\n",a); } 第10题、判断一个字符串是否为回文,如果是输出“yes”,否则输出“no”。 所谓回文是指正读和反读相同的字符串,比如“12321” /* 解题思路: 1、先输入字符串到字符数组a中; 2、然后判断a的第一个字符与最后一个字符是否相同; 3、如果不同,则跳出循环,输出NO; 4、否则,判断第2个字符,与倒数第2个字符是否相同; 5、这个过程一直继续,直到到a的中间位置时停止。 */ #defineN100 #include #include voidmain(){ chara[N];//字符数组 inti,n; printf("请输入一个字符串: "); gets(a); //获取字符串a的长度; n=strlen(a); for(i=0;i { //判断第i个字符与第n-i-1个字符是否相同,如果不同,跳出循环 if(a[i]! =a[n-i-1]) break; } if(i==n/2) printf("Yes! \n"); else printf("No! \n"); } 第11题、有一篇文章,共有3行文字,每行有80个字符,统计这篇文章中各个英文字母的个数。 (提示: 可以定义一个长度为26的整型数组num,分别记录26个英文字母的个数,比如读入的字母为'a',则num[0]++,读入的字母为'b',则num[1]++,......) /* 解题思路: 1、先定义一个二维数组,用于存放输入的三个字符串; 2、定义一个num数组,大小是26,用于存放字母出现的次数,其中num[0]存放字符'a'出现的次数....; 3、首先,读入三个字符串; 4、其次,对每个字符串中的字符,逐个进行统计其次数; 5、对字符转换成num数组下标的方法: 将字符的asc码值减去97,就得到对应的下标值。 例如'a'为0,'b'为1,...,'z'为25。 */ #defineN100 #include #include voidmain(){ chara[3][N];//字符数组 intnum[26]={0}; inti,j,n; printf("请输入三行字符串: "); for(i=0;i<3;i++){ gets(a[i]); } //下面对每个字符串进行处理; for(i=0;i<3;i++) { //对a[i]字符串进行处理 j=0; while(a[i][j]! ='\0'){ n=a[i][j]-97;//将字符的asc码减去97,得到对应的下标 num[n]++;//出现次数加1; j++; } } //输出各字符串出现的次数 for(i=0;i<26;i++) { if(num[i]! =0) printf("字符%c出现的次数为: %d\n",i+97,num[i]); } } 第12题、该程序功能: 输入1个字符串,按字母出现次序输出其中所出现过的大写英文字母。 如运行时输入字符串"FONTNAMEandFILENAME",应输出"FONTAMEIL"。 /* 解题思路: 1、先定义2个字符数组a和b,其中a存放输入的字符串,而b存放a中出现的大写字母(注意不能重复出现); 2、首先,输入一个字符串,并保存到a中; 3、其次,对数组a中每个字符进行逐个判断,如果a[i]是大写字母,那么做如下处理: 4、在数组b中查找a[i]是否出现,如果没有,则将a[i]加入到数组b中; 5、最后,输出数组b中的字符; */ #defineN100 #include #include voidmain(){ chara[N],b[N];//字符数组 inti,j,n; printf("请输入字符串: \n"); gets(a); n=0;//n用来表示数组b中元素的个数; //下面对a中每个字符串进行处理; for(i=0;a[i]! ='\0';i++) { //对a[i]字符串进行处理 if(a[i]>='A'&&a[i]<='Z'){//如果为大写字母 //下面判断a[i]是否已经在数组b中 for(j=0;j {//如果在b中出现,则跳出循环 if(b[j]==a[i])break; } if(j==n){ //此时表示a[i]在b中没有出现,此时加入到b中 b[j]=a[i];n++; } } } b[n]='\0';//必须将结束符'\0'存放到数组b的最后位置 //输出数组b的内容 printf("大写字母为: \n"); puts(b); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 上机 实验 答案 自行 校对 汇总
![提示](https://static.bdocx.com/images/bang_tan.gif)