首页 C语言设计

C语言设计

举报
开通vip

C语言设计太原科技大学华科学院《C高级语言程序设计》课程设计报告(2013/2014学年第一学期)学生姓名:学生专业:学生班级:学生学号:指导教师:目录第一章 功能需求描述 2第一节 需求描述 2第二节 功能说明 3第三节 预期界面 3第二章 设计描述 5第三章 算法描述 6第一节 主函数 6第二节 计数函数 6第三节 矩阵函数 7第四章 开发过程描述 9第一节 源程序代码 9第二节 测试结果 14第三节 调试过程 141. 计算c数时发现个位数十位数颠倒 152. 无法将双键加入矩阵 15第五章 设计心得体会 16附:必做...

C语言设计
太原科技大学华科学院《C高级语言程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 》课程设计报告(2013/2014学年第一学期)学生姓名:学生专业:学生班级:学生学号:指导教师:目录第一章 功能需求描述 2第一节 需求描述 2第二节 功能说明 3第三节 预期界面 3第二章 设计描述 5第三章 算法描述 6第一节 主函数 6第二节 计数函数 6第三节 矩阵函数 7第四章 开发过程描述 9第一节 源程序代码 9第二节 测试结果 14第三节 调试过程 141. 计算c数时发现个位数十位数颠倒 152. 无法将双键加入矩阵 15第五章 设计心得体会 16附:必做题 171. 必做题程序 172. 调试结果 21功能需求描述需求描述本程序是基于高考时,对于化学考试中有关于有机物的结构式的研究的。近来,随着《离散数学》一门课程走向尾声,我们对于图论中有关于树的概念有了进一步的认识。图论中说,是数学家凯莱对于有机物结构式的研究开辟了树,这一类特殊无向图的研究。因而,不难得知,化学中的结构式,其数学本质,就是树。通过对《离散数学》知识的学习,我知道,有向图是可以用邻接矩阵 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示的,其关系一一对应。由此,我产生了联想,能不能用邻接矩阵的办法同样表示无向图和树。因而,基于对高考化学知识的了解,我进行了初步的推理,经过一系列的数学归纳推导,不难得知,有一类特殊的有机物的结构式是很容易用邻接矩阵表示其化学结构的。烃类物质是指用碳(C)、氢(H)两种元素构成的有机物的简称。可以划分为脂环烃与脂肪烃两种,其中,脂肪烃的化学最简式可用CnHm表示,其中n与m分别表示化学式中C与H的原子个数。而脂肪烃一般的化学式中m往往为2n-2π,其中π为任意自然数,称为不饱和度,如果不饱和度为0,则称所有C之间都用单键连接,1则为双键,2为三键或两个双键。依次类推。我发现,此类化学物质的邻接矩阵是由主对角线两边的两条完全相同的数字组成的,其中任意一条的数字之和(设为k)。则k=2n-m/2(式1.1.1)成立。由此,我将化学式中的碳数和氢数,与离散数学中的邻接矩阵产生了联系。从而方便与将邻接矩阵转化为树。我的整个构想是基于《有机化学》与《离散数学》两门不同种类的科学,用邻接矩阵作为中间桥梁,利用C++语言作为工具,达到转化最简式为结构式的目的,从而简化了诸多高考考生在考试前计算结构式的问题。功能说明本程序囿于技术限制,目前只用VisualC++进行了编写。故而,化学结构式的表达还只停留在邻接矩阵层面。又局限于对于化学知识的了解以及每种不同的化学物质的性质规律,我只开发了烃类物质的有关换算。本程序通过使用者输入的化学最简式(例如:C2H6),将其中的碳数和氢数计算出来,计算出相关的分子质量,最后,利用式(1.1.1.)将其中一种包含两种化学键(单键、双键)的化学结构式的邻接矩阵表示出来。预期界面本程序预期将可以输入一种化学结构最简式,判断出其正确与否,若为错误,则循环再次输入。若正确,则自动输出其碳数、氢数、相对分子质量与其中一种同分异构体的结构式的邻接矩阵。如下:请输入您要求得化学最简式:C2H5↙您的输入有误,请重新输入:请输入您要求的化学最简式:C2H6↙碳数:2氢数:6相对分子质量:30g/mol邻接矩阵:0110设计描述本程序对于最简式到结构式邻接矩阵的过度经过了四个阶段,程序分析如下:公式整形数最简式邻接矩阵图2.1.1在最简式中找出碳数、氢数应用了两个函数:count_c()、和count_h()。又公式的应用我在草稿纸上经过了数学归纳法得到公式1.1.1。将公式化为邻接矩阵我应用了output(),这一函数。在所有函数之前定义一个全局变量100*100的二维数组square[][],用于放入最终算出的邻接矩阵。程序用主函数输入最简式,分别调用count_c()和count_()两个函数,将碳数和氢数计算出来并返回主函数。之后用碳数乘以碳的相对分子质量12加上氢数乘以氢的相对分子质量1,从而计算出该烃类分子的相对分子质量。最终,主函数调用output()函数利用公式将数字填入squarep[][],并用主函数输出。算法描述1.主函数主函数主要使用了一次循环表示欢迎界面,若是符合烃类物质结构式的碳数和氢数规定则可以继续程序,否则提示出错,并转回输入界面。开始输入字符型最简式num_h%2!=0||num_h>2*num_c+2调用count_c、count_h赋值给num_c、num_h出错提示Y调用output()填入square循环赋square为零结束输出欢迎界面N图3.1.1主函数算法计数函数作为代表,将氢数的算法列举了出来,碳数的算法跟上述类似,现将输入在内的字符倒着循环阅遍,直到碰到了H这个字符的Ascll码72。将摘除的数字型字符减去48得到整形字符,在取出个位,十位百位依次循环乘以十可以得出。开始inti;intj=0;inth=0,k=0;倒着循环,直到碰到Hn[i]>=48&&n[i]<=57&&j==0h=n[i]-48j++n[i]>=48&&n[i]<=57传入square为n,100为pYNk=n[i]-48Yfor(intt=1;t<=j;t++)k=k*10;j++k=0Nh+=k结束图3.1.2氢数的算法矩阵函数图3.1.3运用简单的文字介绍了程序中二维数组的基本算法,其思路是:根据邻接矩阵的特点找出在主对角线两边的两条数字。例如:010100010式3.1.1中主对角线两边的1就是所指的两条数。其和等于碳数减一。比对其和与k的大小,如若值小于k,若差为g就在矩阵上再次循环找出这两条数,在原有的数字上加1,加g次。开始用1.1.1求出k的实际值在传来的square中找出行列数相加之和为奇数的元素,令之值为1此时二维数组主对角线两边某一条数的数字之和为碳数c-1计算g=k-cc<k循环g次找到刚刚的两条数字,在前两个数字上加1结束传来碳数c、氢数hYN循环输出二维数组图3.1.3最终输出矩阵的简单算法开发过程描述1.源程序代码#include<iostream>usingnamespacestd;intcount_c(charn[],intp);intcount_h(charn[],intp);//定义函数、变量;intsquare[100][100];intoutput(intc,inth);intmain(){ chara[20]; intnum_c,num_h; cout<<"******欢迎使用结构翻译系统!******"<<endl; do { cout<<"请输入您想要求结构式的烃类物质化学最简式(例:C1H4或C2H6):"; cin>>a; num_c=count_c(a,20); num_h=count_h(a,20); if(num_h%2!=0||num_h>2*num_c+2) cout<<"您输入的最简式有误,请重新输入:"<<endl; }while(num_h%2!=0||num_h>2*num_c+2); cout<<"输出碳(C)数:"<<num_c<<"输出氢(H)数:"<<num_h<<endl; for(inti=0;i<100;i++) for(intj=0;j<100;j++) square[i][j]=0;//将邻接矩阵的初值都赋为零; cout<<"分子质量为:"<<"Mr="<<num_c*12+num_h<<"g/mol"<<endl; cout<<"输出该结构式的邻接矩阵为:"<<endl; output(num_c,num_h); return0;}intcount_h(charn[],intp){ inti; intj=0; inth=0,k=0; for(i=p;n[i]!=72;i--)//倒着循环,直到碰到H(H的Ascll码为72); { if(n[i]>=48&&n[i]<=57&&j==0) { h=n[i]-48;// 记录 混凝土 养护记录下载土方回填监理旁站记录免费下载集备记录下载集备记录下载集备记录下载 下个位数; j++;//为循环各位以上的数计数; } elseif(n[i]>=48&&n[i]<=57) { k=n[i]-48; for(intt=1;t<=j;t++)k=k*10; j++;//循环计数; } elsek=0;//无十位数则记零; h+=k; } returnh;}intcount_c(charn[],intp){ intc=0,k=0; inth; intj=0; for(inti=p;i>=0;i--) { if(n[i]>=48&&n[i]<=57&&j==0) { c=n[i]-48; j++; } elseif(n[i]>=48&&n[i]<=57) { k=n[i]-48; for(intt=1;t<=j;t++)k=k*10; j++; } elsek=0; c+=k; }//倒着将所有的数字按整形记录下来; h=count_h(n,p); if(h>99)//将该数字减去H数除以H数个0,记得到C数; c=(c-h)/1000; elseif(h>9&&h<100) c=(c-h)/100; elsec=(c-h)/10; returnc;}intoutput(intc,inth){ intk;//设邻接矩阵次对角线上的数字之和为k; k=2*c-h/2;//经化学知识及数学归纳法求得,邻接矩阵主对角线两边的数字之和等于该式; intt=1; for(inti=0;i<c;i++) { for(intj=0;j<c;j++) { if(i+j==t)//循环找出和为奇数的序号; { square[i][j]+=1;//令该序号上数字为1; square[j][i]+=1; } } t+=2; } if((c-1)<k) { intg; g=k-c+1;//此时主对角线一边的数字之和等于碳数减一; t=1; for(i=0;i<=g;i++) { for(intj=0;j<=g;j++) { if(i+j==t) { square[i][j]+=1;//如发现主对角线一边数字之和还小于k,则用g补充加上; square[j][i]+=1; } } t+=2; } } for(i=0;i<c;i++)//输出矩阵; { for(intj=0;j<c;j++) { cout<<square[i][j]<<""; } cout<<endl; } cout<<"******谢谢使用!******"<<endl; return0;}测试结果输入C2H5测试数据:图4.2.1测试截图调试过程在这其中,发生了诸多大型有代表性的错误,现做出如下列举:计算c数时发现个位数十位数颠倒由于一开始的设计是想在计数碳数时正向阅遍所输入的最简式,直到碰到H为止。虽说做到了,但是按照氢数的做法,先阅到的一个数应该被记为个位,独立于个位数以上数字的计数方法。故而,错将个位数和十位数颠倒了。在进行调试时,我在计算碳数的count_c()内加了两个结点,观察出k值与c值其实是相反的,故而想到,可以在计算碳数的时候调用计算氢数的函数count_h()。用总计算的数字减去氢数再除以氢数所占位数个零,这样得到的碳数更具有可信度。然而,这样的算法仅仅满足于氢数最多有两位的数字,因为所开辟的二维数组square[][]为100*100,故而这样计算,但是考虑到程序的普遍性,觉得此处还应该有待改进。无法将双键加入矩阵原本,在output()函数中,用k与c的差数g将square[][]矩阵循环找到两条数字令之加1,就可以得到值为2的双键。然而,调试时总会发生没有加上的错误。这时,我在output()函数中加了若干结点,观察了实际的g值,发现没有错误。因此考虑到可能是数组本身的问题,回忆C++所学知识,发现数组的标识[]中所标的数字是数组的容量,而数组的标号是从零开始的,因此,根据数组的特性对于循环次数g做了调整,然而,得到的值却仍旧有错误。此时,我从规律入手,找到了问题的症结:我起初误以为两条数字的数字之和为碳数,经过观察才发现,其值比碳数小1。据此加以改进,才得到了正确的结果。设计心得体会“纸上得来终觉浅,绝知此事要躬行。”原本起初对于此款程序的设计信心满满,觉得只要了解化学有机物的结构规律,多推出几个类似式1.1.1的规律,就可以将好几类有关的有机物列入本程序。然而,却在一开始设计的时候就出现了问题:对于C++程序的设计只局限于VC阶段,而没能很好地应用TC软件,将树最后输出。另外,由于时间有限以及对于有机化学的了解不够导致我只推出了脂肪烃类物质的一般规律。在C++语言的应用方面,两次提取出字符串里的数字值就耗费了我大量的时间去思考,最终选定了for循环的活用,不拘泥于传统for循环知识限制循环次数的模式。在没有外界及网络的帮助下,独立思考,补兵完成了摘取碳数与氢数的算法,这耗费了我一天的思考时间。经过这两次周折,我深深感觉到了自己设计一款程序的艰辛与不容易,觉得要在计算机科学的路上扬帆远航还是需要一定的功夫磨砺的。虽然历经了好多困难,但是最终编出了令自己较为满意的程序,感觉付出的一切努力都是值得的。这激发了我对于自然科学以及 工程 路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理 学学习的强烈积极性,希望通过此次程序设计我可以在计算机科学与技术这条道路上越走越远,取得骄人的成绩。附:必做题——手机通讯录系统1.必做题程序#defineNULL0//定义一个常量用以结束链表;#include<string>#include<iomanip>#include<iostream>usingnamespacestd;structperson{ charname[20]; charaddress[50];doublephone; structperson*next;//链表指向下一个结点的指针;};//定义通讯录结构体;person*head=newperson,*p;voidcreat();voidview();voiddel();voidinsert();//声明函数;intmain(){ intc; cout<<"******WelcometousetheContactSystem******"<<endl;//欢迎界面; do { cout<<"Pleasepresswhatyouchoose:"<<endl; cout<<"Press1tocreatalog;"<<endl; cout<<"Press2toviewthelog;"<<endl; cout<<"Press3todeleteaname;"<<endl; cout<<"Press4toinsertaname;"<<endl; cout<<"Press5toquit;"<<endl;//说明界面; cin>>c; switch(c) {case1:creat();break; case2:view();break; case3:del();break; case4:insert(); }//用主函数调用各个函数; }while(c!=5); cout<<"******Thanksforallofyour'susing.******"<<endl;//告别界面; return0;}voidcreat(){ p=head; structperson*q=p; do { cout<<"Inputhis(her)name:"; cin>>p->name; cout<<"Inputhis(her)number:"; cin>>p->phone; cout<<"Inputhis(her)address:"; cin>>p->address; p->next=newperson; q=p;//记录下指针所在位置,以便结束循环; p=p->next; }while(q->phone!=0);//输入“0”结束输入; p->next=NULL;}voidview(){ p=head;//找到起始结点; do { cout<<p->name<<endl; cout<<setiosflags(ios::fixed)<<setprecision(0)<<p->phone<<endl; cout<<p->address<<endl; cout<<endl; p=p->next;//延结点寻找链表; }while(p->next!=NULL);//直到结点指向空;}voiddel(){ doublea; cout<<"Inputthenumberbeforeyouwannadelete:"; cin>>a; p=head; do { if(p->phone==a) { p->next=p->next->next;//将该结点尾指针指向下一个; p=p->next;//继续循环; } elsep=p->next; }while(p->next!=NULL);}voidinsert(){ doublea; cout<<"Inputthephoneyouwannainsertafter:"; cin>>a; p=head; do { if(p->phone==a)//发现所找结点; { person*q=newperson;//开辟新结点; cout<<"Inputthenewname:"; cin>>q->name; cout<<"Inputthenewnumber:"; cin>>q->phone; cout<<"Inputthenewaddress:"; cin>>q->address; q->next=p->next; p->next=q; break;//添加结点后直接退出循环; } elsep=p->next;//未找到则继续循环; }while(p->next!=NULL);调试结果}图附-1图附-2图附-3图附-4图附-5图附-66
本文档为【C语言设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_600602
暂无简介~
格式:doc
大小:259KB
软件:Word
页数:0
分类:互联网
上传时间:2014-02-13
浏览量:23