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

这个问题我编了一晚上,问题特别大,很郁闷,哎,大家帮帮忙吧,帮我看看,要不觉都睡不着啊,问题很多如果您没时间,看到什么问题就哪怕一点点,不胜感激啊!!
下面是题和我写的程序:
有一个班4个学生,5门课。(1)求第一门课的平均分;(2)找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平均成绩;(3)找出平均成绩在90分以上或全部课程成绩在85分以上的学生。分别编3个函数实现以上3个要求。
main()
{
static float a[4][5]={{90,91,92,93,91},{86,89,88,87,86},
{36,64,53,87,90},{56,89,55,64,96}};
float aver;
void average(),failtwo(),find();
average(a);
printf("\n");
failtwo(a);
printf("\n");
find(a);
}

void average(float *p[5])
{
int i;
float sum=0,aver;
for(i=0;i<3;i++)
sum=(**(p+i))+sum;
aver=sum/4;
printf("1.question:the average score is %5.2f\n",aver);
}

void failtwo(float *p[5])
{
int i,j,n,k,m;
float failav,sum;
for(i=0;i<4;i++)
{ k=0,sum=0;
for(j=0;j<5;j++)
if(*(*(p+i)+j)<60) k=k+1;
if(k>=2)
{
printf("the number %d is fail\n",i+1);
printf("the scores are:\n");
for(j=0;j<5;j++)
printf("%5.2f",*(*(p+i)+j));
printf("\n");
for(j=0;j<5;j++)
sum=sum+(*(*(p+i)+j));
failav=sum/5;
printf("failav=%5.2f\n",failav);
}
}
}

void find(float *p[5])
{
int i,j,flag;
float aver,sum;
for(i=0;i<4;i++)
{
sum=0,flag=0;
for(j=0;j<5;j++)
{
if(*(*(p+i)+j)>85) flag=flag+1;
sum=sum+(*(*(p+i)+j));
}
aver=sum/4;
if(flag==4)
printf("3.question:No.%d\n",i+1);
else if(aver>90) printf("3.question:No.%d\n",i+1);
}
}

更正:六楼的flag==4应该是falg==5,疏忽了

----------六楼留

搜索更多相关主题的帖子: 守侯 指针 期待 在线 
2006-05-06 00:54
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 
我很想帮你,不过真的太简单了,你在努努力,一定行的.

日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-06 00:56
ZZCCY
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2006-5-1
收藏
得分:0 

调了好久,一个函数都不能实现,我想肯定出的是一个通性的问题,希望能够得到高手指点,哪怕是一点点


程序 是一门语言的艺术,讲究学练读写!
2006-05-06 01:02
论坛
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1372
专家分:0
注 册:2006-3-27
收藏
得分:0 

你这程序的错误要都写出拉比你程序都长,你还没有理解数组之类的应用做这东西肯定困难,在看看数组把


日出东方,唯我不败! 做任何东西都是耐得住寂寞,任何一个行业要有十年以上的积累才能成为专家
2006-05-06 01:18
ZZCCY
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2006-5-1
收藏
得分:0 

非常感谢啊,我去改了


程序 是一门语言的艺术,讲究学练读写!
2006-05-06 01:19
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

指出两致命错误:

float (*p)[5] 这才是真正的二维数组指针
计算平均成绩时i<4 写成了i<3 第一个函数中
自定义函数名最后大写(区别于库函数)
其他很多小问题,楼主自己总结(我看你上次回贴风格好,这次才帮你



[CODE]
#include "stdio.h"

void Average(float (*p)[5])
{
int i;
float aver=0;

for(i=0;i<4;i++)
aver+=p[i][0];
aver=aver/4;
printf("1.question:the average score is %5.2f\n",aver);
}

void Failtwo(float (*p)[5])
{
int i,j,k;
float failav;

for(i=0;i<4;i++)
{
k=failav=0;
for(j=0;j<5;j++)
if(p[i][j]<60)
k+=1;
if(k>=2)
{
printf("the number %d is fail\n",i+1);
printf("the scores are:\n");
for(j=0;j<5;j++)
printf("%5.2f ",p[i][j]);
printf("\n");
for(j=0;j<5;j++)
failav+=p[i][j];
failav=failav/5;
printf("failav=%5.2f\n\n",failav);
}
}
}

void Find(float (*p)[5])
{
int i,j,flag;
float aver;

for(i=0;i<4;i++)
{
aver=flag=0;
for(j=0;j<5;j++)
{
if(p[i][j]>85)
flag+=1;
aver+=p[i][j];
}
aver=aver/4;
if(flag==4||aver>90)
printf("3.question:No.%d\n",i+1);

}
}

int main()
{
float a[4][5]={ {90,91,92,93,91},{86,89,88,87,86},
{36,64,53,87,90},{56,89,55,64,96} };

Average(a);
printf("\n");
Failtwo(a);
printf("\n");
Find(a);

return 0;
}

[/CODE]


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-06 01:25
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

再次提醒论坛同志:不要把一个问题分成10个小部分发10次说出来


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-06 01:28
ZZCCY
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2006-5-1
收藏
得分:0 
问题解决了功能也实现了,问题主要出在对形参的定义上,我本想把行参定义为指向5个元素一维数组的指针变量,却定义成了有5个元素的指针数组,调了三个函数的行参,功能就实现了.
在这里谢谢论坛的倾情帮助,非常感谢!
不过你说有那么多的错误我还是体会不到,不知道是否象你说的那样有那么多的错误

程序 是一门语言的艺术,讲究学练读写!
2006-05-06 01:30
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

float (*p)[5] 这才是真正的二维数组指针!
计算平均成绩时i<4 写成了i<3 第一个函数中!
自定义函数名最好大写(区别于库函数)!

定义了二维数组指针,不使用简洁表达!
很多多余的变量!
全90分或者都85分以上 明显是个|| 没用~!
不及格的输出成绩时,结果连在一起,后面少个空格 应该printf("%5.2f ",...
最重要的:自己还认为没错~!


[此贴子已经被作者于2006-5-6 1:38:40编辑过]


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-06 01:38
ZZCCY
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2006-5-1
收藏
得分:0 
哈哈,在我写总结的时候feng1256也来了啊,很荣幸,这么晚了还得到着么多人的帮助.
没看到feng1256的帖子主要原因是我打字太慢了,其实我原来打字挺快只是最近慢了,因为我在4月28日的篮球比赛中..不幸..*右手腕肌底部位骨折,我每天发的帖子都是用一只左手打的,右手被石膏固定着呢,还算是爱学习吧,呵呵
我对C语言最近的热情可以说源于这个论坛,因为每次我现实生活中难以得到解决的困惑都在这里迎刃而解,真的很感谢大家!
手不方便今天就不多说了,手好了之后在侃,呵呵,最后愿我们的论坛我们的家越办越好,愿更多的人能在这里得到提高!

程序 是一门语言的艺术,讲究学练读写!
2006-05-06 01:49
快速回复:[求助]潭书上关于指针的问题(在线守侯,期待您中.....)
数据加载中...
 
   



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

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