C语言课程设计.docx
《C语言课程设计.docx》由会员分享,可在线阅读,更多相关《C语言课程设计.docx(20页珍藏版)》请在冰豆网上搜索。
![C语言课程设计.docx](https://file1.bdocx.com/fileroot1/2022-11/25/06b96cc5-fa2c-4dbb-bea9-cf828cb21450/06b96cc5-fa2c-4dbb-bea9-cf828cb214501.gif)
C语言课程设计
一、题目的分析和程序说明:
第一个问题是对学生成绩的管理。
关于学生的一些信息和科目的学分应该建成结构体,处理起来方便!
因为其中要处理30个学生,5门科目,所以多次用到FOR的双重循环!
该问题还要求对文件的打开和新建比较熟悉!
在CASE1下面调用SECTION1,再在其内调用FUNCTION1—I分别完成七个不同的功能!
第一小问题很简单,定义文件类型的指针并正确地打开文件是关键,其次是FOR循环的运用,30个同学,5门课都要多次运用FOR循环!
第二个小问题:
平均分易算,关键是排名次。
定义结构件变量中有一项RANK(开始是0)用来存放第I个学生是多少名,算法是把第I个学生的平均成绩与其他所有学生的相比,只要小于,就使RANK+1,这样就使30个学生都有自己的一个名次,而且可以随序号的变动而变动。
第三个小问题:
二重FOR循环分别统计第J科处于各分数段的总人数。
总共5趟,每一趟出现一科5个分数段的总人数。
第四个小问题:
与第二个小问题类似,只是这次是把列加起来,除以总人数!
第五个小问题:
检查每一个人的每一科成绩,只要有〈60分的,就打出来。
本次算法妙用K=0,使得有两门及以上不及格的学生分别打出,保证没有一个漏网之鱼。
第六个小问题:
凡是符合优秀学生条件的都打出,用逻辑或(||)表示,之前还要统计每个学生等于100的科目有几个,〉90的有几个,循环条件要用。
第七个小问题画饼状图,在FUNCTION1-7()里调用函数FENBUTU()。
在这个函数里用SWITCH(……)CASE……,分别选择5门课各自的饼状图。
第二个问题解齐次线性方程组。
本题主要是FOR循环的应用!
运用高斯消元法,大体上分四步,分别对应四列。
第一次处理第一列,把第一元化成1,其他全为0。
第二次处理第二列,把第二元化成1,其他全为0。
第三次处理第三列,把第三元化成1,其他全为0。
第四次处理第四列,把第四元化成1,其他全为0。
这个过程就是矩阵化行最简形的过程,最终得到的一个4行5列的矩阵的第五列就是方程组的解。
算法容易理解,需注意顺序不能乱!
第三个问题是破解密码。
本问题主要用了:
函数的定义和声明,调用函数以及各子函数之间只能嵌套调用,不能嵌套定义!
问题虽然比较麻烦,但是分解成小问题就好办了。
在FUNCTION3-1()内调用函数POJIEMIMA(),再在该函数内调用6个子函数!
分别用来:
打开文件,判别素数,处理密码文件(把字母依次加上素数的个位,十位,百位),存放结果,保证加后在26个字母之内,判别是否在26个字母之内。
其中第三个函数又调用了后面二个函数。
二、源程序清单
#include
#include
structstudent
{
intnum;
charname[10];
intscore[5];
floataverage;
intrank;
}std[30];
structxuefen
{
intnum;
charsubject[20];
floatxuefen;
}xf[5];
structstudnt2
{
charname[10];
intnum[5];
}stud2[5]={{">=90",0,0,0,0,0},{">=80",0,0,0,0,0},{">=70",0,0,0,0,0},{">=60",0,0,0,0,0},{"<60",0,0,0,0,0}};
floataverage[5];
inti,j,sum;
FILE*fp;
charcontent[100];
charresult[100];
intrealLen=0;
voidmain()/*主菜单*/
{charch1;
do
{
printf("\n\n\n\n\n\n");
printf("*****************************C语言程序设计上机实习******************************\n");
printf("--------------------------------------------------------------------------------\n\n");
printf("1.学生成绩管理\n\n");
printf("2.解线性方程组\n\n");
printf("3.破解密码\n\n");
printf("4.退出\n\n");
printf("输入选择序号\n");
while(ch1=getchar(),ch1!
='1'&&ch1!
='2'&&ch1!
='3'&&ch1!
='4');
switch(ch1)
{
case'1':
section1();break;
case'2':
section2();break;
case'3':
section3();break;
case'4':
exit(0);
}
}while
(1);
}
section1()/*第'1'个'''''2'''''级菜单*/
{
charch21;
do
{
printf("\n\n\n\n\n\n\n");
printf("****************************学生成绩管理系统****************************\n");
printf("-------------------------------------------------------------------------------\n\n");
printf("1.读入原始数据并显示2.计算平均分级名次\n\n");
printf("3.计算分数段人数4.输出课程平均分\n\n");
printf("5.统计不及格情况6.输出优秀学生\n\n");
printf("7.作分布图8.返回上级菜单\n\n");
printf("输入选择序号\n\n");
while((ch21=getchar(),ch21!
='1'&&ch21!
='2'&&ch21!
='3'&&ch21!
='4'&&ch21!
='5'&&ch21!
='6'&&ch21!
='7'&&ch21!
='8'));
switch(ch21)
{
case'1':
function1_1();break;
case'2':
function1_2();break;
case'3':
function1_3();break;
case'4':
function1_4();break;
case'5':
function1_5();break;
case'6':
function1_6();break;
case'7':
function1_7();break;
case'8':
return(0);
}
}while
(1);
}
section2()/*第'''''2'''''个'''''2'''''级菜单*/
{
charch22;
do
{
printf("\n\n\n\n\n\n\n\n\n\n");
printf("**********************************解线性方程组*********************************\n");
printf("-------------------------------------------------------------------------------\n\n");
printf("1.解方程组\n\n");
printf("2.返回上级菜单\n\n");
printf("输入选择序号\n");
while((ch22=getchar(),ch22!
='1'&&ch22!
='2'));
switch(ch22)
{
case'1':
function2_1();break;
case'2':
return(0);
}
}while
(1);
}
section3()/*第3个'''''2'''''级菜单*/
{
charch23;
do
{
printf("\n\n\n\n\n\n\n\n\n\n");
printf("***************************************破解密码********************************\n");
printf("-----------------------------------------------------------------------------\n");
printf("1.破解密码\n\n");
printf("2.返回上级菜单\n\n");
printf("输入选择序号\n");
while((ch23=getchar(),ch23!
='1'&&ch23!
='2'));
switch(ch23)
{
case'1':
function3_1();break;
case'2':
return(0);
}
}while
(1);
}
function1_1()
{inti,j;
FILE*fp1,*fp2,*fp3;
chartitle[100],title1[100];
printf("加入读原始数据并显示的程序内容\n");
clrscr();
fp=fopen("C:
\\cjd.txt","r");
fp1=fopen("C:
\\xfd.txt","r");
fp2=fopen("成绩.txt","w");
fp3=fopen("学分.txt","w");
fgets(title,130,fp);
fgets(title1,130,fp1);
for(i=0;i<30;i++)
{
fscanf(fp,"%d%s",&std[i].num,std[i].name);
for(j=0;j<5;j++)
fscanf(fp,"%d",&std[i].score[j]);
}
for(j=0;j<5;j++)
fscanf(fp1,"%d%s%f",&xf[j].num,&xf[j].subject,&xf[j].xuefen);
printf("序号姓名英语数学大学物理机械制图C语言设计\n");
fprintf(fp2,"序号姓名英语数学大学物理机械制图C语言设计\n");
for(i=0;i<30;i++)
{
printf("%-2d%-8s",std[i].num,std[i].name);
fprintf(fp2,"%2d%-8s",std[i].num,std[i].name);
for(j=0;j<5;j++)
{printf("%-8d",std[i].score[j]);
fprintf(fp2,"%8d",std[i].score[j]);}
printf("\n");
fprintf(fp2,"\n");
}
printf("\n\n");
printf("编号课程名称课程学分\n");
fprintf(fp3,"编号课程名称课程学分\n");
for(j=0;j<5;j++)
{printf("%-6d%-8s%-.2f",xf[j].num,xf[j].subject,xf[j].xuefen);
fprintf(fp3,"%-6d%-8s%-.2f",xf[j].num,xf[j].subject,xf[j].xuefen);
printf("\n");
fprintf(fp3,"\n");}
fclose(fp);
fclose(fp1);
fclose(fp2);
fclose(fp3);
getch();
printf("**************按Enter键继续**************\n");
getchar();getchar();}
function1_2()
{floatsum1,sum2;
clrscr();
for(i=0;i<30;i++)
{
for(j=0,sum1=0,sum2=0;j<5;j++)
{
sum1+=std[i].score[j]*xf[j].xuefen;
sum2+=xf[j].xuefen;
}
std[i].average=sum1/sum2;
std[i].average=(int)(std[i].average*10+0.5)/10.0;
}
for(i=0;i<30;i++)
{
std[i].rank=1;
for(j=0;j<30;j++)
{
if(std[i].averagestd[i].rank++;
}
}
fp=fopen("名次表.txt","w+");
fprintf(fp,"序号姓名英语数学大学物理机械制图C语言设计平均分名次\n");
printf("序号姓名英语数学大学物理机械制图C语言设计平均分名次\n");
for(i=0;i<30;i++)
{
fprintf(fp,"%6s%12d",std[i].name,std[i].num);
printf("%11d%7s",std[i].num,std[i].name);
for(j=0;j<5;j++)
{
fprintf(fp,"%12d",std[i].score[j]);
printf("%8d",std[i].score[j]);
}
fprintf(fp,"%8.1f%8d\n",std[i].average,std[i].rank);
printf("%12.1f%6d\n",std[i].average,std[i].rank);
}
fclose(fp);
printf("*********************************按Enter键继续********************************\n");
getchar();
getchar();
}
function1_3()
{clrscr();
for(i=0;i<30;i++)
for(j=0;j<5;j++)
if(std[i].score[j]>=90)
stud2[0].num[j]++;
elseif(std[i].score[j]>=80)
stud2[1].num[j]++;
elseif(std[i].score[j]>=70)
stud2[2].num[j]++;
elseif(std[i].score[j]>=60)
stud2[3].num[j]++;
elsestud2[4].num[j]++;
fp=fopen("成绩分布表.txt","w+");
fputs("范围英语数学大学物理机械制图C语言设计\n",fp);
printf("范围英语数学大学物理机械制图C语言设计\n");
for(i=0;i<5;i++)
{fprintf(fp,"%4s",stud2[i].name);
printf("%4s",stud2[i].name);
for(j=0;j<5;j++)
{
fprintf(fp,"%10d",stud2[i].num[j]);
printf("%12d",stud2[i].num[j]);
}
fputs("\n",fp);
printf("\n");
}
fclose(fp);
printf("*********************************按Enter键继续********************************\n");
getchar();
getchar();}
function1_4()
{intt;clrscr();
fp=fopen("课程平均分.txt","w+");
fputs("课程英语数学大学物理机械制图C语言设计\n平均分",fp);
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
printf("课程英语数学大学物理机械制图C语言设计\n平均分");
for(j=0;j<5;j++)
{
sum=0;
for(i=0;i<30;i++)
{t=std[i].score[j];
sum+=t;
average[j]=sum/(30*1.0);
average[j]=(int)(average[j]*10+0.5)/10.0;}
fprintf(fp,"%10.1f",average[j]);
printf("%10.1f",average[j]);}
fclose(fp);
printf("\n*********************************按Enter键继续*********************************\n");
getchar();
getchar();}
function1_5()
{intk;clrscr();
fp=fopen("不及格表单.txt","w+");
fputs("序号姓名不及格课程名称课程学分成绩\n",fp);
printf("序号姓名不及格课程名称课程学分成绩\n");
for(i=0;i<30;i++)
{
k=0;
for(j=0;j<5;j++)
if(std[i].score[j]<60)
{if(k==0)
{fprintf(fp,"%d%s%s%10.1f%d\n",std[i].num,std[i].name,xf[j].subject,xf[j].xuefen,std[i].score[j]);
printf("%d%s%s%10.1f%d\n",std[i].num,std[i].name,xf[j].subject,xf[j].xuefen,std[i].score[j]);
k++;}
else
{fprintf(fp,"%d%s%s%10.1f%d\n",std[i].num,std[i].name,xf[j].subject,xf[j].xuefen,std[i].score[j]);
printf("%d%s%s%10.1f%d\n",std[i].num,std[i].name,xf[j].subject,xf[j].xuefen,std[i].score[j]);}
}
}
fclose(fp);
printf("*********************************按Enter键继续********************************\n");
getchar();getchar();}
function1_6()
{intm=0,n=0;clrscr();
fp=fopen("优秀学生表单.txt","w+");
fprintf(fp,"序号姓名英语数学大学物理机械制图C语言设计平均分名次\n");
printf("序号姓名英语数学大学物理机械制图C语言设计平均分名次\n");
for(i=0;i<30;i++)
{m=0;n=0;
for(j=0;j<5;j++)
{
if(std[i].score[j]==100)m++;
if(std[i].score[j]>=90)n++;
}
if(std[i].average>=90||std[i].rank<=3||(std[i].average>=85&&(m>=1||n>=2)))
{
fprintf(fp,"%d%s",std[i].num,std[i].name);
printf("%d%s",std[i].num,std[i].name);
for(j=0;j<5;j++)
{
fprintf(fp,"%d",std[i].score[j]);
printf("%d",std[i].score[j]);
}
fprintf(fp,"%8.1f%d\n",std[i].average,std[i].rank);
printf("%12.1f%d\n",std[i].average,std[i].rank);
}
}
fclose(fp);
printf("*********************************按Enter键继续********************************\n");
getchar();getchar();}
#include
#include
#definepi3.1415926
#definem2
#definen150
#definer160
voidfenbutu(intb,intc,intd,inte,intf)
{chara[5][10]={">=90",">=80",">=70",">=60","<60"};
floatstangle=0;
inti,j,gdriver=DETECT,gmode=0;
intaverage[5];
average[0]=b;
average[1]=c;
average[2]=d;
average[3]=e;
average[4]=f;
initgraph(&gdriver,&gmode,"C:
\\Win-TC");
setbkcolor(15);
cleardevice();
for(j=0;j<5;j++)
setcolor(4);
circle(290,240,r);
line(290,240,290+r,240);
for(i=0;i<5;i++)
{stangle+=average[i]*360.0/30;
line(290,240,(int)(290+r*cos(-stangle*pi/180)),(int)(240+r*sin(-stangle*pi/180)));
setfillstyle(1,i+1);
rectangle(500,80+60*i,540,100+60*i);
floodfill(501,81+60*i,4);
outtextxy(560,90+60*i,a[i]);
floodfill((int)(290+n*cos(-(sta