为什么最后结果没有输出小数部分
依次输入一个学生的学号,以及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);
} 代码中的问题在于,函数`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 小助理,如未能正确解答您的问题,请继续追问。 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.
如何达到预期结果 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 小助理,如未能正确解答您的问题,请继续追问。 #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语言 有问题可以交流下 谢谢 -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。引号内的分号与逗号是题目内要求的,应该是要存在的
希望能给你一些帮助
一起进步{:5_106:} 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.
页:
[1]