求解决一直得不到正确的结果
//学生信息包括学号和成绩2项,请从键盘敲入4个学生的信息,然后在自定义函数中计算该四名学生中成绩最高的学生信息,输出结果。#include<stdio.h>
struct student
{
char name;
int number;
}str;
main()
{
int i;
printf("请输入学生的姓名和成绩:");
for (i = 0; i < 4; i++)
scanf("%s%d", str.name, &str.number);
printf("学生中成绩最高的是%d", max(str.number));
}
int max(int a)
{
int i,temp=a;
for (i = 1; i < 4;i++)
if (a>temp)
temp = a;
return temp;
}//程序里没有错误,可是得不到正确的结果
只能输入没有输出 max函数怎么不声明? 我想,声明时,参数应当是一个学生呢?还是一个整型值呢?还是一个整型指针呢?请思考。 待我回去上机,按你所写,重写出你一眼能看到的问题所在。 howzyao 发表于 2020-4-8 10:27
我想,声明时,参数应当是一个学生呢?还是一个整型值呢?还是一个整型指针呢?请思考。
声明的意义在那里???? 这么多错误,你说程序没错?
你的程序通过编译了?运行的时候没有提示错误?
printf("学生中成绩最高的是%d", max(str.number))
//这里的str.number是什么鬼?
//1.经过for循环之后i不是已经等于4了么?str没有超出index范围?
//2.max函数的参数是一个int数组,你传递进去一个int变量是什么意思?
//3.max函数定义在main函数之后,你不在前面进行函数声明,程序能运行?难道没有提示:error: ‘max’ was not declared in this scope
帮你修改了。
#include<stdio.h>
int max(int a);
struct student
{
char name;
int number;
}str;
main()
{
int i,chengji;
printf("请输入学生的姓名和成绩:");
for (i = 0; i < 4; i++){
scanf("%s%d", str.name, &str.number);
chengji=str.number;
}
printf("学生中成绩最高的是%d",max(chengji));
}
int max(int a)
{
int i,temp=a;
for (i = 1; i < 4;i++)
if (a>temp)
temp = a;
return temp;
}
sunrise085 发表于 2020-4-8 10:35
这么多错误,你说程序没错?
你的程序通过编译了?运行的时候没有提示错误?
运行的时候没有报错 sunrise085 发表于 2020-4-8 10:35
这么多错误,你说程序没错?
你的程序通过编译了?运行的时候没有提示错误?
求带,求教 另外,还要提一句。很多程序猿都会犯的一个错误。
“我的程序没有错误啊”
若果完全没有错误,那不就运行出结果了么
自信是要有的,但不是盲目的自信。
个人建议:以后提问尽量别用这一句话
不喜轻喷~~ WFR 发表于 2020-4-8 10:37
运行的时候没有报错
这么多问题,运行的时候没有报错?
那你应该换一个编译器了。哈哈哈哈,你的编译器在玩你
sunrise085 发表于 2020-4-8 10:35
这么多错误,你说程序没错?
你的程序通过编译了?运行的时候没有提示错误?
chengji=str.number;为什么要再建一个数组呢????为什么不能直接调用结构体中的数据???? sunrise085 发表于 2020-4-8 10:39
另外,还要提一句。很多程序猿都会犯的一个错误。
“我的程序没有错误啊”
若果完全没有错误,那不就运行 ...
嗯!!!!!!好的谢谢你,我是一个新手,还在自学的路上{:10_266:} sunrise085 发表于 2020-4-8 10:40
这么多问题,运行的时候没有报错?
那你应该换一个编译器了。哈哈哈哈,你的编译器在玩你
{:10_266:}{:10_277:}{:10_266:} 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;
int number;
}str;
int max(student a);
int main()
{
int i,chengji;
printf("请输入学生的姓名和成绩:");
for (i = 0; i < 4; i++)
scanf("%s%d", str.name, &str.number);
printf("学生中成绩最高的是%d",max(str));
}
int max(student a)
{
int i,temp=a.number;
for (i = 1; i < 4;i++)
if (a.number>temp)
temp = a.number;
return temp;
} sunrise085 发表于 2020-4-8 10:53
你写的max函数的参数是int类型的数组。str的是struct类型数组,不能用;str[i].number是int变量不是数组 ...
喔!!!谢谢你告诉我,我都不知道这个,我该从哪里去找这些东西 啊.我晚来一步了?竟然有最佳答案了啊?{:10_266:} #include <cstdlib>
#include <iostream>
#include <stdio.h>
using namespace std;
struct student
{
char name;
int number;
double sc;
int thenumber;
double scdump;
//}str;
};
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.name;
cout<<"输入"<<persons.name<<"的成绩(回车键确认)"<<endl;
cin>>persons.sc;
cin.get();
if(!i)
higher=persons.sc;
else
higher = max( persons,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;
}//程序里没有错误,可是得不到正确的结果
虽然没有拿到最佳答案,但还是要方便交流,下面是,逐行的注释及改编思路:
#include <cstdlib>
#include <iostream>
#include <stdio.h>
using namespace std;
struct student
{
char name; //学该是5字符长度的char字符串组成的数组,意思就是名字不得超
//过2.5个中文长度,英文不得超过5个字符
int number; //应该是学号
//所以,没有存储成绩的 数据成员
double sc; //新建一个存成绩的,成绩会有0.5分的
//有计划,但暂时未用到的,比如不用每次都排名,记得排名的 数据成员
//不去专门使用外部变量,直接使用这个学生类(结构)中的前一位学生的成绩
int thenumber; //也新建一个用来排名次的整型变量,名次不会有1.5名的
double scdump; //新建一个,需要比对成绩的变量,用来和上一位学生的成绩相比
//}str;//虽说正确,我觉得不要这种写法,应当去主函数里使用时声明,要多少就声明多少
};
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.name, &str.number);
printf("学生中成绩最高的是%d", max(str.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.name;
cout<<"输入"<<persons.name<<"的成绩(回车键确认)"<<endl;
cin>>persons.sc;
cin.get();
//计算最好成绩: 在输入的过程中
if(!i) //当第0个学生时,执行分支如下行:
higher=persons.sc; //备份首个学生的成绩,随后就不执行本行
else
higher = max( persons,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;
for (i = 1; i < 4;i++)
if (a>temp)
temp = a;
return temp;
max是无意义的,也帮你改一改:
既然学生都进入来了,那就需要返回这个学生的成绩,只为是有一个学生进来,
所以作为函数名:max就是无义意的,如何得到最大数嘛?
*/
return a.sc>h? a.sc : h;
}//程序里没有错误,可是得不到正确的结果
声明的意义在那里????
这个义意有两条:
一,是C++的规则:凡是自定义函数,必先声明,再使用;
二,是你给出的函数名名称的涵意:最大的英文单词:max
跟据这个词,上帖已给作出来答案:你无论输出多少位学生名字,和成绩,它们都是宝贵的数据,这些数据,都存储在了你定义的学生类(结构中),
这些,都可以写入文件或数据库,总之,这些数据,需要一次录入,可靠存放,啊扯远了...
所以函数的意义,在于如何使用原始数据及原始数据的复件.
以上意义,对否?欢迎跟贴.
页:
[1]