学生+课程+成绩 用二维数组

用指针当函数参数,传二维数组中的数据

//一个班3个学生,3门课程
#include<stdio.h>

void average(float (*p)[3],int n)     //求第一门课程的平均分
{
	float ave,sum=0;
	int i,q;
	q=n-1;
	for(i=0;i<3;i++)
	{
		sum=sum+*(*(p+i)+q);
	}
	ave=sum/3;
	printf("第一门课程的平均分是:");
	printf("the average score is:%f\n",ave);
}

void fail(float (*score)[3])      //要想传入二维数组,需这样引用做参数         //找出两门及以上课程不及格的学生
{
	int k=0,i,j;
	float a;
	for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
		{
			if(*(*(score+i)+j)<60)
			{k++;}
		}
		while(k>=2)
		{
			printf("有两门及以上不及格的同学学号是%d\n",i+1);
			printf("他的所有成绩如下:");
			for(j=0;j<3;j++)
			{
				printf("%f ",*(*(score+i)+j));
			}
			a=(*(*(score+i)+0)+*(*(score+i)+1)+*(*(score+i)+2))/3; 
			printf("\n他的平均成绩为:%f\n",a);
			k=0;
		}
	}	
}

void excel(float (*score)[3])        //找出优秀的学生
{
	int flag=0,i,j;
	float ave1,sum1;
	for(i=0;i<3;i++)
	{
		sum1=0;
		for(j=0;j<3;j++)
		{
			sum1=sum1+*(*(score+i)+j);
			if(*(*(score+i)+j)>85)
			{
				flag++;
			}
		}
		ave1=sum1/3;
		if(ave1>90)
		{
			printf("平均成绩在90分以上的学生学号为:%d\n",i+1);
		}
		if(flag==3)
		{
			printf("全部成绩都在85分以上的学生学号为:%d\n",i+1);
			flag=0;
		}
	}
}


void main()
{
	int i,j;
	float score[3][3]={0};

	for(i=0;i<3;i++)
	{
		for(j=0;j<3;j++)
		{
			printf("请输入序号为%d的学生的第%d门成绩:\n",i+1,j+1);
			scanf("%f",&score[i][j]);
		}
	}
	average(score,1);
	fail(score);
	excel(score);
}

调试过程中遇到的问题及体会:
1.因为刚开始是设置数组为整型,后来因为算成绩才改成浮点型,但是输出语句中的%d没有跟着改成%f,因而打印出来的成绩结果总是显示为0 0 0.以后一定要注意同步修改这个问题。
2.main()函数中的scanf语句又忘记加&了,故而一输入程序就崩溃。
3.老是忘记设置循环停止条件,总是要跑一遍才知道,比如void fail(float (*score)[3]) 中的k=0那里。
4.明白了如何用指针将二维数组传入函数里进行调用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值