各位大侠,小弟遇到一C语言小问题,

#include<stdio.h>
int main()
{
void search(float *(p)[4],int n);
float score[3][4]={{65,57,70,60},{58.87,90,81},{90,99,100,98}}; /*定义3个学生,4门课*/
search(score,3);
system("pause");
return 0;
}
void search(float *(p)[4],int n)
{
int i,j,flag;
for(i=0;i<n;i++) /*n=3*/
{
flag=0;
for(j=0;j<4;j++)
{
if(*(*(p+i)+j)<60)
flag=1;
}
if (flag==1)
{
printf("N0.%d is not pass",i+1);
printf("\n");
printf("He score is:");
for(j=0;j<4;j++)
{
printf("%5.1f\t",*(*(p+i)+j));
printf("\n");
}
}
}
}
是关于输出学生不及格分数的一个函数

请查看我的注释

#include<stdio.h>
#include <stdlib.h>
//这才是你需要的形参。而不是float* p[4]如果照你那么些实际上变成了1维数组,有四个元素。每个元素为float型指针
void search(float (*p)[4], int n);

int main()
{
//之前你这里的第二个数据有问题,写成58.87了
float score[3][4] = {{65, 57, 70, 60}, {58, 87, 90, 81}, {90, 99, 100, 98}}; /*定义3个学生,4门课*/
search(score, 3);
system("pause");
return 0;
}
void search(float (*p)[4], int n)
{
int i, j, flag;

for(i = 0; i < n; i++) /*n=3*/
{
flag = 0;

for(j = 0; j < 4; j++)
{
if(*(*(p + i) + j) < 60)
flag = 1;
}

if(flag == 1)
{
printf("N0.%d is not pass", i + 1);
printf("\n");
printf("He score is:");

for(j = 0; j < 4; j++)
{
printf("%5.1f\t", *(*(p + i) + j));
printf("\n");
}
}
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-07
写的还可以,你是有什么问题?是结果不对还是怎么的?具体现象是什么样子的?追问

就是输出不对啊

 

第2个回答  2012-07-07
#include<stdio.h>
#include <stdlib.h>

void search(float (*p)[4], int n);//这里宣告不对
int main()
{
float score[3][4] = {{65, 57, 70, 60}, {58.87, 90, 81}, {90, 99, 100, 98}}; /*定义3个学生,4门课*/
search(score, 3);
system("pause");
return 0;
}
void search(float (*p)[4], int n)
{
int i, j, flag;
for(i = 0; i < n; i++) /*n=3*/
{
flag = 0;

for(j = 0; j < 4; j++)
{
if(*(*(p + i) + j) < 60)
flag = 1;
}

if(flag == 1)
{
printf("N0.%d is not pass", i + 1);
printf("\n");
printf("He score is:");

for(j = 0; j < 4; j++)
{
printf("%5.1f\t", *(*(p + i) + j));
printf("\n");
}
}
}
}追问

这位大侠说的很对,如果按照我这样的话,就变成了,指针数组了

追答

是的啊

第3个回答  2012-07-07
二位数组传参应该使用数组指针,形式应该是(*p)[],而你写成了 *(p)[]。
修改:
第三、九行改为:
void search(float (*p)[4],int n);追问

多谢了,变成指针数组了,呵呵

相似回答