C语言课程设计实习报告.docx
- 文档编号:7391027
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:16
- 大小:49.96KB
C语言课程设计实习报告.docx
《C语言课程设计实习报告.docx》由会员分享,可在线阅读,更多相关《C语言课程设计实习报告.docx(16页珍藏版)》请在冰豆网上搜索。
C语言课程设计实习报告
C语言课程设计实习报告
班级:
学生姓名:
序号:
21
指导老师:
陈老师/刘老师
日期:
2012.2
一、程序分析与设计(标题四号宋体加黑,正文五号宋体,行间距-固定值18,首行缩进2字符)
1、先用记事本编辑文件cj.txt存储一个班学习成绩。
然后在C环境下,建立一个学生信息的结构体,用r方式打开上述文件,再用fscanf读入、用printf在屏幕上显示文件内容。
2、利用循环使每个学生的三门功课的成绩相加,然后再把和除以三就得到了平均成绩。
接着用冒泡法利用平均分的高低排出名次。
最后用fprintf将每个学生的信息写入到mc.txt文件。
3、利用for语句下的printf语句把每个同学的信息在屏幕上显示出来。
每名同学之间用分割线分开,作为每个学生的成绩条。
4、利用for语句配合if嵌套语句计算出每科每个分数段的学生人数。
在for语句中计算出每科的全班总成绩,再把总分除以三十七算出每科的平均分。
最后用printf语句把结果按格式输出。
5、利用for语句和if、printf语句配合找出不及格的学生的序号及该科成绩。
6、利用for语句和if语句配合再利用逻辑或和逻辑且找出优等生的信息,并用printf语句在屏幕上显示出来。
7、把以上几点分别定义五个函数,再定义一个菜单函数,利用switch语句和goto配合,完成输入进行运行。
二、流程图
1计算平均分并排名
fori=0to37
stu[i].total=stu[i].math+stu[i].engl+stu[i].phys
stu[i].ave=stu[i].total/3.0
打印出各个学生的每门课的成绩,平均分
fori=0to37
forj=0to37
stu[j].ave>stu[i].ave
真假
stu[i].mc++
打印出各个学生的每门课的成绩,平均分,名次
2求个分数段的人数
fori=0toi<37
stu[i].math<60
真假
math_60++stu[i].math<=69
真假
math60_69++stu[i].math<=79
真假
math70_79++stu[i].math<=89
真假
math80_89++math_90++
同理求出英语和物理在这个分数段的人数
打印出不及格人的序号,不及格科目,分数
3不及格人数
fori=0toi<37
stu[i].math<60stu[i].engl<60stu[i].phys<60
真假真假真假
输出输出输出
stu[i].id,stu[i].id,stu[i].id,
"数学","英语","物理",
stu[i].mathstu[i].englstu[i].phys
4优秀人数
fori=0toi<37
(stu[i].ave>90||stu[i].ave>85&&((stu[i].math==100||stu[i].engl==100||
stu[i].phys==100)||(stu[i].math>95&&stu[i].engl>95||stu[i].math>95
&&stu[i].phys>95||stu[i].engl>95&&stu[i].phys>95)))&&
(stu[i].mc>=1&&stu[i].mc<=3)&&
(stu[i].math>60&&stu[i].engl>60&&stu[i].phys>60)
真假
输出
stu[i].id,stu[i].name,stu[i].math,stu[i].engl,
stu[i].phys,stu[i].total,stu[i].ave,stu[i].mc
三、源程序清单(此部分采用小五号宋体,行间距-固定值14)
#include
#include
structstudent
{
intid;
charname[9];
intmath;
intengl;
intphys;
inttotal;
floatave;
intmc;
}stu[37];structstudent*p=&stu[0];
//-----------------mc--------------------------
voidmc()
{
inti;
printf("读取文件结果如下:
\n");
printf("%8s%8s%8s%8s%8s\n",
"序号","姓名","数学","英语","物理");
for(i=0;i<37;i++)
{
printf("%8d%8s%8d%8d%8d\n",p[i].id,
p[i].name,p[i].math,p[i].engl,p[i].phys);
}
for(i=0;i<37;i++)
{
p[i].total=p[i].math+p[i].engl+p[i].phys;
p[i].ave=p[i].total/3.0;
p[i].mc=1;
}
for(i=0;i<37;i++)
{
for(intj=0;j<37;j++)
{
if(p[j].ave>p[i].ave)
{
p[i].mc++;
}
}
}
printf("----------MC-------------------\n");
printf("%8s%8s%8s%8s%8s%8s%8s%6s\n",
"序号","姓名","数学","英语","物理","总分","平均分","名次");
for(i=0;i<37;i++)
{
printf("%8d%8s%8d%8d%8d%8d%8.3f%6d\n",p[i].id,
p[i].name,p[i].math,p[i].engl,
p[i].phys,p[i].total,p[i].ave,p[i].mc);
}
FILE*fp1;
fp1=fopen("D:
\\mc.txt","w");
fprintf(fp1,"%8s%8s%8s%8s%8s%8s%8s%6s\n",
"序号","姓名","数学","英语","物理","总分","平均分","名次");
for(i=0;i<37;i++)
{
fprintf(fp1,"%8d%8s%8d%8d%8d%8d%8.3f%6d\n",
p[i].id,p[i].name,p[i].math,p[i].engl,
p[i].phys,p[i].total,p[i].ave,p[i].mc);
}
}
//-----------------------------cjt---------------------------
voidcjt()
{
inti;
for(i=0;i<37;i++)
{
p[i].total=p[i].math+p[i].engl+p[i].phys;
p[i].ave=p[i].total/3.0;
p[i].mc=1;
}
for(i=0;i<37;i++)
{
for(intj=0;j<37;j++)
{
if(p[j].ave>p[i].ave)
{
p[i].mc++;
}
}
}
printf("%8s%8s%8s%8s%8s%8s%8s%6s\n",
"序号","姓名","数学","英语","物理","总分","平均分","名次");
for(i=0;i<37;i++)
{
printf("%8d%8s%8d%8d%8d%8d%8.3f%6d\n",
stu[i].id,stu[i].name,stu[i].math,stu[i].engl,
stu[i].phys,stu[i].total,stu[i].ave,stu[i].mc);
printf("-----------------------------------------------------------------------------\n");
}
FILE*fp5;
fp5=fopen("D:
\\cjt.txt","w");
for(i=0;i<37;i++)
{
fprintf(fp5,"%8d%8s%8d%8d%8d%8d%8.3f%6d\n",
stu[i].id,stu[i].name,stu[i].math,stu[i].engl,
stu[i].phys,stu[i].total,stu[i].ave,stu[i].mc);
fprintf(fp5,"-----------------------------------------------------------------------------\n");
}
}
//----------------fsd------------------------------------------------------------------
voidfsd()
{
inttotal_math=0;
intmath_60=0;
intmath60_69=0;
intmath70_79=0;
intmath80_89=0;
intmath_90=0;
inti;
for(i=0;i<37;i++)
{total_math+=stu[i].math;
if(stu[i].math<60)math_60++;
elseif(stu[i].math<=69)math60_69++;
elseif(stu[i].math<=79)math70_79++;
elseif(stu[i].math<=89)math80_89++;
elsemath_90++;}
floatave_math=total_math/37.0;
inttotal_engl=0;
intengl_60=0;
intengl60_69=0;
intengl70_79=0;
intengl80_89=0;
intengl_90=0;
for(i=0;i<37;i++)
{total_engl+=stu[i].engl;
if(stu[i].engl<60)engl_60++;
elseif(stu[i].engl<=69)engl60_69++;
elseif(stu[i].engl<=79)engl70_79++;
elseif(stu[i].engl<=89)engl80_89++;
elseengl_90++;}
floatave_engl=total_engl/37.0;
inttotal_phys=0;
intphys_60=0;
intphys60_69=0;
intphys70_79=0;
intphys80_89=0;
intphys_90=0;
for(i=0;i<37;i++)
{total_phys+=stu[i].phys;
if(stu[i].phys<60)phys_60++;
elseif(stu[i].phys<=69)phys60_69++;
elseif(stu[i].phys<=79)phys70_79++;
elseif(stu[i].phys<=89)phys80_89++;
elsephys_90++;}
floatave_phys=total_phys/37.0;
printf("----------------分数段统计结果文件-------------------\n");
printf("%8s%8s%8s%8s\n","分数段","C语言","英语","数学");
printf("%8s%8d%8d%8d\n","<60",math_60,engl_60,phys_60);
printf("%8s%8d%8d%8d\n","60_69",math60_69,engl60_69,phys60_69);
printf("%8s%8d%8d%8d\n","70_79",math70_79,engl70_79,phys70_79);
printf("%8s%8d%8d%8d\n","89_89",math80_89,engl80_89,phys80_89);
printf("%8s%8d%8d%8d\n",">90",math_90,engl_90,phys_90);
printf("%8s%8.3f%8.3f%8.3f\n","平均成绩",ave_math,ave_engl,ave_phys);
FILE*fp2;
fp2=fopen("D:
\\fsd.txt","w");
fprintf(fp2,"%8s%8s%8s%8s\n","分数段","C语言","英语","数学");
fprintf(fp2,"%8s%8d%8d%8d\n","<60",math_60,engl_60,phys_60);
fprintf(fp2,"%8s%8d%8d%8d\n","60_69",math60_69,engl60_69,phys60_69);
fprintf(fp2,"%8s%8d%8d%8d\n","70_79",math70_79,engl70_79,phys70_79);
fprintf(fp2,"%8s%8d%8d%8d\n","89_89",math80_89,engl80_89,phys80_89);
fprintf(fp2,"%8s%8d%8d%8d\n",">90",math_90,engl_90,phys_90);
fprintf(fp2,"%8s%8.3f%8.3f%8.3f\n","平均成绩",ave_math,ave_engl,ave_phys);
}
//--------------------------bjg--------------------------------------
voidbjg()
{
inti;
printf("----------打印不及格学生名单-----\n");
printf("%8s%8s%8s\n","序号","不及格课程","该课程成绩");
for(i=0;i<37;i++)
{
if(stu[i].math<60)printf("%8d%8s%8d\n",stu[i].id,"数学",stu[i].math);
if(stu[i].engl<60)printf("%8d%8s%8d\n",stu[i].id,"英语",stu[i].engl);
if(stu[i].phys<60)printf("%8d%8s%8d\n",stu[i].id,"物理",stu[i].phys);
}
FILE*fp3;
fp3=fopen("D:
\\bjg.txt","w");
for(i=0;i<37;i++)
{
if(stu[i].math<60)fprintf(fp3,"%8d%8s%8d\n",stu[i].id,"数学",stu[i].math);
if(stu[i].engl<60)fprintf(fp3,"%8d%8s%8d\n",stu[i].id,"英语",stu[i].engl);
if(stu[i].phys<60)fprintf(fp3,"%8d%8s%8d\n",stu[i].id,"物理",stu[i].phys);
}
}
//-----------------------------yds---------------------------
voidyds()
{
inti;
printf("优等生名单\n");
printf("%8s%8s%8s%8s%8s%8s%8s%6s\n",
"序号","姓名","数学","英语","物理","总分","平均分","名次");
for(i=0;i<37;i++)
{
if((stu[i].ave>90||stu[i].ave>85&&((stu[i].math==100||stu[i].engl==100||stu[i].phys==100)||(stu[i].math>95&&stu[i].engl>95||stu[i].math>95&&stu[i].phys>95||
stu[i].engl>95&&stu[i].phys>95)))&&(stu[i].mc>=1&&stu[i].mc<=3)&&
(stu[i].math>60&&stu[i].engl>60&&stu[i].phys>60))
printf("%8d%8s%8d%8d%8d%8d%8.3f%6d\n",
stu[i].id,stu[i].name,stu[i].math,stu[i].engl,
stu[i].phys,stu[i].total,stu[i].ave,stu[i].mc);
}
FILE*fp4;
fp4=fopen("D:
\\yds.txt","w");
for(i=0;i<37;i++)
if((stu[i].ave>90||stu[i].ave>85&&((stu[i].math==100||stu[i].engl==100||stu[i].phys==100)||(stu[i].math>95&&stu[i].engl>95||stu[i].math>95&&stu[i].phys>95||
stu[i].engl>95&&stu[i].phys>95)))&&(stu[i].mc>=1&&stu[i].mc<=3)&&
(stu[i].math>60&&stu[i].engl>60&&stu[i].phys>60))
fprintf(fp4,"%8d%8s%8d%8d%8d%8d%8.3f%6d\n",
stu[i].id,stu[i].name,stu[i].math,stu[i].engl,
stu[i].phys,stu[i].total,stu[i].ave,stu[i].mc);
}
//----------------menu---------------------------------------
voidmenu()
{
inti;
voidmc();
voidcjt();
voidbjg();
voidyds();
lop_1:
{
printf("****************1:
计算平均分并排名****************\n");
printf("****************2:
统计分数段*********************\n");
printf("****************3:
打印成绩条*********************\n");
printf("****************4:
打印不及格学生信息*************\n");
printf("****************5:
打印优等生名单*****************\n");
printf("****************6:
退出***************************\n");
scanf("%d",&i);
switch(i)
{
case1:
mc();gotolop_1;
case2:
fsd();gotolop_1;
case3:
cjt();gotolop_1;
case4:
bjg();gotolop_1;
case5:
yds();gotolop_1;
case6:
exit(0);
}
}
}
//-------------------main-----------------------------------------
voidmain()
{FILE*fp;fp=fopen("D:
\\cj.txt","r");
for(inti=0;i<37;i++)
{fscanf(fp,"%d%s%d%d%d",&stu[i].id,stu[i].name,&stu[i].math,&stu[i].engl,&stu[i].phys);
}
menu();
//--------MC-------------------------
}
四、调试过程
在程序运行的过程中,出现了很多的错误。
有很复杂的问题,也不乏许多低级的错误。
1、在读取文件时,一开始总是出现乱码,后来才发现原始数据的第一行时空格,删除后就可以正确读取了。
2、一开始我忘记了定义的函数也需要加“{}”,导致运行时出现了很多的错误,后来再查书才发现了症结所在。
3、在编写代码时,经常忽略中英文的切换,导致代码中出现了大量的中文标点,严重影响了程序的运行。
4、在编辑fsd函数时,采用了大量的if语句,一开始只使用两端的成绩利用逻辑且编辑判定条件,后来才想起来可以用if语句的嵌套语句。
五、程序有待改进的地方
1、在编辑程序时,定义了大量的变量,是程序看上去有些混乱。
需要减少部分变量。
2、在程序中使用了大量的printf语句,应考虑是否可以使用for语句将其简化。
3、在编辑时,有大量的重复语句,严重影响了成绩的简洁性。
六、本次实习的收获和建议
收获:
通过本次实习,让我了解了理论与事实的差距,同时也提高了我的C语言基础,为今后的工作打下了坚实的基础。
在编辑时,必须注意一些小的细节。
让我意识到自己在学习生活中经常不注意小节,忽略一些自以为可有可无的事情,这是非常错误的。
使我深深的知道,细节决定成败。
还有,通过实习,锻炼了我的耐心。
编程是一个很耗功夫的工作,必须有足够的耐心,才能完成全部工作。
建议:
应多出一些题目,让我们自主选择题目作答。
附录(此
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 实习 报告