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。
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;