max=a[i];
if(min>a[i])
min=a[i];
}
printf("max=%d,min=%d,aver=%f",max,min,aver);
}
【实验6.2】实行学分制,学生的平均绩点是衡量学生学习的重要依据。成绩等级与绩点的关系如下表所示:
平均绩点=∑∑⨯所学各课程的学分点绩所学各课程学分
编一程序利用两个一维数组分别输入某学生20门课程的学分xf[20]和对应成绩score[20],计算其平均绩点aver 。
【指导】本题是一个求数组元素累加和的问题。
(1)定义数组及相关的变量:20门课程的成绩用数组score[20]表示,20门课程的学分用数组xf[20]表示。
(2)输入20门课程的成绩及其对应学分保存在数组中。
(3)计算20门课程的学分之和sumxf ,并根据成绩的档次分别取不同的绩点计算所有课程的学分与绩点的乘积之和sumscore 。
(4)平均绩点aver=sumscore/sumxf 。
【参考程序】
#include
void main()
{ float score[20],sumscore=0.0F,sumxf=0.0F,aver;
int i,jd,xf[20];
for (i=0; i<20; i++)
scanf("%f%d",&score[i],&xf[i]);
for (i=0; i<20; i++)
{ sumxf=sumxf+xf[i]; //计算学分和
if (score[i]>=90) //由成绩确定绩点
jd=4;
else if (score[i]>=80)
jd=3;
else if (score[i]>=70)
jd=2;
else if (score[i]>=60)
jd=1;
else
jd=0;
sumscore=sumscore+xf[i]*jd; //计算学分与绩点的乘积和
}
aver=sumscore/sumxf; //计算平均绩点
printf("%.2f\n",aver);
}
【实验6.3】请编写程序,它的功能是: 将M 行N 列的二维数组中的数据, 按列的顺序依次放到一维数组中。
例如, 二维数组中的数据为:
33 33 33 33
44 44 44 44
55 55 55 55
则一维数组中的内容应是:
33 44 55 33 44 55 33 44 55 33 44 55。
【提示】
(1)定义int 型数组a[M][N]及b[M*N](M 、N 用符号常数定义)。
(2)输入二维数组的实际行数和列数,以及二位数组的所有元素。
(3)通过二重循环将二维数组a 中各列的元素依次赋值到一维数组b 中(b 的下标要逐次增加)。
(4)按矩阵的形式输出二维数组a 及一维数组的各个元素。
【实验6.4】编制程序,从num 个(num 的值通过键盘输入来指定)字符串中找出最长的一个字符串,并将输出该最长的字符串及其在数组中的位置。例如,输入的字符串为:
Pascal
Fortran
Cobol
Lisp
Ada
则应输出:
最长的字符串是:Fortran,它位于数组的第2行。
【提示】
(1)定义符号常数M 为10、整型变量num 、字符型数组str[M][80]。
(2)输入num 的值,它代表要实际输入的字符串的个数
(3)依次输入num 个字符串存放在 str 中。
(4)依次计算str 中每个字符串的长度,并从中找出最长的字符串,记下它在数组中的下标。
(5)输出结果。
【实验6.5】编制程序自动生成如下N ×N 矩阵,然后将数组的第一行与倒数第一行的元素对调,将第二行元素与倒数第二行元素对调,并输出对调后的矩阵。
⎥⎥⎥⎥⎦
⎤⎢⎢⎢⎢⎣⎡=16151413121110987654321A 【指导】
(1) 可以用a[i][j]=i*4+j+1自动生成上述矩阵。
(2) 为了实现第i 行元素与倒数第i 行元素交换,令i 从1变化到N/2,使a[i][j]与a[N-1-i][j]交换。
【参考程序】
#include
#define N 4
void main()
{ int a[N][N],i,j,k;
for (i=0; ifor (j=0; ja[i][j]= i*4+j+1; //自动生成矩阵
for (i=0; ifor (j=0; j