大一C语言作业题目3&4

2023-12-22 19:57:14

7-3 计算职工工资

给定N个职员的信息,包括姓名、基本工资、浮动工资和支出,要求编写程序顺序输出每位职员的姓名和实发工资(实发工资=基本工资+浮动工资-支出)。

输入格式:

输入在一行中给出正整数N。随后N行,每行给出一位职员的信息,格式为“姓名 基本工资 浮动工资 支出”,中间以空格分隔。其中“姓名”为长度小于10的不包含空白字符的非空字符串,其他输入、输出保证在单精度范围内。

输出格式:

按照输入顺序,每行输出一位职员的姓名和实发工资,间隔一个空格,工资保留2位小数。

输入样例:

3
zhao 240 400 75
qian 360 120 50
zhou 560 150 80

输出样例:

zhao 565.00
qian 430.00
zhou 630.00

正确代码:?

#include <stdio.h>
#include <string.h>

struct employee {
    char name[10];
    float basicmoney;
    float floatmoney;
    float outmoney;
};

int main() {
    int N;
    scanf("%d", &N);

    struct employee emp[N];
    float realmoney[N];
    for (int i = 0; i < N; i++) {
        scanf("%s %f %f %f", emp[i].name, &emp[i].basicmoney, &emp[i].floatmoney, &emp[i].outmoney);
        realmoney[i] = emp[i].basicmoney + emp[i].floatmoney - emp[i].outmoney;
    }
    for (int i = 0; i < N; i++) {
        printf("%s %.2f\n", emp[i].name, realmoney[i]);
    }
    return 0;
}

?注意事项:

1、在struct Student 的时候,要创建float的工资,而不是int。

精度??

C语言 —— float单精度浮点型与double双精度浮点型的使用-CSDN博客?

单精度和双精度问题_单精度和双精度举例-CSDN博客


2、再次提醒 scanf加&,printf加\n

3、要么,就是stu[i].money;要么,就是money[i]


7-4 学生成绩排序

假设学生的基本信息包括学号、姓名、三门课程成绩以及个人平均成绩,定义一个能够表示学生信息的结构类型。输入n(n<50)个学生的成绩信息,按照学生的个人平均分从高到低输出他们的信息。如果平均分相同,按输入的先后顺序排列。

输入格式:

输入一个正整数n(n<50),下面n行输入n个学生的信息,包括:学号、姓名、三门课程成绩(整数)。

输出格式:

输出从高到低排序后的学生信息,包括:学号、姓名、平均分(保留两位小数)。

输入样例:

3
101 Zhang 78 87 85
102 Wang 91 88 90
103 Li 75 90 84

输出样例:

102,Wang,89.67
101,Zhang,83.33
103,Li,83.00

正确代码:

#include<stdio.h>
#include<string.h>

struct Student{
	int id;//
	char name[20];//
	int A;
	int B;
	int C;
	float avg;
};
int main(){
	int N;
	scanf("%d",&N);
	
	struct Student stu[N];
	
	for(int i = 0 ; i <N ;i++){
		scanf("%d %s %d %d %d",&stu[i].id,stu[i].name,&stu[i].A,&stu[i].B,&stu[i].C);
		stu[i].avg=(stu[i].A+stu[i].B+stu[i].C)/3.00;
	} 
	
	for(int i = 0 ; i<N - 1 ; i++){
		for(int j =0;j<N-1-i;j++){
		
		if(stu[j].avg<stu[j+1].avg){
		struct Student temp = stu[j];
			stu[j]= stu[j+1];
			stu[j+1] = temp;//
		}
	}
	}
	for(int i = 0;i<N;i++){
	printf("%d,%s,%.2f\n",stu[i].id,stu[i].name,stu[i].avg);//
	} 
     return 0;
	 }
	

?注意事项:

1、

没有特别说明,id用int。

为确保name的各种安全问题,用20。

avg是属于Student的一个属性。

struct Student{
	int id;//
	char name[20];//
	int A;
	int B;
	int C;
	float avg;
};

2、avg要除以3.00,除以3.00或者3.0都可以。但一定是要有小数点,因为avg是float类型。

for(int i = 0 ; i <N ;i++){
		scanf("%d %s %d %d %d",&stu[i].id,stu[i].name,&stu[i].A,&stu[i].B,&stu[i].C);
		stu[i].avg=(stu[i].A+stu[i].B+stu[i].C)/3.00;
	} 

3、

冒泡排序

因为后面输出的不只是avg,因此不可以用int temp来储存avg,而是用Student这个类将所有的信息储存起来。

因为是从大到小排序,因此是<号

for(int i = 0 ; i<N - 1 ; i++){
		for(int j =0;j<N-1-i;j++){
		
		if(stu[j].avg<stu[j+1].avg){
		struct Student temp = stu[j];
			stu[j]= stu[j+1];
			stu[j+1] = temp;//
		}

4、

看题目,,,是用逗号隔开的!!!!!!

记得写return 0;

for(int i = 0;i<N;i++){
	printf("%d,%s,%.2f\n",stu[i].id,stu[i].name,stu[i].avg);//
	} 
     return 0;

文章来源:https://blog.csdn.net/2301_80185446/article/details/135157477
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。