程序要求:
有4个学生的4科考试成绩,找出至少有一科不及格的学生,并将成绩列表输出。
问题描述
提示:这里描述项目中遇到的问题:
例如:本次程序的难点在于指针的调用。
函数指针常见的报错问题:
incompatible types when returning type 'float (*)[4]' but 'float' was expected
这个错误提示表明您的函数返回类型与期望的返回类型不匹配。您定义的函数似乎返回了一个指向包含4个float元素的数组的指针('float (*)[4]'),但是调用函数的地方期望返回一个单个的float值。
原因分析:
要解决这个问题,您需要确认函数返回的数据类型与函数声明中的返回类型匹配。如果您的函数本意是返回一个单个的float值,那么您需要修改函数的返回语句,确保只返回一个float值而不是一个数组指针。如果函数确实应该返回一个数组指针,那么您需要相应地更新调用函数的地方来接收一个指向包含4个float元素的数组的指针。
程序示例:
#include <stdio.h>
float *search(float (*ptr)[4]);
int main()
{
float score[4][4];
float (*ptr)[4] = &score[0];//初始化指针ptr,指向二维数组score数组第一行。
printf("请输入四个同学的四科成绩:\n");
for(int i = 0;i < 4;i++)//输入二维数组元素
{
for(int j = 0;j < 4;j++)
{
scanf("%f",&score[i][j]);
}
}
for(int i = 0;i < 4;i++,ptr++)
{
if((*ptr)[4] == *search(&score[i]))//如果当前指针行是满足条件的指针地址,输出该行的元素。
{
printf("The student NO.%d list:",i+1);
for(int j = 0;j < 4;j++)
{
printf("%.1f ",(*ptr)[j]);
}
printf("\n");
}
}
return 0;
}
float *search(float (*ptr)[4])//找到对应条件的数组行地址
{
float *pt;
pt = *(ptr+1);//初始化指针pt;
for(int i = 0;i < 4;i++)
{
if((*ptr)[i] < 60)//对应行的列元素是否满足条件
{
return pt;//返回对应行地址
}
}
}
程序运行结果:
请输入四个同学的四科成绩:
88 88 88 55
77 77 77 77
44 55 44 55
44 44 55 60
The student NO.1 list:88.0 88.0 88.0 55.0
The student NO.3 list:44.0 55.0 44.0 55.0
The student NO.4 list:44.0 44.0 55.0 60.0