使用二维数组保存学生成绩并操作

//求三个学生总成绩的平均值,以及找出一个学生的成绩,使用二维数组指针
#include<stdio.h>
int main(){
	void aver(float *p,int n);//求总成绩 
	void search(float (*p)[4],int n);//找出序号为n个学生的成绩
	float cj[3][4]={65,67,70,60,80,87,90,81,90,99,100,98};
	aver(*cj,12);
	search(cj,2); 
} 
void aver(float *p,int n){
	float sum=0,aver;
	float *cj_end;
	cj_end=p+n-1;
	for(;p<=cj_end;p++){
		sum=sum+ *(p);
	}
	aver=sum/n;
	printf("平均成绩是:%5.2f\n",aver);
}
void search(float (*p)[4],int n){
	printf("第%d个学生的成绩是:\n",n+1);
	int i;
	for(i=0;i<4;i++){
		printf("%5.2f  ",*(*(p+n)+i));
	}
}

使用二维数组保存三个学生的四门成绩,函数aver实现了计算总成绩的平均值,函数search实现了查找并输出某个学生的成绩;
第一个函数求中成绩,因此指针应指向某个特定的元素,而数组是二维的,因此形参float p,意为指向某个元素的针,实参即为 *cj,若不加**则意为指向第一行的针,加上以后就意为第一行的第一个元素,而后通过指针不断往后移动即可拿到值。

第二个函数要取某个学生四门成绩的值,那么形参就是数组型(*p)[4],实参当然就是指向某一行,所以直接传递数组的地址就是指向第一行的地址。

//查找一门以上不及格的学生并输出其全部的成绩
#include<stdio.h>
int main(){
	float cj[3][4]={59,67,70,60,80,87,90,81,90,99,100,98};
	void search(float (*p)[4],int n);
	search(cj,2);//0 1 2
} 
void search(float (*p)[4],int n){
	int i,j,flag;
	for(j=0;j<=n;j++){
		for(i=0;i<4;i++){
			if(*(*(p+j)+i)<60){
				flag=1;
			}
		}
		if(flag==1){
			printf("第%d个学生不及格,他的成绩是:\n",j+1);
			for(i=0;i<4;i++){
				printf("%5.2f ",*(*(p+j)+i));
			}
		}
		flag=0; 
	}
}

在上述背景上实现函数search,找出不及格的学生并输出其全部成绩,注意这里的形参不是指向某个元素的指针,而是指向一行元素的指针,因为只有这样才能,在输出这个学生全部成绩的时候直接输出。形参就是二维数组传过去,它默认的就是第一行也就是第一个学生的成绩。
两次循环,第一次是在第j个学生的基础上再遍历这个学生的成绩,一旦有成绩在60以下则将flag标记置为1,而后当flag为1就遍历输出该行元素,要注意每次循环结束以前要将flag置为0,这样才能在下一次判断下一个的学生成绩是否及格起到作用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值