当前位置:首页 » 课程大全 » c语言课程设计格式

c语言课程设计格式

发布时间: 2021-03-02 20:58:05

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

课程设计报告内容
报告应包括以下内容:
摘要(300~400字)
目录
1. 概述
2. 课程设计任务及要求
2.1 设计任务
2.2 设计要求
3. 理论设计
3.1方案论证
3.2 系统设计
3.2.1 结构框图及说明
3.2.2 系统原理图及工作原理
3.3 单元电路设计
3.3.1单元电路工作原理
3.3.2元件参数选择
4. 系统设计
4.1 软件设计
4.2 编程过程
4.2 编程结果
5. 安装调试
5.2 安装调试过程
5.3 故障分析
6. 结论
7. 使用仪器设备清单
8. 收获、体会和建议
9. 参考文献

Ⅱ 跪求C语言课程设计!

我做的是学员成绩管理系统
#include <conio.h>
#include<string.h>
#include<stdio.h>
char b , a[6] , c[6] , d , e[20] , ans , ans1 , ans2 , ans3 , ans4 , xiugai[20] ;
int i , j=0 , k , z=0 , m , n , o , p , q , s=0 , paixu ,x,y ;

struct xingxi
{
char mingzi[20];
float chengji1;
float chengji2;
float chengji3;
float chengji4;
}xx[50];

void main()
{
static struct xingxi xu;
do
{
printf("请输入用户名:\n");
fflush(stdin);
gets(c);
printf("请输入密码:\n");
i=0;
while ((b=getch())!=13)
{
fflush(stdin);
printf("*");
a[i]=b ;
fflush(stdin);
i++;
}
printf("\n");
if((strcmp(c,"admin")==0)&&(strcmp(a,"admin")==0))
{

printf(" 登陆成功!\n");

do
{
printf(" -----------------------------------\n");
printf(" | 1.添加学员信息 |\n");
printf(" | 2.删除学员信息 |\n");
printf(" | 3.修改学员信息 |\n");
printf(" | 4.学员成绩排序 |\n");
printf(" | 5.退出管理系统 |\n");
printf(" -----------------------------------\n");
printf("请选择功能:");
scanf("%d",&k);
switch(k)
{
case 1:
do
{
printf("\n 输入学员信息\n");
printf("\n输入学员姓名:");
fflush(stdin);
gets(xx[z].mingzi);
fflush(stdin);
printf("\n输入语文成绩:");
fflush(stdin);
scanf("%f",&xx[z].chengji1);
printf("\n输入数学成绩:");
fflush(stdin);
scanf("%f",&xx[z].chengji2);
printf("\n输入英语成绩:");
fflush(stdin);
scanf("%f",&xx[z].chengji3);
xx[z].chengji4 = (xx[z].chengji1+xx[z].chengji2+xx[z].chengji3)/3 ;
z++;
printf("\n是否继续输入(y/n):");
fflush(stdin);
scanf("%c",&ans1);
}while (ans1=='y'||ans1=='Y');
printf("\n返回上级菜单(y/n)?:");
fflush(stdin);
scanf("%c",&ans);
if (ans=='n'||ans=='N')
{
exit(1);
}
break;
case 2:
do
{
p=0 ;

printf("\n输入要删除的学员姓名:");
fflush(stdin);
gets(e);
for(m=0 ; m<z ; m++)
{
if ((strcmp(xx[m].mingzi,e)==0))
{
for(n=m ; n<z ; n++)
{
xx[n].chengji1 = xx[n+1].chengji1 ;
xx[n].chengji2 = xx[n+1].chengji2 ;
xx[n].chengji3 = xx[n+1].chengji3 ;
xx[n].chengji4 = xx[n+1].chengji4 ;
for(o=0 ; o<20 ; o++)
{
xx[n].mingzi[o] = xx[n+1].mingzi[o];
}
}
printf("\n已删除\n");
s++ ;
}
else
{
p++;
}
}
if (p==z)
{
printf("\n无此学员信息!\n");
}
printf("\n是否继续删除(y/n):");
fflush(stdin);
scanf("%c",&ans2);
}while (ans2=='y'||ans2=='Y');
printf("\n返回上级菜单(y/n)?:");
fflush(stdin);
scanf("%c",&ans);
if (ans=='n'||ans=='N')
{
exit(1);
}
break;
case 3:
do
{
p=0 ;
printf("\n输入要修改学员的名字:");
fflush(stdin);
gets(xiugai);
for (m=0 ; m<z ; m++)
{
if ((strcmp(xx[m].mingzi,xiugai)==0))
{
for (n=0 ; n<20 ; n++)
{
xx[m].mingzi[n]=xiugai[n];
}
printf("\n请输入要修改学员的新语文成绩:");
scanf("%f",&xx[m].chengji1);
printf("\n请输入要修改学员的新数学成绩:");
scanf("%f",&xx[m].chengji2);
printf("\n请输入要修改学员的新英语成绩:");
scanf("%f",&xx[m].chengji3);
xx[m].chengji4 = (xx[m].chengji1+xx[m].chengji2+xx[m].chengji3)/3 ;
printf("\n修改成功!\n");
}
else
{
p++ ;
}
}

if (p==z)
{
printf("\n无此学员信息!\n");
}

printf("\n是否继续修改(y/n):");
fflush(stdin);
scanf("%c",&ans3);
}while (ans3=='y'||ans3=='Y');
printf("\n返回上级菜单(y/n)?:");
fflush(stdin);
scanf("%c",&ans);
if (ans=='n'||ans=='N')
{
exit(1);
}
break;
case 4:
do
{
printf(" 排序方式\n");
printf(" 1.按语文成绩排序\n");
printf(" 2.按数学成绩排序\n");
printf(" 3.按英语成绩排序\n");
printf(" 4.按平均成绩排序\n");
printf("\n请选择排序方式:");
scanf("%d",&paixu);
printf("\n");
switch (paixu)
{
case 1 :
for(m=0 ; m<=z-s ; m++)
{
for(n=0 ; n<=z-s-m-1 ; n++)
{
if (xx[n].chengji1<xx[n+1].chengji1)
{
xu = xx[n+1] ;
xx[n+1] = xx[n];
xx[n]= xu ;
}
}
}
printf("\n按语文成绩排序为:\n");
printf("\n姓名 \t\t 语文 \t 数学 \t 英语 \t 平均 \t\n");
for (m=0 ; m<z-s; m++)
{
q=0 ;
for(n=0 ; xx[m].mingzi[n]!='\0' ; n++)
{
q++ ;
}
if(q>6)
{
printf("%s\t %5.2f\t %5.2f\t %5.2f\t %5.2f\t\n",xx[m].mingzi,xx[m].chengji1,xx[m].chengji2,xx[m].chengji3,xx[m].chengji4);
}
else
{
printf("%s\t\t %5.2f\t %5.2f\t %5.2f\t %5.2f\t\n",xx[m].mingzi,xx[m].chengji1,xx[m].chengji2,xx[m].chengji3,xx[m].chengji4);
}

}
break;
case 2 :
for(m=0 ; m<=z-s ; m++)
{
for(n=0 ; n<=z-s-m-1 ; n++)
{
if (xx[n].chengji2<xx[n+1].chengji2)
{
xu = xx[n+1] ;
xx[n+1] = xx[n];
xx[n]= xu ;
}
}
}
printf("\n按数学成绩排序为:\n");
printf("\n姓名 \t\t 语文 \t 数学 \t 英语 \t 平均 \t\n");
for (m=0 ; m<z-s; m++)
{
q=0 ;
for(n=0 ; xx[m].mingzi[n]!='\0' ; n++)
{
q++ ;
}
if(q>6)
{
printf("%s\t %5.2f\t %5.2f\t %5.2f\t %5.2f\t\n",xx[m].mingzi,xx[m].chengji1,xx[m].chengji2,xx[m].chengji3,xx[m].chengji4);
}
else
{
printf("%s\t\t %5.2f\t %5.2f\t %5.2f\t %5.2f\t\n",xx[m].mingzi,xx[m].chengji1,xx[m].chengji2,xx[m].chengji3,xx[m].chengji4);
}

}
break;
case 3 :
for(m=0 ; m<=z-s ; m++)
{
for(n=0 ; n<=z-s-m-1 ; n++)
{
if (xx[n].chengji3<xx[n+1].chengji3)
{
xu = xx[n+1] ;
xx[n+1] = xx[n];
xx[n]= xu ;
}
}
}
printf("\n按英语成绩排序为:\n");
printf("\n姓名 \t\t 语文 \t 数学 \t 英语 \t 平均 \t\n");
for (m=0 ; m<z-s; m++)
{
q=0 ;
for(n=0 ; xx[m].mingzi[n]!='\0' ; n++)
{
q++ ;
}
if(q>6)
{
printf("%s\t %5.2f\t %5.2f\t %5.2f\t %5.2f\t\n",xx[m].mingzi,xx[m].chengji1,xx[m].chengji2,xx[m].chengji3,xx[m].chengji4);
}
else
{
printf("%s\t\t %5.2f\t %5.2f\t %5.2f\t %5.2f\t\n",xx[m].mingzi,xx[m].chengji1,xx[m].chengji2,xx[m].chengji3,xx[m].chengji4);
}

}
break;
case 4 :
for(m=0 ; m<=z-s ; m++)
{
for(n=0 ; n<=z-s-m-1 ; n++)
{
if (xx[n].chengji4<xx[n+1].chengji4)
{
xu = xx[n+1] ;
xx[n+1] = xx[n];
xx[n]= xu ;
}
}
}
printf("\n按平均成绩排序为:\n");
printf("\n姓名 \t\t 语文 \t 数学 \t 英语 \t 平均 \t\n");
for (m=0 ; m<z-s; m++)
{
q=0 ;
for(n=0 ; xx[m].mingzi[n]!='\0' ; n++)
{
q++ ;
}
if(q>6)
{
printf("%s\t %5.2f\t %5.2f\t %5.2f\t %5.2f\t\n",xx[m].mingzi,xx[m].chengji1,xx[m].chengji2,xx[m].chengji3,xx[m].chengji4);
}
else
{
printf("%s\t\t %5.2f\t %5.2f\t %5.2f\t %5.2f\t\n",xx[m].mingzi,xx[m].chengji1,xx[m].chengji2,xx[m].chengji3,xx[m].chengji4);
}

}
break;
}
printf("\n是否继续排序(y/n):");
fflush(stdin);
scanf("%c",&ans4);
}while (ans4=='y'||ans4=='Y');
printf("\n返回上级菜单(y/n)?:");
fflush(stdin);
scanf("%c",&ans);
if (ans=='n'||ans=='N')
{
exit(1);
}
break;
default :
exit(1);
}
}while(ans=='y'||ans=='Y');

}
else
{
j++;
printf("\n用户名(和/或)密码错误,您还有%d次机会尝试!\n",(3-j));
}
} while(j<3);
}

Ⅲ C语言课程设计的标准格式

哦。

Ⅳ 求C语言课程设计报告 程序已经写好了 就是报告不知道怎么写 T-T

课程设计说明书规范要求
说明书是体现和总结课程设计成果的载体,一般不应少于3000字。
1、说明书基本格式
说明书手写或打印均可。手写要用统一的课程设计用纸,用黑或蓝黑墨水书写工整;打印时统一使用word文档,正文采用小4号宋体,A4开纸,页边距均为20mm,行间距采用18磅,装订线留5mm。
正文各级标题编号的示例如下图所示。

一级标题:小三号,宋体加粗,居左,18磅行距,段后0.5行,段前为0。
二级标题:四号,黑体,居左,18磅行距,段后为0.5,段前0行。
三级标题:小四号,黑体,居左,18磅行距,段后为0.5,段前0行。
正文内容起首空两格。
2、说明书结构及要求
(1)封面,包括题目、系(部)、班级、学生姓名、学号、指导教师及时间(年、月、日)等项。
(2)摘要(仅对论文),摘要是论文内容的简短陈述。关键词应为反映论文主题内内容的通用技术词汇,一般为3--4个左右,一定要在摘要中出现。
(3)目录,要求层次清晰,给出标题及页次。其最后一项是无序号的“参考文献”。
(4)正文,正文应按照目录所定的顺序依次撰写,要求计算准确,论述清楚、简练、通顺,插图清晰,书写整洁。文中图、表及公式应规范地绘制和书写。
(5)参考文献,参考文献必须是学生在课程设计中真正阅读过和运用过的,文献按照在正文中的出现顺序排列。要求参考《毕业设计工作规程》。
(6)课程设计资料的装订,课程设计按以下顺序装订成册:封面、课程设计任务书、成绩评定表、目录、摘要、正文、设计体会及今后的改进意见、参考文献、图纸。

Ⅳ C语言课程设计报告要求

一 、 设计题目

万年历的设计

二 、设计要求

1、能够显示星期;

2、能够显示年月日;

3、能够修改;

4、当系统时间变动时,能自动跳到相应的时间。

三 、 设计目的

1. 通过本项课程设计,可以培养独立思考、 综合运用所学有关相应知识的能力,能更好的巩固《C语言程序设计》课程学习的内容,掌握 工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!更加了解了c语言的好处和其可用性!同时增加了同学之间的团队合作精神!更加也体会到以后在工作中团队合作的重要性和必要性!

2. 通过C语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。为后续各门计算机课程的学习和毕业设计打下坚实基础。

四 、设计思想及过程

【一】由于万年历具有以下特点:

1。平年365天(52周+1天),闰年366天(52周+2天)。平年2月28天,闰年2月29天。

由于公元1月1日设为星期六,故3月1日为星期三。 ——注意这个“三”

为使算法达到最简,故本算法以“星期”为计算单位。且选3月1日为基月。

2。每400年整一闰,或每4年且不为百年的一闰。(原因:地球绕太阳一周的时间是365天5小时46秒,为了使一年的天数为整数,将一年的天数定为365天,余下的时间积累起来,四年就是23小时15分4秒,将近一天,把这一天加在某年的二月而成29天,该年称为闰年,其它年称为平年。但四年加一天又多用了44分56秒,这个数积满400年为三天。因此400年中只能有97个闰年,所以凡能被400整除,或不能被100整除但能被4整除的年份为闰年。)

所以百年%4=0闰或(年%4=0并且年<>0)闰。

3。每 4年(3个平年+1个闰年)共208周+5天 ——注意这个“5天”

每百年共100*(208周+5天)-1天=5217周+5天 ——注意这个“5天”(整百年暂设为平年)

每400年共4*(5217周+5天)+1天(整400年闰)=20871周+0天——注意这个“0天”和

“1天”(4个整百年只有一个闰年)

即400年一轮回!(原来万年历400年前是一家)

【二】根据万年历以上特点进行编写:

首先对万年历年、月、日进行编写,编写程序先定义每月的天数为28天,如月份为1、3、5、7、8、10、12就定义天数为31天反之如果月份为4、6、9、11就输出天数为30天,由上可见2月份为28天但是如果为闰年就有29天就要定义另一个函数#define Year(x) (x%4==0&&x%100!=0||x%400==0) ? 1:0当为闰年时可得1加上该程序便可得到每月的天数。 具体程序见(五、万年历程序)

再对其中的星期进行编写:由于公元1月1日设为星期六,故3月1日为星期三,可以用万年3月1日星期算法(特别是那个三)

由于其公式为:

某年3月1日星期几=(3天+百年%4*5天+年/4*5天+年%4+月星期表+日-1天)%7

某年3月1日星期几=(百年%4*5天+年/4*5天+年%4+月星期表+日+2天)%7

或 某年3月1日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7

闰4百年3月1日星期算法(百年%4=0)

其公式为:

某年3月1日星期几=(年+年/4+月星期表+日+2天)%7

例:0000年3月1日星期几=(0+0/4+0+1+2)%7=3%7=星期三

1600年3月1日星期几=(0+0/4+0+1+2)%7=3%7=星期三

2000年3月1日星期几=(0+0/4+0+1+2)%7=3%7=星期三

2001年3月1日星期几=(1+1/4+0+1+2)%7=4%7=星期四

2004年3月1日星期几=(4+4/4+0+1+2)%7=8%7=星期一

2008年3月1日星期几=(8+8/4+0+1+2)%7=13%7=星期六

2042年3月1日星期几=(42+42/4+0+1+2)%7=55%7=星期六

平4百年3月1日星期算法(百年%4<>0)

其公式为:

某年3月1日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7

例:1700年3月1日星期几=(17%4*5+0+0/4+0+1+2)%7=8%7=星期一(注意:1700年是平年)

1800年3月1日星期几=(18%4*5+0+0/4+0+1+2)%7=13%7=星期六(注意:1800年是平年)

1900年3月1日星期几=(19%4*5+0+0/4+0+1+2)%7=18%7=星期四(注意:1900年是平年)

1901年3月1日星期几=(19%4*5+1+1/3+0+1+2)%7=19%7=星期五

1918年3月1日星期几=(19%4*5+18+18/4+0+1+2)%7=(15+22+3)%7=40%7=星期五

1958年3月1日星期几=(19%4*5+58/4*5+58%4+3)%7=(15+70+2+3)%7=90%7=星期六

1988年3月1日星期几=(19%4*5+88/4*5+88%4+3)%7=(15+110+0+3)%7=128%7=星期二

1999年3月1日星期几=(19%4*5+99/4*5+99%4+3)%7=(15+120+3+3)%7=141%7=星期一

2100年3月1日星期几=(21%4*5+0/4*5+0%4+3)%7=(5+0+0+3)%7=8%7=星期一(注意:2100年是平年)

2101年3月1日星期几=(21%4*5+1/4*5+1%4+3)%7=(5+0+1+3)%7=9%7=星期二

2102年3月1日星期几=(21%4*5+2/4*5+2%4+3)%7=(5+0+2+3)%7=10%7=星期三

2103年3月1日星期几=(21%4*5+3/4*5+3%4+3)%7=(5+0+3+3)%7=11%7=星期四

2104年3月1日星期几=(21%4*5+4/4*5+4%4+3)%7=(5+1+0+3)%7=9%7=星期二(注意:2104年是闰年)

9999年3月1日星期几=(99%4*5+99/4*5+99%4+3)%7=(120+15+3+3)%7=141%7=星期一

注:按400年一轮回!(400年前是一家)的说法

1600年,2000年是一样的;

1700年,2100年是一样的;

1800年,2200年是一样的;

1900年,2300年是一样的。

其中万年某日星期算法

其公式为:

某日星期几=(百年%4*5天+年+年/4+月星期表+日+2天)%7

通同星期偏差表

闰年 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月

天数 31 29 31 30 31 30 31 31 30 31 30 31

星期 3 6 0 3 5 1 3 6 2 4 0 2

平年 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月

天数 31 28 31 30 31 30 31 31 30 31 30 31

星期 4 0 0 3 5 1 3 6 2 4 0 2

为对以上的万年历星期的算法是正确的对其进行了以下的计算:

⒈对于二十世纪任意日期可以用公式某日星期几=(百年%4*5天+年+年/4+平年月星期表+日+2天)%7=(19%4*5天+年+年/4+平年月星期表+日+2天)%7=(15天+年+年/4+平年月星期表+日+2天)%7以下就是根据上面对其进行的计算:

1900年元旦 1日=(0/4*5+0%4+1+3)%7=(0+0+4)%7=4

1月表=4(平年) 故 4+4=1 即1900年元旦是星期一

1949年国庆 1日=(49/4*5+49%4+1+3)%7=(60+1+4)%7=2

10月表=4(平年) 故 4+2=6 即1949年国庆是星期六

1999年12月31日 31日=(99/4*5+99%4+31+3)%7=(120+3+34)%7=3

12月表=2(平年) 故 2+3=5 即1999年12月31日是星期五

⒉对于二十一世纪新前年虫算法(20%4*5=0)可以用公式:某日星期几=(百年%4*5天+年+年/4+闰年月星期表+日+2天)%7 =(20%4*5天+年+年/4+闰年月星期表+日+2天)%7以下就是根据上面对其进行的计算:

2000年元旦 1日=(0+0/4+1+2)%7=(0+0+1+2)%7=3

1月表=3(闰年) 故 3+3->6 即2027年元旦是星期六

2018年春节 16日=(18+18/4+16+2)%7=(18+4+16+2)%7=5

2月表=0(平年) 故 0+5=5 即2018年春节是星期五

2099年12月31日 31日=(99/4*5+99%4+31+2)%7=(120+3+33)%7=2

12月表=2(平年) 故 2+2=4 即2099年12月31日是星期四

对于上面的分析以及公式的推论和计算证明可以对万年历中的星期进行了编写具体编写程序见(五 、万年历程序)中。

五 、万年历源程序

#include"stdio.h"

#include"dos.h"

#include"conio.h"

#include"stdlib.h"

#define Year(x) (x%4==0&&x%100!=0||x%400==0) ? 1:0 /*判断闰年*/

int numofMonth(int y,int m){

int day,t=28;

if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)

day=31; /*定义以上月份为31天*/

else if(m==4||m==6||m==9||m==11)

day=30; /*定义以上月份为30天*/

else{t+=Year(y);

day=t;} /*闰年二月29天,平年28天*/

return day;}

int numofYear(int y){

int t=365; /*平年365天*/

t+=Year(y);/*闰年366天*/

return t;}

int numofbeforeDays(int y,int m,int d){

int sum=d,i;

for(i=1;i<m;i++)

sum+=numofMonth(y,i);

return sum;}

int numofafterDays(int y,int m,int d){

int sum=0,i;

for(i=m;i<=12;i++)

sum+=numofMonth(y,i);

sum-=d;

return sum;}

int isDay(int y,int m,int d){

int year=1900,month=1,week=1,i; /*定义万年历是从1900年开始*/

long sum=0;

for(i=year;i<y;i++)

sum+=numofYear(i);

for(i=1;i<m;i++)

sum+=numofMonth(y,i);

/* ++sum;*/

i=sum%7;

week=(week+i)%7;

return week;}

void empty(int n){

int i;

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

printf("%*c",6,' ');}

void OutPutCalender(int y,int m,int d)/*计算x年x月x是星期几*/{

int week,i,num,t;

week=isDay(y,m,1);

printf("%6d/%02d/%02d\n",y,m,d);

printf("%6s%6s%6s%6s%6s%6s%6s\n","Sun","Mon","Tue","Wed","Thu","Fri","Sat");

empty(week);

num=numofMonth(y,m);

for(i=1;i<=num;i++){

printf("%6d",i);

t=(week+i)%7;

if(t==0)

printf("\n");} /*光标移到下一行*/

printf("\n");}

long numBTDays(int y1,int m1,int d1,int y2,int m2,int d2)/*定义两个不同日期*/{

int i;

long sum=0;

for(i=y1+1;i<y2;i++)

sum+=numofYear(i);

if(y1==y2){ sum-=d1;

for(i=m1;i<m2;i++)

sum+=numofMonth(y1,i);

sum+=d2;}

else{sum+=numofafterDays(y1,m1,d1);

sum+=numofbeforeDays(y2,m2,d2);}

return sum;}

int Select_mean(){

int sm;

printf("1. OutPut Calender\n"); /*输出当前月份的日历*/

printf("2. Help\n"); /*帮助*/

printf("0. Quit\n"); /*退出*/

printf("Please enter choose(0--2):"); /*从0-2中选择*/

do

scanf("%d",&sm); /*输入sm*/

while(sm<0||sm>3);

return sm;}

void Help()/*输出帮助栏的内容*/{

printf(" 1. OutPut Calender\n");

printf(" 2. System Help\n");

printf(" 0. Quit\n");

printf("Page Up: Up year\n"); /*上一年*/

printf("Page Down: next year\n"); /*下一年*/

printf(" --> : next month\n"); /*上一月*/

printf(" <-- : Up month\n");/*下一月*/}

main(){

int year=2006,year1=2006,month,day,y1,m1,d1,y2,m2,d2,c,t; /*定义运行后的日期是2006年*/

int inkeySCAN,inkey; /*输入键盘操作信息*/

union REGS inregs,outregs;

inregs.h.ah=0x2a;

intdos(&inregs,&outregs);

/* year=outregs.xcx; */

month=outregs.h.dh;

day=outregs.h.dl;

year1=year;

printf("%d/%02d/%02d\n",year,month,day);

while(1)/*当选择为1时,执行以下语句*/{

switch(Select_mean()){

case 1:

OutPutCalender(year,month,day);

while(1){

inkey=bioskey(0);

inkeySCAN=(inkey&0xFF00)>>8;

if(inkeySCAN==77){

if(month==12){month=1;year1++;

OutPutCalender(year1,month,day);/*输出日历*/}

else{month++;

OutPutCalender(year1,month,day);

}}

if(inkeySCAN==75){

if(month==1){month=12;year1--;

OutPutCalender(year1,month,day);}

else{month--;OutPutCalender(year1,month,day);}}

if(inkeySCAN==73){

if(year1==1900) year1=year;

else{year1--;OutPutCalender(year1,month,day);}}

if(inkeySCAN==81){

year1++;OutPutCalender(year1,month,day);}

if(inkeySCAN==28)break;}

break; /*终止循环*/

case 2:

Help();

break;

case 0:

exit(0);

default:

printf("Enter ERROR!\n");

break;} }

}

六 运行过程

1.双击TC

1. 当对上面的程序进行了调试后运行会出现下面所示:

第一行所显示的就是系统时间!满足了第一条要求“显示年、月、日”。

而当改变系统时间后!再运行该程序上面的日期也随系统时间改变,所以满足第四条“当系统时间变动时,能自动跳到相应的时间。”

2. 在光标处按下“1”后回车,将会显示:

以上的显示也证明了条件的第2条可以“显示星期!”

3. 在光标处按下“2”后回车,将会显示:

按着帮助所讲进行了运行可知:按“ Page Up ”键其下面接着会显示上一年该月的万年历,按“ Page Down ”键其下面会接着显示下一年该月的万年历;按“ ← ”键下面将会接着显示当年上一个月的万年历,按“ → ”键将会接着在下面显示去下一个月的万年历。

4.

由上所显示键入“0”后将会退去该程序。

由以上运行的结果可知该c语言所设计的万年历满足设计要求!

七、在C语言编程中常见错误

C语言的最大特点是:功能强、使用方便灵活。C编译的程序对语法检查并不象其它高级语言那么严格,这就给我们留下“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对我们这些初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误。看着有错的程序,不知该如何改起,我通过这次编程,也积累了一些C编程时常犯的错误:

1. 书写标识符时,忽略了大小写字母的区别。
编译程序把a和A认为是两个不同的变量名,而显示出错信息。C语言认为大写字母和小写字母是两个不同的字符。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。

2.忽略了变量的类型,进行了不合法的运算。
%是求余运算,得到a/b的整余数。整型变量a和b可以进行求余运算,而实型变量则不允许进行“求余”运算。

3.将字符常量与字符串常量混淆。
混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。C规定以“\”作字符串结束标志,它是由系统自动加上的,所以字符串“a”实际上包含两个字符:‘a'和‘\',而把它赋给一个字符变量是不行的。

4.忽略了“=”与“==”的区别。
在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);

语法错
逻辑错 运行错
0.忘记定义变量:
main()
{x=3;y=6;
printf(“%d\n”,x+y);

11.C语言的变量一定要先定义才能使用;

12.输入输出的数据的类型与所用格式说明符不一致
int a=3;float b=4.5;printf(“%f%d\n”,a,b);
它们并不是按照赋值的规则进行转换(如把4.5转换为4),而是将数据在存储单元中的形式按格式符的要求组织输出(如b占4个字节,只把最后两个字节的数据按%d,作为整数输出)

13.未注意int型数据的数值范围
int型数据的数值范围(-32768~32768)
int num=89101;
printf(“%d”,num);
会将超过低16位的数截去从而得到23563
注意:定义了long型,而在输出时仍用”%d”说明符,仍会出现以上错误
14.输入变量时忘记使用地址符
scanf(“%d%d”,a,b);
15.输入时数据的组织与要求不符
对scanf函数中格式字符串中除了格式说明符外,对其他字符必须按原样输入
16.误把”=“作为”等于”比较符
“=“为附值运算符
“==“为比较运算符
17.语句后面漏分号
{
t=a;
a=b;
b=t
}
它是pascal的语法
18.不该加分号的地方加了分号
if(a>b);
printf(“a is larger than b\n”);
for(i=0;i<10;i++);
{
scanf(“%d”,&x);
printf(“%d\n”,x*x);
}
19.对应该有花括弧的复合语句,忘记加花括弧
sum=0;
i=1;
while(i<=100)
sum=sum+1;
i++;
20.括弧不配对
while((c=getchar()!=‘#’)

putchar(c);
11.在用标识时,忘记了大写字母和小写字母的区别
{
int a,b,c;
a=2;
b=3;
C=A+B;
printf(“%d+%d=%D”,A,B,C);
}
12.引用数组元素时误用发圆括弧
{
int i,a(10);
for(i=0;i<10;i++)
scanf(“%d”,&a(i));
}
13.在定义数组时,将定义的”元素个数”误认为是”可使用的最大下标值
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int i;
for(i=1;i<=10;i++)
printf(“%d”,a[i]);
}
14.对二维或多维数组的定义和引用的方法不对
{
int a[5,4];

printf(“%d”,a[1+2,2+2]);

}
15.误以为数组名代表数组中全部元素
{int a[4]={1,2,3,4};
printf(“%d%d%d%d”,a);
}
16.混淆字符数组与字符指针的区别
main()
{
char str[40];
str=“Computer and c”;
printf(“%s\n”,str);
}
17.在引用指针变量之前没有对它赋予确定的值
{
char *p;
scanf(“%s”,p);
}
{
char *p,c[20];
p=c;
scanf(“%s”,p);
}
18.switch语句的各分支中漏写 break语句
混淆字符和字符串的表示形式

char sex;
sex=“M”;

19.使用自加(++)和自减(--)运算符时出的错误
{
int *p,a[5]={1,3,5,7,9};
p=a;
printf(“%d”,*p++);
}
注意于*(++p)的区别;
20.所调用的函数在调用语句之后才定义,而又在调用前未加说明
main()
{float x,y,z;
x=3.5;y=-7.6;
z=max(x,y);
printf(“%f”,z);
}
编译时不给出出错信息,但运行结果将与原意不符。这种错误尤其需要注意。

八、心得体会

1. 目前流行的计算机日历程序,比较典型的是Windows各版本中的日历程序以及基础于该程序所开发的各种应用程序中的日历程序。然而,这些程序都千篇一律的局限在一个很短的时间范围内。(Windows各个版本一般都局限在1980年至2099年这一范围内),但是,在很多情况下,特别是在众多的科学研究领域中,一个时间跨度较大的日历程序是很有参考价值的。C程序设计语言充分发挥了其自身无与伦比的优越性,用极短的程序文本填补了这一领域的空白,同时用铁的事实强有力的告诉世人:C程序设计语言作为计算机语言家族的新生事物,其发展前景是极为广阔的。

2. 经过上一个学期对《C程序设计》的学习,我们学习了理论知识,了解了C语言程序设计的思想,这些知识都为我们的下一步学习打下了坚实的基础。通过课程设计,一方面是为了检查我们一个学期来我们学习的成果,另一方面也是为了让我们进一步的掌握和运用它,同时也让我们认清自己的不足之处和薄弱环节,加以弥补和加强。

3. 通过对c语言万年历的设计进一步的巩固了用c语言编写程序,并且有利于更好的掌握c语言!

4. 在万年历的编写过程中也体会到了做事情一顶要细心、认真。更加知道了要掌握好基础知识。还有体会到了成功的感觉!在万年历的设计过程中更加体会到了团队合作的重要性,“一个诸葛亮比不上三个臭皮匠。”知道了只有团队合作才会更好的完成设计!也体会到以后在工作中团队合作的必要性和重要性!

5. 通过本项课程设计也培养了我独立思考、 综合运用所学有关相应知识的能力,掌握 工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!

6. 由于C语言是近年在国内外得到迅速推广应用的一种语言。C语言功能丰富,表达能力强,使用灵活方便,应用面广,目标程序效率高,可移植性好,既具有高级语言的优点,又具有低级语言的许多特点。通过这次的c语言程序设计更加了解了c语言的好处和其可用性!

7. 在这次课程设计中也知道了自己的动手能力不强有待进一部的提高!在设计过程中不能够把书本上的知识与实践相结合,这也就增加了设计不好该程序的想法!在设计过程中的一次次设计错误增加了我放弃的想法!不过经过大家的努力终于完成了课程设计!完成该程序后想起自己以前的每一次对自己失去信心,就觉得并不是在知识掌握上打败了,而是自己对自己缺乏信心!只要自己对自己不失去信心相信就可以完成那些以前认为完成不了的事情!也让我懂得了要想成功首先就必须有很强的自信心!懂得了自己以后要在做任何事情时都要自信!当自己都不相信自己能够成功时还可能会获得成功吗?

8. 在C语言程序设计的过程中也知道了自己在以前的学习中有很大的不足导致在设计过程中出现了很多的问题,有些地方看不懂也不知道怎么去设计,但是在设计过程中也学习了很多,掌握了自己以前没有学好的知识,虽然一时可以掌握完以前没有学好的知识,不过也给自己敲响了警钟,在学习中不可以伏于表面,要想学好每一门课程都要踏踏实实,做什么都不是给别人看的!都是要更好的掌握该门知识,提高自己的自身的修养,提高自己的能力!为以后的工作打下良好的知识基础和技能基础!

九、参考文献

⒈谭浩强编著.C程序设计第二版〔M〕.北京:清华大学出版社,1999

⒉陈朔鹰,陈英编著.C语言趣味程序百例精解〔M〕.北京:北京理工大学出版社,1994

⒊电脑知识与技术学术交流版〔J〕2005.2 (备注:来自网络资源)

⒋Herbert Schildit著. 戴健鹏译. C语言大全 (第二版)〔M〕.北京:电子工业出版社,1994

⒌谭浩强,张基温,唐永炎编著. C语言程序设计教程.〔M〕北京: 高等教育出版社,1992

⒍秦友淑,曹化工编著. C语言程序设计教程. 〔M〕武汉:华中理工大学出版社,1996

⒎曹衍龙,林瑞仲,徐慧 编著.C语言实例解析精粹 〔M〕北京:人民邮电出版社,2005.3

⒏黄明等编著.21世纪进阶辅导C语言程序设计. 〔M〕大连理工大学出版

Ⅵ C语言课程设计怎么排版

肯定是一个题一个报告,每个题的任务描述、设计内容、流程、结果都不一样。怎么能放在一个报告里边。流程图应该是你画出来的,不是写出来的吧。部分核心代码可以贴在实验结果里边。

Ⅶ C语言课程设计求解释。。。

#include <stdio.h>
struct student //定义一个结构体
{
char no[20];

char name[20];

float math,english,computer;

double total;

double avr;
};
struct student stu[50]; //定义stu结构体数组
//以下四个是函数声明语句
struct student input(); //学生数据输入函数,返回值是结构体
void display(struct student stu[],int count); //显示函数
void sort(struct student stu[],int count); //排序函数
void stat(struct student stu[],int count); //成绩分析函数

void main()
{
int count;

char ch;

ch='y';

printf("请按以下格式输入学生信息(可用Tab键对齐):");

printf("\n");

count=0;

while ((ch=='y') || (ch=='Y'))
{
stu[count]=input(); //调用input函数输入一个学生的信息给stu数组

count++; //这个循环是当ch为y时添加学生成绩信息

printf("\n是否继续?(按Y继续,其它结束)");

scanf(" %c",&ch);
}
printf("\n学生信息如下:");

sort(stu,count); //调用排序函数进行排序

display(stu,count); //显示排序后的结构

stat(stu,count); //调用分析函数显示分析结果
system("PAUSE"); //我这里加了一个暂停语句,可以把结果停留在输出窗口观看
}

struct student input()
{ int i;
struct student studn;

while(1) //这个循环是当有学号重复时让用户重复输入
{printf("\n学号\t\t姓名\t数学\t英语\t计算机\n");
while(1)
{scanf("%s %s %f %f %f",&studn.no,studn.name,&studn.math,&studn.english,&studn.computer);
if((studn.math>0)&&(studn.math<=100)&&(studn.english>0)&&(studn.english<=100)&&(studn.computer>0)&&(studn.computer<=100))break;
printf("输入的成绩不符合要求,请重新输入\n");
fflush(stdin);}
for(i=0;i<50;i++) //这个循环是查找stu数组中有没有和输入的学号有重复的信息,
if(strcmp(stu[i].no,studn.no)==0)break; //如果有就用break跳出for循环
if(i==50)break; //如果for循环后i值等于50,表示该学号没有重复,用break跳出while循环
printf("输入的学号已存在,请重新输入\n");
}
studn.total=studn.math+studn.english+studn.computer; //计算该学生的总分

studn.avr=studn.total/3.0; //计算该学生的平均分

return studn;
}

void display(struct student stu[],int count)
{ //这个函数很简单,用循环把stu数组的内容输出来
int i;

printf("\n排名\t学号\t\t姓名\t数学\t英语\t计算机\t总分\t平均分");

printf("\n");

for(i=0;i<count;i++)
{
printf("%d",i+1);

printf("\t%s",stu[i].no);

printf("\t%s",stu[i].name);

printf("\t%.1f",stu[i].math);

printf("\t%.1f",stu[i].english);

printf("\t%.1f",stu[i].computer);

printf("\t%.2f",stu[i].total);

printf("\t%.2f",stu[i].avr);

printf("\n");
}
}

void sort(struct student stu[],int count)
{ //这个函数是把stu数组进行排序
int i,j;

struct student t;

for(i=0;i<count;i++) //排序方法是冒泡排序

for(j=0;j<count-i-1;j++)
{
if(stu[j].avr<stu[j+1].avr) //按每个学生的3科平均分大小有高到低排序
{
t=stu[j];

stu[j]=stu[j+1];

stu[j+1]=t;

}
}
}
void stat(struct student stu[],int count)
{ //这个是分数段处理函数
int i;

double avr=0;

for(i=0;i<count;i++) //这个循环是统计全班3科成绩平均分的班的总平均分

avr += stu[i].avr;

avr /= count;

printf("全班平均分为%.2f,\n在平均分以上的同学有:\n",avr);

for(i=0;i<count;i++) //这个循环的功能上面printf语句说得很清楚了

if(stu[i].avr>=avr)
{
printf("%s\t",stu[i].name);
}
printf("\n");
}

Ⅷ c语言课程设计

字数受限,只能打这多了或看看这个http://wenku..com/view/92d3d138376baf1ffc4fad1a.html#include "stdio.h" #include "stdlib.h" #include "string.h" #include "conio.h" #include "mem.h" #include "ctype.h" /#include "alloc.h" #define N 3 typedef struct z1
{
char no[11];
char name[15];
int score[N];
float sum;
float average;
int order;
struct z1 *next;
}STUDENT;

STUDENT *init();
STUDENT *create();
STUDENT *delete(STUDENT *h);
void print(STUDENT *h); /* 显示所有记录*/
void search(STUDENT *h); /*查找*/
void save(STUDENT *h); /*保存*/
STUDENT *load(); /*读入记录*/
void computer(STUDENT *h); /*计算总分和均分*/
STUDENT *insert(STUDENT *h); /*插入记录*/
void append(); /*追加记录*/
void (); /*复制文件*/
STUDENT *sort(STUDENT *h); /*排序*/
STUDENT *index(STUDENT *h); /*索引*/
void total(STUDENT *h); /*分类合计*/
int menu_select(); /*菜单函数*/
/******主函数开始*******/
main()
{
int i;
STUDENT *head; /*链表定义头指针*/
head=init(); /*初始化链表*/
clrscr(); /*清屏*/
for(;;) /*无限循环*/
{
switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/
{ /*值不同,执行的函数不同,break 不能省略*/
case 0:head=init();break;
case 1:head=create();break;
case 2:head=delete(head);break;
case 3:print(head);break; /*显示全部记录*/
case 4:search(head);break; /*查找记录*/
case 5:save(head);break; /*保存文件*/
case 6:head=load(); break; /*读文件*/
case 7:computer(head);break; /*计算总分和均分*/
case 8:head=insert(head); break; /*插入记录*/
case 9:();break; /*复制文件*/
case 10:head=sort(head);break; /*排序*/
case 11:append();break; /*追加记录*/
case 12:head=index(head);break; /*索引*/
case 13:total(head);break; /*分类合计*/
case 14:exit(0); /*如菜单返回值为14程序结束*/
}
}
}
/*菜单函数,返回值为整数*/
menu_select()
{
char *menu[]={"***************MENU***************", /*定义菜单字符串数组*/
" 0. init list", /*初始化*/
" 1. Enter list", /*输入记录*/
" 2. Delete a record from list", /*从表中删除记录*/
" 3. print list ", /*显示单链表中所有记录*/
" 4. Search record on name", /*按照姓名查找记录*/
" 5. Save the file", /*将单链表中记录保存到文件中*/
" 6. Load the file", /*从文件中读入记录*/
" 7. compute the score", /*计算所有学生的总分和均分*/
" 8. insert record to list ", /*插入记录到表中*/
" 9. the file to new file", /*复制文件*/
" 10. sort to make new file", /*排序*/
" 11. append record to file", /*追加记录到文件中*/
" 12. index on nomber", /*索引*/
" 13. total on nomber", /*分类合计*/
" 14. Quit"}; /*退出*/
char s[3]; /*以字符形式保存选择号*/
int c,i; /*定义整形变量*/
gotoxy(1,25); /*移动光标*/
printf("press any key enter menu......\n"); /*压任一键进入主菜单*/
getch(); /*输入任一键*/
clrscr(); /*清屏幕*/
gotoxy(1,1); /*移动光标*/
textcolor(YELLOW); /*设置文本显示颜色为黄色*/
textbackground(BLUE); /*设置背景颜色为蓝色*/
gotoxy(10,2); /*移动光标*/
putch(0xc9); /*输出左上角边框┏*/
for(i=1;i<44;i++)
putch(0xcd); /*输出上边框水平线*/
putch(0xbb); /*输出右上角边框 ┓*/
for(i=3;i<20;i++)
{
gotoxy(10,i);putch(0xba); /*输出左垂直线*/
gotoxy(54,i);putch(0xba);
} /*输出右垂直线*/
gotoxy(10,20);putch(0xc8); /*输出左上角边框┗*/
for(i=1;i<44;i++)
putch(0xcd); /*输出下边框水平线*/
putch(0xbc); /*输出右下角边框┛*/
window(11,3,53,19); /* 制作显示菜单的窗口,大小根据菜单条数设计*/
clrscr(); /*清屏*/
for(i=0;i<16;i++) /*输出主菜单数组*/
{
gotoxy(10,i+1);
cprintf("%s",menu[i]);
}
textbackground(BLACK); /*设置背景颜色为黑色*/
window(1,1,80,25); /*恢复原窗口大小*/
gotoxy(10,21); /*移动光标*/
do{
printf("\n Enter you choice(0~14):"); /*在菜单窗口外显示提示信息*/
scanf("%s",s); /*输入选择项*/
c=atoi(s); /*将输入的字符串转化为整形数*/
}while(c<0||c>14); /*选择项不在0~14之间重输*/
return c; /*返回选择项,主程序根据该数调用相应的函数*/
}
STUDENT *init()
{
return NULL;
}

/*创建链表*/
STUDENT *create()
{
int i; int s;
STUDENT *h=NULL,*info; /* STUDENT指向结构体的指针*/
for(;;)
{
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/
if(!info) /*如果指针info为空*/
{
printf("\nout of memory"); /*输出内存溢出*/
return NULL; /*返回空指针*/
}
inputs("enter no:",info->no,11); /*输入学号并校验*/
if(info->no[0]=='@') break; /*如果学号首字符为@则结束输入*/
inputs("enter name:",info->name,15); /*输入姓名,并进行校验*/
printf("please input %d score \n",N); /*提示开始输入成绩*/
s=0; /*计算每个学生的总分,初值为0*/
for(i=0;i<N;i++) /*N门课程循环N次*/
{
do{
printf("score%d:",i+1); /*提示输入第几门课程*/
scanf("%d",&info->score[i]);
if(info->score[i]>100||info->score[i]<0)
printf("bad data,repeat input\n");
}while(info->score[i]>100||info->score[i]<0);
s=s+info->score[i];
}
info->sum=s;
info->average=(float)s/N;
info->order=0;
info->next=h;
h=info; }
return(h); /*返回头指针*/
}
/*输入字符串,并进行长度验证*/
inputs(char *prompt, char *s, int count)
{
char p[255];
do{
printf(prompt); /*显示提示信息*/
scanf("%s",p); if(strlen(p)>count)printf("\n too long! \n"); }while(strlen(p)>count);
strcpy(s,p); }
void print(STUDENT *h)
{
int i=0; /* 统计记录条数*/
STUDENT *p; /*移动指针*/
clrscr(); /*清屏*/
p=h; /*初值为头指针*/
printf("\n\n\n****************************STUDENT********************************\n");
printf("|rec|nO | name | sc1| sc2| sc3| sum | ave |order|\n");
printf("|---|----------|---------------|----|----|----|--------|-------|-----|\n");
while(p!=NULL)
{
i++;
printf("|%3d |%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", i, p->no,p->name,p->score[0],p->score[1],
p->score[2],p->sum,p->average,p->order);
p=p->next;
}
printf("**********************************end*********************************\n");
}
/*删除记录*/
STUDENT *delete(STUDENT *h)
{
STUDENT *p,*q; /*p为查找到要删除的结点指针,q为其前驱指针*/
char s[11]; /*存放学号*/
clrscr(); /*清屏*/
printf("please deleted no\n"); /*显示提示信息*/
scanf("%s",s); /*输入要删除记录的学号*/
q=p=h; /*给q和p赋初值头指针*/
while(strcmp(p->no,s)&&p!=NULL) /*当记录的学号不是要找的,或指针不为空时*/
{
q=p; /*将p指针值赋给q作为p的前驱指针*/
p=p->next; /*将p指针指向下一条记录*/
}
if(p==NULL) /*如果p为空,说明链表中没有该结点*/
printf("\nlist no %s student\n",s);
else /*p不为空,显示找到的记录信息*/
{
printf("*****************************have found***************************\n");
printf("|no | name | sc1| sc2| sc3| sum | ave |order|\n");
printf("|----------|---------------|----|----|----|--------|-------|-----|\n");
printf("|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", p->no,
p->name,p->score[0],p->score[1],p->score[2],p->sum,
p->average,p->order);
printf("********************************end*******************************\n");
getch(); /*压任一键后,开始删除*/
if(p==h) /*如果p==h,说明被删结点是头结点*/
h=p->next; /*修改头指针指向下一条记录*/
else
q->next=p->next; /*不是头指针,将p的后继结点作为q的后继结点*/
free(p); /*释放p所指结点空间*/
printf("\n have deleted No %s student\n",s);
printf("Don't forget save\n");/*提示删除后不要忘记保存文件*/
}
return(h); /*返回头指针*/
}
/*查找记录*/
void search(STUDENT *h)
{
STUDENT *p; char s[15]; clrscr();
printf("please enter name for search\n");
scanf("%s",s); /*输入姓名*/
p=h; /*将头指针赋给p*/
while(strcmp(p->name,s)&&p!=NULL) /*当记录的姓名不是要找的,或指针不为空时*/
p=p->next; /*移动指针,指向下一结点*/
if(p==NULL) /*如果指针为空*/
printf("\nlist no %s student\n",s); /*显示没有该学生*/
else /*显示找到的记录信息*/
{
printf("\n\n*****************************havefound***************************\n");
printf("|nO | name | sc1| sc2| sc3| sum | ave |order|\n");
printf("|----------|---------------|----|----|----|--------|-------|-----|\n");
printf("|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", p->no,
p->name,p->score[0],p->score[1],p->score[2],p->sum,p->average,p->order);
printf("********************************end*******************************\n");
}
}
/*插入记录*/
STUDENT *insert(STUDENT *h)
{
STUDENT *p,*q,*info; /*p指向插入位置,q是其前驱,info指新插入记录*/
char s[11]; /*保存插入点位置的学号*/
int s1,i;
printf("please enter location before the no\n");
scanf("%s",s); /*输入插入点学号*/
printf("\nplease new record\n"); /*提示输入记录信息*/
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/
if(!info)
{
printf("\nout of memory"); /*如没有申请到,内存溢出*/
return NULL; /*返回空指针*/
}
inputs("enter no:",info->no,11); /*输入学号*/
inputs("enter name:",info->name,15); /*输入姓名*/
printf("please input %d score \n",N); /*提示输入分数*/
s1=0; /*保存新记录的总分,初值为0*/
for(i=0;i<N;i++) /*N门课程循环N次输入成绩*/
{
do{ /*对数据进行验证,保证在0~100之间*/
printf("score%d:",i+1);
scanf("%d",&info->score[i]);
if(info->score[i]>100||info->score[i]<0)
printf("bad data,repeat input\n");
}while(info->score[i]>100||info->score[i]<0);
s1=s1+info->score[i]; /*计算总分*/
}
info->sum=s1; /*将总分存入新记录中*/
info->average=(float)s1/N; /*计算均分*/
info->order=0; /*名次赋值0*/
info->next=NULL; /*设后继指针为空*/
p=h; /*将指针赋值给p*/
q=h; /*将指针赋值给q*/
while(strcmp(p->no,s)&&p!=NULL) /*查找插入位置*/
{
q=p; /*保存指针p,作为下一个p的前驱*/
p=p->next; /*将指针p后移*/
}
if(p==NULL) /*如果p指针为空,说明没有指定结点*/
if(p==h) /*同时p等于h,说明链表为空*/
h=info; /*新记录则为头结点*/
else
q->next=info; else
if(p==h) {
info->next=p; h=info; }
else
{
info->next=p; q->next=info;
}
printf("\n ----have inserted %s student----\n",info->name); printf("---Don't forget save---\n"); /*提示存盘*/
return(h); /*返回头指针*/
}
/*保存数据到文件*/
void save(STUDENT *h)
{
FILE *fp; /*定义指向文件的指针*/
STUDENT *p; /* 定义移动指针*/
char outfile[10]; /*保存输出文件名*/
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示文件名格式信息*/
scanf("%s",outfile);
if((fp=fopen(outfile,"wb"))==NULL) /*为输出打开一个二进制文件,如没有则建立*/
{
printf("can not open file\n");
exit(1);
}
printf("\nSaving file......\n"); /*打开文件,提示正在保存*/
p=h; /*移动指针从头指针开始*/
while(p!=NULL) /*如p不为空*/
{
fwrite(p,sizeof(STUDENT),1,fp);/*写入一条记录*/
p=p->next; /*指针后移*/
}
fclose(fp); /*关闭文件*/
printf("-----save success!!-----\n"); /*显示保存成功*/
}
/* 从文件读数据*/
STUDENT *load()
{
STUDENT *p,*q,*h=NULL; /*定义记录指针变量*/
FILE *fp; /* 定义指向文件的指针*/
char infile[10]; /*保存文件名*/
printf("Enter infile name,for example c:\\f1\\te.txt:\n"); scanf("%s",infile); /*输入文件名*/
if((fp=fopen(infile,"rb"))==NULL) /*打开一个二进制文件,为读方式*/
{
printf("can not open file\n"); /*如不能打开,则结束程序*/
exit(1);
}
printf("\n -----Loading file!-----\n");
p=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/
if(!p)
{
printf("out of memory!\n"); /*如没有申请到,则内存溢出*/
return h; /*返回空头指针*/
}
h=p; /*申请到空间,将其作为头指针*/
while(!feof(fp)) /*循环读数据直到文件尾结束*/
{
if(1!=fread(p,sizeof(STUDENT),1,fp))
break; /*如果没读到数据,跳出循环*/
p->next=(STUDENT *)malloc(sizeof(STUDENT)); /*为下一个结点申请空间*/
if(!p->next)
{
printf("out of memory!\n"); return h;
}
q=p; p=p->next; }
q->next=NULL; /*最后一个结点的后继指针为空*/
fclose(fp); /*关闭文件*/
printf("---You have success read data from file!!!---\n");
return h; /*返回头指针*/
}
/*追加记录到文件*/
void append()
{
FILE *fp; /*定义指向文件的指针*/
STUDENT *info; /*新记录指针*/
int s1,i;
char infile[10]; /*保存文件名*/
printf("\nplease new record\n");
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申请空间*/
if(!info)
{
printf("\nout of memory"); /*没有申请到,内存溢出本函数结束*/
return ;
}
inputs("enter no:",info->no,11); /*调用inputs输入学号*/
inputs("enter name:",info->name,15); /*调用inputs输入姓名*/
printf("please input %d score \n",N); /*提示输入成绩*/
s1=0;
for(i=0;i<N;i++)
{
do{
printf("score%d:",i+1);
scanf("%d",&info->score[i]); /*输入成绩*/
if(info->score[i]>100||info->score[i]<0)printf("bad data,repeat input\n");
}while(info->score[i]>100||info->score[i]<0); /*成绩数据验证*/
s1=s1+info->score[i]; /*求总分*/
}
info->sum=s1; /*保存总分*/
info->average=(float)s1/N; /*求均分*/
info->order=0; /*名次初始值为0*/
info->next=NULL; /*将新记录后继指针赋值为空*/
printf("Enter infile name,for example c:\\f1\\te.txt:\n"); scanf("%s",infile); /*输入文件名*/
if((fp=fopen(infile,"ab"))==NULL) /*向二进制文件尾增加数据方式打开文件*/
{
printf("can not open file\n"); /*显示不能打开*/
exit(1); /*退出程序*/
}
printf("\n -----Appending record!-----\n");
if(1!=fwrite(info,sizeof(STUDENT),1,fp)) /*写文件操作*/
{
printf("-----file write error!-----\n");
return; /*返回*/
}
printf("-----append sucess!!----\n");
fclose(fp); /*关闭文件*/
}
/*文件拷贝*/
void ()
{
char outfile[10],infile[10];
FILE *sfp,*tfp; /*源和目标文件指针*/
STUDENT *p=NULL; /*移动指针*/
clrscr(); /*清屏*/
printf("Enter infile name,for example c:\\f1\\te.txt:\n");
scanf("%s",infile); /*输入源文件名*/
if((sfp=fopen(infile,"rb"))==NULL) /*二进制读方式打开源文件*/
{
printf("can not open input file\n");
exit(0);
}
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示输入目标文件名*/
scanf("%s",outfile); /*输入目标文件名*/
if((tfp=fopen(outfile,"wb"))==NULL) /*二进制写方式打开目标文件*/
{
printf("can not open output file \n");
exit(0);
}
while(!feof(sfp)) /*读文件直到文件尾*/
{
if(1!=fread(p,sizeof(STUDENT),1,sfp))
break; /*块读*/
fwrite(p,sizeof(STUDENT),1,tfp); /*块写*/
}
fclose(sfp); /*关闭源文件*/
fclose(tfp); /*关闭目标文件*/
printf("you have success file!!!\n"); /*显示成功拷贝*/
}
/*排序*/
STUDENT *sort(STUDENT *h)
{
int i=0; /*保存名次*/
STUDENT *p,*q,*t,*h1; /*定义临时指针*/
h1=h->next; /*将原表的头指针所指的下一个结点作头指针*/
h->next=NULL; /*第一个结点为新表的头结点*/
while(h1!=NULL) /*当原表不为空时,进行排序*/
{
t=h1; /*取原表的头结点*/
h1=h1->next; /*原表头结点指针后移*/
p=h; /*设定移动指针p,从头指针开始*/
q=h; /*设定移动指针q做为p的前驱,初值为头指针*/
while(t->sum<p->sum&&p!=NULL) /*作总分比较*/
{
q=p; /*待排序点值小,则新表指针后移*/
p=p->next;
}
if(p==q) /*p==q,说明待排序点值大,应排在首位*/
{
t->next=p; /*待排序点的后继为p*/
h=t; /*新头结点为待排序点*/
}
else /*待排序点应插入在中间某个位置q和p之间,如p为空则是尾部*/
{
t->next=p; /*t的后继是p*/
q->next=t; /*q的后继是t*/
}
}
p=h; /*已排好序的头指针赋给p,准备填写名次*/
while(p!=NULL) /*当p不为空时,进行下列操作*/
{
i++; /*结点序号*/
p->order=i; /*将名次赋值*/
p=p->next; /*指针后移*/
}
printf("sort sucess!!!\n"); /*排序成功*/
return h; /*返回头指针*/
}
/*计算总分和均值*/
void computer(STUDENT *h)
{
STUDENT *p; /*定义移动指针*/
int i=0; /*保存记录条数初值为0*/
long s=0; /*总分初值为0*/
float average=0; /*均分初值为0*/
p=h; /*从头指针开始*/
while(p!=NULL) /*当p不为空时处理*/
{
s+=p->sum; /*累加总分*/
i++; /*统计记录条数*/
p=p->next; /*指针后移*/
}
average=(float)s/i;/* 求均分,均分为浮点数,总分为整数,所以做类型转换*/
printf("\n--All students sum score is:%ld average is %5.2f\n",s,average);
}
/*索引*/
STUDENT *index(STUDENT *h)
{
STUDENT *p,*q,*t,*h1; /*定义临时指针*/
h1=h->next; /*将原表的头指针所指的下一个结点作头指针*/
h->next=NULL; /*第一个结点为新表的头结点*/
while(h1!=NULL) /*当原表不为空时,进行排序*/
{
t=h1; /*取原表的头结点*/
h1=h1->next; /*原表头结点指针后移*/
p=h; /*设定移动指针p,从头指针开始*/
q=h; /*设定移动指针q做为p的前驱,初值为头指针*/
while(strcmp(t->no,p->no)>0&&p!=NULL) /*作学号比较*/
{
q=p; p=p->next;
}
if(p==q) /*p==q, {
t->next=p; h=t; }
else {
t->next=p; /*t的后继是p*/
q->next=t; /*q的后继是t*/
}
}
printf("index sucess!!!\n"); /*索引排序成功*/
return h; /*返回头指针*/
}
/*分类合计*/
void total(STUDENT *h)
{
STUDENT *p,*q; /*定义临时指针变量*/
char sno[9],qno[9],*ptr; /*保存班级号的*/
float s1,ave; /*保存总分和均分*/
int i; clrscr(); /*清屏*/
printf("\n\n *******************Total*****************\n");
printf("---class---------sum--------------average----\n");
p=h; while(p!=NULL)
{
memcpy(sno,p->no,8); /*从学号中取出班级号*/
sno[8]='\0'; /*做字符串结束标记*/
q=p->next; /*将指针指向待比较的记录*/
s1=p->sum; /*当前班级的总分初值为该班级的第一条记录总分*/
ave=p->average; /*当前班级的均分初值为该班级的第一条记录均分*/
i=1; /*统计当前班级人数*/
while(q!=NULL) /*内循环开始*/
{
memcpy(qno,q->no,8); /*读取班级号*/
qno[8]='\0'; /*做字符串结束标记*/
if(strcmp(qno,sno)==0) /*比较班级号*/
{
s1+=q->sum; /*累加总分*/
ave+=q->average; /*累加均分*/
i++; /*累加班级人数*/
q=q->next; /*指针指向下一条记录*/
}
else
break; }
printf("%s %10.2f %5.2f\n",sno,s1,ave/i);
if(q==NULL)
break; else
p=q; }
printf("---------------------------------------------\n");
}


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

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

热点内容
武汉大学学生会辅导员寄语 发布:2021-03-16 21:44:16 浏览:612
七年级学生作文辅导学案 发布:2021-03-16 21:42:09 浏览:1
不屑弟高考成绩 发布:2021-03-16 21:40:59 浏览:754
大学毕业证会有成绩单 发布:2021-03-16 21:40:07 浏览:756
2017信阳学院辅导员招聘名单 发布:2021-03-16 21:40:02 浏览:800
查询重庆2018中考成绩查询 发布:2021-03-16 21:39:58 浏览:21
结业考试成绩怎么查询 发布:2021-03-16 21:28:40 浏览:679
14中医医师资格笔试考试成绩查分 发布:2021-03-16 21:28:39 浏览:655
名著赏析课程标准 发布:2021-03-16 21:27:57 浏览:881
北京大学商业领袖高端培训课程 发布:2021-03-16 21:27:41 浏览:919