中国地质大学
本科生课程论文封面
课程名称 c语言课程设计
教师姓名 武进霞
本科生姓名 贾兵
本科生学号 20101002938
本科生专业 资源勘查工程(基地班)
所在院系 资源学院
类别:
日期: 2012/2/22
目 录
课程设计评语....................................................................................... 2
目 录.................................................................................................... 3
1.课程论文题目................................................................................. 4
2.程序设计思路................................................................................. 4
3.功能模块图..................................................................................... 5
4.数据结构设计................................................................................. 5
5.算法设计......................................................................................... 6
6.程序代码....................................................................................... 13
7.程序运行结果............................................................................... 22
8.编程中遇到的困难及解决方法.................................................... 25
9.总结心得及良好建议.................................................................... 26
10.致谢............................................................................................ 26
1.课程论文题目
1.两个大数相乘问题
【要求】本问题中,要求输入两个相对较大的正整数,能够通过程序计算出其结果。
2.程序设计思路
1首先考虑设计将两个大数按照输入顺序存入分别存入数组a[ ],b[ ]中.
2.把这个数组中的每一位数字单独来进行乘法运算,比如我们可以用一个数字和另外一个数组中的每一位去相乘,从而得到乘法运算中一行的数字,再将每一行数字错位相加。这就是乘法运算的过从低位往高位依次计算,同时确定每一列的项数,确定每一位上的结果存入数组c[ ]中.
3.找到最高位在数组中的项c[i],然后依次输出各位上的数值
4.通过主函数来调用其它各个函数。
4.数据结构设计
1.输入阶段采用一维数组a[ ],b[ ]
在输入阶段当大数输入时,大数a,b从高位到低位分别依次存入数组a[ ],b[ ]。
2.调用函数计算阶段采用一维数组c[ ]
在调用sum(a,b,m,n)函数中,在计算过程中,由个位到高位依次计算各位的结果,并依次存入数组c[ ]中。
5.算法设计
算法设计过程:
1.找出每一列的所有项
首先找规律,如下所示 进行乘法a[0 ] a[1] a[2]
b[0] b[1] b[2]
b[2]a[0] b[2]a[1] b[2]a[2]
b[1]a[0] b[1]a[1] b[1]a[2]
b[0]a[0] b [0]a[1] b[0]a[2]
下标之和 0 1 2 3 4
i=4 i=3 i=2 i= 1 i =0(循环时的i的数值)
即有
下标之和=m+n-2-i,由此限定条件可设计循环得出每一列的所有项。
故首先解决了找出每一列所有项的问题。
2.计算从低位到高位每一位的值。
显然考虑到进位的问题,故必须从低位到高位依次计算,对于每一列 ,第一项可以除十取余数,保留在原位,存入c[ ] ,所得商进位存入mm。然后对于第二列,第一项加进位mm,然后取余数存入su,再加第二项,取余数存入c[ ],求商存入进位mm,直到该列所有项参与运算到该列结束时,求的最终的c[ ],和mm. 依次进行后面的运算。
3找出反向存入结果c[ ]中的首项.
因为最高位一定不为零,故可以设计程序从c[399]开始判断,当c[i]不等于零时,即为最高项。
4.设计主函数,依次调用如上函数。然后通过for循环设
for(i=0;i<m+n;i++)
{ su=0;
for(j=0;j<m;j++)
{if((tt=(m-1+n-1-i-j))>=n||(tt=(m-1+n-1-i-j))<0)
continue;
else
su=su+a[j]*b[m-1+n-1-i-j];
}
6.程序代码
#include <stdio.h>
#include <math.h>
void sum(int a[200],int b[200],int m,int n)//结果在数组里顺序是反着的
{
int mm=0;//保存进位
int c[400]={0};//保存结果
int i,j,su,tt;
for(i=0;i<m+n;i++)
{
su=0;
for(j=0;j<m;j++)
{
if((tt=(m-1+n-1-i-j))>=n||(tt=(m-1+n-1-i-j))<0)
continue;
else
su=su+a[j]*b[m-1+n-1-i-j];
}
su=su+mm;
c[i]=su%10;
mm=su/10;
}printf("\n结果是:\n");
for(i=399;i>=0;i--)//找首位
{
if(c[i]!=0) {
tt=i;break;
}
else continue;
}
for(i=tt;i>=0;i--)//输出
printf("%d",c[i]);
printf("\n");
}
void main()
{
int i,m,n,c;
int a[200]={0},b[200]={0};
printf("请输入第一个数字:\n");
for(i=0;(c=getchar())!='\n';i++)
a[i]=c-48;
m=i;
printf("\n请输入第二个数字:\n");
for(i=0;(c=getchar())!='\n';i++)
b[i]=c-48;
n=i;//m,n为数字长度
sum(a,b,m,n);
}
7.程序运行结果
8.编程中遇到的困难及解决方法
1.在最初输入大数依次存入数组时,当第一个大数输入完全,输入enter 键时,如何由程序来识别entre键遇到了问题,最后请教同学采用了c=getchar())!='\n'的方式解决了这个问题,即输入的大数以字符形式录入,此时enter键即为“\n”,而存入数组的数字也应通过a[i]=c-48来进行转化。
2.最初确定每一列的项时想了很久,通过自己在纸上反复的演算,突然找到了之前提到的规律。即每一列的下标之和都相同
9.总结心得及良好建议
通过自己亲自编程序,才能够真正理解编程过程中的心酸和喜悦。
10.致谢
谢谢武老师一年的辛勤付出和汗水
第二篇:C语言课程设计模板(1)
C语言课程设计
题 目: 学生成绩管理系统
院(系): 软件学院
专业年级: 软件工程 20##级
姓 名: 杜露露
学 号: 141530401
指导教师: 李真
20##年10月10日
目 录
1 课题任务. 1
1.1 课题的任务. 1
1.2 课题的要求. 1
2系统功能. 2
2.1 系统功能设计. 2
2.2 用户信息管理功能的实现. 3
2.2.1 公告管理功能的实现. 3
3 系统函数设计. 4
3.1 主函数部分. 4
3.2 用户的添加功能. 6
4 编译及调试. 7
4.1 程序编写问题. 7
4.2 程序编译和调试问题. 7
5 心得体会. 8
附 录. 9
参考文献. 10
1 课题任务
当前文件管理系统的背景及意义。基于web的电子文件管理系统能够安全方便地管理文件,降低文件管理的成本。
1.1 课题的任务
该部分主要介绍系统所采用的技术及开发工具,涉及页面开发技术、采用的架构、数据库管理系统、web服务器及开发工具等。
1.2 课题的要求
该部分主要介绍系统所采用的技术及开发工具,涉及页面开发技术、采用的架构、数据库管理系统、web服务器及开发工具等。该部分主要介绍系统所采用的技术及开发工具,涉及页面开发技术、采用的架构、数据库管理系统、web服务器及开发工具等。
2系统功能
该部分主要介绍所选课题在设计时的要求,只要尽量描写的详细即可,
该部分主要介绍系统所采用的技术及开发工具,涉及页面开发技术、采用的架构、数据库管理系统、web服务器及开发工具等[1]。
2.1 系统功能设计
根据需求分析确定该系统划分为以下几个管理功能:
(1)文件管理功能
该管理功能主要完成对文件的管理,包括文件的上传、审核、分类存放、搜索、共享和下载等操作。该功能的用例图如图2-1所示:
图2-1 文件管理功能用例图
其中上传文件用例描述如下:
表2-1 上传文件用例描述
(2)备忘管理功能
该管理功能主要包括对备忘的添加,看查,定时提醒及删除操作。下面是该功能用例图:
用户在查看所有备忘界面可以选择删除单个或多个备忘,在查看今日备忘界面还可以选择不再提醒,该操作会设置备忘的状态为“已过期”。
该页面初始化时只显示备忘的标题,当用户点击标题查看内容时系统使用Ajax异步请求方式从服务器获取该内容返回到客户端浏览器显示。系统采用该方式减少了页面初始化所需的数据量,减轻了服务器的负担,加快了请求的响应时间。
2.2 用户信息管理功能的实现
用户信息管理功能主要实现系统用户对自己注册信息的查看和修改,包括修改系统的时老Session销毁,
2.2.1 公告管理功能的实现
公告管理是为了实现高级别用户对普通用户的消息发布,可以通过添加公告来发布相应消息,总经理用户可以选择发布公告的单个部门或所有部门,部门经理用户只可以选择发布到自己所在部门,普通员工用户只可以查看发布到自己所在部
3 系统函数设计
3.1 主函数部分
主函数主要是菜单部分,用来提醒用户需要选择哪些功能。这部分是来通过一个无限循环(用while(1))来执行上述所有的功能模块,不断的输出菜单项目,用switch语句来执行用户选择的功能模块,每一个case后面就是对应的功能函数,(比如,用户输入数字2,那么就是执行添加功能,相应的就是执行case 2 后面的add()函数,然后用break语句跳出循环,再输出主菜单,如果用户要退出的话,只需选择“0”就可以成功退出并且自动将数据保存到指定的文件中。如果用户选择的时输入的数据有误的话,会提示“选择错误,请再次选择!”,这样,用户就能够再次输入数据。
具体详细的实现如下:
void main()
while(1) /*通过一个无限循环来完成
无数条记录的输入*/
{
int n;
printf("\n\t*******************欢迎使用通讯录系统************************\n\n");
printf("\n\t创建,请按1");
printf("\n\t添加,请按2");
printf("\n\t查找,请按3");
printf("\n\t修改,请按4");
printf("\n\t输出,请按5");
printf("\n\t删除,请按6");
printf("\n\t退出,请按0");
printf("\n\t*************************************************************\n\n");
printf("\n请选择(0--5): ");
scanf("%d",&n);
if(n<=6&&n>=0)
{
switch(n)
{
case 1:creat();break;
case 2:add(); break;
case 3:search(); break;
case 4:modify(); break;
case 5:output(); break;
case 6:del(); break;
case 0:exit(1);
}
printf("\n\n操作完成,请再次选择!");
}
else
printf("\n\n选择错误,请再次选择!");
}
}
3.2 用户的添加功能
4 编译及调试
4.1 程序编写问题
1.问题:
解决方案:
2.问题
解决方案:
3.问题
解决方案:
4.2 程序编译和调试问题
1.问题:
解决方案:
2.问题
解决方案:
3. 问题
解决方案:
5 心得体会
附 录
public boolean upload(FormFile formFile, String filePath, String uniName) {
try {
InputStream stream = formFile.getInputStream();// 把文件读入
File file = new File(filePath+ "UploadFiles_Temp");
if(!file.exists()) file.mkdirs();
OutputStream bos = new FileOutputStream(filePath
+ "UploadFiles_Temp\\" + uniName + formFile.getFileName().substring(formFile.getFileName().lastIndexOf(".")));
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = stream.read(buffer, 0, 8192)) != -1) {
bos.write(buffer, 0, bytesRead);// 将文件写入服务器
}
bos.close();
stream.close();
return true;
} catch (Exception e) {
}
return false;
}
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
SearchFileForm searchFileForm = (SearchFileForm) form;
DepartInfoDAO d = new DepartInfoDAO(); // method stub
String fileName = searchFileForm.getFileName();
String keyWords = searchFileForm.getKeyWords();
String departId = searchFileForm.getDepartId();
DetachedCriteria dc = DetachedCriteria.forClass(FileInfo.class);
if (!fileName.equals(""))
dc.add(Restrictions.like("fileName", "%" + fileName + "%"));
if (!keyWords.equals(""))
dc.add(Restrictions.like("keyWords", "%" + keyWords + "%"));
参考文献
[1]刘胜超等.UML在工业锅炉控制系统设计中的应用[J].华中科技大学学报.2002,30(4):93-95
[2]蒋慧等.UML设计核心技术[M].北京:北京希望电子出版社,2001.101-150
[3]王红燕等. UML建模在常住人口管理信息系统开发中的应用[J]. 计算机工程与应用 .2002,19:238-241
[4]刘胜超等.UML在工业锅炉控制系统设计中的应用[J].华中科技大学学报.2002,30(4):93-95