C语言小题,有a个学生,每个学生有b门课程的成绩。要求找出其中有不及格的学生及其全部成绩。(返回指针值的函数)

前言:
此篇接上篇做出一点点改动,依然是针对 返回指针值的函数 方面的练习。

解题思路:
在上篇文章的基础上修改。main 函数不是只调用一次 search 函数,而是先后调用3次 search 函数,在 search 函数中检查3个学生有无不及格的课程,如果有,就返回该学生的0号课程的地址 &score[i][0] ,否则返回NULL。在 main 函数中检查返回值,输出有不及格学生4门课程的成绩。

正文:

#include<stdio.h>
int main() {
	float score[][4]= {{60,70,80,90},{56,89,67,88},{34,78,90,66}};//定义数组,存放成绩
	float * search(float( * pointer)[4]);//函数声明
	float * p;
	int i,j;
	for(i=0; i<3; i++) {					//循环3次
		p=search(score+i);
						//调用search函数,如果不及格返回score[i][0]的地址,否则返回NULL
		if(p==*(score+i)) {		//如果返回的是score[i][0]的地址,表示p的值不是NULL
			printf("No.%d score:",i);
			for(j=0; j<4; j++)
				printf("%5.2f ",*(p+j));//输出score[i][0]~score[i][3]的值
			printf("\n");
		}
	}
	return 0;
}

float * search(float( * pointer)[4]) {//定义函数,形参pointer是指向一维数组的指针变量
	int i=0;
	float * pt;
	pt=NULL;								//先使pt的值为NULL
	for(; i<4; i++)
		if(*(*pointer+i)<60) pt=*pointer;	//如果有不及格课程,使pt指向score[i][0]
	return(pt);
}

程序分析:
函数 search 的作用使检查一个学生有无不及格的课程。在search函数中的pointer 是指向一维数组(有4个元素)的指针变量。pt 为指向 float 型变量的指针变量。从实参传给形参 pointer 的是 score+i,它是 score 第 i 行的首地址,见图8.35(a)

在search 函数中,先使pt=NULL(即pt=0)。用 pt 作为区分有无不及格课程的标志。若经查4门课中有不及格的,就使 pt 指向本行0列元素,即 pt=&score[i][0] ;若无不及格则保持 pt 的值为 NULL,见图8.35(b)。将 pt 返回 main 函数中,在 main 函数中,把调用 search 得到的函数值(指针变量 pt 的值)赋给 p 。用 if 语句判断 p 是否等于 * (score+i),若相等,表示所查的序号为 i 的学生有不及格课程(p 的值为 *(score+i),即 p 指向 i 行0列元素),就输出该学生(有不及格课程的学生)4门课程成绩。若无不及格,p 的值是NULL,不输出。
在这里插入图片描述
总结:
运行结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

超级Mr Yin

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

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

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

打赏作者

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

抵扣说明:

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

余额充值