不记得C的语句怎么写拉,身边也没有C的书,50分求助
Write a database to input student information for a class of up to 20 students.
For each student, your program should prompt the User for two pieces of information: an ID number and percentage mark.
You should perform range checking on the entered mark.
Each student should be allocated a grade based upon the following grade definitions:
A >70%
B 60-70
C 50-59
D 40-49
E 30-39
F <30%
The list of Student ID’s, marks and grades should be printed out to the screen.
问题点数:50、回复次数:10Top
1 楼zhouqingyuan(浪帆)回复于 2004-05-03 13:00:53 得分 5
用个switch...case结构好了Top
2 楼binghe7(冰河)回复于 2004-05-03 13:07:27 得分 0
用C写的话需要先定义个结构体吧~把ID,MARKS 定义在里面吧~然后由用户在输入学生信息和成绩哦,控制台输出id,marks grades吧
我不记得C的语句该怎么写拉,那位C用的熟的帮忙完成下吧
谢谢Top
3 楼liushuaiboy(标准菜鸟)回复于 2004-05-03 13:40:24 得分 2
呵呵,我很懒Top
4 楼10325(海上的云)回复于 2004-05-03 13:43:54 得分 5
struct student
{int id;
float mark;
}S[20];
for(i=0;i++;i<20)
{scanf("%d,%f",&S[i].id,&S[i].mark);
}
Top
5 楼binghe7(冰河)回复于 2004-05-03 13:48:57 得分 0
#include"stdio.h"
#define NUM 20
struct student
{
char id[10];
int mark;
char grade;
};
main()
{
struct student stu[NUM];
int i;
for(i=0;i<NUM;i++)
{
printf("input id:\n");
gets(stu.id);
printf("input mark:\n");
gets(stu.mark);
switch (stu.mark){
case stu.mark<30:stu.grade=f;break;
case stu.mark<39:stu.grade=E;break;
case stu.mark<49:stu.grade=D;;break;
case stu.mark<59:stu.grade=C;;break;
case stu.mark<69:stu.grade=B;;break;
default:stu.grade=A;break;
}
}
printf("id\t\t\mark\t\tgrade\n\n");
for(i=0;i<NUM;i++)
printf("%s\t\t%d\t\t%c\n",stu.id,stu.mark,stu.grade);
}
人呢?这样写可以吗Top
6 楼binghe7(冰河)回复于 2004-05-03 13:50:37 得分 0
哦 ,这样#include"stdio.h"
#define NUM 20
struct student
{
char id[10];
float mark;
char grade;
};
main()
{
struct student stu[NUM];
int i;
for(i=0;i<NUM;i++)
{
printf("input id:\n");
gets(stu.id);
printf("input mark:\n");
gets(stu.mark);
switch (stu.mark){
case stu.mark<30:stu.grade=f;break;
case stu.mark<39:stu.grade=E;break;
case stu.mark<49:stu.grade=D;;break;
case stu.mark<59:stu.grade=C;;break;
case stu.mark<69:stu.grade=B;;break;
default:stu.grade=A;break;
}
}
printf("id\t\t\mark\t\tgrade\n\n");
for(i=0;i<NUM;i++)
printf("%s\t\t%f\t\t%c\n",stu.id,stu.mark,stu.grade);
}
Top
7 楼binghe7(冰河)回复于 2004-05-03 13:59:29 得分 0
#define NUM 20
struct student
{
char id[10];
float mark;
};
main()
{
struct student stu[NUM];
int i;
char grade;
for(i=0;i<NUM;i++)
{
printf("input id:\n");
gets(stu.id);
printf("input mark:\n");
gets(stu.mark);
}
printf("id\t\t\mark\t\tgrade\n\n");
for(i=0;i<NUM;i++)
{
switch (stu.mark){
case stu.mark<30:grade=f;break;
case stu.mark<39:grade=E;break;
case stu.mark<49:grade=D;;break;
case stu.mark<59:grade=C;;break;
case stu.mark<69:grade=B;;break;
default:grade=A;break;
}
printf("%s\t\t%f\t\t%c\n",stu.id,stu.mark,grade);
}
Top
8 楼freefalcon(心宇—消失中...)回复于 2004-05-03 14:14:06 得分 38
楼主终于自己写了,自己动手,丰衣足食啊
问题很多,改了一下
#define NUM 20
struct student
{
char id[10];
int mark;
char grade;
};
main()
{
struct student stu[NUM];
int i;
for(i=0;i<NUM;i++)
{
printf("input id:\n");
scanf("%s", stu[i].id);
printf("input mark:\n");
scanf("%d", &stu[i].mark);
}
for(i=0;i<NUM;i++)
{
switch (stu[i].mark/10)
{
case 0:
case 1:
case 2: stu[i].grade='F';break;
case 3: stu[i].grade='E';break;
case 4: stu[i].grade='D';break;
case 5: stu[i].grade='C';break;
case 6: stu[i].grade='B';break;
default:
if(stu[i].mark == 70) //这个70真讨要,出题人有毛病
stu[i].grade='B';
else
stu[i].grade='A';
}
printf("%s\t\t%d\t\t%c\n",stu[i].id,stu[i].mark,stu[i].grade);
}
}Top
9 楼binghe7(冰河)回复于 2004-05-03 14:22:39 得分 0
谢谢楼上的
不过For each student, your program should prompt the User for two pieces of information: an ID number and percentage mark.这句似乎不好让结构体里不能有grade这项吧.
还有用gets不可以吗,一定要用scanf()?没怎么用过C写见笑拉
#define NUM 20
struct student
{
char id[10];
int mark;
};
main()
{
struct student stu[NUM];
int i;char grade;
for(i=0;i<NUM;i++)
{
printf("input id:\n");
scanf("%s", stu[i].id);
printf("input mark:\n");
scanf("%d", &stu[i].mark);
}
for(i=0;i<NUM;i++)
{
switch (stu[i].mark/10)
{
case 0:
case 1:
case 2: grade='F';break;
case 3: grade='E';break;
case 4: grade='D';break;
case 5: grade='C';break;
case 6: grade='B';break;
default:
if(stu[i].mark == 70) //这个70真讨要,出题人有毛病
grade='B';
else
grade='A';
}
printf("%s\t\t%d\t\t%c\n",stu[i].id,stu[i].mark,grade);
}
}
Top
10 楼02051223(chenlei)回复于 2004-05-03 15:03:34 得分 0
我认为楼主开始写的那个程序有可取之处!
因为后面的程序减小了问题规模。
题目的要求是 分数可以是70.5等非整数。
而这是用 ‘%’达不到的。
哦!
你们的代码中用
switch (stu[i].mark/10)
{
case 0:
case 1:
case 2: grade='F';break;
case 3: grade='E';break;
case 4: grade='D';break;
case 5: grade='C';break;
case 6: grade='B';break;
default:
if(stu[i].mark == 70) //这个70真讨要,出题人有毛病
grade='B';
else
grade='A';
}
是错的。
如果输入的是小数呢?
结果为A或B!小数有10.5,20.5,50.5,60.5,80.5等等。显然与问题的需求不符!
如我在最前面所说的用‘%’也不能完全达到要求!但明显比用‘/’好。
没有逻辑错误!
建议用把
switch (stu.mark){
case stu.mark<30:stu.grade=f;break;
case stu.mark<39:stu.grade=E;break;
case stu.mark<49:stu.grade=D;;break;
case stu.mark<59:stu.grade=C;;break;
case stu.mark<69:stu.grade=B;;break;
default:stu.grade=A;break;
}
修改一下。
Top




