首页 > 试题广场 >

学生基本信息输入输出

[编程题]学生基本信息输入输出
  • 热度指数:205762 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
依次输入一个学生的学号,以及3科(C语言,数学,英语)成绩,在屏幕上输出该学生的学号,3科成绩(注:输出成绩时需进行四舍五入且保留2位小数)。

数据范围:学号满足 ,各科成绩使用百分制,且不可能出现负数

输入描述:
学号以及3科成绩,学号和成绩之间用英文分号隔开,成绩之间用英文逗号隔开。


输出描述:
学号,3科成绩,输出格式详见输出样例。
示例1

输入

17140216;80.845,90.55,100.00

输出

The each subject score of No. 17140216 is 80.85, 90.55, 100.00.
示例2

输入

123456;93.33,99.99,81.20

输出

The each subject score of No. 123456 is 93.33, 99.99, 81.20.
import java.util.Scanner;

public class Main{

    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        //使用;或,分隔输入数据
        String[] data = scanner.nextLine().split("[;,]");
        int id=Integer.parseInt(data[0]);
        double score1=Double.parseDouble(data[1]);
        double score2=Double.parseDouble(data[2]);
        double score3=Double.parseDouble(data[3]);
        System.out.println("The each subject score of  No. "+id+" is "+String.format("%.2f",score1)+", "+String.format("%.2f",score2)+", "+String.format("%.2f",score3)+".");
    }


}
编辑于 2020-03-22 12:22:39 回复(0)

1. 注意题目隐含要求保留两位小数,并且四舍五入

2. 使用scanf可以按照指定分割字符读入

#include 
(849)#include 
#include  
using namespace std;
int main(){
    double a,b,c;
    int no;
    scanf("%d;%lf,%lf,%lf",&no,&a,&b,&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;
    printf("The each subject score of  No. %d is %.2lf, %.2f, %.2f.",no,a,b,c);
    return 0;
}
发表于 2020-03-08 18:40:19 回复(0)
a,b=input().split(';')
x1,x2,x3=map(float,(b.split(',')))
x1=('%.2f' %round(x1+0.0001,2))
x2=('%.2f' %round(x2+0.0001,2))
x3=('%.2f' %round(x3+0.0001,2))
print('The each subject score of  No. %s is %s, %s, %s.' %(a,x1,x2,x3))

round()如果只有一个数作为参数,不指定位数的时候,返回的是一个整数,而且是最靠近的整数
一般情况是使用四舍五入的规则,但是碰到舍入的后一位为5的情况,如果要取舍的位数前的数是偶数,则直接舍弃,如果奇数这向上取舍。答案中明显没参考此类规则
发表于 2020-04-22 10:38:05 回复(0)
#include<stdio.h>
int main()
{
    int a;
    float b,c,d;
    scanf("%d;%f,%f,%f",&a,&b,&c,&d);
    printf("The each subject score of  No. %d is %.2lf, %.2lf, %.2lf.\n",a,b,c,d);
    return 0;
}
#include<stdio.h>
int main()
{
    int a;
    fdouble b,c,d;
    scanf("%d;%lf,%lf,%lf",&a,&b,&c,&d);
    printf("The each subject score of  No. %d is %.2lf, %.2lf, %.2lf.\n",a,b,c,d);
    return 0;
}

单精度就可以  双精度就不可以  奇了怪了  编译器上运行都没问题啊

发表于 2020-10-07 18:22:18 回复(11)
#include <stdio.h>

int main ()
{
    int num;
    float a,b,c;
    scanf("%d;%f,%f,%f",&num,&a,&b,&c);
    printf("The each subject score of  No. %d is %.2f, %.2f, %.2f.",num,a,b,c);
}
发表于 2021-07-14 14:06:31 回复(2)
#include <bits/stdc++.h>
using namespace std;
int main(){
    long num=0;
    float C=0.f,math=0.f,english=0.f;
    scanf("%ld;%.2f,%.2f,%.2f",&num,&C,&math,&english);
    printf("The each subject score of No. %ld is %.2f, %.2f, %.2f.\n",num, C, math, english);
    return 0;
}


这C语言 数学英语的值怎么传不进去呀?输出总是0.00  求解呀
发表于 2020-04-15 22:55:06 回复(5)
#include <stdio.h>
int main()
{
    long int No;
    float score1, score2, score3;
    scanf("%ld;%f,%f,%f", &No, &score1, &score2, &score3);
    printf("The each subject score of  No. %ld is %.2f, %.2f, %.2f.", No, score1, score2, score3);
    return 0;
}

注意No前面有两个空格。
发表于 2020-03-11 18:44:31 回复(10)
#include<stdio.h>
struct Student
{
    char num[9];
    float arr[3];
};
int main()
{
    struct Student st1;
    int j=0;
    char ch=0;
    while((ch=getchar())!=';')
    {
        st1.num[j]=ch;
        j++;
    }
    int i=0;
    while(i<3)
    {
        scanf("%f",&st1.arr[i]);
        getchar();
        i++;
    }
    printf("The each subject score of No. %s is %.2f, %.2f, %.2f.",st1.num,st1.arr[0],st1.arr[1],st1.arr[2]);
    return 0;
}
为啥输入 16;0,100,0
会输出The each subject score of No. 16@ is 0.00, 100.00, 0.00. 其中 16后边还带了个@
发表于 2022-01-03 19:28:38 回复(1)
#include <iostream>
#include <iomanip>
using namespace std;

int main() {
	int num;
	float score1, score2, score3;
	cin >> num;
	getchar();
	cin >> score1;
	getchar();
	cin >> score2;
	getchar();
	cin >> score3;
	cout << "The each subject score of  No. " << num << " is " << setiosflags(ios::fixed) << setprecision(2) << score1 << ", " << setiosflags(ios::fixed) << setprecision(2) << score2 << ", " << setiosflags(ios::fixed) << setprecision(2) << score3 << "." << endl;

	return 0;
}

发表于 2021-09-15 09:55:26 回复(0)
#include<stdio.h>
struct xingxi
{
    int xuehao;
    float xueke1;
    float xueke2;
    float xueke3;    
};
int main()
{
    int a=0;
    float b=0;
    float c=0;
    float d=0;
    scanf("%d;%f,%f ,%f",&a,&b,&c,&d);
    struct xingxi p={.xuehao=a,.xueke1=b,.xueke2=c,.xueke3=d};
    printf("The each subject score of No. %d is %.2f, %.2f, %.2f.",p.xuehao,p.xueke1,p.xueke2,p.xueke3);
    return 0;
}
简单问题复杂化,结构体
发表于 2022-09-15 21:34:56 回复(0)
str = input()
No,nums = str.split(';',1)#以;为界,分隔成两个
a,b,c = nums.split(',')
x = float(a) + 0.0001
y = float(b) + 0.0001
z = float(c) + 0.0001
#'%.2f'%number:格式化输出,保留二位小数
print('The each subject score of No. {} is {}, {}, {}.'.format(No,'%.2f'%x,'%.2f'%y,'%.2f'%z))
发表于 2022-04-07 21:31:35 回复(3)
真是醉了这题,因为几个空格半天过不去
发表于 2022-03-19 20:43:24 回复(0)
我觉得这题主要注意的是别看走眼了。。。。人家要求控制输出小数点数😥😥
第一次提交没通过还死活觉得 自己不是对的吗
发表于 2021-02-24 10:13:14 回复(0)
num,s = input().split(';')
a,b,c = s.split(',')
x = float(a)
y = float(b)
z = float(c) 
print(f'The each subject score of No. {num} is {x:.2f}{y:.2f}{z:.2f}.')

发表于 2022-10-02 17:30:46 回复(1)
额,成绩使用百分制,竟然还有100.23分,真是优秀!
发表于 2022-07-28 18:09:43 回复(1)
#include <stdio.h>
int main()
{
    int num;
    float a, b, c;
    scanf("%d;%f,%f,%f", &num, &a, &b, &c);
    printf("The each subject score of No. %d is %.2f, %.2f, %.2f.", num, a, b, c);
    return 0;
}

发表于 2022-03-02 22:50:32 回复(0)
其实也可以尝试用一下结构体来写。
#include <stdio.h>
int main()
{
    struct student
    {
        int num;
        float c_score;
        float m_score;
        float e_score;
    }stu;
    scanf("%d;%f,%f,%f",&stu.num,&stu.c_score,&stu.m_score,&stu.e_score);
    printf("The each subject score of No. %d is %.2f, %.2f, %.2f.",stu.num,stu.c_score,stu.m_score,stu.e_score);
    return 0;
}

发表于 2022-02-01 09:35:13 回复(0)
#include<stdio.h>
int main(void){
    int student_number;  // 用来存储学号
    float score1, score2, score3;  // 分别用来存储输入的每科的成绩
    // 按照题目的实例中的输入来编写双引号里面的内容
    scanf("%d;%f,%f,%f", &student_number, &score1, &score2, &score3);
    
    // 复制题目中的实例,然后修改数字为对应的格式输出字符,printf里填写必要的参数即可
    printf("The each subject score of No. %d is %.2f, %.2f, %.2f.", student_number, score1, score2, score3);
    
    return 0;
}
1.变量定义,整型变量定义,浮点型变量定义,2.scanf输入语句的熟悉,3.%.2f中.2的含义是保留2位有效数字
发表于 2022-01-27 04:20:14 回复(1)
#include<stdio.h>
int main()
{
    int a=0;
    float b=0,c=0,d=0;
    scanf("%d;%f,%f,%f",&a,&b,&c,&d);//注意输入的格式,学号后是分号,%d;%f,如果输错成逗号,后面全是0.
    
    if(a>=1 & b>=0 & c>=0 & d>=0)
    {
        printf("The each subject score of No. %d is %.2f, %.2f, %.2f.",a,b,c,d);
    }
    return 0;
    
}
发表于 2021-11-14 15:41:59 回复(0)
from decimal import Decimal
    
s = input()
numb = s.split(';')[0]
a,b,c = map(float,s.split(';')[1].split(','))
print('The each subject score of'\
      '  No. %s is %.2f, %.2f, %.2f.'
      % (numb,Decimal(a+0.000000001).quantize(Decimal("0.01"), rounding = "ROUND_HALF_UP"),
                         Decimal(b+0.000000001).quantize(Decimal("0.01"), rounding = "ROUND_HALF_UP"),
                         Decimal(c+0.000000001).quantize(Decimal("0.01"), rounding = "ROUND_HALF_UP")))
1、python直接用round不可取,不是一般意义上的四舍五入,具体可以查阅具体的资料。推荐decimal模块中的用法
2、还有一个问题是python保存小数时比如0.5,其实是0.499999(多个,越往后越不精确),四舍五入也会出问题,加上一个足够小的0.0000001(任意写),可解决。
发表于 2021-06-11 11:10:53 回复(0)