printf("C_score:\n"); scanf("%f",&stu[m].C_score);如何修改代码使成绩在一定范围内
时间: 2024-03-12 15:46:01 浏览: 53
你可以在输入成绩之后加入一个判断语句,判断输入的成绩是否在指定范围内。比如,如果你想让成绩在 0 到 100 之间,那么可以这样修改代码:
```
printf("C_score:\n");
scanf("%f",&stu[m].C_score);
if (stu[m].C_score < 0 || stu[m].C_score > 100) {
printf("Invalid score! Please enter a score between 0 and 100.\n");
// 这里可以让用户重新输入成绩,或者直接退出程序
}
```
这样,如果用户输入的成绩不在指定范围内,程序会输出一条错误信息并提示用户重新输入,直到输入合法为止。
相关问题
改进代码#include <stdio.h> #define PASS_SCORE 60 // 及格分数线 // 学生信息结构体 struct student { int id; // 学号 char name[20]; // 姓名 float daily_score; // 平时成绩 float practice_score; // 实训成绩 float final_score; // 期末成绩 float total_score; // 总评成绩 }; int main() { int n, pass_num = 0; float pass_rate; printf("请输入学生人数:"); scanf("%d", &n); struct student stu[n]; // 定义学生结构体数组 // 输入学生信息 for (int i = 0; i < n; i++) { printf("请输入第%d个学生的学号、姓名、平时成绩、实训成绩和期末成绩:", i + 1); scanf("%d %s %f %f %f", &stu[i].id, stu[i].name, &stu[i].daily_score, &stu[i].practice_score, &stu[i].final_score); // 计算总评成绩 stu[i].total_score = stu[i].daily_score * 0.3 + stu[i].practice_score * 0.3 + stu[i].final_score * 0.4; // 统计及格人数 if (stu[i].total_score >= PASS_SCORE) { pass_num++; } } // 计算及格率 pass_rate = (float) pass_num / n * 100; // 输出学生信息及总评成绩 printf("学号\t姓名\t平时成绩\t实训成绩\t期末成绩\t总评成绩\n"); for (int i = 0; i < n; i++) { printf("%d\t%s\t%.1f\t\t%.1f\t\t%.1f\t\t%.1f\n", stu[i].id, stu[i].name, stu[i].daily_score, stu[i].practice_score, stu[i].final_score, stu[i].total_score); } // 输出及格率和及格人数 printf("及格人数:%d,及格率:%.2f%%\n", pass_num, pass_rate); return 0; }
这个代码已经很不错了,但是还有一些可以改进的地方。
1. 使用常量代替魔法数
在代码中,60 被用作及格分数线。我们可以定义一个常量 PASS_SCORE 来代替 60,这样可以使代码更易读易维护。
2. 定义结构体数组时使用变量
在定义结构体数组时,可以使用变量来代替固定的数字,这样可以使代码更加灵活。例如,可以使用 scanf() 函数来输入学生人数,然后动态地为结构体数组分配内存空间。
3. 计算及格率时使用 float 类型
在计算及格率时,我们需要使用浮点数类型(float)来保存结果,这样可以保留小数位数。
下面是改进后的代码:
```c
#include <stdio.h>
#define PASS_SCORE 60 // 及格分数线
// 学生信息结构体
struct student {
int id; // 学号
char name[20]; // 姓名
float daily_score; // 平时成绩
float practice_score; // 实训成绩
float final_score; // 期末成绩
float total_score; // 总评成绩
};
int main() {
int n, pass_num = 0;
float pass_rate;
printf("请输入学生人数:");
scanf("%d", &n);
struct student stu[n]; // 定义学生结构体数组
// 输入学生信息
for (int i = 0; i < n; i++) {
printf("请输入第%d个学生的学号、姓名、平时成绩、实训成绩和期末成绩:", i + 1);
scanf("%d %s %f %f %f", &stu[i].id, stu[i].name, &stu[i].daily_score,
&stu[i].practice_score, &stu[i].final_score);
// 计算总评成绩
stu[i].total_score = stu[i].daily_score * 0.3 + stu[i].practice_score * 0.3 + stu[i].final_score * 0.4;
// 统计及格人数
if (stu[i].total_score >= PASS_SCORE) {
pass_num++;
}
}
// 计算及格率
pass_rate = (float) pass_num / n * 100;
// 输出学生信息及总评成绩
printf("学号\t姓名\t平时成绩\t实训成绩\t期末成绩\t总评成绩\n");
for (int i = 0; i < n; i++) {
printf("%d\t%s\t%.1f\t\t%.1f\t\t%.1f\t\t%.1f\n", stu[i].id, stu[i].name,
stu[i].daily_score, stu[i].practice_score, stu[i].final_score, stu[i].total_score);
}
// 输出及格率和及格人数
printf("及格人数:%d,及格率:%.2f%%\n", pass_num, pass_rate);
return 0;
}
```
#include <stdio.h> #include <stdlib.h> typedef struct student { int sno; char name[20]; int score[3]; } Student; int main() { FILE *fp; Student stu; fp=fopen("f1.dat","wb"); if(fp==NULL) {printf("cannot open"); exit(1); } int sno; scanf("%d",&sno); while(sno!=0) { stu.sno=sno; scanf("%s",&stu.name); scanf("%d %d %d",&stu.score[0],&stu.score[1],&stu.score[2]); fwrite(&stu,sizeof(struct student),1,fp); scanf("%d",&sno); } fclose(fp); fp = fopen("f1.dat", "rb"); if (fp == NULL) { printf("cannot open"); exit(1); } // 循环读取每个学生的信息,并打印输出 while (fread(&stu, sizeof(struct student), 1, fp) == 1) { printf("sno: %d\n", stu.sno); printf("name: %s\n", stu.name); printf("score1: %d, score2: %d, score3: %d\n", stu.score[0], stu.score[1], stu.score[2]); printf("\n"); } fclose(fp); return 0; }这串代码中如何实现文件数据的增加或者删除代码,请写一下
实现文件数据的增加或删除通常需要以下步骤:
增加数据:
1. 打开文件,将文件指针移动到文件末尾。
2. 输入要添加的数据,将其写入文件中。
3. 关闭文件。
下面是实现文件数据增加的代码示例:
```
fp = fopen("f1.dat", "ab"); // 以追加二进制方式打开文件
if (fp == NULL) {
printf("cannot open");
exit(1);
}
// 输入要添加的数据
Student stu;
stu.sno = 1001;
strcpy(stu.name, "张三");
stu.score[0] = 80;
stu.score[1] = 85;
stu.score[2] = 90;
fwrite(&stu, sizeof(struct student), 1, fp); // 将数据写入文件
fclose(fp); // 关闭文件
```
删除数据:
1. 打开文件,将文件指针移动到要删除的
阅读全文