上机4参考解答.docx
- 文档编号:3105097
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:7
- 大小:16.89KB
上机4参考解答.docx
《上机4参考解答.docx》由会员分享,可在线阅读,更多相关《上机4参考解答.docx(7页珍藏版)》请在冰豆网上搜索。
上机4参考解答
上机4数组
一、目的
数组是有序数据的集合。
本实验通过上机掌握一维和二维数组的使用,以及字符串处理函数的使用方法。
二、要求
1.掌握一维数组的定义和数组元素引用的正确方法。
2.掌握二维数组的定义和数组元素引用的正确方法。
3.熟练掌握一维数组与二维数组的常见算法。
4.熟悉在什么情况下使用数组,并熟练运用数组来解决实际问题。
5.掌握字符串处理函数的使用方法。
三、内容及步骤
1.编写程序,计算Fibonacci数列的前16个数,并将其存放到一维数组f中,然后输出结果。
【指导】
①Finonacci数列具有以下特点:
它的第1和第2个数分别是0和1,从第3个数开始每个数是它前面两个数之和,从0112358132134…。
②用数组实现,即f[k]=f[k-1]+f[k-2](k=2,…,16)。
因此可以用循环实现finonacci数列前16个数的计算。
(1)程序代码如下,请将填补程序代码中的空缺:
#defineN16
#include<>
voidmain()
{
intf[N],k;
f[0]=0;
f[1]=1;
for(k=2;k { f[k]=f[k-1]+f[k-2]; } for(k=0;k { printf(“%d”,f[k]); if((k+1)%4==0) printf(“\n”); } } (2)编译运行程序,程序输出的结果是: 0112 35813 21345589 144233377610 2.读程序,说明程序的功能和输出结果。 #include<> #include<> voidmain() { inta[3][4]={{4,6,3,-7},{5,2,7,-4},{8,6,4,-1}}; intmin,p,i,j; for(i=0;i<=2;i++) { min=abs(a[i][0]); p=0; for(j=0;j<=3;j++) if(abs(a[i][j]) { min=abs(a[i][j]); p=j; } printf("%d\t(%d,%d)\n",a[i][p],i,p); } } 【指导】 (1)程序最终输出的是a[i][p],i,p的结果,那么,a[i][p],i,p在程序中分别代表什么。 a[i][p]表示每行中绝对值最小的数 i表示该数所在的行 p表示该数所在的列 (2)程序运行的结果是: 3(0,2) 2(1,1) -1(2,3) 3.完善程序,使其能输出如下的图形。 ***** ***** ***** ***** ***** 【指导】 ①图形由5行,每行5个“*”字符组成,每个字符“*”之间有2个空格。 ②首先输出每行前面的空格,每一行前面的空格数是不同的,呈递增的规律,可以考虑用一个循环实现。 ③然后输出每一行的5个“*”。 程序代码如下,请将空缺处补充完整。 #include<> voidmain() { inti,j; charspace='';用一维数组编写程序。 从键盘上输入由5个字符组成的一个字符串str,然后输出该字符串。 要求用两种方法实现: (1)按字符逐个输入和输出。 (2)按字符串输入和输出。 (1)按字符逐个输入和输出。 源程序: #include<> voidmain() { charstr[6]; inti; for(i=0;i<6;i++) scanf("%c",&str[i]); for(i=0;i<6;i++) printf("%c",str[i]); printf(“\n”); } (2)按字符串输入和输出。 源程序: #include<> voidmain() { charstr[6]; gets(str); puts(str); } 5.程序是查询某学生是否为该班学生的程序,试填空完成该程序。 【指导】 (1)字符串的比较要用strcmp()函数,不能用相等运算符“==”进行比较。 (2)程序中的变量flag是一个控制参数,用于控制输出结果,它的初始值为0。 当for循环中的if语句中的判断条件为真,flag的值改变为1。 由此可见,如果查找结束时,flag的初始值0没有被改变,说明查找不成功,否则(即flag的值改变为1)查找成功。 程序代码如下,请将空缺处补充完整。 #include<> voidmain() { charclassStu[5][8]={"王小华","张三","赵四","向玲","丁一"}; inti,flag=0; charname[8]; printf("请输入要查询的学生姓名: "); gets(name); for(i=0;i<5;i++)不用strcat()函数,将两个字符串连接起来,试完善。 【指导】 将字符数组s2连接到字符数组s1后面的算法步骤如下: (1)确定s1的串尾位置。 (2)将s2连接到s1后面。 (3)在s1串尾加结束符(如果不加结束符,输出时可能在串的末尾有非法字符)。 程序代码如下,请将空缺处补充完整。 #include<> voidmain() { chars1[80],s2[40]; inti=0,j=0; printf("Enters1: "); scanf("%s",s1); printf("Enters2: "); scanf("%s",s2); for(;s1[i]! =’\0’;i++); for(;s2[j]! =’\0’;i++,j++) s1[i]=s2[j]; s1[i]=’\0’; printf("\nResultis: %s",s1); } 四、编程 1.给整型一维数组b[10]输入10个数据,计算并输出数组中所有正数之和、所有负数之和。 源程序1: #include<> voidmain() { intb[10]; inti; intsum1=0,sum2=0; for(i=0;i<10;i++) scanf("%d",&b[i]); for(i=0;i<10;i++) { if(b[i]>0) sum1+=b[i]; elseif(b[i]<0) sum2+=b[i]; } printf("正数之和为: %d,负数之和为: %d\n",sum1,sum2); } 2.青年歌手参加歌曲大奖赛,有10个评委进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)。 【指导】这道题的核心是排序。 将评委所打的10个分数利用数组按增序(或降序)排列,计算数组中除第一个和最后一个分数以外的数的平均分。 源程序2: #include<> #defineN10 voidmain() { intscore[N]; inti,j; floataverage=0,sum=0; for(i=0;i scanf("%d",&score[i]); //将成绩按照降序排列 for(i=1;i<=N-1;i++) for(j=1;j<=N-i;j++) if(a[j-1]>a[j]) {t=a[j-1];a[j-1]=a[j];a[j]=t;} for(i=1;i sum+=score[i]; average=sum/8; printf("%f\n",average); } 精心搜集整理,只为你的需要
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 上机 参考 解答