✅ 操作成功!

c语言课程设计

发布时间:2023-06-10 作者:admin 来源:文学

c语言课程设计

c语言课程设计

-

2023年3月1日发(作者:睡前小故事在线听)

评语:

C语言课程设计报告

班级:电气1004

学号:201009334

姓名:雷海燕

指导教师:王果

2011年07月18日

-1-/18

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)

printf("最后留下的是%dn",a[i]);

return0;

}

1.4流程图

-2-/18

图1.1基本题目的流程图

Y

Y

N

Y

N

Y

Y

Y

N

开始

输出最后留下的值

i=0

p<=a+N

*p=i,i++,p++

p=a+N

i=0,p=aN=17

p>a+N

N

k!=1

*p!=0

i++

i%3!=0

*p=0,i=0,k--

p++,j++

p=a+1,i=0,j=0

p++,j++

N

i<=N

N

i++

结束

-3-/18

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=%dn",z)

return0;

}

2.2程序运行结果

程序完成的功能:用x的初始值算出y与z的值。

改正后的运行结果如图2.1所示:

-4-/18

图2.1改正后的运行结果

3.综合题目

3.1题目

班级成绩管理系统,对一个有N个学生的班级,每个学生有M门课程。该系统实

现对班级成绩的录入、显示、修改、排序、保存等操作的管理。

3.2程序的主要功能

本程序实现对一个班学生某几门课程的录入,成绩的显示、成绩的保存、对成绩

进行排、对成绩进行修改、对成绩进行统计(包括每门课程的最高分、平均分、超

过每门平均分的人数等),运行程序后退出程序。

3.3各函数的功能

(1)input函数

利用嵌套循环语句,实现对N位学生,M门课程的输入。

(2)output函数

实现对先前输入学生成绩的输出。

(3)save函数

将输入数据存入指定文件中。

(4)rank函数

计算出所有学生的成绩总分,并按照分数从高到低,进行输出。

(5)change函数

判断密码是否正确,并对选中学生成绩进行修改。

3.4程序流程图

-5-/18

图3.1综合题目的流程图

'G'或'g'

'F'或'f'

'E'或'e''D'或'd'

'C'或'c'

N

N

N

i<=M

Y

N

'B'或'b'

'A'或'a'

开始

输入x

N

Y

i=

输入

科目名

输入学

生姓名

输入

学号

i=0

i++

i

i

i++

输入

成绩

Y

i=0

输出

科目名

i++

i=0

输出姓

名、学号

j=0

输出成绩

j++

j

i++

i

Y

Y

将数据

存入指

定文件

利用

for循

环,对

每一位

学生算

出成绩

总分

利用

for循

环,将

学生按

成绩从

高到低

输出

While(1)

结束

Retur

n0,

即退

出系

利用

tran函

数,进行

加密码,

修改学生

成绩。

详见图5

利用

coun函

数,进

行对学

生成绩

的统计

详见图

6

-6-/18

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");

printf("******n");

printf("***A[成绩录入]***n");

printf("******n");

printf("***B[成绩显示]***n");

printf("******n");

printf("***C[成绩保存]***n");

printf("******n");

printf("***D[成绩排序]***n");

printf("******n");

printf("***E[成绩修改]***n");

printf("******n");

printf("***F[成绩统计]***n");

printf("******n");

-7-/18

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;

printf("请输入科目名称:n");

for(i=0;i

目名称*/

{

printf("科目%d:",i+1);

scanf("%s",subject_name[i]);

}

for(i=0;i

息、各科成绩*/

{

printf("学生%d:n",i+1);

printf("姓名:");

scanf("%s",&stud[i].name);

-8-/18

printf("学号:");

scanf("%d",&stud[i].num);

for(j=0;j

{

printf("%s成绩:",subject_name[j]);

scanf("%f",&stud[i].score[j]);

}

printf("n");

}

}

voidoutput()/*成绩显

示*/

{

inti,j;

system("cls");

printf("姓名学号");

for(i=0;i<=M;i++)

printf("%s",subject_name[i]);/*在一行里面输出科目名称,相

互之间有间隔。作为其下列表的目录。*/

printf("n");

for(i=0;i

{

printf("%1st%1dt",stud[i].name,stud[i].num);

for(j=0;j

printf("%5.1ft",stud[i].score[j]);

printf("n");

}

printf("!输入任意键返回!n");

getchar();

}

voidsave()/*成绩

保存*/

{

FILE*fp;

inti,j;

if((fp=fopen("","w"))==NULL)/*文件打开*/

{

printf("error!n");

return;

}

for(i=0;i

称*/

fprintf(fp,"%s",subject_name[i]);

fprintf(fp,"n");

-9-/18

for(i=0;i

信息*/

{

fprintf(fp,"%5s%5d",stud[i].name,stud[i].num);

for(j=0;j

{

fprintf(fp,"%6.1f",stud[i].score[j]);

}

fprintf(fp,"n");

}

if(fclose(fp))/*文件关闭*/

{

printf("Cannotclosethefile!n");

return;

}

printf("succeed!n");

getchar();

return;

}

voidrank()/*成绩

排序*/

{

voids*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;j

tot=tot+stud[i].score[j];

stud[i].sum=tot;

}

for(i=0;i

for(j=0;j

if(stud[a[j]].sum

s[j],&a[j+1]);

}

printf("学号姓名总分n");

for(i=0;i

printf("%dt%st%.1fn",stud[a[i]].num,stud[a[i]].name,stud[a[i]].sum);

delete[]a;

-10-/18

printf("!输入任意键退出!n");

getchar();

}

voids*px,int*py)

{

intt;

t=*px;

*px=*py;

*py=t;

}

voidtran()/*成绩修改*/

{

charch[10],flag='Y';

intnum;

inti,j;

printf("请输入密码:");//检查密码

scanf("%s",ch);

if(strcmp(ch,"123")!=0)

{

printf("密码错误!(按任意键返回)n");

getchar();

return;

}

while(flag=='Y'||flag=='y')//修改成绩

{

printf("输入要修改成绩的学生学号:");//按学号搜索

scanf("%d",&num);

for(i=0;i

if(num==stud[i].num)

break;

if(i==N)

{

if(num==0)

return;

else

{

printf("没有找到学生,请重新输入!(输入0退出)n");

continue;

}

}

printf("请输入新的各科成绩:n");//修改成绩

for(j=0;j

{

printf("%s:",subject_name[j]);

-11-/18

scanf("%f",&stud[i].score[j]);

}

printf("是否继续修改(Y/N)?");

scanf("%s",&flag);

}

}

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;

}

printf("按任意键返回主菜单n");

getchar();

}

voidstate_high()/*输出各科最高分的基本信息*/

{

inti,j,high;

system("cls");

for(j=0;j

{

for(i=0,high=0;i

{

-12-/18

if(stud[i].score[j]>stud[high].score[j])

high=i;

}

printf("%s最高分:",subject_name[j]);

printf("%st学号%dtn",stud[high].name,stud[high].num);

}

printf("n");

}

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平均成绩:%.1fn",subject_name[j],ave);

}

printf("n");

}

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超过平均分的人数为:%dtn",subject_name[j],n);

}

printf("n");

-13-/18

}

voiderrorinput()/*出错输出*/

{

system("cls");

printf("无效的输入,请重新输入!n");

}

3.5程序运行结果

程序运行初显示如图3.2所示:

图3.2程序运行初显示

输入“A”进行成绩录入后,输入“B”,对成绩进行显示如图3.3所示:

-14-/18

图3.3成绩显示

输入C,成绩保存如图3.4所示:

图3.4成绩保存

输入D,进行成绩排序如图3.5所示:

-15-/18

图3.5成绩排序

成绩修改如图3.6所示:

图3.6成绩修改

输入“F”,成绩统计如图3.7所示:

-16-/18

图3.7成绩统计

4结论与体会

这学期让我们做C语言课程设计,是因为这学期我们开了C语言这门课程,为

了进一步培养我们结构化程序设计的思想,加深对高级语言基本语言要素和控制结

构的理解,所以让我们针对C语言中的重点和难点内容进行训。

考完C语言后便去老师那里拿题。我们是班里的最后一个组,所以之前也听说

了课程设计相当难做,班里C语言学的好的同学都在埋怨难做,这就让我觉得犯难

了。当我把题目看完之后,认真想了想,基本题和改错题,靠自己一个人,应该完

成不是难事。但是综合题,我就蒙了。

基础题通过查资料基本完成了,但画流程图却是基本没有接触过,我又把我们

课本中的这一部分复习了一下,明白以后,滤清思路,利用visio办公软件,很快

便做了出来。

改错题也不是很难,理解了题意,读了一下程序,在VC6.0中走了几遍,便找

出了错误,没多长时间,便也完成了。

接下来是综合题,读完题后,我就觉得不知如何下手了。我们组的这道综合题

应该说不算是综合题里最难的,但我觉得还是能力有限,想破头皮,都不能够很完

整的做出来,所以综合题就只能和同组的同学讨论、查资料、询问学长来获取一些

宝贵的信息来完成了,在此期间学到了不少新知识,掌握了更多C语言的技巧。最

终,经过我们小组成员的合作,还有和其他做同一道题小组成员的讨论,终于完成

了这道题。但程序似乎还是不太完善,比如程序太长,不能够简洁明了。

这次课程设计是在我们就军训期间抽空完成的,占用了我们大量的休息时间,

但我觉得,从中学到的东西,让我得到更多,受益匪浅。

由于水平和时间原因,并且又是第一次做,这次的课程设计报告,肯定有许多

-17-/18

不足之处,望老师指出并加以指导,让学生的学习能更进一步。

参考书目

[1]谭浩强.C程序设计[M].清华大学出版社,2010

[2]杨萌华.线性代数[M].北京大学出版社,2003

[3]严蔚敏.数据结构[M].清华大学出版社,2004

👁️ 阅读量:0