大一C语言课程设计.docx
《大一C语言课程设计.docx》由会员分享,可在线阅读,更多相关《大一C语言课程设计.docx(24页珍藏版)》请在冰豆网上搜索。
大一C语言课程设计
.....
C语言课程设计报告
班级:
电气1004
学号:
201009334
姓名:
雷海燕
指导教师:
王果
评语:
18月2011
年07
日
..
wd..
自动化与电气工程学院C语言课程设计
1基本题目
1.1题目
1.1题目
有17个人围成一圈,从0号的人开始报数,凡报到3的倍数的人离开圈子,然后再数下去。
直到最后只剩下一个人为止。
问此人原来的位置是多少号。
1.2题目分析
创建一个指针变量,指针变量中的初值为0至16。
然后通过for循环将指针变量中所指的值是三的倍数的变量赋值为0,最后找出所要找的值。
1.3程序
#include
#defineN17
intmain()
{
inti,j,k,a[N+1],*p;
for(i=0,p=a;p<=a+N;i++,p++)
*p=i;
p=a+1;
k=N;
for(i=0,j=1;k!
=1;j++)
{
if(p>(a+N))
p=a+1;
if(*p!
=0)
i++;
if(i%3==0&&i!
=0)
{
*p=0;i=0;k--;
}
p++;
}
for(i=1;i<=N;i++)
if(a[i]!
=0)
牰湩晴尨最后留下的是%d\n,a[i]);
return0;
}
1.4流程图
-1-
自动化与电气工程学院C语言课程设计
开
i=0,p=aN=17
i=0
p<=a+NY
N
*p=i,i++,p++
p=a+1,i=0,j=0
k!
=1
Y
p>a+N
N
N
p=a+N
Y
*p!
=0
N
i++Y
i%3!
=0
N
Y
*p=0,i=0,k--
p++,j++
p++,j++
i<=N
Y
输出最后留下的值N
i++
结束
-1-
自动化与电气工程学院C语言课程设计
图1.1基本题目的流程图
1.5程序的运行结果
基本体运行结果如图1.2所示:
图1.2基本题目运行结果
2改错题目
2.1改正后程序
#include
intmain()
{
intx=1;inty;
y=x++;
printf(y=%d,y);
intz;
z=++x;
printf(z=%d\n,z)
return0;
}
2.2程序运行结果
程序完成的功能:
用x的初始值算出y与z的值。
改正后的运行结果如图2.1所示:
-1-
语言课程设计自动化与电气工程学院C
改正后的运行结果图2.1
综合题目3.题目3.1
门课程。
该系统实MN个学生的班级,每个学生有班级成绩管理系统,对一个有现对班级成绩的录入、显示、修改、排序、保存等操作的管理。
3.2程序的主要功能本程序实现对一个班学生某几门课程的录入,成绩的显示、成绩的保存、对成绩进行排、对成绩进行修改、对成绩进行统计(包括每门课程的最高分、平均分、超过每门平均分的人数等),运行程序后退出程序。
3.3各函数的功能函数input
(1)门课程的输入。
N位学生,M利用嵌套循环语句,实现对函数)output(2实现对先前输入学生成绩的输出。
save函数(3)将输入数据存入指定文件中。
函数4)rank(计算出所有学生的成绩总分,并按照分数从高到低,进行输出。
)change函数(5
判断密码是否正确,并对选中学生成绩进行修改。
3.4程序流程图
-1-
自动化与电气工程学院C语言课程设计
开
x
输
'a''A'f'
'F'B'b''e'
'E'D'd'
i=0i'c''C'g'
'G输输fo科目科目Ycoui++定文YRetui++n0,i<=M总tra的统Ni输学YY
Y输j成Ni++i++
iiWhile
(1)
结束
综合题目的流程图3.1图
-1-
自动化与电气工程学院C语言课程设计
3.4源程序
#include
#include
#include
#defineN10/*学生人数*/
#defineM4/*课程数*/
#definePASS890508/*修改密码*/
voidinput();/*成绩输入*/
voidoutput();/*成绩显示*/
voidsave();/*成绩保存*/
voidrank();/*成绩排序*/
voidtran();/*成绩修改*/
voidcoun();/*成绩统计*/
voiderrorinput();/*出错输出*/
structstudent/*成绩数据结构体*/
{
charname[10];
intnum;
floatscore[M];
doublesum;
}
stud[N];
charsubject_name[N][10];
intmain()
{
charx;
while
(1)
{
system(cls);
printf(
________________________________________________________\n);
printf(***班级成绩管理系统***\n);
***\n);printf(***
***\n);printf(***A[成绩录入]
***\n);printf(***
***\n);[成绩显示]printf(***B
***\n);printf(***
***\n);成绩保存printf(***C[]
***\n);***printf(
[Dprintf(***成绩排序]***\n);
***\n);printf(***
***\n);成绩修改***printf(E[]
printf(***\n);***
***printf(][F成绩统计***\n);
-1-
自动化与电气工程学院C语言课程设计
printf(******\n);
printf(***G[退出系统]***\n);
printf(******\n);
printf(
________________________________________________________\n);
printf(输入你的选择:
);
scanf(%c,&x);
switch(x)
{
case'a':
case'A':
input();
break;
case'b':
case'B':
output();
break;
case'c':
case'C':
save();
break;
case'd':
case'D':
rank();
break;
case'e':
case'E':
tran();
break;
case'f':
case'F':
coun();
break;
case'g':
case'G':
return0;
default:
errorinput();
break;
}
getchar();
}
return0;
}
voidinput()/*成绩输入*/
{
inti,j;
\n);请输入科目名称:
瀠楲瑮?
*//*输入科目名称for(i=0;i{
%d:
i+1);牰湩晴尨科目scanf(%s,subject_name[i]);
}
输入学生信息、各科成绩/**/for(i=0;i{
\n,i+1);:
%d学生牰湩晴尨);牰湩晴尨:
scanf(%s,&stud[i].name);
);
牰湩晴尨学号:
-1-
自动化与电气工程学院C语言课程设计
scanf(%d,&stud[i].num);
for(j=0;j{
printf(%s成绩:
subject_name[j]);
scanf(%f,&stud[i].score[j]);
}
printf(\
);
}
}
voidoutput()/*成绩显示*/
{
inti,j;
system(cls);
printf(学号);
for(i=0;i<=M;i++)
printf(%s,subject_name[i]);/*在一行里面输出科目名称,相互之间有间隔。
作为其下列表的目录。
*/
printf(\
);
for(i=0;i{
printf(%1s\t_x001D_\t,stud[i].name,stud[i].num);
for(j=0;jprintf(%5.1f\t,stud[i].score[j]);
printf(\
);
}
printf(!
输入任意键返回!
\n);
getchar();
}
voidsave()/*成绩保存*/
{
FILE*fp;
inti,j;
if((fp=fopen(data.txt,w))==NULL)/*文件打开*/
{
printf(Fileopenerror!
\n);
return;
}
for(i=0;ifprintf(fp,%s,subject_name[i]);
fprintf(fp,\
);
for(i=0;i{
fprintf(fp,%5s],stud[i].name,stud[i].num);
for(j=0;j-1-
自动化与电气工程学院C语言课程设计
{
fprintf(fp,%6.1f,stud[i].score[j]);
}
fprintf(fp,\
);
}
if(fclose(fp))/*文件关闭*/
{
printf(Cannotclosethefile!
\n);
return;
}
printf(Filesavesucceed!
\n);
getchar();
return;
}
voidrank()/*成绩排序*/
{
voidswap(int*px,int*py);
int*a;
a=newint[N];
inti,j;
doubletot;
system(cls);
for(i=0;i{
a[i]=i;
for(j=0,tot=0;jtot=tot+stud[i].score[j];
stud[i].sum=tot;
}
for(i=0;ifor(j=0;jif(stud[a[j]].sumswap(&a[j],&a[j+1]);
}
瀠楲瑮?
学号总分\n);
for(i=0;iprintf(%d\t%s\t%.1f\n,stud[a[i]].num,stud[a[i]].name,stud[a[i]].sum);
delete[]a;
printf(!
输入任意键退出!
\n);
getchar();
}
voidswap(int*px,int*py)
{
intt;
-1-
自动化与电气工程学院C语言课程设计
t=*px;
*px=*py;
*py=t;
}
voidtran()/*成绩修改*/
{
charch[10],flag='Y';
intnum;
inti,j;
瀠楲瑮?
请输入密码:
);//检查密码
scanf(%s,ch);
if(strcmp(ch,S)!
=0)
{
牰湩晴尨密码错误!
(按任意键返回)\n);
getchar();
return;
}
while(flag=='Y'||flag=='y')//修改成绩
{
牰湩晴尨输入要修改成绩的学生学号:
);//按学号搜索
scanf(%d,&num);
for(i=0;iif(num==stud[i].num)
break;
if(i==N)
{
if(num==0)
return;
else
{
牰湩晴尨没有找到学生,请重新输入!
(输入0退出)\n);
continue;
}
}
牰湩晴尨请输入新的各科成绩:
\n);//修改成绩
for(j=0;j{
printf(%s:
subject_name[j]);
scanf(%f,&stud[i].score[j]);
}
牰湩晴尨是否继续修改(Y/N)?
);
scanf(%s,&flag);
}
}
-1-
自动化与电气工程学院C语言课程设计
voidcoun()/*成绩统计*/
{
voidstate_high();
voidstate_ave();
voidstate_num();
charchoice;
system(cls);
printf(&&&================================================&&&\n);
printf(&&&选择菜单&&&\n);
printf(&&&A.显示每门课程成绩最高的学生的基本信息&&&\n);
printf(&&&B.显示每门课程的平均成绩&&&\n);
printf(&&&C.显示超过某门课程平均成绩的学生人数&&&\n);
printf(&&&D.返回&&&\n);
printf(&&&================================================&&&\n);
scanf(%s,&choice);
switch(choice)
{
case'A':
case'a':
state_high();
break;
case'B':
case'b':
state_ave();
break;
case'C':
case'c':
state_num();
break;
case'D':
case'd':
break;
default:
errorinput();coun();
break;
}
瀠楲瑮?
按任意键返回主菜单\n);
getchar();
}
voidstate_high()/*输出各科最高分的基本信息*/
{
inti,j,high;
system(cls);
for(j=0;j{
for(i=0,high=0;i最高分的stu[high]*/
{
if(stud[i].score[j]>stud[high].score[j])
high=i;
}
printf(%s最高分:
subject_name[j]);
printf(%s\t学号%d\t\n,stud[high].name,stud[high].num);
}
-1-
自动化与电气工程学院C语言课程设计
printf(\
);
}
voidstate_ave()/*每门课程平均成绩*/
{
inti,j;
floatsum,ave;
system(cls);
for(j=0;j{
for(i=0,sum=0;i{
sum+=stud[i].score[j];
}
ave=sum/N;
printf(%s平均成绩:
%.1f\n,subject_name[j],ave);
}
printf(\
);
}
voidstate_num()/*每门课程超过平均成绩的学生人数*/
{
inti,j,n;
floatsum,ave;
system(cls);
for(j=0;j{
for(i=0,sum=0;i{
sum=sum+stud[i].score[j];
}
ave=sum/N;
for(i=0,n=0;i{
if(stud[i].score[j]>ave)
n++;
}
printf(%s超过平均分的人数为:
%d\t\n,subject_name[j],n);
}
printf(\
);
}
voiderrorinput()/*出错输出*/
{
system(cls);
瀠楲瑮?
无效的输入,请重新输入!
\n);
}
-1-
自动化与电气工程学院C语言课程设计
3.5程序运行结果
程序运行初显示如图3.2所示:
程序运行初显示3.2图
输入“A”进行成绩录入后,输入“B”,对成绩进行显示如图3.3所示:
图3.3成绩显示
-1-
自动化与电气工程学院C语言课程设计
输入C,成绩保存如图3.4所示:
图3.4成绩保存
输入D,进行成绩排序如图3.5所示:
成绩排序图3.5
成绩修改如图3.6所示:
-1-
自动化与电气工程学院C语言课程设计
图3.6成绩修改
输入“F”,成绩统计如图3.7所示:
成绩统计3.7图
4结论与体会
这学期让我们做C语言课程设计,是因为这学期我们开了C语言这门课程,为了进一步培养我们结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解,所以让我们针对C语言中的重点和难点内容进行训。
考完C语言后便去老师那里拿题。
我们是班里的最后一个组,所以之前也听说了课程设计相当难做,班里C语言学的好的同学都在埋怨难做,这就让我觉得犯难了。
当我把题目看完之后,认真想了想,基本题和改错题,靠自己一个人,应该完成不是难事。
但是综合题,我就蒙了。
基础题通过查资料基本完成了,但画流程图却是基本没有接触过,我又把我们课-1-
自动化与电气工程学院C语言课程设计
本中的这一部分复习了一下,明白以后,滤清思路,利用visio办公软件,很快便做了出来。
改错题也不是很难,理解了题意,读了一下程序,在VC6.0中走了几遍,便找出了错误,没多长时间,便也完成了。
接下来是综合题,读完题后,我就觉得不知如何下手了。
我们组的这道综合题应该说不算是综合题里最难的,但我觉得还是能力有限,想破头皮,都不能够很完整的做出来,所以综合题就只能和同组的同学讨论、查资料、询问学长来获取一些宝贵的信息来完成了,在此期间学到了不少新知识,掌握了更多C语言的技巧。
最终,经过我们小组成员的合作,还有和其他做同一道题小组成员的讨论,终于完成了这道题。
但程序似乎还是不太完善,比如程序太长,不能够简洁明了。
这次课程设计是在我们就军训期间抽空完成的,占用了我们大量的休息时间,但我觉得,从中学到的东西,让我得到更多,受益匪浅。
由于水平和时间原因,并且又是第一次做,这次的课程设计报告,肯定有许多不足之处,望老师指出并加以指导,让学生的学习能更进一步。
参考书目
[1]谭浩强.C程序设计[M].清华大学出版社,2010
[2]杨萌华.线性代数[M].北京大学出版社,2003
[3]严蔚敏.数据结构[M].清华大学出版社,2004
-1-