×

c语言课程设计报告模板 语言程序设计 程序

c语言课程设计报告模板(求完整C语言程序设计报告!!)

admin admin 发表于2022-09-05 08:11:42 浏览87 评论0

抢沙发发表评论

本文目录

求完整C语言程序设计报告!!


C语言课程设计报告--学生成绩管理系
C语言课程设计报告:
学生成绩管理系统
系统需求
一、 当前学生信息:通过结构体struct student 来保存学生的姓名,学号,性别,语文,数学,英语和计算机等等相关信息,并且通过cin函数来进行给当前学生输入初始信息.
二、学生成绩查询: 输入一个学号, 在文件中查找此学生, 若找到则输出此学生的全部信息和成绩; 若找不到则输出查找失败的信息. 同时也可以全部把各科的平均成绩,最高和最低分输出。
三、新生插入 :通过给该生的学号来和原班上的学生的学号比较大小,若大就在后,若小则靠前排,将此生的信息保存下来。

四、输出全部学生信息和全部学生成绩。
五、退出系统.
六、附加说明:系统将来完善的功能有:可以通过性别来模糊查询,也可以通过姓名的姓来先进行模糊查询,以便后面精确查找。
总体设计
一、 仔细阅读系统要求,首先将此系统化分为如下模块(即如下函数)
1、输入初始的学生信息:其中包括学生的姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息;可用函数cin(stu *p1)来实现此操作。

2、查询模块:可用stu *lookdata(stu *p1) 来实现。找到就输出此学生全部信息包括学生的语文、数学、英语和计算机等的成绩。
3、插入模块:可用insert( )函数来实现。其中通过学号的大小来比较的,并且以此来排序。
4、输出学生的信息以及成绩:通过学生的姓名来查看学生的语文、数学、英语和计算机等相关成绩,同时也可以分别通过caverage() 、 maverage() 、eaverage() 和comaverage() 来输出语文、数学、英语和计算机等成绩的平均分数、最高和最低分数。
5、退出系统:可用一个函数exit()来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。
二、系统主模块结构图:
详细设计
一、 界面设计
此系统界面采用图形和数字化菜单设计。
主界面设计如下:

学生成绩管理系统

请选择相应的数字执行相应的功能:
1:是否输入其他数据
2:查看数据
3:插入数据
4:查找数据
5:更新数据
6:保留数据
7:显示或打印数据
8:语文成绩状况
9:数学成绩状况
10:英语成绩状况
11:计算机成绩状况
12:?
13:退出系统
二、 数据结构设计:
程序设计中用到的结构体类型:
学生信息结构体类型:
typedef struct student{
char name[MAX];
int num[MAX];
char sex[MAX];
int chinese;
int mathematic;
int english;
int computer;
struct student *next;
}
程序代码:
//原始密码是123456
#include“stdio.h“
#include“stddef.h“
#include“stddef.h“
#include“string.h“
#define MAX 10
typedef struct student{ /*定义结构体*/
char name[MAX]; /*姓名*/
int num[MAX]; /* 学号*/
char sex[MAX]; /*性别*/
int chinese; /*语文*/
int mathematic; /* 数学*/
int english; /*英语*/
int computer; /*计算机*/
struct student *next; /*结构体指针*/
}stu;
stu *head; /*头指针*/
void print() /*显示或打印函数*/
{
system(“cls“);
printf(“\t\t\tScore Manage System\n“); /*成绩管理系统*/
printf(“《1》Enter Record\t“); /*输入数据*/
printf(“《2》Display\t“); /*显示*/
printf(“《3》Insert\t“); /*插入数据*/
printf(“《4》Quest\t“); /*访问数据*/
printf(“《5》Update\t“); /*以前数据*/
printf(“《6》Save\t“); /*保留数据*/
printf(“《7》Fresh\t“); /*更新数据*/
printf(“《8》Chinese Average\t“); /*语文平均成绩*/
printf(“《9》Math Average\t“); /*数学平均成绩*/
printf(“《10》English Average\t“); /*英语平均成绩*/
printf(“《11》Computer Average\t“); /*计算机平均成绩*/
printf(“《12》Quit\t\n“); /*退出*/
}
void cin(stu *p1) /*输入相关数据的函数*/
{ printf(“Enter name:\n“);
scanf(“%s“,&p1-》name);
printf(“Enter num:\n“);
scanf(“%d“,&p1-》num);
printf(“Enter sex:\n“);
scanf(“%s“,&p1-》sex);
printf(“Enter score:\n“);
printf(“Enter chinese:\n“);
scanf(“%d“,&p1-》chinese);
printf(“Enter math:\n“);
scanf(“%d“,&p1-》mathematic);
printf(“Enter English:\n“);
scanf(“%d“,&p1-》english);
printf(“Enter Computer:\n“);
scanf(“%d“,&p1-》computer);
}
stu *cindata() /*其他数据是否继续输入的函数*/
{ stu *p1,*p2;
int i=1;
char ch;
p1=(stu *)malloc(sizeof(stu));
head=p1;
while(i)
{
cin(p1);
printf(“Do you Want to Continue?yes or no“); /*是否继续输入数据*/
ch=getchar();
ch=getchar();
if(ch==’n’||ch==’N’)
{ i=0;
p1-》next=NULL;
}
else
{ p2=p1;
p1=(stu *)malloc(sizeof(stu));
p2-》next=p1;
}
}
return(p1-》next);
}
stu *lookdata(stu *p1) /*查看数据的函数*/
{
while(p1!=NULL)
{ printf(“Num:%d\t“,p1-》num);
printf(“Name:%s\t“,p1-》name);
printf(“Sex:%s\t“,p1-》sex);
printf(“\n“);
printf(“Chinese:%d\t“,p1-》chinese);
printf(“Math:%d\t“,p1-》mathematic);
printf(“English:%d\t“,p1-》english);
printf(“Computer:%d\t“,p1-》computer);
printf(“\n“);
p1=p1-》next;
}
return p1;
}
void insert() /*通过比较学号来插入数据的函数*/
{ stu *p1,*p3,*p2;
char ch;
p1=head;
p3=(stu *)malloc(sizeof(stu));
p3-》next=NULL;
if(head==NULL){ head=p3; return;}
cin(p3);
while(p1!=NULL&&(p1-》num《p3-》num)) /*通过学号的比较来插入*/
{ p2=p1;p1=p1-》next;}
if(p2==head) {p3-》next=head; head=p3; return;}
p3-》next=p1;
p2-》next=p3;
}
find(stu *p2) /*通过姓名查找查看数据的函数*/
{ char name;
int b=0;
printf(“Enter the name of the student you want to find:“); /*通过姓名查看*/
scanf(“%s“,name);
while(p2!=NULL)
{if(strcmp(name,p2-》name)==0)
{
printf(“The data you want has be found\n“);
printf(“ Name:%s\t“,p2-》name);
printf(“Num:%d\t“,p2-》num);
printf(“sex%s\t“,p2-》sex);
printf(“\n“);
printf(“Chinese:%d\t“,p2-》chinese);
printf(“Math:%d\t“,p2-》mathematic);
printf(“English:%d\t“,p2-》english);
printf(“Computer:%d\t“,p2-》computer);
printf(“\n“);
b=1;
}
else if(b==0)
printf(“sorry not find data!“);
p2=p2-》next;
}
if(b==1)
{
print();
printf(“Find one\n“);}
else
{print();
printf(“Not find\n“);
}
}
void caverage() /*求各学生语文平均分、最高和最低分成绩的函数*/
{ stu *p1;
int i;
float max=0.0,min=200.0;
float sum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf(“not data!“);
else
{for(i=0;p1!=NULL;i++,p1=p1-》next)
sum+=p1-》chinese;
aver=sum/i;
p1=head;
for(i=0;p1!=NULL;i++,p1=p1-》next)
{if(max《p1-》chinese)
max=p1-》chinese;
}
p1=head;
for(i=0;p1!=NULL;i++,p1=p1-》next)
if(min》p1-》chinese)
min=p1-》chinese;
}
printf(“Chinese Average:%f“,aver);
printf(“Chinese Max:%f“,max);
printf(“Chinese Min:%f“,min);
}
void maverage() /*求各学生数学平均分、最高和最低分成绩的函数*/
{ stu *p1;
int i;
float max=0.0,min=200.0;
float sum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf(“not data!“);
else
{for(i=0;p1!=NULL;i++,p1=p1-》next)
sum+=p1-》mathematic;
aver=sum/i;
p1=head;
for(i=0;p1!=NULL;i++,p1=p1-》next)
{if(max《p1-》mathematic)
max=p1-》mathematic;
}
p1=head;
for(i=0;p1!=NULL;i++,p1=p1-》next)
if(min》p1-》mathematic)
min=p1-》mathematic;
}
printf(“Mathe Average:%f“,aver);
printf(“Mathe Max:%f“,max);
printf(“Mathe Min:%f“,min);
}
void eaverage() /*求各学生英语平均分、最高和最低分成绩的函数*/
{ stu *p1;
int i;
float max=0.0,min=200.0;
float sum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf(“not data!“);
else
{for(i=0;p1!=NULL;i++,p1=p1-》next)
sum+=p1-》english;
aver=sum/i;
p1=head;
for(i=0;p1!=NULL;i++,p1=p1-》next)
{if(max《p1-》english)
max=p1-》english;
}
p1=head;
for(i=0;p1!=NULL;i++,p1=p1-》next)
if(min》p1-》english)
min=p1-》english;
}
printf(“English Average:%f“,aver);
printf(“English Max:%f“,max);
printf(“English Min:%f“,min);
}
void comaverage() /*求各学生计算机平均分、最高和最低分成绩的函数*/
{ stu *p1;
int i;
float max=0.0,min=200.0;
float sum=0.0,aver=0;
p1=head;
if(p1==NULL)
printf(“not data!“);
else
{for(i=0;p1!=NULL;i++,p1=p1-》next)
sum+=p1-》computer;
aver=sum/i;
p1=head;
for(i=0;p1!=NULL;i++,p1=p1-》next)
{if(max《p1-》computer)
max=p1-》computer;
}
p1=head;
for(i=0;p1!=NULL;i++,p1=p1-》next)
if(min》p1-》computer)
min=p1-》computer;
}
printf(“Computer Average:%f“,aver);
printf(“Computer Max:%f“,max);
printf(“Computer Min:%f“,min);
}
update(stu *p2) /*通过姓名查找来更新数据*/
{
char name; /*p2为指向结构体struct student的指针*/
int b=0;
printf(“Enter The Name“); /*输入姓名*/
scanf(“%s“,name);
while(p2!=NULL)
{if(strcmp(name,p2-》name)==0)
{
printf(“Find you data\n“);
scanf(“Name:%s“,p2-》name);
scanf(“Num:%s“,p2-》num);
scanf(“Sex:%s“,p2-》sex);
scanf(“Chinese:%d“,p2-》chinese);
scanf(“Math:%d“,p2-》mathematic);
scanf(“english:%d“,p2-》english);
scanf(“Computer:%d“,p2-》computer);
printf(“Success!“);
b=1;}
else if(b==0)
printf(“Sorry not Find data!“);
p2=p2-》next;}
if(b==0)
{print();
printf(“Sorry not Find data!“);
}
else
{
print();
printf(“Finish!“);
}
}
save(stu *p2) /*保留数据函数*/
{
FILE *fp;
char file;
printf(“Enter file name“); /*输入文件名*/
scanf(“%s“,file);
fp=fopen(file,“w“);
while(p2!=NULL)
{
fprintf(fp,“%s“,p2-》name);
fprintf(fp,“%s“,p2-》num);
fprintf(fp,“%s“,p2-》sex);
fprintf(fp,“%d“,p2-》chinese);
fprintf(fp,“%d“,p2-》mathematic);
fprintf(fp,“%d“,p2-》english);
fprintf(fp,“%d“,p2-》computer);
p2=p2-》next;
}
fclose(fp);
}
char password=“123456“; /*定义初始密码*/
void main() /*主函数*/
{ int choice;
stu *p2;
char s;
int flag=0,i; /*标志项*/
int n=3;
do{ printf(“Enter password:\n“);
scanf(“%s“,s);
if(!strcmp(s,password)) /*进行密码匹配验证*/
{ printf(“PASS\n\n\n“);
flag=1;
break;
}
else{
printf(“Error Enter again:\n“);
n--;
}
}
while(n》0);
if(!flag)
{printf(“you have Enter 3 times!“); /*输入密码超过了3次!!*/
exit(0); /*自动退出*/
}
/*密码验证成功后进入的界面*/
printf(“~~~~~~~~~~\t\t\t~~~~~~~~~~~~\n“); /*操作界面*/
printf(“\t\tWelcom to the Mis\n“);
printf(“Author:-----\tClass:------\tNum:------\n“); /*作者,班级和号码*/
printf(“Adress:HG\n“); /*地址*/
printf(“%%%%%%%%%%%%%%%%%%%%%%%%%%%\n“);
printf(“\t\tEnter OP:\n“);
printf(“\n\n\n\n“);
printf(“==============\t\t==============\n“);
printf(“==============\t\t==============\n“);
printf(“\t\tEnter the MIS yes or no\n“); /*问进入系统与否*/
scanf(“%d“,&choice);
if(choice==’n’||choice==’N’)
exit(1);
print();
while(1)
{
printf(“Enter choice:“);
scanf(“%d“,&i);
if(i《1||i》13)
{
printf(“Enter num from 1 to 13:\n“); /*再从1-13中进行选择*/
exit(1);
}
switch(i)
{ case 1:
p2=cindata(); /*其他数据是否继续输入的函数*/
break;
case 2:
p2=lookdata(head); /*查看数据的函数*/
break;
case 3:
insert(); /*通过比较学号来插入数据的函数*/
break;
case 4:
find(head); /*通过姓名查找查看数据的函数*/
break;
case 5:
update(head); /*通过姓名查找来更新数据*/
break;
case 6:
save(head); /*保留数据函数*/
break;
case 7:
print(); /*显示或打印函数*/
break;
case 8:
caverage(); /*求各学生语文平均分、最高和最低分成绩的函数*/
break;
case 9:
maverage(); /*求各学生数学平均分、最高和最低分成绩的函数*/
break;
case 10:
eaverage(); /*求各学生英语平均分、最高和最低分成绩的函数*/
break;
case 11:
comaverage(); /*求各学生计算机平均分、最高和最低分成绩的函数*/
break;
case 12:
; /*空操作*/
case 13:
exit(1); /*退出*/
break;
}
scanf(“%d“,&i);
}
}
程序中出现的问题及解决方法
问题一、学生初始信息模块:
其中包括学生的姓名、学号和性别以及学生的语文、数学、英语和计算机等相关信息;可用函数cin(stu *p1)来实现此操作。当正确输入存在的学生学号,系统进行判断时,提示不存在此学生。
解决办法及步骤:
1、一个个输出所有的学生的学号,检查文件中是否有此学生,发现有。
2、既然有此学生,那么检查循环判断是否有此学生的语句发现没有错
3、输出用于循环检查语句中的学生信息,发现乱码
4、仔细分析乱码的原因,最后发现是变量的类型错误,错将学生类型的结构体指针变量定义为了其他类型的指针变量。
问题二、查询模块:
可用stu *lookdata(stu *p1) 来实现。找到就输出此学生全部信息包括学生的语文、数学、英语和计算机等的成绩。当正确输入查找信息时,系统却不能够得到所要查找的学生信息以及学生的语文、数学、英语和计算机的成绩。
解决办法及步骤:
1、检查所编写的程序代码是否完全正确,若不是,则改之,然后再继续正确输入查找信息看能否得到所要查找的学生信息以及学生的语文、数学、英语和计算机的成绩。
2、检查当我们在输入查找信息时,看是否我们输入的信息有误,若是这样的话,我们应当仔细输入查找信息。
问题三、插入模块:
可用insert( )函数来实现。其中通过学号的大小来比较的,并且以此来排序。当我们输入插入信息时,系统却提示插入不进数据。
解决办法及步骤:
1、检查所编写的程序代码是否完全正确,若不是,则改之,然后再继续正确输入插入信息看能否插入进去得到所要插入的学生信息以及学生的语文、数学、英语和计算机的成绩。
2、检查当我们在输入插入信息时,看是否我们输入的插入信息有

学生成绩记录薄 c语言 课程设计报告


C语言程序设计报告
课题名称:学生成绩管理
1 系统概述:
本程序为一个学生成绩管理系统,对学生的成绩进行管理,学生的信息包括学号,姓名,学期,三门课程的成绩,输入这些信息,本程序可以自动计算总成绩,可以按高分到低分进行排名,并对输入信息的人数进行汇总.
2 数据结构设计:
(1)结构体;
(2)数组的设计:运用指针代替数组,使用指针来建立线性表,使程序更加简洁,可读性更强.
3 各函数的设计:
函数原型:void InitList(SqLinkList &L);
功能: 创建一个空的线性链表;
入口参数:L为要创建的线性链表;
出口参数:创建链表的L.head为空,L.length为0;
返回值: 无;
函数原型:void EmptyLinkList(SqLinkList &L);
功能: 清空整个线性链表;
入口参数:L为要清空的链表名称;
出口参数:若清空成功则链表长度L.length为0;
返回值: 无;
函数原型:int ScanE(ElemType &e);
功能: 输入学生信息;
入口参数:e为要输入信息的学生名称;
出口参数:e.num保存学号,e.name保存姓名,e.team保存所在学期,e.s1,e.s2,e.s3分别保存三门课程的成绩;
返回值: 输入合法返回1,否则返回0;
错误处理:若学号、姓名等输入不合法会有提示及重输;
函数原型:Status SqLinkListAppend(SqLinkList &L,ElemType e);
功能: 追加一个结点到线性链表中;
入口参数:e为所追加的结点名称,L为e所追加到的线性链表的名称;
出口参数:若追加成功,则e为头结点,链表长度L.length增1;
返回值: 若追加成功返回1;
函数原型:Link SearchNode(SqLinkList L,int NUM);
功能: 查找学号为NUM的学生;
入口参数:查找的链表名称L,学号NUM;
出口参数:若找到结点指针p指向该结点,否则指向空结点;
返回值: 结点指针p;
函数原型:void SearchTeam(SqLinkList L,int team);
功能: 查找学期为team的所有记录并输出其信息;
入口参数:查找的链表名称L,要查找的学期team;
出口参数:无;
返回值: 无;
函数原型:void SearchUnpass(SqLinkList L,float s1,float s2,float s3);
功能: 查找所有有挂科记录的学生并输出其信息;
入口参数:查找的链表名称L,要查找的各门学科成绩s1,s2,s3;
出口参数:无;
返回值: 无;
函数原型:void SqLinkListSearch(SqLinkList L);
功能: 对链表进行分类查找;
入口参数:要查找的链表名称L;
出口参数:无;
返回值: 无;
函数原型: void inputData(SqLinkList &L);
功能: 输入数据,并追加一个结点;
入口参数: L为要追加结点的链表名称;
出口参数: 无;
返回值: 无;
函数原型:void SqLinkListTraverse(SqLinkList L);
功能: 输出链表中所有学生成绩列表;
入口参数:L为要输出信息的链表名称;
出口参数:无;
返回值: 无;
函数原型:void PrintE(ElemType e);
功能: 输出一个结点的所有信息;
入口参数:要输出的结点名称e;
出口参数:无;
返回值: 无;
4 使用程序的说明:
本程序为一个学生成绩管理系统。对学生的成绩信息进行管理,学生的信息包括学号、姓名、学期、三门课程的成绩、平均成绩、名次。本管理系统实现学生的学号、姓名、学期、每门课程的成绩的录入,并自动按平均分排名,使用时按屏幕上的提示,输入使用代码.如下图所示:
例如:输入代码数字”1”,程序执行”输入学生成绩或已存在的学生成绩进行修改”这条小程序.输入学生个人信息后,如下图所示:
如此分别输入相应的程序代码,就执行相应的程序段.
如下的程序是按学号进行成绩排名:
当输入”6”时,执行相应的程序,即汇总一共输入学生的人数:
5 总结和体会:
通过对C语言学习,尤其是这学期本班开展C语言双语教学,体会到学习难的同时,也真正了解到C语言作为一门高级的计算机语言的强大功能,特别是在当今实际生活,生产,办公,信息管理等方面的强大作用. 这次合作我们遇到了许多的困难。时间的紧迫,知识的不足,给我很大的压力。最终我还是还是完成了任务。团结就是力量是我这次最真切的感受。
6 程序代码:
void InitList(SqLinkList &L) {
// 构造一个空的线性表L;
L.head = 0; //头指针为空;
L.length = 0; //长度初始为0;
}
void EmptyLinkList(SqLinkList &L){
//入口参数为整个线性表的数据,功能为清空线性表;
Node *p;
if(!L.head)printf(“系统中不存在记录。\n“);
//头指针为空时没有学生录入;
else {
while (L.head){
//每个循环将下一结点赋值给头指针,并释放本结点空间,直至线性表清空;
p=L.head;
L.head=p-》next;
free(p);
} //end while;
L.length=0; //长度为0;
printf(“该管理系统学生信息已清空。\n“);
}//end else;
}
int ScanE(ElemType &e){
//输入一个学生的成绩数据结点。返回0为无效结点数据,1为有效结点数据;
printf(“\n学号:“);
scanf(“%d“,&e.num);
if(e.num==0){
//学号为0输入不合法,重新输入;
printf(“学号输入不合法.\n“);
return 0;
}
printf(“\n姓名:“);
scanf(“%s“,&e.name);
printf(“\n学期:“);
scanf(“%d“,&e.team);
while(e.team》12){
//系统只记录小于12的学期数;
printf(“输入的学期不能大于12,请重新输入:“);
scanf(“%d“,&e.team);
}
printf(“\n成绩A:“);
scanf(“%f“,&e.s1);
printf(“\n成绩B:“);
scanf(“%f“,&e.s2);
printf(“\n成绩C:“);
scanf(“%f“,&e.s3);
return OK;
}
Status SqLinkListAppend(SqLinkList &L,ElemType e){
//追加一个结点到线性表中;
Node *p;
p=SearchNode(L,e.num);
//查找学号为e.num的记录并将其地址赋给指针p;
if (p==0){
//若不存在添加学号相同的结点,追加一个结点;
p=(Node *)malloc(sizeof(Node));
if (!p) return ERROR;
memcpy(&(p-》data),&e,sizeof(ElemType));
p-》next=L.head ;
L.head=p;
//追加的一个结点为首结点;
L.length++; //表长度加1;
}
else { //如果该学号记录已存在,则进行修改操作;
memcpy(&(p-》data),&e,sizeof(ElemType));
printf(“该学生记录已经存在,已完成修改操作。\n“);
}
return OK;
}
Link SearchNode(SqLinkList L,int NUM){
//查找学生记录,该学生的学号为NUM;
Node *p;
p=L.head; //p先指在头结点;
while (p&& p-》data.num !=NUM ) p=p-》next;
//如果该学生的学号不为NUM则查找下一个结点;
return p;
}
void SearchTeam(SqLinkList L,int team){
//按学期查找并输出所有该学期存在的记录;
Node *p;
p=L.head;
int n,sum=0;
//sum记录该学期的学生总人数;
printf(“请输入您要查询的学生的学期:“);
scanf(“%d“,&n);
printf(“\n学号 姓名 学期 成绩A 成绩B 成绩C 平均成绩\n“);
while(p&&p-》next){
//如果p结点和它的下一结点不为空,且该结点的学期等于要查找学期,则格式输出所有该学期学生信息;
if(p-》data.team==n){
PrintE(p-》data);
sum++;
//查找到一个该学期的学生记录计数加1;
}
p=p-》next;
//转向下一结点;
} //end while;
if(p-》data.team==n){
//如果p的下一结点为空,且本结点学期为n,则格式输出该结点信息;
sum++;
PrintE(p-》data);
}
if(sum==0)printf(“没有这学期的记录。\n“);
if(sum)printf(“该学期共有%d人的记录.\n“,sum);
}
void SearchUnpass(SqLinkList L,float s1,float s2,float s3){
//查找并输出有挂科的学生信息;
Node *p;
p=L.head;
int sum=0;
//sum计数挂科总人数,初始为0;
printf(“以下是有一门以上不及格科目的学生的成绩:\n“);
printf(“\n学号 姓名 学期 成绩A 成绩B 成绩C 平均成绩\n“);
while(p&&p-》next){
//如果p及其下一结点为真,且该结点有一门以上科目分数低于60则输出该结点成绩并使sum计数加1;
if((p-》data.s1《60)||(p-》data.s2《60)||(p-》data.s3《60))
{
PrintE(p-》data);
sum++;
} //end if;
p=p-》next;
//转到下一结点;
} //end while;
if((p-》data.s1《60)||(p-》data.s2《60)||(p-》data.s3《60)){
//查看最后一个结点,若有挂科,sum加1并格式输出结点信息;
sum++;
PrintE(p-》data);
}
if(sum==0)printf(“没有不及格的记录。\n“);
if(sum)printf(“共有%d人的挂科记录.\n“,sum);
}
void SqLinkListSearch(SqLinkList L){
//分类查找学生记录;
Node *p;
p=L.head;
int n,reg; //reg为查询方式的指令;
printf(“1--按学号查询\n2--按学期查询\n3--挂科学生信息列表\n“);
printf(“请您输入查询方式:“);
scanf(“%d“,®);
if(L.length){
if(reg》3)printf(“对不起没有您要求的选项。\n“);
//若reg》3则输入不合法;
else if(reg==1){
//reg==1按学号查询;
printf(“请输入您要查询的学生的学号:“);
scanf(“%d“,&n);
while(p&&p-》next&& p-》data.num !=n) p=p-》next;
//当p和他下一结点为真时且结点数据不为要查找数据时转向下一结点;
if(p-》data.num==n){
//找到所要查询结点,格式输出;
printf(“\n学号 姓名 学期 成绩A 成绩B 成绩C 平均成绩\n“);
PrintE(p-》data);
}
else printf(“没有您要查找的学号。\n“);
} //end reg==1 if ;
else if(reg==2)SearchTeam(L,p-》data.team);
//reg==2,调用SearchTeam函数按学期查询并输出;
else if(reg==3)SearchUnpass(L,p-》data.s1,p-》data.s2,p-》data.s3);
//reg==3,调用SearchUnpass函数,输出全部有挂科记录的学生信息;
}//end if;
else printf(“系统中无记录.\n“);
}
void inputData(SqLinkList &L){
//请求输入学生成绩,则追加一个结点并输入;
ElemType e;
if (ScanE(e)) SqLinkListAppend(L,e); //输入数据,追加一个结点;
}
void SqLinkListTraverse(SqLinkList L){
//所有学生信息列表输出;
Node *p;
char c;
p=L.head;
if(p) //非空表;
{
printf(“\n学号 姓名 学期 成绩A 成绩B 成绩C 平均成绩\n“);
for (p=L.head ;p;p=p-》next )PrintE(p-》data);
//从第一个结点开始输出所有信息直到结点为空;
}
else printf(“系统中无记录。\n“);
//空表;
c=getchar();
}
void PrintE(ElemType e){
//输出各科成绩和平均成绩;
printf(“%d\t%s\t%d\t%f\t%f\t%f\t%f\n“,e.num,e.name,e.team,e.s1,e.s2,e.s3,(e.s1+e.s2+e.s3)/3);
//格式输出学生的学号、姓名、学期、A、B、C三门成绩以及平均成绩;
}

C语言课程设计报告(题目:学生成绩管理系统)


#include《stdio.h》
#include《stdlib.h》
#include《string.h》
#define N 35
char name;
int inth;
struct date
{
int year;
char month;
char day;
};
struct student
{
char no;
char name;
char sex;
struct date birthday;
int score;
};
int menu()
{
int code;
printf(“ 菜单\n“);
printf(“┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n“);
printf(“┃ 0.退出 ┃\n“);
printf(“┃ 1.显示学生信息 ┃\n“);
printf(“┃ 2.显示按姓名排序后的学生信息 ┃\n“);
printf(“┃ 3.显示按总分排序后的学生信息 ┃\n“);
printf(“┃ 4.按学号查学生分数和平均分数 ┃\n“);
printf(“┃ 5.按姓名查学生分数和平均分数 ┃\n“);
printf(“┃ 6.查各课程平均分数 ┃\n“);
printf(“┃ 7.查男女学生的人数 ┃\n“);
printf(“┃ 8.显示学生信息表 ┃\n“);
printf(“┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n“);
printf(“选择代码(0,1,2,3,4,5,6,7,8): “);
scanf(“%d“,&code);
return code;
}
/* 建立学生信息数组 */
void readsi(struct student stud,int *n)
{
FILE*fp;
int i;
if((fp=fopen(“studf.txt“,“r“))==NULL)
{
printf(“不能打开studf.txt文件!\n“);
exit(1);
}
for(i=0;!feof(fp);i++)
{
(*n)++;
if(*n》N)
{
printf(“最多处理35位学生信息!\n“);
return;
}
fscanf(fp,“%s %s %s %d %d %d %d %d %d“,stud[i].no,stud[i].name,stud[i].sex,&stud[i].birthday.year,&stud[i].birthday.month,&stud[i].birthday.day,&stud[i].score,&stud[i].score,&stud[i].score);
// fscanf从一个流中执行格式化输入
stud[i].score=stud[i].score+stud[i].score+stud[i].score;
}
fclose(fp);
}
/* 显示学生信息 */
void printsi(struct student *pstud,int n)
{
int i,k=0;
printf(“ 学号 姓名 性别 年 月 日 数学 英语 C 总分\n“);
printf(“┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉\n“);
printf(“==================================================================\n“);
for(i=0;i《n;i++)
{
printf(“%-8s %-8s %-2s %4d %2d %2d %4d %4d %4d %5d\n“,pstud[i].no,pstud[i].name,pstud[i].sex,pstud[i].birthday.year,pstud[i].birthday.month,pstud[i].birthday.day,
pstud[i].score,pstud[i].score,pstud[i].score,pstud[i].score);
k++;
if(k%20==0)
scanf(“%*c“);
}
}
/* 按学号排序—简单比较排序法*/
void csort_no(struct student *pstud,int n)
{
struct student temp;
int i,j;
for(i=0;i《n-1;i++)
for(j=i+1;j《n;j++)
if(strcmp(pstud[i].no,pstud[j].no)》0)
{
temp=pstud[i];
pstud[i]=pstud[j];
pstud[j]=temp;
}
}
/* 显示学生信息表*/
void printtable(struct student *pstud,int n)
{
int i,k=0;struct student studA[N];
for(i=0;i《n;i++)
studA[i]=pstud[i];
csort_no(studA,n);
printf(“\n\n“);
printf(“ 学生信息表\n“);
printf(“ ==================\n\n“);
printf(“┏━━━━┳━━━━┳━━━┳━━━━━━┳━━━┳━━━┳━━━┳━━━┓\n“);
printf(“┃学号 ┃姓名 ┃ 性别 ┃ 年 月 日 ┃ 数学 ┃ 英语 ┃ C ┃ 总分 ┃\n“);
printf(“┣━━━━╋━━━━╋━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━┫\n“);
printf(“┣━━━━╋━━━━╋━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━┫\n“);
for(i=0;i《n;i++)
{
printf(“┃%-8s┃%-8s┃ %-2s ┃ %4d %2d %2d ┃ %4d ┃ %4d ┃ %4d ┃ %4d ┃\n“,studA[i].no,studA[i].name,studA[i].sex,studA[i].birthday.year,studA[i].birthday.month,studA[i].birthday.day,studA[i].score,studA[i].score,studA[i].score,studA[i].score);
if(i==n-1)
printf(“┗━━━━┻━━━━┻━━━┻━━━━━━┻━━━┻━━━┻━━━┻━━━┛\n“);
else
printf(“┣━━━━╋━━━━╋━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━┫\n“);
k++;
if(k%20==0)
scanf(“%*c“);
}
}
/* 查各课程平均分数 */
void find_ave(struct student *pstud,int n)
{
static summath=0,sumenglish=0,sumC=0,score=0;int i;struct student studA[N];
for(i=0;i《n;i++)
studA[i]=pstud[i];
csort_no(studA,n);
printf(“ 各课程平均分数 \n “);
printf(“————————————————————————————\n“);
for(i=0;i《n;i++)
{
summath=summath+pstud[i].score;
sumenglish=sumenglish+pstud[i].score;
sumC=sumC+pstud[i].score;
score=score+pstud[i].score;
}
printf(“数学平均分数:%4d\n“,summath/n);
printf(“英语平均分数:%4d\n“,sumenglish/n);
printf(“c平均分数:%4d\n“,sumC/n);
printf(“总分平均分数:%5d\n“,score/n);
}
/* 查男女学生人数 */
void find_pnum(struct student *pstud,int n)
{
int i,j=0,k=0;
for(i=0;i《n;i++)
{
if(strcmp(pstud[i].sex,“男“)==0)
j++;
else
k++;
}
printf(“男学生人数为%d人“,j);
printf(“女学生人数为%d人“,k);
}
/* 按总分递减选择排序(应用指针数组)*/
void ssort(struct student *ptscore,int n)
{
struct student *temp;
int i,j;
for(i=0;i《n-1;i++)
for(j=0;j《n-i-1;j++)
if(ptscore[j]-》score《ptscore[j+1]-》score)
{
temp=ptscore[j];
ptscore[j]=ptscore[j+1];
ptscore[j+1]=temp;
}
}
/* 按学号查学生信息和平均分数(顺序查找)*/
void ssrch_no(struct student *pstud,int n)
{
int i=0,j=0;char no;
printf(“请输入要查找的学生学号:“);
scanf(“%s“,&no);
printf(“\n“);
for(i=0;i《n;i++)
{
if(strcmp(no,pstud[i]-》no)==0)
printf(“已找到学号为%-8s的学生\n学号:%-8s\n姓名:%-8s\n性别:%-2s\n%4d年%2d月%2d日\n数学:%4d\n英语:%4d\nc:%4d\n总分%4d\n平均分数为:%4d\n“,pstud[i]-》no,pstud[i]-》no,pstud[i]-》name,pstud[i]-》sex,pstud[i]-》birthday.year,pstud[i]-》birthday.month,pstud[i]-》birthday.day,pstud[i]-》score,pstud[i]-》score,pstud[i]-》score,pstud[i]-》score,pstud[i]-》score/3);
else
j++;
}
if(j==6)
printf(“未找到学号为%-8s的学生\n“,no);
}
/* 按姓名查找的学生信息和平均分数(折半查找)*/
void bsrch_name(struct student *pname,int n)
{
int bsrch(struct student *pname,int n,char *name);
char name;int i;
printf(“请输入要查找的学生姓名:“);
scanf(“%s“,name);
i=bsrch(pname,n,name);
if(i!=-1)
printf(“已找到该学生,学生信息:%-8s %-8s %-2s %4d %2d %2d %4d %4d %4d %5d\n“,
pname[i]-》no,pname[i]-》name,pname[i]-》sex,
pname[i]-》birthday.year,pname[i]-》birthday.month,
pname[i]-》birthday.day,
pname[i]-》score,pname[i]-》score,pname[i]-》score,
pname[i]-》score);
else
printf(“%d没有找到该学生资料!\n“,name);
for(;;)
{ i=i-1;
if(strcmp(name,pname[i]-》name)==0) printf(“已找到该学生,学生信息:%-8s %-8s %-2s %4d %2d %2d %4d %4d %4d %5d\n“,
pname[i]-》no,pname[i]-》name,pname[i]-》sex,
pname[i]-》birthday.year,pname[i]-》birthday.month,
pname[i]-》birthday.day,
pname[i]-》score,pname[i]-》score,pname[i]-》score,
pname[i]-》score);
else
break;
}
i=bsrch(pname,n,name);
for(;;)
{i=i+1;
if(strcmp(name,pname[i]-》name)==0) printf(“已找到该学生,学生信息:%-8s %-8s %-2s %4d %2d %2d %4d %4d %4d %5d\n“,
pname[i]-》no,pname[i]-》name,pname[i]-》sex,
pname[i]-》birthday.year,pname[i]-》birthday.month,
pname[i]-》birthday.day,
pname[i]-》score,pname[i]-》score,pname[i]-》score,
pname[i]-》score);
else
break;
}
}
int bsrch(struct student *pname,int n,char *name)
{
int lower=0,upper=n-1,mid;
if(strcmp(name,pname[lower]-》name)==0) return lower;
else if(strcmp(name,pname[upper]-》name)==0) return upper;
else
while(lower《=upper)
{
mid=(lower+upper)/2;
if(strcmp(name,pname[mid]-》name)==0)
return mid;
else if(strcmp(name,pname[mid]-》name)》0)
lower=mid+1;
else
upper=mid-1;
}
return -1;
}
/* 按姓名递增冒泡排序(应用指针数组) */
void bsort(struct student *pname,int n)
{
struct student *temp;
int i,j;
for(i=0;i《n-1;i++)
for(j=0;j《n-i-1;j++)
if(strcmp(pname[j]-》name,pname[j+1]-》name)》0)
{
temp=pname[j];
pname[j]=pname[j+1];
pname[j+1]=temp;
}
}
/* 按总分名次查找的学生信息和平均分数 */
void printf_ptscore(struct student *ptscore,int n,int inth)
{
printf(“请输入要查找总分名次:“);
scanf(“%d“,&inth);
inth--;
if(inth》n)
{
printf(“未找到总分名次为%5d的学生“,inth);
}
else
printf(“已找到总分名次为%5d的学生\n学号:%-8s\n姓名:%-8s\n性别:%-2s\n%4d年%2d月%2d日\n数学:%4d\n英语:%4d\nc:%4d\n总分%5d\n平均分数为:%4d“,inth+1,ptscore[inth]-》no,ptscore[inth]-》name,ptscore[inth]-》sex,ptscore[inth]-》birthday.year,ptscore[inth]-》birthday.month,ptscore[inth]-》birthday.day,ptscore[inth]-》score,ptscore[inth]-》score,ptscore[inth]-》score,ptscore[inth]-》score,ptscore[inth]-》score/3);
}
/*显示姓名排序后的学生信息*/
void printsi_p1(struct student *parray,int n)
{
int i,k=0;
printf(“ 按姓名排序后的学生信息\n\n“);
printf(“学号 姓名 性别 年 月 日 数学 英语 C 总分\n“);
printf(“******** ------ ** ---- ** -- *** --- *** --- \n“);
printf(“=====================================================\n“);
for(i=0;i《n;i++)
{
printf(“%-8s%-8s%-2s%4d %2d %2d %4d %4d %4d %5d\n“,
parray[i]-》no,parray[i]-》name,parray[i]-》sex,
parray[i]-》birthday.year,parray[i]-》birthday.month,parray[i]-》birthday.day,
parray[i]-》score,parray[i]-》score,parray[i]-》score,parray[i]-》score);
k++;
if(k%20==0)
scanf(“%*c“);
}
}
/* 显示按总分排序后的学生信息 */
void printsi_p2(struct student *ptscore,int n)
{
int i,k=0;
printf(“\n\n“);
printf(“ 按总分排序后的学生信息表\n“);
printf(“ ==================\n\n“);
printf(“┏━━━━┳━━━━┳━━━┳━━━━━━┳━━━┳━━━┳━━━┳━━━┓\n“);
printf(“┃学号 ┃姓名 ┃ 性别 ┃ 年 月 日 ┃ 数学 ┃ 英语 ┃ C ┃ 总分 ┃\n“);
printf(“┣━━━━╋━━━━╋━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━┫\n“);
printf(“┣━━━━╋━━━━╋━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━┫\n“);
for(i=0;i《n;i++)
{
printf(“┃%-8s┃%-8s┃ %-2s ┃ %4d %2d %2d ┃ %4d ┃ %4d ┃ %4d ┃ %4d ┃\n“,ptscore[i]-》no,ptscore[i]-》name,ptscore[i]-》sex,ptscore[i]-》birthday.year,ptscore[i]-》birthday.month,ptscore[i]-》birthday.day,ptscore[i]-》score,ptscore[i]-》score,ptscore[i]-》score,ptscore[i]-》score);
if(i==n-1)
printf(“┗━━━━┻━━━━┻━━━┻━━━━━━┻━━━┻━━━┻━━━┻━━━┛\n“);
else
printf(“┣━━━━╋━━━━╋━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━┫\n“);
k++;
if(k%20==0)
scanf(“%*c“);
}
}
#include《stdio.h》
#include《stdlib.h》
#include《string.h》
#define N 35
void main()
{
static struct student stud[N];
struct student *pstud[N];
struct student *pname[N];
struct student *ptscore[N];
int code,inth=0;
int n=0,i;
readsi(stud,&n);
for(i=0;i《N;i++)
pstud[i]=&stud[i];
for(i=0;i《N;i++)
pname[i]=&stud[i];
for(i=0;i《N;i++)
ptscore[i]=&stud[i];
bsort(pname,n);
ssort(ptscore,n);
printf(“\n 学生信息:\n“);
printsi(stud,n);
printf(“\n 按《Enter》,进入菜单:\n“);
scanf(“%*c“);
while(1)
{
code=menu();
switch(code)
{
case 0: /* 退出 */
exit(1);
case 1: /* 显示学生信息 */
printsi(stud,n);
scanf(“%*2c“);break;
case 2: /* 显示按姓名排序后的学生信息 */
printsi_p1(pname,n);
scanf(“%*2c“);break;
case 3: /* 显示按总分排序后的学生信息 */
printsi_p2(ptscore,n);
scanf(“%*2c“);break;
case 4: /* 按学号查找学生信息和平均分数 */
ssrch_no(pstud,n);
scanf(“%*2c“);break;
case 5: /* 按姓名查找学生信息和平均分数 */
bsrch_name(pname,n);
scanf(“%*2c“);break;
case 6: /* 查各门课的平均分数 */
find_ave(stud,n);
scanf(“%*2c“);break;
case 7: /* 查男女人数 */
find_pnum(stud,n);
scanf(“%*2c“);break;
case 8: /* 显示学生信息表 */

printtable(stud,n);
scanf(“%*2c“);break;
}
}
}
-语言程序设计

C语言程序设计报告的格式


设计报告格式要求课程设计封面使用最后的统一格式。各种图表必须严格符合规范。论文的图应有图名和图号,居中写在图的下方;表应有表名、表号,靠左写在表的上方。表题、图题用5号黑体,参考文献用5号楷体。课程设计报告分章节撰写,书写层次和章节序号作如下的约定:一、设计任务 (居中书写,3号黑体)1.1╳ ╳ ╳ ╳ (左起书写, 4号黑体)1.1.1 ╳ ╳ ╳ ╳ (左起书写,小4号黑体)1. ╳ ╳ ╳ ╳ (空两格书写,小4号黑体)╳ ╳ ╳ ╳ (正文,小4号宋体 首行缩进2个字符)二、功能模块结构.......三、主要模块的流程图及说明.......四、运行结果.......
-程序

求c语言课程设计报告,300行左右题目不限急!


//***************************************************************************
#include《string.h》
#include《ctype.h》
#include《malloc.h》 // malloc()等
#include《limits.h》 // INT_MAX等
#include《stdio.h》 // EOF(=^Z或F6),NULL
#include《stdlib.h》 // atoi()
#include《io.h》 // eof()
#include《math.h》 // floor(),ceil(),abs()
#include《process.h》 // exit()
#include《iostream.h》 // cout,cin
// 函数结果状态代码
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
// #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行
typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等
typedef int Boolean; // Boolean是布尔类型,其值是TRUE或FALSE
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
//***************************************************************************
//栈的储存结构
typedef struct{
//运算符栈
char *base;
char *top;
int stacksize;
}SqStack1;
typedef struct{
//运算数栈
float *base;
float *top;
int stacksize;
}SqStack2;
//***************************************************************************
//以下是运算符栈的基本操作函数
Status InitStack(SqStack1 &S){
//初始化一个栈
S.base=(char *)malloc(STACK_INIT_SIZE*sizeof(char));
if(!S.base)exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}//InitStack
Status DestroyStack(SqStack1 &S){
//销毁栈S
free(S.top);
free(S.base);
return OK;
}//DestroyStack
char GetTop(SqStack1 S){
//若栈不空,则返回S的栈顶元素,并返回OK;否则返回ERROR
if(S.top==S.base)return ERROR;
return *(S.top-1);
}//Gettop
Status Push(SqStack1 &S,char e){
//插入元素e为新的栈顶元素
if(S.top-S.base》=S.stacksize){
//栈满,追加储存空间
S.base=(char *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(char));
if(!S.base)exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}//Push
Status Pop(SqStack1 &S,char &e){
//若栈不空,则删除S的栈顶元素,用e返回其值;并返回OK;否则返回ERROR
if(S.top==S.base)return ERROR;
e=*(--S.top);
return OK;
}//Pop
//***************************************************************************
//以下是运算数栈的基本操作函数
Status InitStack(SqStack2 &S){
//初始化一个栈
S.base=(float *)malloc(STACK_INIT_SIZE*sizeof(float));
if(!S.base)exit(OVERFLOW);
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
return OK;
}//InitStack
Status DestroyStack(SqStack2 &S){
//销毁栈S
free(S.top);
free(S.base);
return OK;
}//DestroyStack
float GetTop(SqStack2 S){
//若栈不空,则返回S的栈顶元素,并返回OK;否则返回ERROR
if(S.top==S.base)return ERROR;
return *(S.top-1);
}//Gettop
Status Push(SqStack2 &S,float e){
//插入元素e为新的栈顶元素
if(S.top-S.base》=S.stacksize){
//栈满,追加储存空间
S.base=(float *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(float));
if(!S.base)exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
}
*S.top++=e;
return OK;
}//Push
Status Pop(SqStack2 &S,float &e){
//若栈不空,则删除S的栈顶元素,用e返回其值;并返回OK;否则返回ERROR
if(S.top==S.base)return ERROR;
e=*(--S.top);
return OK;
}//Pop
//***************************************************************************
//以下是相关的运算符判断函数
char Precede(char A,char B){
//比较运算符A, B的优先关系,A,B的范围仅限于’+’,’-’,’*’,’/’,’^’,’(’,’)’,’=’
//返回’》’,’《’,’=’
switch(A){
case ’+’:switch(B){
case ’+’:return ’》’;
case ’-’:return ’》’;
case ’*’:return ’《’;
case ’/’:return ’《’;
case ’^’:return ’《’;
case ’(’:return ’《’;
case ’)’:return ’》’;
case ’=’:return ’》’;
default:printf(“表达式错误!\n“);exit(0);
}
case ’-’:switch(B){
case ’+’:return ’》’;
case ’-’:return ’》’;
case ’*’:return ’《’;
case ’/’:return ’《’;
case ’^’:return ’《’;
case ’(’:return ’《’;
case ’)’:return ’》’;
case ’=’:return ’》’;
default:printf(“表达式错误!\n“);exit(0);
}
case ’*’:switch(B){
case ’+’:return ’》’;
case ’-’:return ’》’;
case ’*’:return ’》’;
case ’/’:return ’》’;
case ’^’:return ’《’;
case ’(’:return ’《’;
case ’)’:return ’》’;
case ’=’:return ’》’;
default:printf(“表达式错误!\n“);exit(0);
}
case ’/’:switch(B){
case ’+’:return ’》’;
case ’-’:return ’》’;
case ’*’:return ’》’;
case ’/’:return ’》’;
case ’^’:return ’《’;
case ’(’:return ’《’;
case ’)’:return ’》’;
case ’=’:return ’》’;
default:printf(“表达式错误!\n“);exit(0);
}
case ’^’:switch(B){
case ’+’:return ’》’;
case ’-’:return ’》’;
case ’*’:return ’》’;
case ’/’:return ’》’;
case ’^’:return ’》’;
case ’(’:return ’《’;
case ’)’:return ’》’;
case ’=’:return ’》’;
default:printf(“表达式错误!\n“);exit(0);
}
case ’(’:switch(B){
case ’+’:return ’《’;
case ’-’:return ’《’;
case ’*’:return ’《’;
case ’/’:return ’《’;
case ’^’:return ’《’;
case ’(’:return ’《’;
case ’)’:return ’=’;
case ’=’:printf(“表达式错误!\n“);exit(0);
default:printf(“表达式错误!\n“);exit(0);
}
case ’)’:switch(B){
case ’+’:return ’》’;
case ’-’:return ’》’;
case ’*’:return ’》’;
case ’/’:return ’》’;
case ’^’:return ’》’;
case ’(’:printf(“表达式错误!\n“);exit(0);
case ’)’:return ’》’;
case ’=’:return ’》’;
default:printf(“表达式错误!\n“);exit(0);
}
case ’=’:switch(B){
case ’+’:return ’《’;
case ’-’:return ’《’;
case ’*’:return ’《’;
case ’/’:return ’《’;
case ’^’:return ’《’;
case ’(’:return ’《’;
case ’)’:printf(“表达式错误!\n“);exit(0);
case ’=’:return ’=’;
default:printf(“表达式错误!\n“);exit(0);
}
default:printf(“表达式错误!\n“);exit(0);
}
}//Precede
Status InOP(char c){
//判断c是否是运算符,是则返回TRUE,否则返回FALSE
switch(c){
case ’+’:return TRUE;
case ’-’:return TRUE;
case ’*’:return TRUE;
case ’/’:return TRUE;
case ’^’:return TRUE;
case ’(’:return TRUE;
case ’)’:return TRUE;
case ’=’:return TRUE;
default:return FALSE;
}
}//InOP
//***************************************************************************
float Operate(float a,char theta,float b){
switch(theta){
case ’+’:return a+b;
case ’-’:return a-b;
case ’*’:return a*b;
case ’/’:
if(b==0){
printf(“分母不能为0!\n“);
exit(0);
}
else return a/b;
case ’^’:
if(a==0&&b《=0){
printf(“0的指数必须大于0!\n“);
exit(0);
}
else return (float)pow(a,b);
default:printf(“表达式错误!\n“);exit(0);
}
}//Operate
Status EvaluateExpression(){
//算术表达式求值
char c,x,theta,prec;
//c是每次读取的字符,x是存放脱括号后的多余的括号,theta是运算符,prec是c的前一个字符
float a,b,result;//a、b是每次从运算数栈中取出的要进行运算的数,result存放最终结果
float cc,flag,ii,minus=1;
//cc存放由字符串转化而来的浮点数,flag用于标记是否已读取过小数点,
//ii存放小数部分需要缩小的倍数,minus用于记录该数前是否有负号
SqStack1 OPTR;
SqStack2 OPND;
InitStack(OPTR);InitStack(OPND);
Push(OPTR,’=’);
prec=’=’;scanf(“%c“,&c);
while(c!=’=’||GetTop(OPTR)!=’=’){
cc=0;flag=0;ii=10;
if(c==’-’&&(prec==’=’||prec==’(’)){minus=-1;prec=c;scanf(“%c“,&c);}
//若某“-”前面是“=”(第一个符号就是“-”)或“(”,则此为负号,不是减号
else if(!InOP(c)){
while(!InOP(c)){
if(c》=48&&c《=57){
if(flag==0)cc=cc*10+c-48;//小数点之前
else if(flag==1){cc=cc+(c-48)/ii;ii*=10;}//小数点之后
else {printf(“小数点错误!\n“);exit(0);}//小数点有错
}
else if(c==’.’)flag++;//读到小数点
else {printf(“表达式错误!\n“);exit(0);}
prec=c;scanf(“%c“,&c);
}
cc*=minus;minus=1;
Push(OPND,cc);
}//不是运算符则进OPND栈
else
switch(Precede(GetTop(OPTR),c)){
case ’《’:Push(OPTR,c);prec=c;scanf(“%c“,&c);break;//栈顶元素优先级低
case ’=’:Pop(OPTR,x);prec=c;scanf(“%c“,&c);break;//脱括号并接收下一字符
case ’》’://退栈并将运算结果入栈
Pop(OPTR,theta);
Pop(OPND,b);Pop(OPND,a);
Push(OPND,Operate(a,theta,b));
break;
}
}
result=GetTop(OPND);
printf(“%f\n“,result);
//DestroyStack(OPTR);
//DestroyStack(OPND);
return OK;
}//EvaluateExpression

void main(){
printf(“ **********************\n“);
printf(“ * 欢迎使用计算器! *\n“);
printf(“ **********************\n“);
printf(“请输入表达式,以“=”结束:\n“);
printf(“(支持实数间的加(+)、减(-)、乘(*)、除(/)、乘方(^)、单目减(-)运算)\n“);
EvaluateExpression();
exit (0);
}
-语言程序设计

c语言课程设计报告


要求,程序中设一个密码,用户登陆时键入的密码正确进入程序。不正确从新键入,密码键入次数不能超过三次。
来了,给我分啊!!!!!!
#include 《stdio.h》
#include 《string.h》
#include 《stdlib.h》
int main()
{
char pw;
char * syspw=“abc“;
int i=0;
printf(“请输入密码:\n“);
while(i《3)
{
scanf(“%s“,pw);
if(strcmp(pw,syspw)!=0)
{
printf(“密码错误,请重新输入!\n“);
i++;
}
else
{
printf(“密码正确!\n“);
system(“pause“);
return 1;
}
}
printf(“连续3次输入错误,退出!\n“);
system(“pause“);
return 0;
}
----------------------------------------------------------------------------------------------------------------------
密码为:abc
-程序

求大学电子专业C语言程序设计课设实习报告模板


有一个表格去写,一些内容就是a)需求分析:在该部分中叙述每个模块的功能要求b)概要设计:在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构说明(如果指定存储结构请写出该存储结构的定义)c)详细设计:各个算法实现的源程序,对每个题目要有相应的源程序(可以是一组源程序,每个功能模块采用不同的函数实现)。源程序要按照写程序的规则来编写,要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。d)调试分析:测试数据,测试输出的结果,时间复杂度分析,和每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?),算法的改进设想。1、课设总结:(保存在word文档中)总结可以包括:课程设计过程的收获、遇到问题、遇到问题解决问题过程的思考、程序调试能力的思考、对C语言这门课程的思考、在课程设计过程中对《C语言》课程的认识等内容。
-语言程序设计

请问C语言课程设计报告摘要怎么写,是指什么啊,举个例子吧


  摘要:又称概要、内容提要。摘要是以提供文献内容梗概为目的,不加评论和补充解释,简明、确切地记述文献重要内容的短文。其基本要素包括研究目的、方法、结果和结论。具体地讲就是研究工作的主要对象和范围,采用的手段和方法,得出的结果和重要的结论,有时也包括具有情报价值的其它重要的信息。-程序

  C语言课程设计,应该主要根据你的设计内容,简要地提炼出设计的背景,功能,意义等。最后给出关键字。下面是正文。

  例如:

        摘要(标题居中)

  近年来随着计算机在社会领域的不断发展,程序设计 。。。。。C语言。。。。(这里讲你做的东西的背景。)

  本课程设计完成了什么。。。。(功能)

  其意义是。。。。(意义)

  关键词: C语言,其他

  参考资料:http://baike.baidu.com/view/123897.htm


求一份C语言课程设计报告要求包括:系统需求分析,总体设计,详细设计,程序调试分析


C语言课程设计任务书
一、题目: 学生成绩管理
二、目的与要求
1. 目的:
(1)基本掌握面向过程程序设计的基本思路和方法;
(2)达到熟练掌握C语言的基本知识和技能;
(3)能够利用所学的基本知识和技能,解决简单的程序设计问题
2. 要求
基本要求:
1. 要求利用C语言面向过程的编程思想来完成系统的设计;
2. 突出C语言的函数特征,以多个函数实现每一个子功能;
3. 画出功能模块图;
4. 进行简单界面设计,能够实现友好的交互;
5. 具有清晰的程序流程图和数据结构的详细定义;
6. 熟练掌握C语言对文件的各种操作。
创新要求:
在基本要求达到后,可进行创新设计,如系统用户功能控制,对管理员级和一般级别的用户系统功能操作不同
三、信息描述
输入一个班10个学生的学号和每个学生考试三门功课(数学、英语、计算机基础)的成绩。编程计算出每个学生的总分和平均分,并按学生成绩优劣排序,最后打印一张按高分到低分名次排序的成绩单。要求:
1)排序用一个函数实现。
2)打印的成绩单表项包括:序号,学号、数学、英语、计算机、总分、平均分。
3)按实验报告电子模板格式填写实验内容。
四、功能描述
1. 学生基本信息及成绩所选科目成绩的录入。
2. 基本信息的查询(分系、班级;分科目)与修改。
3. 对每系或每班各科成绩进行分析(即求单科平均成绩、及格率和优秀率);
4. 对所开课程的成绩分析(求其平均成绩,最高分和最低分);
5. 对学生考试成绩进行排名(单科按系别或班级进行排名,对每一个班级,同一学期学生总体成绩进行排名,并显示各科成绩信息)
五、解决方案
1. 分析程序的功能要求,划分程序功能模块。
2. 画出系统流程图。
3. 代码的编写。定义数据结构和各个功能子函数。
4. 程序的功能调试。
5. 完成系统总结报告以及使用说明书
六、进度安排
此次课程设计时间为两周,分四个阶段完成:
1. 分析设计阶段。指导教师应积极引导学生自主学习和钻研问题,明确设计要求,找出实现方法,按照需求分析、总体设计、详细设计这几个步骤进行。
2. 编码调试阶段:根据设计分析方案编写C代码,然后调试该代码,实现课题要求的功能。
3. 总结报告阶段:总结设计工作,写出课程设计说明书,要求学生写出需求分析、总体设计、详细设计、编码、测试的步骤和内容。
4. 考核阶段。
#include 《stdio.h》
#include 《stdlib.h》
#define STU_NUM 10 /*宏定义学生的数量*/
struct student /*定义一个结构体用来存放学生学号、三门课成绩、总分及平均成绩*/
{
char stu_id; /*学生学号;*/
float score; /*三门课成绩;*/
float total; /*总成绩;*/
float aver; /*平均成绩;*/
};
/*排序用一个函数来实现*/
void SortScore(student *stu,int n)
{
student stud;
for(int i = 0; i 《 n-1; i++)
for(int j = i+1 ; j 《 n; j++)
{
if(stu[i].total 《 stu[j].total)
{
stud = stu[i];
stu[i] = stu[j];
stu[j] = stud;
}
}
}
int main( )
{
student stu[STU_NUM]; /*创建结构体数组中有10个元素,分别用来保存这10个人的相关信息。*/
/*输入这十个学生的相关信息*/
for(int i = 0; i《STU_NUM; i++)
{
printf(“请输入第%d个学生的学号:“,i+1);
scanf(“%s“,&stu[i].stu_id);
printf(“输入第%d个学生的数学成绩:“,i+1);
scanf(“%f“,&stu[i].score);
printf(“输入第%d个学生的英语成绩:“,i+1);
scanf(“%f“,&stu[i].score);
printf(“输入第%d个学生的计算机成绩:“,i+1);
scanf(“%f“,&stu[i].score);
stu[i].total = stu[i].score+stu[i].score+stu[i].score;
stu[i].aver = stu[i].total/3;
}
printf(“\n“);
SortScore(stu,STU_NUM);/*调用排序函数*/
/*输出排序后的各学生的成绩*/
for(i = 0 ; i 《 STU_NUM; i++)
{
printf(“序号: %d\t“,i);
printf(“学号:%s\t“,stu[i].stu_id);
printf(“数学:%f\t“,stu[i].score);
printf(“英语:%f\t“,stu[i].score);
printf(“计算机:%f\t“,stu[i].score);
printf(“平均成绩:%f\t“,stu[i].aver);
printf(“总分:%f\t“,stu[i].total);
printf(“\n\n“);
}
return 0;
}
注:(源程序中主要标识符含义说明)
#define STU_NUM 10 /*宏定义学生的数量*/
struct student /*定义一个结构体用来存放学生学号、三门课成绩、总分及平均成绩*/
{
char stu_id; /*学生学号;*/
float score; /*三门课成绩;*/
float total; /*总成绩;*/
float aver; /*平均成绩;*/
}
实验结果:
输入 :(只输入后面的数字,前面的文字是自己产生的)。
请输入第1个学生的学号:001
输入第1个学生的数学成绩:1
输入第1个学生的英语成绩:1
输入第1个学生的计算机成绩:1
请输入第2个学生的学号:002
输入第2个学生的数学成绩:2
输入第2个学生的英语成绩:2
输入第2个学生的计算机成绩:2
请输入第3个学生的学号:003
输入第3个学生的数学成绩:3
输入第3个学生的英语成绩:3
输入第3个学生的计算机成绩:3
请输入第4个学生的学号:004
输入第4个学生的数学成绩:4
输入第4个学生的英语成绩:4
输入第4个学生的计算机成绩:4
请输入第5个学生的学号:005
输入第5个学生的数学成绩:5
输入第5个学生的英语成绩:5
输入第5个学生的计算机成绩:5
请输入第6个学生的学号:006
输入第6个学生的数学成绩:6
输入第6个学生的英语成绩:6
输入第6个学生的计算机成绩:6
请输入第7个学生的学号:007
输入第7个学生的数学成绩:7
输入第7个学生的英语成绩:7
输入第7个学生的计算机成绩:7
请输入第8个学生的学号:008
输入第8个学生的数学成绩:8
输入第8个学生的英语成绩:8
输入第8个学生的计算机成绩:8
请输入第9个学生的学号:009
输入第9个学生的数学成绩:9
输入第9个学生的英语成绩:9
输入第9个学生的计算机成绩:9
请输入第10个学生的学号:010
输入第10个学生的数学成绩:10
输入第10个学生的英语成绩:10
输入第10个学生的计算机成绩:10
输出:
序号: 0 学号:010 数学:10.000000 英语:10.000000 计算机:10.000000
平均成绩:10.000000 总分:30.000000
序号: 1 学号:009 数学:9.000000 英语:9.000000 计算机:9.000000
平均成绩:9.000000 总分:27.000000
序号: 2 学号:008 数学:8.000000 英语:8.000000 计算机:8.000000
平均成绩:8.000000 总分:24.000000
序号: 3 学号:007 数学:7.000000 英语:7.000000 计算机:7.000000
平均成绩:7.000000 总分:21.000000
序号: 4 学号:006 数学:6.000000 英语:6.000000 计算机:6.000000
平均成绩:6.000000 总分:18.000000
序号: 5 学号:005 数学:5.000000 英语:5.000000 计算机:5.000000
平均成绩:5.000000 总分:15.000000
序号: 6 学号:004 数学:4.000000 英语:4.000000 计算机:4.000000
平均成绩:4.000000 总分:12.000000
序号: 7 学号:003 数学:3.000000 英语:3.000000 计算机:3.000000
平均成绩:3.000000 总分:9.000000
序号: 8 学号:002 数学:2.000000 英语:2.000000 计算机:2.000000
平均成绩:2.000000 总分:6.000000
序号: 9 学号:001 数学:1.000000 英语:1.000000 计算机:1.000000
平均成绩:1.000000 总分:3.000000
七、撰写课程设计报告或课程设计总结
课程设计报告要求:
总结报告包括需求分析、总体设计、详细设计、编码(详细写出编程步骤)、测试的步骤和内容、课程设计总结、参考资料等,不符合以上要求者,则本次设计以不及格记。
C语言常见错误
书写标识符时,忽略了大小写字母的区别
main()
{
int a=5;
printf(“%d“,A);
}
编译程序把a和A认为是两个不同的变量名,而显示出错信息。C认为大写字母和小写字母是两个不同的字符。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。
2.忽略了变量的类型,进行了不合法的运算。
main()
{
float a,b;
printf(“%d“,a%b);
}
%是求余运算,得到a/b的整余数。整型变量a和b可以进行求余运算,而实型变量则不允许进行“求余”运算。
3.将字符常量与字符串常量混淆。
char c;
c=“a“;
在这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。C规定以“\”作字符串结束标志,它是由系统自动加上的,所以字符串“a”实际上包含两个字符:‘a’和‘\’,而把它赋给一个字符变量是不行的。
4.忽略了“=”与“==”的区别。
在许多高级语言中,用“=”符号作为关系运算符“等于”。如在BASIC程序中可以写
if (a=3) then …
但C语言中,“=”是赋值运算符,“==”是关系运算符。如:
if (a==3) a=b;
前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。由于习惯问题,初学者往往会犯这样的错误。
5.忘记加分号。
分号是C语句中不可缺少的一部分,语句末尾必须有分号。
a=1
b=2
编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句的一部分,这就会出现语法错误。改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。
{ z=x+y;
t=z/100;
printf(“%f“,t);
}
对于复合语句来说,最后一个语句中最后的分号不能忽略不写(这是和PASCAL不同的)。
6.多加分号。
对于一个复合语句,如:
{ z=x+y;
t=z/100;
printf(“%f“,t);
};
复合语句的花括号后不应再加分号,否则将会画蛇添足。
又如:
if (a%3==0);
I++;
本是如果3整除a,则I加1。但由于if (a%3==0)后多加了分号,则if语句到此结束,程序将执行I++语句,不论3是否整除a,I都将自动加1。
再如:
for (I=0;I《5;I++);
{scanf(“%d“,&x);
printf(“%d“,x);}
本意是先后输入5个数,每输入一个数后再将它输出。由于for()后多加了一个分号,使循环体变为空语句,此时只能输入一个数并输出它。
7.输入变量时忘记加地址运算符“&”。
int a,b;
scanf(“%d%d“,a,b);
这是不合法的。Scanf函数的作用是:按照a、b在内存的地址将a、b的值存进去。“&a”指a在内存中的地址。
8.输入数据的方式与要求不符。①scanf(“%d%d“,&a,&b);
输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法:
3,4
输入数据时,在两个数据之间以一个或多个空格间隔,也可用回车键,跳格键tab。
②scanf(“%d,%d“,&a,&b);
C规定:如果在“格式控制”字符串中除了格式说明以外还有其它字符,则在输入数据时应输入与这些字符相同的字符。下面输入是合法的:
3,4
此时不用逗号而用空格或其它字符是不对的。
3 4 3:4
又如:
scanf(“a=%d,b=%d“,&a,&b);
输入应如以下形式:
a=3,b=4
9.输入字符的格式与要求不一致。
在用“%c”格式输入字符时,“空格字符”和“转义字符”都作为有效字符输入。
scanf(“%c%c%c“,&c1,&c2,&c3);
如输入a b c
字符“a”送给c1,字符“ ”送给c2,字符“b”送给c3,因为%c只要求读入一个字符,后面不需要用空格作为两个字符的间隔。
10.输入输出的数据类型与所用格式说明符不一致。
例如,a已定义为整型,b定义为实型
a=3;b=4.5;
printf(“%f%d\n“,a,b);
编译时不给出出错信息,但运行结果将与原意不符。这种错误尤其需要注意。
11.输入数据时,企图规定精度。
scanf(“%7.2f“,&a);
这样做是不合法的,输入数据时不能规定精度。
12.switch语句中漏写break语句。
例如:根据考试成绩的等级打印出百分制数段。
switch(grade)
{ case ’A’:printf(“85~100\n“);
case ’B’:printf(“70~84\n“);
case ’C’:printf(“60~69\n“);
case ’D’:printf(“《60\n“);
default:printf(“error\n“);
由于漏写了break语句,case只起标号的作用,而不起判断作用。因此,当grade值为A时,printf函数在执行完第一个语句后接着执行第二、三、四、五个printf函数语句。正确写法应在每个分支后再加上“break;”。例如
case ’A’:printf(“85~100\n“);break;
13.忽视了while和do-while语句在细节上的区别。
(1)main()
{int a=0,I;
scanf(“%d“,&I);
while(I《=10)
{a=a+I;
I++;
}
printf(“%d“,a);
}
(2)main()
{int a=0,I;
scanf(“%d“,&I);
do
{a=a+I;
I++;
}while(I《=10);
printf(“%d“,a);
}
可以看到,当输入I的值小于或等于10时,二者得到的结果相同。而当I》10时,二者结果就不同了。因为while循环是先判断后执行,而do-while循环是先执行后判断。对于大于10的数while循环一次也不执行循环体,而do-while语句则要执行一次循环体。
14.定义数组时误用变量。
int n;
scanf(“%d“,&n);
int a[n];
数组名后用方括号括起来的是常量表达式,可以包括常量和符号常量。即C不允许对数组的大小作动态定义。
15.在定义数组时,将定义的“元素个数”误认为是可使的最大下标值。
main()
;
printf(“%d“,a);
}
C语言规定:定义时用a,表示a数组有10个元素。其下标值由0开始,所以数组元素a是不存在的。
16.初始化数组时,未使用静态存储。
int a=;
这样初始化数组是不对的。C语言规定只有静态存储(static)数组和外部存储(exterm)数组才能初始化。应改为:
static int a=;
17.在不应加地址运算符&的位置加了地址运算符。
scanf(“%s“,&str);
C语言编译系统对数组名的处理是:数组名代表该数组的起始地址,且scanf函数中的输入项是字符数组名,不必要再加地址符&。应改为:
scanf(“%s“,str);
18.同时定义了形参和函数中的局部变量。
int max(x,y)
int x,y,z;
{z=x》y?x:y;
return(z);
}
形参应该在函数体外定义,而局部变量应该在函数体内定义。应改为:
int max(x,y)
int x,y;
{int z;
z=x》y?x:y;
return(z);
}
C语言心得体会
通过这次实训,增加了我学习软件技术的兴趣,虽然还不明确软件技术包含的具体内容,但从C语言这门课程开始,已发现程序设计的乐趣,在学习C语言的过程中也学到了许多计算机应用基础知识,对计算机的机体也有了一个大体的了解。
这次实训是老师给了范例程序,经过自己的改写,实现要求。先做简单的输出,一步步的再做其它图案,在实际操作过程中犯的一些错误还会有意外的收获,感觉实训很有意思。在具体操作中对这学期所学的C语言的理论知识得到巩固,达到实训的基本目的,也发现自己的不足之出,在以后的上机中应更加注意,同时体会到C语言具有的语句简洁,使用灵活,执行效率高等特点。发现上机实训的重要作用,特别是对数组和循环有了深刻的理解。
通过实际操作,学会 C语言程序编程的基本步骤、基本方法,开发了自己的逻辑思维能力,培养了分析问题、解决问题的能力。深刻体会到“没有做不到的,只有想不到的”,“团结就是力量”,“实践是检验真理的标准”,“不耻下问”……的寓意。
计时在此希望以后应多进行这样的实训,加长设间,培养学生独立思考问题的能力,提高实际操作水平。
八、参考资料 :《C语言程序设计教程》

-语言程序设计