一个很简单的指针程序

来源:百度知道 编辑:UC知道 时间:2024/09/23 06:58:46
#include <stdio.h>
void main()
{
void search(float(*p)[4],int n);
float score[3][4]={20,56,67,10,35,87,98,100,65,98,86,87};
search(score,3);
}
void search(float(*p)[4],int n)
{
int i,j,flag;

for(j=0;j<n;j++)
{
flag=0;
for(i=0;i<4;i++)

if(*(*(p+j)+i)<60)
flag=1;
if (flag ==1)
{
printf("No.%d fails,his scores are\n",j+1);
for (i=0;i<4;i++)
printf("%7.1f",*(*(p+j)+i));
printf("\n");
}

}
}
我想问的是,比如第一个学生有两科不及格,我觉得系统应该打印两次这个学生成绩,为什么只打了一次,这个不是所有都遍历一次吗?符合结果就打印的啊。。。

下面这两行的参数i改成其它参数,都是i,在这个循环里i的值就是3了
for (i=0;i<4;i++)
printf("%7.1f",*(*(p+j)+i));
外层的循环for(i=0;i<4;i++)
当然就不走了
search函数里的标记位根本没用
改一点就行了
#include <stdio.h>
void main()
{
int i,j;
void search(float(*p)[4],int n);
float score[3][4]={67,20,56,10,35,87,98,100,65,98,86,87};
search(score,3);
}
void search(float(*p)[4],int n)
{
int i,j,m;

for(j=0;j<n;j++)
{
for(i=0;i<4;i++)
{
if(*(*(p+j)+i)<60)
{
printf("No.%d fails,his scores are\n",j+1);
for (m=0;m<4;m++)
printf("%7.1f",*(*(p+j)+m));
printf("\n");
}
}
}
}

void search(float(*p)[4],int n);

// 这里的float(*p)[4] 改成 float *p[4]

为什么有两科不及格就要打印两次?
if(*(*(p+j)+i)<60)时,只要有一科不及格flag=1;后面如果还有不及格得还