指针:C语言——1)有a个学生,每个学生有b门课程的成绩。要求用户输入学生序号后,能输出该学生的全部成绩。用指针函数实现。2)找出不及格的学生及其学号。

问题1:

a个学生b门课程,可以直接使用二维数组,每一行可以作为一名学生,这一行的所有元素可以作为该学生的所有课程的成绩。

定义一个指针函数search,将主函数(main)的成绩二维数组和需要查询的学生序号n传递给search,并将search中所查找的对应成绩的地址(&scores[n][0]:存放序号为n的学生0的课程的元素地址)返回给主函数。

在主函数中输出成绩。

#include <stdio.h>

int* search(int (*p)[4],int n)
{
	return *(p+(n-1));
}

int main()
{
	int scores[][4]={{99,82,59,60},
                     {45,58,76,42},
                     {60,75,89,100}}; //为了方便,设计三名学生的四门课程。
	int n;
	int *p;
	
	printf("请输入需要查找的学生序号(1,2,3):");
	scanf("%d",&n);

	p = search(scores,n);    //调用search,返回&scores[n][0]地址
	for(int i=0;i<4;i++){
		printf("%d ",*p++);  //打印相应地址0~3的值
	}
	return 0;
}

问题2:

该问题需要将二维数组的每一行首地址传递给search函数。在search中遍历比较是否及格(60为及格线),不及格则返回该行首元素地址。

#include <stdio.h>

int *search(int *parr)
{
	int *p = NULL;         //首先将p的值为NULL;
	for(int i=0;i<4;i++){
		if(*(parr+i)<60){
			p = parr;      //若不及格,p则指向该行首元素。
		}
	}
	return p;
}

int main()
{
	int scores[3][4]={{99,82,59,60},
                      {45,58,76,42},
                      {60,75,89,100}};
	int *pt;
	
	for(int i=0;i<3;i++){
		pt = search(*(scores+i));
		if(pt == *(scores+i))      //判断,若返回的pt不为NULL,则需要输出并打印成绩
		{
			printf("不及格的学生是:%d 成绩是:",i+1);
			for(int j=0;j<4;j++){
			printf("%d  ",*(pt+j));}
		}
		printf("\n");
	}
	
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值