大一萌新请教各位前辈一道C语言习题

哆小深 2019-11-26 11:38:46
试题描述

输入N个学生的C语言程序设计课程成绩,请你设计一个函数来编程找出这些学生的最高分、并列第一的学生数。
函数原型:int search(int x[], int n, int *count);

输入

输入包含两行:
第一行是N(0 < N < 1000)。
第二行是N个整数,代表N个学生的C语言程序设计课程成绩,邻近两数之间用一个空格隔开。

输出

按照题目要求输出最高分和取得最高分的学生数,用一个空格隔开。

输入示例

10
52 95 87 69 78 84 82 95 90 95
以下是我的代码 但是不知到为什么总是输出俩0 请问哪里出了问题QWQ 刚学指针这快有点迷 请问各位前辈如何修改呢
#include<stdio.h>
int search(int x[], int n, int *count)
{
int i;
int *max=x;
*count=0;
for(i=0;i<n;i++)
{if(x[i]>*max)
*max=x[i];}
for(i=0;i<n;i++)
{if(x[i]==*max)
*count++;}
}
void main()
{
int x[10000],i,n,m,j,*count,*max;
scanf("%d",&n);
count=&m;
max=&j;
for(i=0;i<n;i++)
scanf("%d",&x[i]);
search(x,n,&m);
printf("%d %d",j,m);
}


...全文
497 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
哆小深 2019-11-28
  • 打赏
  • 举报
回复
引用 7 楼 寻开心 的回复:
#include<stdio.h> int search(int x[], int n, int *count) { int i; int *max=x; // max放最大值,用不到使用指针。 应该是max=x[0] *count=0; for(i=0;i<n;i++) { // max=x[0] 后,这里,i要从1开始 if(x[i]>*max) *max=x[i]; // if ( x[i]>max ) max = x[i]; } for(i=0;i<n;i++) { if( x[i]==*max ) *count++; // x[i] == max } return max; // 需要补上这一行, 题目要求的函数是有返回值的,返回的就是最大的成绩 } void main() { int x[10000],i,n,m,j,*count,*max; scanf("%d",&n); count=&m; // 这里取得了m的地址, max=&j; // 这里取得了j的地址. 没有任何意义了 for(i=0;i<n;i++) scanf("%d",&x[i]); j= search(x,n,&m); // 这里用 search(x, n, count) ; 才不浪费前面的count=&m printf("%d %d",j,m); // 用m或者*count均可 }
谢谢前辈!!!
哆小深 2019-11-28
  • 打赏
  • 举报
回复
引用 5 楼 jun木~ 的回复:
帮你总结下哈! 一、你主函数里面有个max指针,然后子函数里面又定义了一个max,两者没有一毛钱关系,所以你子函数里面的max记下的最大值是传不回来的。 二、max在不加※的情况下,去赋值,记下的是别人地址,不是值。 三、子函数如果没有返回值请用void。
谢谢前辈!!!
寻开心 2019-11-27
  • 打赏
  • 举报
回复
#include<stdio.h>
int search(int x[], int n, int *count)
{
int i;
int *max=x; // max放最大值,用不到使用指针。 应该是max=x[0]
*count=0;
for(i=0;i<n;i++) { // max=x[0] 后,这里,i要从1开始
if(x[i]>*max) *max=x[i]; // if ( x[i]>max ) max = x[i];
}
for(i=0;i<n;i++) {
if( x[i]==*max ) *count++; // x[i] == max
}
return max; // 需要补上这一行, 题目要求的函数是有返回值的,返回的就是最大的成绩
}
void main()
{
int x[10000],i,n,m,j,*count,*max;
scanf("%d",&n);
count=&m; // 这里取得了m的地址,
max=&j; // 这里取得了j的地址. 没有任何意义了
for(i=0;i<n;i++)
scanf("%d",&x[i]);
j= search(x,n,&m); // 这里用 search(x, n, count) ; 才不浪费前面的count=&m
printf("%d %d",j,m); // 用m或者*count均可
}
木木不会 2019-11-27
  • 打赏
  • 举报
回复
引用 4 楼 fireyou的回复:
*count++ 改成 (*count)++; 这样次数就对了
你可以玩玩 ”找不同游戏”,啊哈哈哈
木木不会 2019-11-27
  • 打赏
  • 举报
回复
帮你总结下哈! 一、你主函数里面有个max指针,然后子函数里面又定义了一个max,两者没有一毛钱关系,所以你子函数里面的max记下的最大值是传不回来的。 二、max在不加※的情况下,去赋值,记下的是别人地址,不是值。 三、子函数如果没有返回值请用void。
fireyou 2019-11-27
  • 打赏
  • 举报
回复 1
*count++ 改成 (*count)++; 这样次数就对了
木木不会 2019-11-27
  • 打赏
  • 举报
回复
#include<stdio.h> void search(int x[], int n, int *count, int *max) { int i; *max=*x; *count=0; for(i=0;i<n;i++) {if(x[i]>*max)*max=x[i];} for(i=0;i<n;i++) {if(x[i]==*max)(*count)++;} } void main() { int x[10000],i,n,m=0,j=0; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&x[i]); search(x,n,&m,&j); printf("%d %d",j,m); }
铖邑 2019-11-27
  • 打赏
  • 举报
回复
第一个if里面,应该是max=&x[i];
哆小深 2019-11-27
  • 打赏
  • 举报
回复
求教求教 指针这里感觉好难啊

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧