}
}
改错
(二)程序改错题
刘赓然程序1:
main()
{
intab;
a=2;
b=3;
c=a*b
printf("c=%c,c);
}
正确
#include
voidmain()
{
inta,b;
charc;
a=2;
b=3;
c=a*b;
printf("c=%c",c);
}
王兴佳程序2:
main()
{
intx=1;y;
y=x++;
printf("y=%d",y);
intz;
z=++x;
print("z=%d\n",z);
正确
#include
voidmain()
{
intx=1,y;
y=x++;
printf("y=%d\n",y);
intz;
z=++x;
printf("z=%d\n",z);
}
周蔚程序3:
#include
main()
{
inta;
charch;
ch="A";
scanf("%d",a);
printf("%c+%d=%c\n",ch,ch+a);
}
正确
#include
voidmain()
{
inta;
charch;
ch='A';
scanf("%d",&a);
printf("%c+%c=%d\n",ch,ch,a);
}
设计课题一:
班级成绩管理系统
一、问题描述:
对一个有N个学生的班级,每个学生有M门课程。
该系统实现对班级成绩的录入、显示、修改、排序、保存等操作的管理。
二、功能要求:
1.本系统采用一个结构体数组,每个数据的结构应当包括:
学号、姓名、M门课程名称。
2.本系统显示这样的菜单:
请选择系统功能项:
a、成绩录入
b、成绩显示
c、成绩保存
d、成绩排序
e、成绩修改(要求先输入密码)
f、成绩统计
(1)显示每门课程成绩最高的学生的基本信息
(2)显示每门课程的平均成绩
(3)显示超过某门课程平均成绩的学生人数
g、退出系统
3.执行一个具体的功能之后,程序将重新显示菜单。
4.将学生成绩保存到文件中。
三、算法提示:
1.数据结构:
结构体类型数组。
2.数据库结构:
下表构成该系统的基本数据库。
姓名
学号
课程名称1
课程名称2
●●●●●●
char
Char
float
float
四、测试数据:
学生人数N=10课程门数M=4
课程名:
数学、语文、英语、政治
班级成绩管理系统
需求分析
编写目的:
通过用户需求分析调查,写出需求分析文档作为项目设计的基本均则要求,以及作用系统分析员进行系统分析和测试人员进行测试的手册。
需求概述:
设计一个班级成绩管理系统,使之提供以下功能:
1)成绩录入2)成绩显示3)成绩保存4)成绩排序5)成绩修改6)成绩统计7)退出系统
需求说明:
1成绩录入包括每个学生的学号和数学,英语,语文,政治成绩,学号不能重复。
2成绩显示要求一定的规范格式。
3录入成绩要求一文件形式保存,并可以对其进行浏览,查询,修改,删除等工作。
4按照每名学生的某门成绩进行排序。
5对同学成绩修改逐个进行,一个同学称及修改不影响其他同学的记录。
6成绩统计包括每门成绩的最高成绩的基本信息,每门课程的平均成绩,超出每门课程平均成绩的人数。
所设计的系统应以菜单的方式工作,应为用户提供清晰的使用提示,依据用户的选择进行各种处理,并要求再此过程中尽可能地兼用用户使用过程中的异常情况。
总体设计
编写目的:
根据需求分析文档,初步提出问题的解决方案,以及软件系统的体系结构和数据结构的设计方案,并写出书面文档总体设计说明书,为下一步详细设计做准备。
每门平均成绩
超出
每门平均成绩
人数
每门最高成绩
信息录入
信息保存
信息选择
信息统计
信息修改
信息排序
信息浏览
班级成绩管理系统
1该系统按功能进行模块划分,其模块图如下:
其中:
信息录入板块完成学生成绩的录入,包括学号,英语,数学,政治,语文成绩等
信息浏览板块完成对学生录入成绩信息的显示。
信息保存完成对录入学生信息的保存。
信息排序完成对学生信息的排序功能。
信息修改完成对学生信息的修改功能。
信息统计完成对学生信息的统计功能。
菜单选择模块完成用户命令的接受,此模块也是学生信息管理系统的入口,用户所要进行的所有操作均需在此模块中进行选择进而进行调用其他模块相应的功能
2数据结构:
本系统主要的数据结构就是学生信息,包括学号,姓名四门课程名和成绩,在处理过程中各项可以作为一个学生的不同属性来进行处理。
3程序流程:
系统的执行应从功能菜单的选择开始,依据用户的选择进行后续的处理,直到用户退出系统为止,其间应对用户的选择做出判断及异常处理。
流程图:
开始
采单选择
录入
no
浏览
no
yes
保存
yesno
信息录入
信息浏览
排序
yesno
信息保存
修改
信息排序
yesno
统计
yes
信息修改
no
yes
超出
每门平均成绩
人数
每门平均成绩
每门最高成绩
结束
详细设计流程图:
开始
主函数:
真?
no
输出“1录入学员信息,2.显示学员信息
3.成绩排序信息t4.添加学员信息\
5.删除学员信息
6.退出\n");
选择功能选项:
”提示信息
yes
输入as
as=1as=2as=3as=4as=5as=6其它
调用函数input();
gotostart;
exit(0);
调用函数del();
调用函数insert();
调用函数display();
调用函数sort();
结束
开始
voidinput()//原始数据录入模块:
初始化迭代变量i=0;
ch!
=
’n’?
no
yes
输出“录入学员信息\n输入第i个学员的信息”
输入学生学号:
输入学员姓名
输入学员性别:
输入学员数学成绩:
输入学员英语成绩:
输入学员语文成绩
输入学员政治成绩
3.接下
2.接下
1.接下
3.接上
2.接上
1.接上
输出换行,
i++,now-no=i;
输出now-no
输出“是否继续输入?
(Y/N)”,
输入ch,
结束
开始
voidsort()//排序数据函数:
初始化迭代变量i=1;
ino
yes
初始化迭代变量j=1;
j<=now_
no-i?
noi++
yes
stu[j-1].aveno
yes
两者交换
j++
结束
voiddisplay()//显示数据函数:
开始
输出“班级学员信息列表;
编号,姓名,性别,成绩,成绩,
成绩,成绩,平均值\”
初始化迭代变量i=0;
i
求出学员平均成绩ave
输出学员信息
输出“按任意键返回主菜单”
输入as
as!
='n'?
no
yes
结束
开始
voidinsert()//插入数据函数:
输出“输入新插入学生信息”
输出“输入学生学号”
输入stu[now_no].no
输出“输入学员姓名”
输入stu[now_no].name
输出“输入学员性别:
”
输入stu[now_no].sex
输出“输入学员数学成绩”
输入stu[now_no].score1
输出“输入学员英语成绩:
”
4.接下
5接下
4.接上
5接上
输入stu[now_no].score2
输出“输入学员语文成绩:
”
输入stu[now_no].score3
输出“输入学员政治成绩:
”
输入stu[now_no].score4
now_no=now_no+1;
输出“是否继续输入?
(Y/N):
”
ch=getch();
ch!
='n'?
Yes
结束
开始
voiddel()//删除数据函数:
输出“输入要删除学员的编号:
”
输入inum
初始化迭代变量i=0
iNo
Yesi++
stu[i].no==inum?
No
Yes
初始化迭代变量j=i
jNo
Yes
now_no=now_no-1;
stu[i]=stu[i+1];
j++
结束
#include
#include
#include
#include
#defineMAX50
voidinput();
voidsort();
voiddisplay();
voidinsert();
voiddel();
voidaverage();
intnow_no=0;
structstudent
{
intno;
charname[20];
charsex[4];
floatscore1;
floatscore2;
floatscore3;
floatscore4;
floatsort;
floatave;
floatsum;
};
structstudentstu[MAX],*p;
main()//主函数
{
charas;
start:
printf("\t\t\t欢迎使用学员成绩管理系统\n\n");//一下为功能选择模块
do
{
printf("\n\t\t\t\t1.录入学员信息\n\t\t\t\t2.显示学员信息\n\t\t\t\t3.成绩排序信息\n\t\t\t\t4.添加学员信息\n\t\t\t\t5.删除学员信息\n\t\t\t\t6.退出\n");
printf("\t\t\t\t选择功能选项:
");
as=getch();
switch(as)
{
case'1':
system("cls");input();break;
case'2':
system("cls");display();break;
case'3':
system("cls");sort();break;
case'4':
system("cls");insert();break;
case'5':
system("cls");del();break;
case'6':
system("exit");exit(0);
default:
system("cls");gotostart;
}
}
while
(1);//至此功能选择结束
}
voidinput()//原始数据录入模块
{
inti=0;
charch;
do
{
printf("\t\t\t\t1.录入学员信息\n输入第%d个学员的信息\n",i+1);
printf("\n输入学员学号:
");
scanf("%d",&stu[i].no);
fflush(stdin);
printf("\n输入学员姓名:
");
fflush(stdin);
gets(stu[i].name);
printf("\n输入学员性别:
");
fflush(stdin);
gets(stu[i].sex);
printf("\n输入学员数学成绩:
");
fflush(stdin);
scanf("%f",&stu[i].score1);
printf("\n输入学员英语成绩:
");
fflush(stdin);
scanf("%f",&stu[i].score2);
printf("\n输入学员语文成绩:
");
fflush(stdin);
scanf("%f",&stu[i].score3);
printf("\n输入学员政治成绩:
");
fflush(stdin);
scanf("%f",&stu[i].score4);
printf("\n\n");
i++;
now_no=i;
printf("%d",now_no);
printf("是否继续输入?
(Y/N)");
ch=getch();
system("cls");
}
while(ch!
='n');
system("cls");
}
voidsort()//排序数据函数
{
structstudenttemp;
inti,j;
for(i=1;i{
for(j=1;j<=now_no-i;j++)
{
if(stu[j-1].ave{
temp=stu[j];
stu[j]=stu[j-1];
stu[j-1]=temp;
}
}
}
}
voiddisplay()//显示数据函数
{
inti;
charas;
floatave;
do
{
printf("\t\t班级学员信息列表\n");
printf("\t编号\t姓名\t性别\t成绩\t成绩\t成绩\t成绩\t平均值\n");
for(i=0;i{
stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3+stu[i].score4;
stu[i].ave=stu[i].sum/4;
printf("\t%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].score4,stu[i].ave);
}
printf("\t\t按任意键返回主菜单.");
as=getch();
gotoexit;
}
while(as!
='n');
exit:
system("cls");
}
voidinsert()//插入数据函数
{
charch;
do
{
printf("\n\t\t输入新插入学员队信息\n");
printf("\n输入学生学号:
");
scanf("%d",&stu[now_no].no);
fflush(stdin);
printf("\n输入学员姓名:
");
fflush(stdin);
gets(stu[now_no].name);
printf("\n输入学员性别:
");
fflush(stdin);
gets(stu[now_no].sex);
printf("\n输入学员数学成绩:
");
fflush(stdin);
scanf("%f",&stu[now_no].score1);
printf("\n输入学员英语成绩:
");
fflush(stdin);
scanf("%f",&stu[now_no].score2);
printf("\n输入学员语文成绩:
");
fflush(stdin);
scanf("%f",&stu[now_no].score3);
printf("\n输入学员政治成绩:
");
fflush(stdin);
scanf("%f",&stu[now_no].score4);
printf("\n\n");
now_no=now_no+1;
sort();
printf("是否继续输入?
(Y/N)");
ch=getch();
system("cls");
}
while(ch!
='n');
}
voiddel()//删除数据函数
{
intinum,i,j;
printf("输入要删除学员的编号:
");
fflush(stdin);
scanf("%d",&inum);
for(i=0;i{
if(stu[i].no==inum)
{
for(j=i;j{
stu[i]=stu[i+1];
}
now_no=now_no-1;
}
break;
}
system("cls");
}
程序调试:
小组成员:
程序设计总结
二十一世纪的人才需要多方面的技能,无论是专业知识,还是其它知识,都需要很大的广度和深度,这样才能在工作和发展中游刃有余,才能不被淘汰。
勿容置疑,二十一世纪是计算机的时代,在这个社会快速发展的今天,计算机起着举足轻重的作用,一个人要想在今天立于不败之地,就必须对计算机知识有所了解,在有些领域甚至要深层次的研究,才能有所建树。
短学期,学校结合各种因素,开了程序设计这门实践课。
经过一个多月的练习实践,我在一些方面有了明显的进步,同时还认识到我对这门基础知识还有许多不解之处。
在程序编写及运行过程中出现过多种问题和错误,总结如下:
1.由于设计的程序主体很大,多次出现各种符号的缺失或多用现象,经过仔细排查最后才发现。
归根到底这是基础知识的缺乏和对概念细节理解上的混乱造成的。
例如在小程序中,我原本计划把开根号后的数求余,然后通过判断其是否为零来判断它是否为完全平方数。
后来经过运行才发现这是不行的,因为求余的数必须是int型的,这就是对以细节的不清楚造成的。
2.编写过程中多次出现变量没有定义或重复定义的现象,我想这主要有两方面的原因:
一是不会运用简便的方法解决一些复杂的问题,确切地说,不懂得灵活运用所学知识;二是粗心大意造成了许多不必要的麻烦,这也是在以后学习中必须客服的。
3.函数调用时对于形参和实参之间的传递概念不清。
这是对具体知识点的问题,初学的时候,就在这点上很模糊,但终究没有弄明白,现在就不会做,类似这样的问题还有几个,在以后的学习中,应当做到遇到一个问题就解决一个问题,不能拖欠,否则造成的恶性循环,其后果是严重的。
以上三个问题极其明显的出现在这次编程实践中,我想,活动的目的不仅仅是做几道题,更重要的是,让我们在不断的实践中,找到自己在学习及其它方面的缺点,这才是这次活动的根本目的。
我认识到,学习也要像编程一样,必须大处着眼,小处着手,关心细节,却要不失全局,这样才能取得更大的发展与进步。