/*有一个班4个学生,5门课程。
1、求第一门课程的平均分;
2、找出有两门课程以上不及格的学生,输出他们的学号和全部课程成绩及平均成绩;
3、找出平均成绩在90分以上或全部课程成绩在85分以上的学生。
分别编3个函数实现以上3个要求*/
#include <stdio.h>
int main()
{
int fun1(float (*p)[6]);
int fun2(float (*p)[6]);
int fun3(float (*p)[6]);
float a[4][6];
int i,j;
float (*p)[6];
p = a;
printf("请输入学号和成绩:\n");
for(i = 0;i < 4;i++)
{
for(j = 0;j < 6;j++)
{
scanf("%f",&a[i][j]);
}
}
fun1(p);
fun2(p);
fun3(p);
}
//求第一门成绩的平均分
int fun1(float (*p)[6])
{
float sum = 0.0;
int i;
for(i = 0;i < 4;i++)
{
sum += *(*(p + i) + 1);
}
printf("平均分是:%f\n",sum/4);
}
//找出有两门课程以上不及格的学生,输出他们的学号和全部课程成绩及平均成绩
int fun2(float (*p)[6])
{
int i,j,n,flag = 0;
float sum;
for(i = 0;i< 4;i++)
{
n = 0;
sum = 0.0;
for(j = 1;j < 6;j++)
{
if(*(*(p + i) + j) < 60)
{
n ++;
}
sum += *(*(p + i) + j);
}
if(n >= 2)
{
printf("学号为%f的学生有超过两门成绩不合格\n",*(*(p + i) + 0));
printf("成绩有:\n");
for(j = 1;j < 6;j++)
{
printf("%f ",*(*(p + i) + j));
}
printf("\n平均成绩是:%f\n",sum/5);
flag = 1;
}
}
if(flag == 0)
{
printf("未找到!\n");
}
}
//找出平均成绩在90分以上或全部课程成绩在85分以上的学生
int fun3(float (*p)[6])
{
int i,j,n;
float sum;
for(i = 0;i < 4;i++)
{
sum = 0.0;
n = 0;
for(j = 1;j < 6;j++)
{
if(*(*(p + i) + j) >= 85)
{
n++;
}
sum += *(*(p + i) + j);
}
if(sum / 5 >= 90 || n == 5)
{
printf("符合条件3的学生有%f\n",*(*(p + i) + 0));
}
}
}
谭浩强C程序设计(第四版)p292第15题
这个题写成结构体输出结果更直观
/*有一个班4个学生,5门课程。
1、求第一门课程的平均分;
2、找出有两门课程以上不及格的学生,输出他们的学号和全部课程成绩及平均成绩;
3、找出平均成绩在90分以上或全部课程成绩在85分以上的学生。
分别编3个函数实现以上3个要求*/
#include <stdio.h>
typedef struct Student{
char c[8];//学号
float a[5];//成绩
}Student;
int main()
{
int fun1(Student *p);
int fun2(Student *p);
int fun3(Student *p);
int i,j;
Student stu[4];
Student *p;
p = stu;
printf("请输入学号和成绩:\n");
for(i = 0;i < 4;i++)
{
scanf("%s",stu[i].c);
for(j = 0;j < 5;j++)
{
scanf("%f",&stu[i].a[j]);
}
}
fun1(p);
fun2(p);
fun3(p);
}
//求第一门成绩的平均分
int fun1(Student *p)
{
float sum = 0.0;
int i;
for(i = 0;i < 4;i++)
{
sum += p[i].a[0];
}
printf("第一门成绩的平均分是:%f\n",sum/4);
}
//找出有两门课程以上不及格的学生,输出他们的学号和全部课程成绩及平均成绩
int fun2(Student *p)
{
int i,j,n,flag = 0;
float sum;
for(i = 0;i< 4;i++)
{
n = 0;
sum = 0.0;
for(j = 0;j < 5;j++)
{
if(p[i].a[j] < 60)
{
n ++;
}
sum += p[i].a[j];
}
if(n >= 2)
{
printf("学号为%s的学生有超过两门成绩不合格\n",p[i].c);
printf("成绩有:\n");
for(j = 0;j < 5;j++)
{
printf("%f ",p[i].a[j]);
}
printf("\n平均成绩是:%f\n",sum/5);
flag = 1;
}
}
if(flag == 0)
{
printf("未找到!\n");
}
}
//找出平均成绩在90分以上或全部课程成绩在85分以上的学生
int fun3(Student *p)
{
int i,j,n;
float sum;
for(i = 0;i < 4;i++)
{
sum = 0.0;
n = 0;
for(j = 0;j < 5;j++)
{
if(p[i].a[j] >= 85)
{
n++;
}
sum += p[i].a[j];
}
if(sum / 5 >= 90 || n == 5)
{
printf("符合条件3的学生学号是:%s\n",p[i].c);
}
}
}
这样学号和成绩就是不同的数据类型了