【C语言】有一个班4个学生,5门课程。①求第一门课程的平均分②找出有两门以上课程不及格的学生,输出她们的学号和全部课程成绩及平均成绩③找出平均成绩在90分以上或全部课程成绩在85分以上的学生

有一个班4个学生,5门课程。①求第一门课程的平均分②找出有两门以上课程不及格的学生,输出她们的学号和全部课程成绩及平均成绩③找出平均成绩在90分以上或全部课程成绩在85分以上的学生。分别编3函数实现之

/*第一问*/
#include<stdio.h>
int main(){
	float ave(int (*p)[5]);	//函数声明 
	int score[4][5]={{78,86,55,59,90},{93,86,95,83,97},{89,88,90,86,91},{87,79,87,81,92}};
	printf("第一门课程平均分:%.2f",ave(score));		//函数调用及结果输出 
	return 0; 
}
float ave(int (*p)[5]){	//形参为指向一维数组的指针变量 
	int i;
	float sum=0;		//平均分可能为小数,故用浮点型 
	for(i=0;i<4;i++,p++){
		sum+=(*p)[0];	//累加每个学生的第一门课成绩 
	}
	return (sum/4);
}
/*第二问*/
#include<stdio.h>
int main(){
	void rev(int (*p)[5]);		//函数声明 
	int score[4][5]={{78,86,55,59,90},{93,86,95,83,97},{89,88,90,86,91},{87,56,87,55,92}};
	printf("两门以上成绩不及格的学生:\n");		//函数调用及结果输出 
	rev(score);		//函数调用及其结果输出 
	return 0; 
}
void rev(int (*p)[5]){		//形参为指向一维数组的指针变量 
	int i,j,sign=0;		//0-1变量sign,用以判断该学生的成绩是否有两门及其以上科目不及格 
	for(i=0;i<4;i++,p++)	//从第一个学生开始判断 
		for(j=0,sign=0;j<5;j++)	//从第一个科目开始判断 
			if((*p)[j]<60)		//如果当前科目成绩不及格
				if(sign==1){	//且sign为1(之前有科目也不及格 )
					printf("学号:%d;各科成绩:",i+1);		//输出这个学生的学号 
					for(j=0;j<5;j++)		//输出这个学生的所有科目成绩 
						printf("%d,",(*p)[j]);
					printf("\n");
				}
				else sign=1;	//如果sign不为1,这是该学生第一个不及格的科目,将sign置1 
}
/*第三问*/
#include<stdio.h>
int main(){
	void pd(int (*p)[5]);		//函数声明 
	int score[4][5]={{78,86,55,59,90},{90,88,91,86,92},{89,84,97,95,91},{87,56,87,55,92}};
	printf("平均成绩在90分以上或全部课程成绩在85分以上的学生学号:\n");		
	pd(score);	//函数调用及结果输出 
	return 0; 
}
void  pd(int (*p)[5]){
	int i,j,sign=0;		//0-1变量sign,用以判断该学生的成绩是否有两门及其以上科目不及格 
	float sum;
	for(i=0;i<4;i++,p++){	//从第一个学生开始判断 
		for(j=0,sign=0;j<5;j++){	//从第一个科目开始判断 
			if((*p)[j]<85)	{		//若当前分数小于于85分 
				sign=1;	break;		//置sign=1(及已经不满足所有科目成绩都大于85分)跳出循环进入下一情况的判断 
			}
			else if(j==4&&sign==0) 		//当前科目是否是最后一个科目且sign=0(这位学生没有低于85分的科目) 	
				printf("NO.%d\t",i+1);	//满足条件则输出该生学号 
		}
		if(sign==1){	//若sign=1,开始第二种情况的判断 
			for(j=0,sum=0;j<5;j++)	
				sum+=(*p)[j];	//累加该生没科成绩 
			if(sum/5>90)	//平均分是否大于90 
				printf("NO.%d\t",i+1);	//是则输出该生学号 
		}
	}
}

  • 22
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.魚肉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值