鱼C论坛

 找回密码
 立即注册
查看: 1021|回复: 18

[已解决]求解决一直得不到正确的结果

[复制链接]
发表于 2020-4-8 10:15:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
//学生信息包括学号和成绩2项,请从键盘敲入4个学生的信息,然后在自定义函数中计算该四名学生中成绩最高的学生信息,输出结果。
#include<stdio.h>
struct student
{
        char name[5];
        int number;
}str[4];
main()
{       
        int i;
        printf("请输入学生的姓名和成绩:");
        for (i = 0; i < 4; i++)
                scanf("%s%d", str[i].name, &str[i].number);
        printf("学生中成绩最高的是%d", max(str[i].number));
}
int max(int a[4])
{
        int i,temp=a[0];
        for (i = 1; i < 4;i++)
        if (a[i]>temp)
                temp = a[i];
        return temp;
}//程序里没有错误,可是得不到正确的结果
只能输入没有输出
最佳答案
2020-4-8 10:35:35
这么多错误,你说程序没错?
你的程序通过编译了?运行的时候没有提示错误?
printf("学生中成绩最高的是%d", max(str[i].number))
//这里的str[i].number是什么鬼?
//1.经过for循环之后i不是已经等于4了么?str[4]没有超出index范围?
//2.max函数的参数是一个int数组,你传递进去一个int变量是什么意思?
//3.max函数定义在main函数之后,你不在前面进行函数声明,程序能运行?难道没有提示:error: ‘max’ was not declared in this scope
帮你修改了。
#include<stdio.h>
int max(int a[4]);
struct student
{
    char name[5];
    int number;
}str[4];
main()
{       
    int i,chengji[4];
    printf("请输入学生的姓名和成绩:");
    for (i = 0; i < 4; i++){
        scanf("%s%d", str[i].name, &str[i].number);
        chengji[i]=str[i].number;
        
    }
    printf("学生中成绩最高的是%d",max(chengji));
}
int max(int a[4])
{
    int i,temp=a[0];
    for (i = 1; i < 4;i++)
    if (a[i]>temp)
        temp = a[i];
    return temp;
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-8 10:26:58 From FishC Mobile | 显示全部楼层
max函数怎么不声明?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-8 10:27:53 From FishC Mobile | 显示全部楼层
我想,声明时,参数应当是一个学生呢?还是一个整型值呢?还是一个整型指针呢?请思考。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-8 10:29:24 From FishC Mobile | 显示全部楼层
待我回去上机,按你所写,重写出你一眼能看到的问题所在。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-8 10:31:21 | 显示全部楼层
howzyao 发表于 2020-4-8 10:27
我想,声明时,参数应当是一个学生呢?还是一个整型值呢?还是一个整型指针呢?请思考。

声明的意义在那里????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-8 10:35:35 | 显示全部楼层    本楼为最佳答案   
这么多错误,你说程序没错?
你的程序通过编译了?运行的时候没有提示错误?
printf("学生中成绩最高的是%d", max(str[i].number))
//这里的str[i].number是什么鬼?
//1.经过for循环之后i不是已经等于4了么?str[4]没有超出index范围?
//2.max函数的参数是一个int数组,你传递进去一个int变量是什么意思?
//3.max函数定义在main函数之后,你不在前面进行函数声明,程序能运行?难道没有提示:error: ‘max’ was not declared in this scope
帮你修改了。
#include<stdio.h>
int max(int a[4]);
struct student
{
    char name[5];
    int number;
}str[4];
main()
{       
    int i,chengji[4];
    printf("请输入学生的姓名和成绩:");
    for (i = 0; i < 4; i++){
        scanf("%s%d", str[i].name, &str[i].number);
        chengji[i]=str[i].number;
        
    }
    printf("学生中成绩最高的是%d",max(chengji));
}
int max(int a[4])
{
    int i,temp=a[0];
    for (i = 1; i < 4;i++)
    if (a[i]>temp)
        temp = a[i];
    return temp;
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-8 10:37:06 | 显示全部楼层
sunrise085 发表于 2020-4-8 10:35
这么多错误,你说程序没错?
你的程序通过编译了?运行的时候没有提示错误?

运行的时候没有报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-8 10:38:08 | 显示全部楼层
sunrise085 发表于 2020-4-8 10:35
这么多错误,你说程序没错?
你的程序通过编译了?运行的时候没有提示错误?

求带,求教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-8 10:39:00 | 显示全部楼层
另外,还要提一句。很多程序猿都会犯的一个错误。
“我的程序没有错误啊”
若果完全没有错误,那不就运行出结果了么
自信是要有的,但不是盲目的自信。
个人建议:以后提问尽量别用这一句话
不喜轻喷~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-4-8 10:40:58 | 显示全部楼层
WFR 发表于 2020-4-8 10:37
运行的时候没有报错

这么多问题,运行的时候没有报错?
那你应该换一个编译器了。哈哈哈哈,你的编译器在玩你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-4-8 10:43:44 | 显示全部楼层
sunrise085 发表于 2020-4-8 10:35
这么多错误,你说程序没错?
你的程序通过编译了?运行的时候没有提示错误?

chengji[i]=str[i].number;为什么要再建一个数组呢????为什么不能直接调用结构体中的数据????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-8 10:50:24 | 显示全部楼层
sunrise085 发表于 2020-4-8 10:39
另外,还要提一句。很多程序猿都会犯的一个错误。
“我的程序没有错误啊”
若果完全没有错误,那不就运行 ...

嗯!!!!!!好的谢谢你,我是一个新手,还在自学的路上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-8 10:51:30 | 显示全部楼层
sunrise085 发表于 2020-4-8 10:40
这么多问题,运行的时候没有报错?
那你应该换一个编译器了。哈哈哈哈,你的编译器在玩你

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-8 10:53:42 | 显示全部楼层
WFR 发表于 2020-4-8 10:43
chengji=str.number;为什么要再建一个数组呢????为什么不能直接调用结构体中的数据????

你写的max函数的参数是int类型的数组。str的是struct类型数组,不能用;str[i].number是int变量不是数组,而且你不能传递进气四个int变量吧。

倒是可以修改max函数,直接将struct数组传递进去
#include<stdio.h>
struct student
{
    char name[5];
    int number;
}str[4];
int max(student a[4]);

int main()
{       
    int i,chengji[4];
    printf("请输入学生的姓名和成绩:");
    for (i = 0; i < 4; i++)
        scanf("%s%d", str[i].name, &str[i].number);
    printf("学生中成绩最高的是%d",max(str));
}
int max(student a[4])
{
    int i,temp=a[0].number;
    for (i = 1; i < 4;i++)
    if (a[i].number>temp)
        temp = a[i].number;
    return temp;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-4-8 10:57:29 | 显示全部楼层
sunrise085 发表于 2020-4-8 10:53
你写的max函数的参数是int类型的数组。str的是struct类型数组,不能用;str[i].number是int变量不是数组 ...

喔!!!谢谢你告诉我,我都不知道这个,我该从哪里去找这些东西
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-8 16:18:18 | 显示全部楼层
啊.我晚来一步了?竟然有最佳答案了啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-8 17:16:42 | 显示全部楼层
#include <cstdlib>
#include <iostream>
#include <stdio.h>
using namespace std;

struct student
{
        char name[5];
                    
        int number;
        

        
        double sc;
        int    thenumber;
        double scdump;
         
//}str[4];

};

double max(const student &,const double);
                     
                       
int main(int argc, char *argv[])
{

   
    int len=4; //需要4位学生
     
    double higher=0.0;
      
    cout<<"请输入学生的姓名和成绩:"<<endl;
   
    student persons[ len ];
   
    for(int i=0;i<len;i++)
    {
        cout<<"输入第"<<i+1<<"位学生的姓名(回车键确认)"<<endl;   
        cin>>persons[i].name;
        cout<<"输入"<<persons[i].name<<"的成绩(回车键确认)"<<endl;
        cin>>persons[i].sc;
        cin.get();
        
        
                       
        if(!i)
        higher=persons[i].sc;
        else
        higher = max( persons[i],higher );
        
    }
    cout<<"成绩最高的得分是:"<<higher<<endl;
   
    //准备工作,作完了,开始需求计算:
    //平均成绩:
               //average( persons ); //为了熟悉C++这个工具,留给你自己完成


     
    system("PAUSE");
    return EXIT_SUCCESS;
}

double max( const student &a,double h)
{
        return a.sc>h? a.sc : h;
        
}//程序里没有错误,可是得不到正确的结果
   

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-8 17:25:45 | 显示全部楼层
虽然没有拿到最佳答案,但还是要方便交流,下面是,逐行的注释及改编思路:

#include <cstdlib>
#include <iostream>
#include <stdio.h>
using namespace std;

struct student
{
        char name[5]; //学该是5字符长度的char字符串组成的数组,意思就是名字不得超
                     //过2.5个中文长度,英文不得超过5个字符
        int number; //应该是学号
        
        //所以,没有存储成绩的 数据成员
        
        double sc; //新建一个存成绩的,成绩会有0.5分的
        
        //有计划,但暂时未用到的,比如不用每次都排名,记得排名的 数据成员
        //不去专门使用外部变量,直接使用这个学生类(结构)中的前一位学生的成绩
        int    thenumber; //也新建一个用来排名次的整型变量,名次不会有1.5名的
        double scdump; //新建一个,需要比对成绩的变量,用来和上一位学生的成绩相比
         
//}str[4];//虽说正确,我觉得不要这种写法,应当去主函数里使用时声明,要多少就声明多少

};

double max(const student &,const double); //既然主函数中有函数调用
                       //那就必须先要声明这个函数
                       //参数列表改你的int数组为一个"学生"
                       
int main(int argc, char *argv[])
{
    /*
        int i;
        printf("请输入学生的姓名和成绩:");
        for (i = 0; i < 4; i++)
                 scanf("%s%d", str[i].name, &str[i].number);
        printf("学生中成绩最高的是%d", max(str[i].number));
    */
   
    int len=4; //需要4位学生
     
    double higher=0.0;//用于临时记录更高一些的成绩
    //同样是声明完毕后,及时初始化的习惯.
      
    cout<<"请输入学生的姓名和成绩:"<<endl;
   
    student persons[ len ]; //声明一个学生类型的变量:
            //取名 个人们 且以数组存在,长度是4
   
    for(int i=0;i<len;i++) //开始输入了
    {
        cout<<"输入第"<<i+1<<"位学生的姓名(回车键确认)"<<endl;   
        cin>>persons[i].name;
        cout<<"输入"<<persons[i].name<<"的成绩(回车键确认)"<<endl;
        cin>>persons[i].sc;
        cin.get();
        
        //计算最好成绩: 在输入的过程中
                       
        if(!i) //当第0个学生时,执行分支如下行:
        higher=persons[i].sc; //备份首个学生的成绩,随后就不执行本行
        else
        higher = max( persons[i],higher );
        
        //这个if else 分支,完成了最好成绩的排序:
        //按顺序备份出来刚刚输入并存好的成绩
        //第二个学生起直到最后一个,需要做:每次对比第前一次的成绩:
        
    }
    cout<<"成绩最高的得分是:"<<higher<<endl;
   
    //准备工作,作完了,开始需求计算:
    //平均成绩:
               //average( persons ); //为了熟悉C++这个工具,留给你自己完成


     
    system("PAUSE");
    return EXIT_SUCCESS;
}

double max( const student &a,double h) //实现: 形参 的名称是a,我称呼它为学生a
                                  //学生a是现有的,不能变动一切属性所以用const
                                  //增加一个对比的临时变量也是const的,不能变
{
        /*
        
        int i,temp=a[0];
        for (i = 1; i < 4;i++)
        if (a[i]>temp)
                temp = a[i];
        return temp;

        max是无意义的,也帮你改一改:
        既然学生都进入来了,那就需要返回这个学生的成绩,只为是有一个学生进来,
        所以作为函数名:max就是无义意的,如何得到最大数嘛?
         
        */

        
        
        return a.sc>h? a.sc : h;
        
}//程序里没有错误,可是得不到正确的结果
   

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-8 17:38:22 | 显示全部楼层
声明的意义在那里????


这个义意有两条:
一,是C++的规则:凡是自定义函数,必先声明,再使用;
二,是你给出的函数名名称的涵意:最大的英文单词:max
跟据这个词,上帖已给作出来答案:你无论输出多少位学生名字,和成绩,它们都是宝贵的数据,这些数据,都存储在了你定义的学生类(结构中),
这些,都可以写入文件或数据库,总之,这些数据,需要一次录入,可靠存放,啊扯远了...
所以函数的意义,在于如何使用原始数据及原始数据的复件.
以上意义,对否?欢迎跟贴.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 12:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表