C语言课程设计报告模板1(大数相乘)

时间:2024.4.7

                                          

      

本科生课程论文封面

         课程名称    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

更多相关推荐:
《C语言程序设计》课程设计报告(小组)

东莞理工学院《C语言程序设计》课程设计题目:图书信息管理系统院系:电子工程学院专业:电子信息工程年级:20##班别:2班指导教师:##组长:##同组成员:##目录一、目的....................…

c语言课程设计报告

C语言程序设计课程设计学生姓名学号系院专业设计论文题目学生选课系统管理完成日期20xx年6月指导教师目录一实验目的二实验内容三总体设计四详细设计五运行结果六课程设计体会一实验目的1通过课程设计加深对结构化程序设...

C语言课程设计报告

河南理工大学计算机科学与技术学院课程设计报告20XX20XX学年第一学期课程名称C语言课程设计设计题目《小学算术运算测试》学生姓名学号专业班级计算机07-2班指导教师20XX年9月12日目录1.设计任务书21.…

C语言课程设计报告范例

C语言课程设计报告设计题目专业班级学号姓名任课老师时间目录一课程设计题目及所涉及知识点二课程设计思路及设计流程图三课程设计中遇到的难点及解决办法四小结五附录原程序2一课程设计题目及所涉及知识点一课程设计题目1基...

厦门理工学院11级C语言C语言程序设计课程设计报告

C语言程序设计课程设计报告20xx20xx学年第1学期题目专业班级姓名学号指导教师成绩计算机科学与技术系20xx年12月31日目录一课程设计的目的与要求1二方案实现与调试221掷骰子游戏222射击游戏323汽车...

C语言程序设计课程设计报告

C语言程序设计课程设计报告20xx20xx学年第1学期专业计算机科学与技术班级姓名学号指导教师成绩计算机科学与技术系20xx年12月31日目录一课程设计的目的与要求3二方案实现与调试321掷骰子游戏322汽车加...

c语言程序贪吃蛇课程设计报告

山东工商学院信电学院自动111班第一组贪吃蛇课程设计报告高级语言程序设计课程设计报告ExperimentDesigningreporter课程名称高级语言程序设计英文名称CProgramExperimentDe...

C语言程序设计基础课程设计报告

程序设计基础课程设计报告课程名称课程设计题目程序设计基础课程设计学生信息管理系统姓名系专业年级学号指导教师职称计算机科学技术系计算机网络技术讲师20xx年1月1日一设计题目及要求1题目学生信息管理系统2要求1建...

《C语言程序设计》课程设计报告格式 (2)

C语言程序设计课程设计报告20xx20xx学年第1学期专业软件工程软件测试服务班级1班姓名学号陈家汀指导教师谢小竹成绩计算机与信息工程学院20xx年1月12日目录一课程设计的目的与要求页码二方案实现与调试页码2...

C语言课程设计报告---学籍信息管理系统

中国地质大学本科生课程论文封面1课程设计评语注1无评阅人签名成绩无效2必须用钢笔或圆珠笔批阅用铅笔阅卷无效3如有平时成绩必须在上面评分表中标出并计算入总成绩2目录课程设计评语2目录31课程论文题目42程序设计思...

C语言课程设计报告_运动会分数统计系统

C语言课程设计报告_运动会分数统计系统一.需求分析1问题描述运动会分数统计系统参加运动会有n个系,系编号为1n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前…

C语言课程设计报告-图书管理系统

课程设计报告图书馆管理系统目录1题目与要求22系统总体设计要给出必要的文字说明及必要的图示321功能需求分析明确选题的功能需求322系统功能模块划分要给出系统功能模块图43详细设计431重要数据的数据结构设计即...

c语言程序设计课程设计报告(34篇)