10.5交作业
1 1.1 B 1.2 A 1.3 C 1.4 D 1.5A 1.6D 1.7C
1.8 A 1.9 A 1.10 D
2 2.1 141340 2.2 137 2.3 357 2.5 1 3 5 7 2 2.6 3
3 3.1
int main() {
int s[10], i, max, num; // s:成绩数组, max:最高分, num:序号
printf("请输入10个成绩: ");
for(i=0; i<10; i++)
scanf("%d", &s[i]);
// 下标法查找
max = s[0];
num = 1;
for(i=1; i<10; i++) {
if(s[i] > max) { // 下标法访问: s[i]
max = s[i];
num = i + 1;
}
}
printf("下标法: 最高成绩=%d, 序号=%d\n", max, num);
// 地址法查找
max = *s;
num = 1;
for(i=1; i<10; i++) {
if(*(s+i) > max) {
max = *(s+i);
num = i + 1;
}
}
printf("地址法: 最高成绩=%d, 序号=%d\n", max, num);
return 0;
}
3.2
#include <stdio.h>
// 下标法计算课程平均分
void course_avg(float s[5][4], float a[4]) {
int i, j;
for (j = 0; j < 4; j++) {
a[j] = 0;
for (i = 0; i < 5; i++) {
a[j] += s[i][j];
}
a[j] /= 5;
}
}
// 地址法计算学生平均分
void student_avg(float (*s)[4], float a[5]) {
int i, j;
for (i = 0; i < 5; i++) {
a[i] = 0;
for (j = 0; j < 4; j++) {
a[i] += *(*(s + i) + j);
a[i] /= 4;
}
}
// 排序学生(按平均分从高到低)
void sort(float s[5][4], float a[5]) {
int i, j, k;
float t, ts[4];
for (i = 0; i < 4; i++) {
for (j = 0; j < 4 - i; j++) {
if (a[j] < a[j + 1]) {
// 交换平均分
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
// 交换成绩
for (k = 0; k < 4; k++) {
ts[k] = s[j][k];
s[j][k] = s[j + 1][k];
s[j + 1][k] = ts[k];
}
}
}
}
}
int main() {
float s[5][4]; // 成绩数组
float ca[4]; // 课程平均分
float sa[5]; // 学生平均分
int i, j;
// 输入成绩
printf("输入5个学生的4门成绩:\n");
for (i = 0; i < 5; i++) {
printf("学生%d: ", i + 1);
for (j = 0; j < 4; j++) {
scanf("%f", &s[i][j]);
}
}
// 计算平均分
course_avg(s, ca);
student_avg(s, sa);
// 排序
sort(s, sa);
// 输出课程平均分
printf("\n课程平均分: ");
for (j = 0; j < 4; j++) {
printf("%.1f ", ca[j]);
}
// 输出排序结果
printf("\n\n排序后学生成绩:\n");
for (i = 0; i < 5; i++) {
for (j = 0; j < 4; j++) {
printf("%.1f ", s[i][j]);
}
printf("平均: %.1f\n", sa[i]);
}
return 0;
}