| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 926 人关注过本帖
标题:[求助]一道关于指针方面的程序问题
只看楼主 加入收藏
ZZCCY
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2006-5-1
收藏
 问题点数:0 回复次数:13 
[求助]一道关于指针方面的程序问题

大家晚上好
这道题有三个函数,average(),search1(),和search2(),通过它们分别实现求所有成绩的平均值,打出第n个学生的成绩,和找出至少有一门功课不及格的同学的学号并打印出全部成绩.
这道题前两个函数都可以实现,而第三和函数编译成功但执行失败.我看了好几天还是没找到原因
特求助于此,希大家不吝赐教,不胜感激!
main()
{void average();
void search1();
void search2();
static float score[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}};
average(*score,12);
search1(score,2);
search2(score,3);
}

void average(p,n)
float *p;int n;
{float *p_end;
float sum=0,aver;
p_end=p+n-1;
for(;p<=p_end;p++)
sum=sum+(*p);
aver=sum/n;
printf("average=%5.2f\n",aver);
}

void search1(p,n)
float (*p)[4];int n;
{int i;
printf("the scores of no.%d are :\n",n);
for(i=0;i<4;i++)
printf("%5.2f ",*(*(p+n)+i));
printf("\n");
}
void search2(p,n)
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 is fail,his scores are:\n",j+1);
for(i=0;i<4;i++)
printf("%d", *(*(p+j)+i));
printf("\n");
}
}
}

搜索更多相关主题的帖子: 指针 
2006-05-02 23:00
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 


日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-02 23:12
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 
以下是引用ZZCCY在2006-5-2 23:00:00的发言:

大家晚上好
这道题有三个函数,average(),search1(),和search2(),通过它们分别实现求所有成绩的平均值,打出第n个学生的成绩,和找出至少有一门功课不及格的同学的学号并打印出全部成绩.
这道题前两个函数都可以实现,而第三和函数编译成功但执行失败.我看了好几天还是没找到原因
特求助于此,希大家不吝赐教,不胜感激!
main()
{void average();
void search1();
void search2();
static float score[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}};
average(*score,12);
search1(score,2);
search2(score,3);
}

void average(p,n)
float *p;int n;
{float *p_end;
float sum=0,aver;
p_end=p+n-1;
for(;p<=p_end;p++)
sum=sum+(*p);
aver=sum/n;
printf("average=%5.2f\n",aver);
}

void search1(p,n)
float (*p)[4];int n;
{int i;
printf("the scores of no.%d are :\n",n);
for(i=0;i<4;i++)
printf("%5.2f ",*(*(p+n)+i));
printf("\n");
}
void search2(p,n)
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 is fail,his scores are:\n",j+1);
for(i=0;i<4;i++)
printf("%d", *(*(p+j)+i));
printf("\n");
}
}
}

没运行你的代码,估计调试后会有很多很多错误.


我的原则很简单:不做不喜欢的事!
2006-05-02 23:29
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
以下是引用论坛在2006-5-2 23:12:00的发言:

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 is fail,his scores are:\n",j+1);
for(i=0;i<4;i++)
printf("%d", *(*(p+j)+i));]
楼主用什么编译器啊,赶快扔掉换Dev C++,你那写法现在好象都没有了,上面这段肯定有问题,我没法试,你的程序我编译器编译不了,我怕累坏了编译器

[此贴子已经被作者于2006-5-2 23:34:48编辑过]


日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-02 23:31
ninanwine
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2006-5-1
收藏
得分:0 
void search2((*p)[4];,n)
float 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 is fail,his scores are:\n",j+1);
for(i=0;i<4;i++)
printf("%d", *(*(p+j)+i));
printf("\n");
}
}
}
估计这样就行了!

用0-1统治世界!
2006-05-02 23:47
ninanwine
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2006-5-1
收藏
得分:0 

应该算重复定义了吧!


用0-1统治世界!
2006-05-02 23:55
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

以上几楼都没命中要点,我改了下,楼主自己对照
[QUOTE]
#include "stdio.h"
void average(float *p,int n)
{
float *p_end;
float aver=0;

for(p_end=p+n-1;p<=p_end;p++)
aver+=(*p);
aver=aver/n;
printf("average=%5.2f\n",aver);
}

void search1(float (*p)[4],int n)
{
int i;

printf("\nThe scores of no.%d are :\n",n);
for(i=0;i<4;i++)
printf("%5.2f ",p[n-1][i]);
printf("\n");
}

void search2(float (*p)[4],int n)
{
int i,j,flag;

for(i=0;i<n;i++)
{
flag=0;
for(j=0;j<4;j++)
if(p[i][j]<60.0)
{
flag=1;
break;
}
if(flag==1)
{
printf("\nNo.%d is fail,his scores are:\n",i+1);
for(j=0;j<4;j++)
printf("%5.2f ", p[i][j]);
printf("\n");
}
}
}

int main()
{
static float score[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}};

average(*score,12);
search1(score,2);
search2(score,3);
return 0;
}

[/QUOTE]


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-02 23:59
ninanwine
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2006-5-1
收藏
得分:0 
为什么我的帖子没了啊!

用0-1统治世界!
2006-05-03 00:30
ninanwine
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2006-5-1
收藏
得分:0 
还是你的牛比啊,这是潭书愿题哈!

用0-1统治世界!
2006-05-03 00:37
ZZCCY
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2006-5-1
收藏
得分:0 
[经验]

通过 7楼feng1256 的帮助使我这道题顺利的解决了。

主要有以下几点原因导致这道题的问题:
1、应该在for(i=0;i<4;i++)
if(*(*(p+j)+i)<60) flag=1;
这个语句后面加一个break,也就是变成:
for(i=0;i<4;i++)
if(*(*(p+j)+i)<60)
{flag=1;
break;
}
不加也可以但程序不够严密。
2、也是最主要的一点就是我定义的数组元素是float,而我输出的时候
用的是%d导致出错。
以上是我对这道题的总结。

在这里我特别的感谢7楼,是你拨开迷雾,给了我启发。谢谢了
不过其他各楼层的朋友也同样给予感谢,是你们给了这张贴人气,哈哈

最后我也要说,这个程序不会累坏编译器,编译也并没有错。哈哈
这道题在潭书的185页,编译器我用的是turbo2.0,虽然老点但用的人应该
还不少,毕竟千里之行,始于足下,基础打牢还是好,慢慢来,我不急,大家晚安 明见!

[此贴子已经被作者于2006-5-3 1:21:29编辑过]


程序 是一门语言的艺术,讲究学练读写!
2006-05-03 01:21
快速回复:[求助]一道关于指针方面的程序问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014278 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved