上机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;iscanf("%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;isum+=score[i];
average=sum/8;
printf("%f\n",average);
}
精心搜集整理,只为你的需要