大学计算机C语言实习报告Word格式文档下载.docx
《大学计算机C语言实习报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《大学计算机C语言实习报告Word格式文档下载.docx(36页珍藏版)》请在冰豆网上搜索。
一设计分析和说明
第一步原始数据(建立三个数据文件)
1.文件1用来存放学生成绩
2.文件2用来存放学生信息
3.文件3用来存放课程学分
4.文件4用来存放密码文件内容。
第二步程序设计思想
1.定义三个结构体数组用来存放文件1文件2和文件3的内容。
2.编写1个函数对应3个应实现的功能:
学生成绩管理、破译密码和组成大字符。
3.同时编写section1()、section2()、section3(),实现相应的功能。
一.在section1()中调用以下几个函数实现各个功能。
1.编写第一个函数function1_1()用fscanf读取文件1(xinxi1.txt)学生成绩,文件2(xinxi2.txt)学生信息和文件3(xinxi3.txt)课程学分,并计算平均分和名次,开始令每名同学的名次为1,后逐个和其他同学比较,若平均分低于其他,则自加1,同时创建txt文本文件(学生成绩表.txt)用fprintf写入数据,包括各个学生的学号、姓名、性别、各科成绩、加权平均值、名次。
2.编写第二个函数function1_2()读取文件1(xinxi1.txt)和文件3(xinxi3.txt),计算平均分和名次,算法同1,同时创建txt文本文件(个人分数及名次.txt)写入数据,包括各个学生的学号、姓名、各科成绩、加权平均值、名次。
3.编写第三个函数function1_3()计算课程平均分和分数段人数(60分以下;
60~69;
70~79;
80~89;
90),将学生每门课的成绩相加除以人数,便得到该门课的平均分;
定义5个整型变量,分别对应5个分数段,皆赋初值为0,后每个学生这门课的分数满足分数段,则自加1,便得到这门课的分数段人数,同时创建txt文本文件(分数段统计表.txt)和(课程平均分.txt)写入数据。
(N代表学生人数)
4.编写第四个函数function1_4()计算男生和女生课程平均成绩,先判断性别,若为男,则计算男生的课程平均分;
为女,则计算女生的课程平均分,同时创建文件(男生和女生每门课的平均分.txt)写入数据。
5.编写第五个函数function1_5()统计不及格情况,先用每个学生每门课的成绩与60分比较,若小于60,则输出该学生的相关信息,同时创建txt文本文件(不及格学生名单.txt)写入内容,包括各个学生的学号、姓名、性别、不及格课程、课程学分,成绩。
6.编写第六个函数function1_6()统计优秀学生名单,若学生满足其一:
平均分大于等于90;
名次在本班前3;
平均分大于等于85,但至少有一门课的成绩大于等于95;
平均分大于等于85,但至少有二门课的成绩大于等于90。
则输出学生的相关信息,同时创建txt文本文件(优秀学生名单及成绩.txt)写入数据(含学号、姓名、性别、各课程学分、平均分、名次)。
7.编写第七个函数function1_7()屏幕显示优秀学生干部,先判断学生的职务,若不为无,学生若满足其一:
平均分大于等于85;
名次在本班前20%;
平均分大于等于80,但至少有一门课的成绩大于等于95;
平均分大于等于80,但至少有二门课的成绩大于等于90。
则输出该学生的相关信息,同时创建txt文本文件(优秀学生干部名单及成绩.txt)写入数据(含学号、姓名、性别、职务、各课程学分、平均分、名次)。
二.在section2()中调用function2_1()函数实现破译密码功能,将密码文件写入xinxi4.txt
中,定义一个数组来存放所有100-200间的素数,然后将密码文件中的字母每3个分别减去一个素数对应的百十个位,超出范围加上26.得到所有可能的原文件写入创建的文本文件(wenjian.txt)中。
三.在section3()中调用function3_1()函数来实现输出大字符功能,先定义一个三维数组c[10][7][7],10代表0-9共10个数字,两个7,一个代表7行,一个代表7列,先将c[0][7][7]到c[9][7][7]的10种情况定义出来,以大字符的形式显示在屏幕上,通过键盘输入一个数来显示该数字的大字符,若输入的是0-9之间的数直接输出c[][7][7],若输入的是两位数,将其(/10)得到十位数,(%10)得到个位数。
再分别输出各自的大字符。
主函数
二.课程设计的框图
Section2()
Section3()
Section1()
函数1
输出学生全部信息
函数2
计算平均分和名次
Function2_1()破译密码
函数3
计算课程平均分和分数段人数
函数4
计算男生和女生课程平均成绩
函数5
统计不及格情况
函数6
统计优秀学生名单
函数7
统计
优秀学生干部
Function3_1()
组成大字符
1.平均分≥85
2.名次本班前20%
3.平均分≥80,至少一门课成绩≥95
4.平均分≥80,至少二门课成绩≥90
1.平均分≥90
2.名次本班前3
3.平均分≥85,至少一门课成绩≥95
4.平均分≥85,至少二门课成绩≥90
stu[i].score[j]<
60
输出不及格学生相关信息
P,Q,R,S,T分别为各课程各分数段的人数,如果满足分数段条件,自增1,
最后得到各课程各分数段人数
N为男生人数时,其值为男生课程平均分
N为女生人数时,其值为女生课程平均分
求出每名同学的平均分,起初令每名同学的名次为1,后逐个同其他学生比较,若平均分小于其他同学,则自增1,相同则不变。
依次循环直到确定每名学生的班级名次。
最后输出相关信息。
三.课程设计任务与数据
1.原始文件
①用记事本新建一文本文件,文件名为:
“xinxi1”,将本班的M名学生在本学期的N门考试课的成绩(要求用真实的课程名、假想的分数、)输入到这个文件中。
②用记事本新建另一文本文件,文件名为:
“xinxi2”,将本班学生的学号、姓名、年龄、职务输入到这个数据文件中,建议按如下列形式存放:
③用记事本新建另一文本文件,文件名为:
“xinxi3”,将本班本学期的N门真实的课程名及其学分输入到这个数据文件中,建议按如下列形式存放:
④.用记事本新建另一文本文件,文件名为:
“xinxi4”,将密码文件放入文件中。
四.源程序清单
#include"
math.h"
conio.h"
#include"
stdio.h"
string.h"
stdlib.h"
#defineM32
structstudent
{
intnum;
charname[20];
floatscore[5];
floataver;
introw;
intm1;
intm2;
}stu[M];
structstutent
{longnum;
charsex[5];
intage;
charwork[20];
}stu1[M];
structstunent
{intnum;
charname[20];
floatfen;
intP,Q,R,S,L;
}course[5];
function1_1()
{
inti,j;
floatsum,sum1;
FILE*fp,*fp1,*fp2,*fp3;
charstr[100],str1[100],str2[100];
if((fp=fopen("
F:
\\cc\\xinxi1.txt"
"
r"
))==NULL)
{printf("
cannotopenthisfile\n"
);
exit(0);
}
if((fp2=fopen("
\\cc\\xinxi2.txt"
if((fp3=fopen("
\\cc\\xinxi3.txt"
if((fp1=fopen("
\\学生成绩表.txt"
w"
fgets(str,100,fp);
for(i=0;
i<
M;
i++)
{fscanf(fp,"
%d%s"
&
stu[i].num,stu[i].name);
for(j=0;
j<
5;
j++)
fscanf(fp,"
%f"
stu[i].score[j]);
}
fgets(str1,100,fp2);
{fscanf(fp2,"
%d%s%s%d%s"
stu1[i].num,stu1[i].name,stu1[i].sex,&
stu1[i].age,stu1[i].work);
fgets(str2,150,fp3);
fscanf(fp3,"
%d%s%f"
course[j].num,course[j].name,&
course[j].fen);
sum1=0;
sum1+=course[j].fen;
/*pingjun*/
{sum=0;
{sum+=course[j].fen*stu[i].score[j];
stu[i].aver=sum/sum1;
i++)/*paiming*/
stu[i].row=1;
{for(j=0;
if(stu[i].aver<
stu[j].aver)
stu[i].row++;
printf("
学号姓名性别职务英语数学大学物理机械制图C程序设计平均分名次"
fprintf(fp1,"
\n"
fprintf(fp1,"
%-7d%s"
stu1[i].num,stu1[i].name);
if(strlen(stu1[i].name)==4)
{printf("
"
%s%s"
stu1[i].sex,stu1[i].work);
if(strlen(stu1[i].work)==2)
if(strlen(stu1[i].work)==4)
%10.1f"
stu[i].score[j]);
printf("
%8.1f%5d"
stu[i].aver,stu[i].row);
%8.2f%5d"
fclose(fp);
fclose(fp1);
fclose(fp2);
getch();
function1_2()
加入计算平均分及名次的程序内容\n"
*********按Enter键继续**********\n"
{inti,j,t;
FILE*fp,*fp1,*fp7;
charstr[130];
charstr1[150];
if((fp7=fopen("
\\个人分数及名次.txt"
fgets(str,130,fp);
fgets(str1,150,fp1);
fscanf(fp1,"
学号姓名英语数学大学物理机械制图C程序设计平均分名次\n"
fprintf(fp7,"
{printf("
%-5d%s"
stu[i].num,stu[i].name);
fprintf(fp7,"
%-7d%s"
if(strlen(stu[i].name)==4)
if(strlen(stu[i].name)==6)
%-8.1f"
%-10.1f"
%-6.1f%d"
%-8.2f%d"
fclose(fp7);
getch();
}}
function1_3()
加入计算课程平均分和分数段人数程序内容\n"
{inti,j,c[5][M];
floatsum;
charstr[100];
floata[5];
FILE*fp,*fp5,*fp6;
if((fp=fopen("
cannotopenthisfile\n"
exit(0);
if((fp5=fopen("
\\分数段统计表.txt"
if((fp6=fopen("
\\课程平均分.txt"
{sum=0;
for(i=0;
{sum+=stu[i].score[j];
a[j]=sum/M;
for(j=0;
{course[j].P=0;
course[j].Q=0;
course[j].R=0;
course[j].S=0;
course[j].L=0;
{if(stu[i].score[j]>
=90)course[j].P++;
elseif(stu[i].score[j]>
=80)course[j].Q++;
=70)course[j].R++;
=60)course[j].S++;
elsecourse[j].L++;
英语数学大学物理机械制图C程序设计\n"
fprintf(fp6,"
{if(j==0)printf("
课程平均分%-8.2f"
a[j]);
elseprintf("
%-7.2f"
if(j==0)fprintf(fp6,"
elsefprintf(fp6,"
}printf("
范围英语数学大学物理机械制图C程序设计\n"
fprintf(fp5,"
>
=90%-3d%-5d%-7d%-8d%-7d\n"
course[0].P,course[1].P,course[2].P,course[3].P,course[4].P);
80--89%-3d%-5d%-7d%-8d%-7d\n"
course[0].Q,course[1].Q,course[2].Q,course[3].Q,course[4].Q);
70--79%-3d%-5d%-7d%-8d%-7d\n"
course[0].R,course[1].R,course[2].R,course[3].R,course[4].R);
60--69%-3d%-5d%-7d%-8d%-7d\n"
course[0].S,course[1].S,course[2].S,course[3].S,course[4].S);
<
60%-3d%-5d%-7d%-8d%-3d\n"
course[0].L,course[1].L,course[2].L,course[3].L,course[4].L);
fclose(fp);
fclose(fp5);
fclose(fp6);
}}
function1_4()
加入计算男