学生成绩(利用指针

实验内容3:有一个班4个学生,5门课。

①求第一门课的平均分;②找出有2门以上课程不及格的学生,输出他们的学号和全部课程成绩和平均成绩;③找出平均成绩在90分以上或全部课程成绩在85分以上的学生。

分别编3个函数实现以上3个要求。

1.0

#include<stdio.h>
int main()
{
	void avsco(float *,float *);//求学生平均分
	void avcour1(float *);//求第一门课程平均分 
	void fali2(int num[],float *pscore,float aver[4]);//求不及格 
	void good(int num[4],float *pscore,float aver[4]);//求优秀 
	int i,j,*pnum,num[4];//指向一维数组的指针 
	float score[4][5],aver[4],*pscore,*paver;
	//num存放四个学生号的一维数组,score二维数组,aver存平均成绩
	//pnum指向num数组,psco指向score数组,pave指向aver数组 
	printf("input NO. and scores:\n");
	printf("NO.  ");
	for(i=0;i<5;i++)
	printf("%d  ",i+1);
	printf("\n");
	pscore=&score[0][0];
	pnum=&num[0];//pnum+i=&num[i],p+1指向下一元 
	paver=&aver[0];
	for(i=0;i<4;i++)
	{
		scanf("%d",pnum+i);//输入学号 
		for(j=0;j<5;j++)
		scanf("%f",pscore+5*i+j);//输入成绩(? 
	}
	printf("\n\n");
	avsco(pscore,paver);//平均成绩 
	avcour1(pscore);//第一门课平均分 
	printf("\n");
	fali2(pnum,pscore,paver);//不及格 
	printf("\n");
	good(pnum,pscore,paver);//优秀 
	return 0; 
}
void avsco(float *pscore,float *paver)//每个人的平均分 
{ 
	int i,j;
	float sum,average;
	for(i=0;i<4;i++)
	{
		sum=0.0;
		for(j=0;j<5;j++)
		sum=sum+(*(pscore+5*i+j));//累计各科成绩 
		average=sum/5;//计算平均分 
		*(paver+i)=average;
	}//paver=&aver[0],paver+i=&aver[i] 
}
void avcour1(float *pscore)//第一门课平均分 
{
	int i;
	float sum,average1;
	sum=0.0;
	for(i=0;i<4;i++)
	sum=sum+(*(pscore+5*i));
	average1=sum/4;
	printf("course1 average score:%7.2f\n",average1);
}
void fali2(int num[],float *pscore,float aver[4])
{
	int i,j,k,label;
	printf("Student who is fail in two courses\n");
	printf("NO. ");
	for(i=0;i<5;i++)
	printf("%d  ",i+1);
	printf("average\n");
	for(i=0;i<4;i++)
	{
		label=0;//标志 
		for(j=0;j<5;j++)
		if(*(pscore+5*i+j)<60.0)label++;
		if(label>=2)
		{
			printf("%d",num[i]);
			for(k=0;k<5;k++)
			printf("%11.2f",*(pscore+5*i+k));
			printf("%11.2f\n",aver[i]);
		}
	}
}
void good(int num[4],float *pscore,float aver[4])
{
	int i,j,k,n;
	printf("Student whose score is good\n");
	printf("NO.");
	for(i=0;i<4;i++)
	printf("%d  ",i+1);
	printf("  average\n");
	for(i=0;i<4;i++)
	{
		n=0;
		for(j=0;j<5;j++)
		if(*(pscore+5*i+j)>85.0)n++;
		if((n=5)||(aver[i]>=90))//||是或 
		{
			printf("%d",num[i]);
			for(k=0;k<5;k++)
			printf("%11.2f",*(pscore+5*i+k));
			printf("%11.2f\n",aver[i]); 
		}
	}
}

2.0有课程名称的

#include<stdio.h>
int main()
{
	void avsco(float *,float *);//求学生平均分
	void avcour1(char(*)[10],float *);//求第一门课程平均分 
	void fali2(char course[5][10],int num[],float *pscore,float aver[4]);//求不及格 
	void good(char course[5][10],int num[4],float *pscore,float aver[4]);//求优秀 
	int i,j,*pnum,num[4];//指向一维数组的指针 
	float score[4][5],aver[4],*pscore,*paver;
	char course[5][10],(*pcourse)[10];
	//num存放四个学生号的一维数组,score二维数组,aver存平均成绩
	//pnum指向num数组,psco指向score数组,pave指向aver数组 
	//course存放课程名称的二维字符数组,pcourse是指向course数组的指针变量 
	printf("input course:\n");
	pcourse=course;
	for(i=0;i<5;i++)
	scanf("%s",course[i]);//输入课程名称 
	printf("input NO. and scores:\n");
	printf("NO.  ");
	for(i=0;i<5;i++)
	printf(",%s",course[i]);//输出课程名称 
	printf("\n");
	pscore=&score[0][0];
	pnum=&num[0];//pnum+i=&num[i],p+1指向下一元 
	paver=&aver[0];
	for(i=0;i<4;i++)
	{
		scanf("%d",pnum+i);//输入学号 
		for(j=0;j<5;j++)
		scanf("%f",pscore+5*i+j);//输入成绩(? 
	}
	printf("\n\n");
	avsco(pscore,paver);//平均成绩 
	avcour1(pcourse,pscore);//第一门课平均分 
	printf("\n");
	fali2(pcourse,pnum,pscore,paver);//不及格 
	printf("\n");
	good(pcourse,pnum,pscore,paver);//优秀 
	return 0; 
}
void avsco(float *pscore,float *paver)//每个人的平均分 
{ 
	int i,j;
	float sum,average;
	for(i=0;i<4;i++)
	{
		sum=0.0;
		for(j=0;j<5;j++)
		sum=sum+(*(pscore+5*i+j));//累计各科成绩 
		average=sum/5;//计算平均分 
		*(paver+i)=average;
	}//paver=&aver[0],paver+i=&aver[i] 
}
void avcour1(char(*pcourse)[10],float *pscore)//第一门课平均分 
{
	int i;
	float sum,average1;
	sum=0.0;
	for(i=0;i<4;i++)
	sum=sum+(*(pscore+5*i));
	average1=sum/4;
	printf("course1:%s average score:%7.2f\n",*pcourse,average1);
}
void fali2(char course[5][10],int num[],float *pscore,float aver[4])
{
	int i,j,k,label;
	printf("Student who is fail in two courses\n");
	printf("NO. ");
	for(i=0;i<5;i++)
	printf("%11s",course[i]);
	printf("  average\n");
	for(i=0;i<4;i++)
	{
		label=0;//标志 
		for(j=0;j<5;j++)
		if(*(pscore+5*i+j)<60.0)label++;
		if(label>=2)
		{
			printf("%d",num[i]);
			for(k=0;k<5;k++)
			printf("%11.2f",*(pscore+5*i+k));
			printf("%11.2f\n",aver[i]);
		}
	}
}
void good(char course[5][10],int num[4],float *pscore,float aver[4])
{
	int i,j,k,n;
	printf("Student whose score is good\n");
	printf("NO.");
	for(i=0;i<5;i++)
	printf("%11s",course[i]);
	printf("  average\n");
	for(i=0;i<4;i++)
	{
		n=0;
		for(j=0;j<5;j++)
		if(*(pscore+5*i+j)>85.0)n++;
		if((n=5)||(aver[i]>=90))//||是或 
		{
			printf("%d",num[i]);
			for(k=0;k<5;k++)
			printf("%11.2f",*(pscore+5*i+k));
			printf("%11.2f\n",aver[i]); 
		}
	}
}

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值