当前位置:文档之家› 答案 实验报告_实验7_数组(学号_姓名)

答案 实验报告_实验7_数组(学号_姓名)

实验报告_实验7_数组(学号_姓名)
一、实验目的:
1、理解数组的作用、特点;
2、掌握一维数组、二维的定义、引用、初始化,能够与循环结合实现批量数据处理(如输入、输出,比较大小,交换等);
3、掌握字符数组、字符串的使用;
4、熟悉打擂台等典型算法。

二、实验内容
1、(基础题)有一个数列,它的第一项为1,第二项为2,第三项为3,以后每一项都等于它的前三项之和。

使用一维数组编程实现功能:计算该数列的前20项并赋值给数组,然后以逆序方式输出,每一行5个数据。

如下图所示:
程序代码:
#include<stdio.h>
int main()
{
int i;
int f[20]={1,2,3};
for(i=3;i<20;i++)
f[i]=f[i-1]+f[i-2]+f[i-3];//计算数列的值
for(i=19;i>=0;i--)
{
//每行输出5个数据
printf("%10d",f[i]);
if(i%5==0)printf("\n");
}
printf("\n\n");
return0;
}
2、(基础题)青年歌手大奖赛,有7名评委进行打分,分数取值范围:0.0~10.0,试编程实现如下功能:从键盘输入7位评委给某一选手的评分,之后计算、输出该选手的平均得分(计算规则:去掉一个最高分和一个最低分,求出剩余5个得分的平均值)。

如下图所示:
(提示:使用一维数组来保存7位评委的给分,先计算所有评委给分总和,并找到最高分、最低分,然后用给分总和-最高分-最低分,再除5得到选手的平均得分,最后输出。

)
程序代码:
#include<stdio.h>
#define N7
int main()
{
double score[N];
double max,min,sum,aver;
int i;
printf("请输入%d位评委的给分:\n",N);
for(i=0;i<N;i++)
scanf("%lf",&score[i]);
max=min=sum=score[0];
for(i=1;i<N;i++)
{
if(max<score[i])
max=score[i];
if(min>score[i])
min=score[i];
sum=sum+score[i];
}
sum=sum-max-min;
aver=sum/(N-2);
printf("\n去掉一个最高分:%.4f,去掉一个最低分:%.4f\n\n",max,min);
printf("该选手的最后得分是:%.4f\n\n",aver);
return0;
}
3、(基础题)计算矩阵之和:
先输出这两个矩阵,再输出求和后矩阵。

(提示:矩阵之和是对应元素相加,可用二维数组实现)
程序代码:
#include<stdio.h>
int main()
{
int a[3][4]={{3,0,4,5},{6,2,1,7},{4,1,5,8}};
int b[3][4]={{1,4,0,3},{2,5,1,6},{9,3,6,0}};
int c[3][4];
int i,j;
printf("array a:\n");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%5d",a[i][j]);//12
}
printf("\n");//3
}
printf("\narray b:\n");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%5d",b[i][j]);
}
printf("\n");
}
//c矩阵各元素的值
for(i=0;i<3;i++)
for(j=0;j<4;j++)
c[i][j]=a[i][j]+b[i][j];
printf("\narray a+b:\n");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("%5d",c[i][j]);
}
printf("\n");
}
return0;
}
4、(基础题)输入一个字符串,请编程统计其中的字母、数字、空格(含制表符)、标点符号的个数并输出。

如下图所示:
(提示:在教材的p385-386中有字符和字符串函数,可以直接引用。

如isalpha()判断字母函数、isdigit()判断数字函数、isspace()判断空格函数、ispunct()判断标点函数等)
程序代码:
#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main()
{
char str[201];
int i;
int a[4]={0};//定义4个统计变量,初始值为0
printf("请输入一个长度不超过200的字符串:");
gets(str);
for(i=0;i<strlen(str);i++)
{
if(isalpha(str[i])!=0)
a[0]++;
else if(isdigit(str[i]))
a[1]++;
else if(isspace(str[i]))
a[2]++;
else if(ispunct(str[i]))
a[3]++;
}
printf("该字符串的字母个数、数字个数、空格个数、标点个数分别为:");
for(i=0;i<4;i++)
printf("%d",a[i]);
return0;
}
5、(提高题)已知学生成绩如下表,要求用二维数组保存学生成绩,并计算每个学生的平均成绩以及各门课程的平均成绩。

程序运行效果如下图所示:
#include<stdio.h>
#define M4
#define N3
int main()
{
float sc[M][N];
int Row,Col;//定义行,列两个控制变量
float average_stu[M]={0.0};//存放每个学生的平均成绩
float average_sc[N]={0.0};//存放每门课程的平均成绩
printf("请输入4个学生3门课程的成绩:");
for(Row=0;Row<M;Row++)
for(Col=0;Col<N;Col++)
scanf("%f",&sc[Row][Col]);
printf("\n已输入的学生成绩:\n");
for(Row=0;Row<M;Row++)
{
for(Col=0;Col<N;Col++)
printf("%.2lf\t",sc[Row][Col]);
printf("\n");
}
//计算每个学生的平均成绩
for(Row=0;Row<M;Row++)
{
for(Col=0;Col<N;Col++)
average_stu[Row]+=sc[Row][Col];
average_stu[Row]/=N;
}
//计算每门课程的平均成绩
for(Col=0;Col<N;Col++)
{
for(Row=0;Row<M;Row++)
average_sc[Col]+=sc[Row][Col];
average_sc[Col]/=M;
}
//输出每个学生的平均成绩
for(Row=0;Row<M;Row++)
printf("第%d个学生的平均成绩为:%.2lf\n",Row+1,average_stu[Row]);
printf("\n");
//输出每门课程的平均成绩
for(Col=0;Col<N;Col++)
printf("第%d门课程的平均成绩为:%.2lf\n",Col+1,average_sc[Col]);
printf("\n");
return0;
}。

相关主题