实用吧,以后综合测评算起来会省事儿点儿。
学c月余,暂写控制台程序,预计学了win函数,再写个windows窗口程序,让界面好点儿。
/*zhcp.c--用于计算班级(学院)学生综合测评成绩.历史081版(夏)
主要操作:输入学生各科成绩、行为附加分、民主评议分、体育成绩、室内达标成绩等;输出智育分、德育分、体育分和综合成绩*/
/**********************************************************************************************************************/
#include<stdio.h>
#define NUMA 2 //定义要计算学生人数为常量
#define NUMB 9 //科目数
#define GAO 96 //德育最高分
const double JING=2,XUAN=4,JUN=2,HAN=2.5,SHI=5,ZHONG=5,ENG=4,SI=2.5,CE=2,ENGLISH=4.5; //各科学分
const float SUM1=29.0f,SUM2=29.5f;//总学分
double zhi(struct all *); //声明计算智育分的函数
double zhi2(struct all *); //二级
double de(struct all *); //德育分
double ti(struct all *); //体育分
void welcome(void); //打印欢迎词
void zifu(void); //打印字符函数
struct all{ //建立all模板
char name[31]; //声明存储姓名的变量
double grade[NUMB]; //各科成绩
double action; //行为附加分
double evaluate; //民主评议分
double physical; //体育成绩
double rts; //室内达标
};
struct all total[NUMA]; //声明结构数组total
/**********************************************************************************************************************/
/**********************************************************************************************************************/
int main()
{
int index,index1; //计循环次数的临时变量
char bye;
welcome();
zifu();
/*循环--读入每个学生的数据*/
for(index=0;index<NUMA;index++)
{
printf("请输入一个学生姓名,输入后按Enter键确认!/n/n");
scanf("%s",total[index].name);
printf("请依次输入%s的经济史、文选、军事理论、古汉语、世界史",total[index].name);
printf("、中国古代史、英语、思修、形势政策课成绩,每次输入后按Enter键盘确认!/n");
/*循环--依次读入某个学生各科成绩 */
for(index1=0;index1<NUMB;index1++)
scanf("%lf",&total[index].grade[index1]);
printf("请输入%s的行为附加分,输入后按Enter键确认!/n",total[index].name);
scanf("%lf",&total[index].action);
printf("请输入%s的民主评议分,输入后按Enter键确认!/n",total[index].name);
scanf("%lf",&total[index].evaluate);
printf("请输入%s的体育课成绩,输入后按Enter键确认!/n",total[index].name);
scanf("%lf",&total[index].physical);
printf("请输入%s的室内达标成绩,输入后按Enter键确认!/n",total[index].name);
scanf("%lf",&total[index].rts);
printf("/n");
}
printf("/n");
/**********************************************************************************************************************/
zifu();
printf("请核对输入是否有误!/n/n");
for(index=0;index<NUMA;index++)
{
printf("%s/n的经济史成绩为%lf;/n文选成绩为%lf;/n",total[index].name,total[index].grade[0],total[index].grade[1]);
printf("军事理论成绩为%lf;/n古汉语成绩为%lf;/n",total[index].grade[2],total[index].grade[3]);
printf("世界史成绩为%lf; /n中古史成绩为%lf;/n",total[index].grade[4],total[index].grade[5]);
printf("英语成绩为%lf;/n思修成绩为%lf。/n",total[index].grade[6],total[index].grade[7]);
printf("形势政策成绩为%lf;/n",total[index].grade[8]);
printf("行为附加分为%lf;/n民主评议分为%lf;/n",total[index].action,total[index].evaluate);
printf("体育课成绩为%lf;/n室内达标成绩为%lf。/n",total[index].physical,total[index].rts);
printf("/n");
}
printf("/n");
printf("核对结束!/n");
zifu();
/***********************************************************************************************************************/
/*调用函数*/
for(index=0;index<NUMA;index++)
{
double zong1,zong2,zong3;
if(index!=2&&index!=7&&index!=18)
zong1=zhi(&total[index]);
else
zong1=zhi2(&total[index]);
zong2=de(&total[index]);
zong3=ti(&total[index]);
printf("%s的综合成绩是%lf/n",total[index].name,zong1+zong2+zong3);
printf("/n");
}
zifu();
printf("退出程序请按“q”!/n");
scanf("%s",&bye);
while(bye!='q')
{
printf("其他字符视为失误输入,不退出程序以保留计算结果。/n");
scanf("%s",&bye);
}
return 0;
}
/******************************************************************************************************************************/
/******************************************************************************************************************************/
double zhi(struct all * ptr)
{
double linshi1,linshi2,linshi3;
linshi1=ptr->grade[0]*JING+ptr->grade[1]*XUAN+ptr->grade[2]*JUN+ptr->grade[3]*HAN;
linshi2=ptr->grade[4]*SHI+ptr->grade[5]*ZHONG+ptr->grade[6]*ENG+ptr->grade[7]*SI+ptr->grade[8]*CE;
linshi3=(linshi1+linshi2)/SUM1*0.7;
printf("%s的智育分是%lf/n;",ptr->name,linshi3);
return linshi3;
}
double zhi2(struct all * ptr)
{
double linshi1,linshi2,linshi3;
linshi1=ptr->grade[0]*JING+ptr->grade[1]*XUAN+ptr->grade[2]*JUN+ptr->grade[3]*HAN;
linshi2=ptr->grade[4]*SHI+ptr->grade[5]*ZHONG+ptr->grade[6]*ENGLISH+ptr->grade[7]*SI+ptr->grade[8]*CE;
linshi3=(linshi1+linshi2)/SUM2*0.7;
printf("%s的智育分是%lf;/n",ptr->name,linshi3);
return linshi3;
}
double de(struct all * ptr)
{
double linshi;
linshi=((60+ptr->action)*0.8*100/GAO+ptr->evaluate*0.2)*0.2;
printf("%s的德育分是%lf;/n",ptr->name,linshi);
return linshi;
}
double ti(struct all * ptr)
{
double linshi;
linshi=(ptr->physical*0.8+ptr->rts*0.2)*0.1;
printf("%s的体育分是%lf;/n",ptr->name,linshi);
return linshi;
}
void welcome(void)
{
printf("欢迎使用zhcp--班级(学院)综合测评计算程序.历史081版!/n/n");
printf("本程序提供学生各科成绩、行为附加分、民主评议分、体育成绩、室内达标成绩等的输入");
printf("和智育分、德育分、体育分和综合成绩等的输出等操作。/n");
printf("操作简便,不再讲解,详询蔡佳楠。/n");
printf("/n/n/nGO·········/n/n/n");
}
void zifu(void)
{
int x;
for(x=0;x<160;x++)
printf("*");
printf("/n");
}
/*收获:1、变量的作用域(s);2、作为循环计次的变量和作为数组下标的变量的使用;
3、不同类型参数向函数的传递;4、指针与数组下标的使用的关系*/