鱼C论坛

 找回密码
 立即注册
查看: 1193|回复: 6

为什么最后结果没有输出小数部分

[复制链接]
发表于 2023-12-13 21:09:54 | 显示全部楼层 |阅读模式

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

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

x
依次输入一个学生的学号,以及3科(C语言,数学,英语)成绩,在屏幕上输出该学生的学号,3科成绩(注:输出成绩时需进行四舍五入且保留2位小数)。

数据范围:学号满足 1≤n≤20000000  ,各科成绩使用百分制,且不可能出现负数
输入描述:
学号以及3科成绩,学号和成绩之间用英文分号隔开,成绩之间用英文逗号隔开。
#include <stdint.h>
#include <stdio.h>

void Student(int n,float a,float b,float c){
    while(1<=n&&n<=20000000){
        if(a>=0&&b>=0&&c>=0){
        a=(int)(a*100+0.5);
        a=a/100;
        b=(int)(b*100+0.5);
        b=b/100;
        c=(int)(c*100+0.5);
        c=c/100;
        }
    }
}
int main() {
    int n;
    float x,y,z;
    scanf("%d;%.5f,%.5f,%.5f",&n,&x,&y,&z);
    Student(n,x,y,z);
    printf("The each subject score of No. %d is %.2f,%.2f,%.2f.",n,x,y,z);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-13 21:10:16 | 显示全部楼层
代码中的问题在于,函数`Student()`内部的while循环条件是`1=0&&c>=0`,这是一个永远为假的条件,因此循环永远不会执行,导致小数部分没有被保留。同时,函数`Student()`的作用是将输入的成绩四舍五入并保留两位小数,但是该函数没有实际的返回值,因此无法改变`main()`函数中的变量。

下面是修正后的代码:
#include <stdio.h>void Student(int *n, float *a, float *b, float *c){    *a = (int)(*a * 100 + 0.5) / 100.0;    *b = (int)(*b * 100 + 0.5) / 100.0;    *c = (int)(*c * 100 + 0.5) / 100.0;}int main() {    int n;    float x, y, z;    scanf("%d;%f,%f,%f", &n, &x, &y, &z);    Student(&n, &x, &y, &z);    printf("The each subject score of No. %d is %.2f,%.2f,%.2f.", n, x, y, z);    return 0;}
修正后的代码将学号和成绩传递给`Student()`函数时使用指针,以确保在函数内部对其进行修改时能够影响到`main()`函数中的变量。同时,在`Student()`函数内部,直接对成绩进行四舍五入并保留两位小数。最后,在`printf()`函数中输出结果时,使用`%.2f`格式保留两位小数。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-13 21:29:19 | 显示全部楼层
FishC 发表于 2023-12-13 21:10
代码中的问题在于,函数`Student()`内部的while循环条件是`1=0&&c>=0`,这是一个永远为假的条件,因此循环 ...
输入:
17140216;80.845,90.55,100.00
复制
输出:
The each subject score of No. 17140216 is 80.85, 90.55, 100.00.
如何达到预期结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-13 21:30:02 | 显示全部楼层
faaaaaaaa 发表于 2023-12-13 21:29
输入:
17140216;80.845,90.55,100.00
复制
输出: ...

根据您的需求,需要修正一下`scanf()`函数中的格式控制符以及在`printf()`函数中的输出格式。下面是修正后的代码:
#include <stdio.h>void Student(int *n, float *a, float *b, float *c){    *a = (int)(*a * 100 + 0.5) / 100.0;    *b = (int)(*b * 100 + 0.5) / 100.0;    *c = (int)(*c * 100 + 0.5) / 100.0;}int main() {    int n;    float x, y, z;    scanf("%d;%f,%f,%f", &n, &x, &y, &z);    Student(&n, &x, &y, &z);    printf("The each subject score of No. %d is %.2f, %.2f, %.2f.", n, x, y, z);    return 0;}
修正后的代码将 `scanf()` 函数中的格式控制符修改为 `%f`,因为输入的成绩是浮点数。同时,在 `printf()` 函数中的输出格式通过添加空格来达到预期结果。现在,输入 `17140216;80.845,90.55,100.00`,输出应为 `The each subject score of No. 17140216 is 80.85, 90.55, 100.00.`

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-13 21:47:07 | 显示全部楼层
#include <stdio.h>

void Student(int n,float a,float b,float c){
        float A,B,C;
        A=a/100;
        B=b/100;
        C=c/100;
        printf("The each subject score of No. %d is %0.2lf,%0.2lf,%0.2lf.",n,A,B,C);
}
int main() {
        int n;
    int x,y,z;
    scanf("%d %d %d %d",&n,&x,&y,&z);
    Student(n,x,y,z);
    return 0;
}
你好,这个输入成绩输出成绩 ,不需要循环while语句的,可以在开始的时候加一个判断if(1<=n&&n<=20000000)
    scanf("%d;%.5f,%.5f,%.5f",&n,&x,&y,&z);
你这个语句我运行的时候出错了,引号里面的逗号和分号不应该加的
程序输入40 50 60 70  输出是40 0.50 0.60 0.70
我也是刚学c语言 有问题可以交流下 谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-12-13 23:14:25 | 显示全部楼层
-kasha 发表于 2023-12-13 21:47
#include

void Student(int n,float a,float b,float c){

很感谢你的回复 我这里确实不能用while,你是对的。
有些关于你的代码细节想跟你讨论一下:Student函数中abc直接除100,如果是100以内的成绩得到的结果只能是0.00。在main函数中要获取的xyz应该是浮点数,用%f。引号内的分号与逗号是题目内要求的,应该是要存在的
希望能给你一些帮助
一起进步
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-12-14 13:01:30 | 显示全部楼层
faaaaaaaa 发表于 2023-12-13 23:14
很感谢你的回复 我这里确实不能用while,你是对的。
有些关于你的代码细节想跟你讨论一下:Student函数 ...

#include <stdint.h>
#include <stdio.h>

void Student(int n,float a,float b,float c){
        a=a*100+0.5;
        a=a/100;
        b=b*100+0.5;
        b=b/100;
        c=c*100+0.5;
        c=c/100;
}
int main() {
    int n;
    float x,y,z;
    scanf("%d;%f,%f,%f",&n,&x,&y,&z);
    Student(n,x,y,z);
    printf("The each subject score of No. %d is %.2f,%.2f,%.2f.",n,x,y,z);
}
这应该就是你想要的代码了,问题应该是输入的时候scanf里面的%.5f
运行输入 40;50,60.3,70.687
输出结果是 The each subject score of No. 40 is 50.00,60.30,70.69.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 04:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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