ImageVerifierCode 换一换
格式:DOCX , 页数:32 ,大小:57.32KB ,
资源ID:10247022      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10247022.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(西安交大C++程序设计第四章作业2.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

西安交大C++程序设计第四章作业2.docx

1、西安交大C+程序设计第四章作业2西安交通大学实验报告课程 计算机程序设计实验名称 结构体 第1 页共29页系 另U 实 验 日 期2014年4月26日专业班级 组别 实验报告日期2014 年4月27日姓 名_学号_ _ 报 告 退 发(订正、重做)同 组 人 教师审 批签字一、 实验目的掌握结构体的使用方法,学会用结构体的方法定义变量并对变量进行处理;掌握枚举法的使用方法。二、 实验内容(一)第一题:1、输入某小组5个人的姓名、性别、出生年份等信息,统计男女人数以及1988年以后(含1988年)出生的人 数。1.源程序代码:输入某小组个人的姓名、性别、出生年份等信息,统计男女人数以及年以后(含

2、 年)出生的人数。#include using namespacestd;struct xinxichar name20;char sex;int year; /定义结构体xinxi,包含名称(字符申)、性别(字符)、出生时间(整数)三个变量int main()xinxi cy5;int i,s=0,m=0;for (i=0;i5;i+)cout请输入第i+1个成员的信息:n姓名:”; cincyi.name;cout性别(男的输入6”,女的输入”):”;cincyi.sex;cout出生年份::cincyi.year;cout您输入的是:n” ;for (i=0;i5;i+) /显示输入内容

3、coutcyi.name t cyi.sex t cyi.yearendl;for (i=0;i=1988)m+;cout其中男生人数为:st女生人数为:5-sendl;cout1988年以后(含)出生的的人数为:mendl;return 0;2.实验结果:锄人第工个成员的信息; 哪嗽;八女的输入七f b旬 CA i n dowsVsyste im3 dl.exe蹲停敏八弟2个成员的信息,姓名f Ejj的输入,女的输入Ff bJi:请卿人隼3个成员的信息姓名:dzj性莉胃的输入,女的输入 W出生年坛1996藤八菜4个成员的信,息=性孰男的输入w女的输入初出生W: 1988请览人裁个成员的信息姓

4、名;:xiaoli性知畀的输入衣的输入七f a 出生洋粉,198?您输A鬲是:brd b19961996 a 19819873cs j bd3j bxlaoningxiaoli A1.如8年以后(备冲)出生 请按任意神继i-.3.问题分析:略。(二)第二题: 读入五个用户的姓名和电话号码,按照姓名的字典顺序排列后,输出用户的姓名和电话号码。1.源程序代码:/读入五个用户的姓名和电话号码,按照姓名的字典顺序排列后,输出用户的姓 名和电话号码。#include #include using namespacestd;struct dianhuabuchar name30;char num15; /

5、定义结构体dianhuabu ,包含两个变量:名字和电话号码。由丁电话号码较 长乂无需对其进行具体处理,故定义为字符申型int main()dianhuabu dhb5; / 声明 dianhuabu 型变量int i;for (i=0;i5;i+)(cout请输入第i+1dhbi.name;coutdhbi.num;cout您输入的信息如下:n;for (i=0;i5;i+) /显示输入信息(coutdhbi.name t dhbi.num n;for (i=0;i5;i+) / 排序(int k=i;for (int j=i+1;j5;j+)if (strcmp(dhbj.name,dhb

6、k.name)0) / 用库函数 strcmp 上匕较 字符申大小k=j;if (k!=i)(dianhuabu tmp=*(dhb+i); / 定义dianhuabu 型变量 tmp乍为中间变 量,进行交换*(dhb+i)=*(dhb+k);*(dhb+k)=tmp;cout排序结果如下:n;for (i=0;i5;i+)coutdhbi.name t dhbi.numendl; / 输出排序后结果 return 0;2.实验结果:39 Ciwi nd owsXsysterTi 32cmd exe请输入第1个用户的信息:姓名7 ewrthr 电话号码:346768 =请输入第2个用户的信息:

7、姓名:bhnjt 电话号玛:4356请输入第3个用户的信息:姓名t nghjhtm电话号码;2346476请输入第4个用户的信息:姓名;bfgdnhg电活号码:32457请输人第5个用户的信息:姓名:bghg.j电话号码:3245637您输入的信息如下ewrthr 346768bhnjt 4356nghjhtm 2346476bfgdnhg 32457bghgj 3245637排序结果如下:bfgdnhg 32457bghgj 3245637bhnjt 4356ewrthr 346768nghjhtm 2346476请按任意键继续: -4 W 卜(2)输入名称长度递增,后者包含前者,用来检验库

8、函数 strcmp的 排序效果:3B C: /.indovs-. 5t#m32cmd请输入第1个用户的信息:姓名:abcdef电话号码:5446378798请输入第2个用户的信息:姓名:abcdefg电话号码,54267请输X第3个用户的信息:姓名:abcdefghi 电话号码了5467请输入第4个用户的信息:姓名:abcdefgh 电话号码,545676请输入第5个用户的信息:姓名:abcde电话号码二456768您输入的信息如下;abcdef 5446378798abcdefg 54267abcdefghi 5467abcdefgh 545676abcde 456768排序结果如下:abc

9、de 456768abcdef 5446378798abcdefg 54267abcdefgh 545676abcdefghi 5467请按任意键继续一,4 1 rpi ,3.问题分析:略(三)第三题:输入两个整型数组(假设数组的大小为 7)的各个元素,输出不是两个数组共有元素,例如,输入 1,2,3,4,5,6,7和 5,6,7,8,9,0,输出为 1,2,3,4,8,9,0.1.源程序代码:输入两个整型数组(假设数组的大小为7)的各个元素,输出不是两个数组共 有元素,/ 例如,输入 123,4,5,6,7 和5,6,7,8,9,0 ,输出为 1,2,3,4,8,9,0.#include u

10、sing namespacestd;int main()int a7,b7,c14;int ij,m=0;cout if输入数组a的每个元素:n;for (i=0;i7;i+)cin*(a+i);cout if输入数组b的每个元素:n;for (j=0;j7;j+)cin*(b+j);for (i=0;i7;i+)j=0;while (*(a+i)!=*(b+j)&jv7)j+;if (j=7)*(c+m)=*(a+i);m+;for (i=0;i7;i+)j=0;while (*(b+i)!=*(a+j)&jv7)j+;if (j=7)*(c+m)=*(b+i);m+;if (m=0)cou

11、t没有非共有元素! n” ;return 0; /直接结束,不再进行以下内容cout共有m个非共有元素:n; int k;for (k=0;km;k+)cout*(c+k) ; / 输出 coutendl;return 0;2.实验结果:(1)全不相同:田 C;wi nd stemS 2c mdl,e.eI2 3 4 5 6 7请输入数组b的每个元素:II12 13 14 15 16 17共有14个非共有元素:1 2 3 4 5 6 7 11 12 13 14 15 16 17 请按任意键继续. _ 弗 EE3(2)部分相同:田 Cswindow3systemS 2Xc md-exe请输入数组

12、。的每个元素;1 2 3 4 5 6 7请输入数组b的每个元素:1 2 3 4 8 9 0共有6个非共有元素:5 6 7 8 9 0请按任意键继续.* f 一I(3)全相同:f田 Ciwi nd o5te m3 2g we请输入数组。的每个兀素;* n 11 2 3 4 5 6 71_i请输入数组b的每个元素:1 2 3 4 5 6 7没有非共有元素!请按任意键继续. 1* 1 M .3.问题分析:不足之处:题目中说是数组大小为7,但第二个数组只有六个元素也进行了比较。而我的作业中没有实现这一点,只能是 7个元素.(四)实验题目四:口袋中有红、黄、蓝、白、黑5种颜色的小球若干个,如果每次都从

13、口袋中取出3种不同颜色的小球,共有多少种组合?试打印出每种组 合的3种颜色,要求使用枚举类型来表示小球的颜色。1.程序源代码#include using namespace std;enumColorsred,yellow,blue,white,black;void ys( int i)switch (i)case red:cout red ;break;case yellow:cout yellow ;break;case blue:cout blue ;break;case white:cout white ;break;case black:cout black ;break;)void

14、 main()(int s=0,i,j,k;for (i=red;i=blue;i+)for (j=1+i;j=white;j+)for (k=j+1;k=black;k+)(s+;ys(i);ys(j);ys(k);coutendl;)cout 总共的组合数为:sendl;)2.实验结果函 C :Wi n ssyst p m S 2cnn d .ex eredyellowblueredyellowwhiteuredyellowblackredbluewhiteredblueblackredwhiteblack*巳11呵bluewhiteV 巳 llcwblueblackyellowwhite

15、blackbluewhiteblack总共的组合数为!10请技任意键缶蜷. .4 |irrV3.问题分析:此题中虽然定义了枚举类型,然而实际过程中,感觉并没有使用到枚 举,它的存在似乎没有意义,不知道是不是方法用错了。五、第五题:5、编写函数,该函数实现任意一个正整数是否为完全 数。再编写函数输出完全数等于各因子之和的式子。最后找出 2100000之内所有完全数。所谓完全数是其各因子之和正好等于本身的数,例如输出格式如下的完全数: 6=1+2+3, 28=1+2+4+7+14#include using namespacestd;void panduan( int i) /自定义函数,用于判断

16、i是不是完全数int m,s=0;int *num=new int i; 动态分配数组空间,虽然仍然大于实际需要值,但 数组大小基本上得到了控制for (m=1;m=i/2;m+)if (i%m=0)nums=m;s+;/s最终为因子个数int sum=0;int n;for (n=0;ns;n+)sum=sum+numn/sum最终为各因子之和if (sum=i)couti =;for (n=0;ns-1;n+)coutnumn + ;coutnums-1endl;delete num; /释放数组空间int main()(int i;cout从2到的10000况全数如下:n;for (i=

17、2;i100000;i+)panduan(i);return 0;2.实验结果:3.问题分析:在做这道题的过程中,起初出现了一个奇怪的现象:如果上限由100000改为10000,则程序正常运行,但对于100000,会显示出现问题:.S3 r:vind n 7 Arrrd pxf6=B2+328=1+2+4+7+14496=1+2+4+8+16+31+62+124+2488128=1+2+4+8-16+32+64+127+254-508+1016+2032+4064This application has requested the Runtime to terminar Please cont

18、act the application s support team for more 请按任意键继续,后来检查不出问题时,发现了一直以来一个不良习惯: 不编写释放数组空间的语句。试着加上这一语句之后再运行时, 发现程序能够正常 进行了,因而认为应该是这句语句的作用,但并不知道具体的原因。六、第六题:6、(必做题)编写一个实现文章(即字符串)单词统 计功能的程序,要求:输入一系列英文单词字符串(即带空格的字符 串),单词间用空格隔开或逗号或句号隔开。请统计该字符串中单词 出现的频率,并按词典顺序输出单词及其频率。 必须用结构体方法实现。1.源程序代码:#include #include usi

19、ng namespacestd;struct frequencychar word20;int n;danci100; /定义结构体变量danci ,它由单词及其频率两个量组成struct wchar a20;in100; /定义了个元素的字符申组,用于储存输入的句子中的每个单词 int fre( char nu,w in, int mu)统计每个单词的频率函数int i,pl=0;for (i=0;imu;i+)if (strcmp(nu,ini.a)=0)pl+;return pl;void main()char article501;cout输入句子:n cin.get(article,

20、500);int l=strlen(article); /取其长度,定义为整型数lint i,j,k,m;for (i=0,j=0;il;i+) /开始循环,从i=0循环到i=l,循环内部也会对i进行增加,因而主循环的i是处理了一些节点:离开单词部分到进入单词部分之间 的字符char a=*(article+i); /a 定义为 article 第i 个字符,if (a=a )|(a也)/ 判断若已经是字母了的话 就进入循环记录接下来的单词内容,否则继续i增加直到走完非字母字符到达字 母m=0;k=i;char b=*(article+k);while (b=a )|(b也)/ 当它是字母就循

21、环,若已经不是字母了,就跳出循环inj.am=b;k+;m+;b=*(article+k); / 一直加直到遇到非字母字符时停止inj.am= 0; 这个单词转录完了之后,将最后一个字符写为0以防乱码j+; /下一个单词的写入i=k-1; /由于在小循环中k最后一次循环多加了一个,所以在这里扣 除,赋给i,i就不再执行单词的中间字母部分,只需对非字母部分判断直到遇到 下一个单词的开头字母/至此,已记录所有单词到in.a中。int mu=j; /记录下单词数目,共有单词m命(注意到最后j加了)/然后将每一个不同的单词储存在danci.word里int s=0;for (i=0;imu;i+)j=

22、0;while (ji&strcmp(ini.a,inj.a)!=0)j+;if (j=i)strcpy(dancis.word,ini.a);s+;至此将所有不同单词依次储存到了 danci.word中,s为不同单词个数/然后排序for (i=0;is;i+)(k=i;for (j=i+1;js;j+)if (strcmp(dancij.word,dancik.word)0)k=j;if (k!=i)(frequency tmp=*(danci+i);*(danci+i)=*(danci+k);*(danci+k)=tmp;/cout统计结果为:n”;for (i=0;is;i+) /逐个判

23、断频率并导入到dancii.n 中去(dancii.n=fre(dancii.word,in,mu);cout单词:dancii.word t 频率:dancii.nendl; / 输出2.实验结果:(1)LdLlJ按照题目要求的检验:fsn加nd 0!即 n ? TVrrr-d pvp输入句子;L and, vouf are, and, I, am, are? mavbe. you, and, L mavbe, are 统计结果为:单词:I频率:313322请按任意涎继续,,+ .(2)事实上,由于审题失误,我所编写的这个程序,能够对一切情 况进行处理(个人认为这个程序能够实现题目的要求,所

24、以不能算 错),单词之间可以有多个非字母字符,可以有空格,开头也可以有 各种字符,唯一不足的是无法将The和the识别为同一单词:S3 ndoKexe输入句子:sgb sgb bgi!bs sgb sfg 统计结果为: 单词:bgf 等词:bs 届词:sfg 单词:sgbgbSb 率率率率%频频频频15请按任意键继续, . L/k- 一_. L 7 | I 输入句子:Enjoy our short life:He said, with a ,although he is only twenty-three ye e cured and there is little time left and

25、 the gently blowing wind everyday world for a longer time.统计结果为::But:Enjoy:He:I频率:2:We:a频率:2:accept:all:although:am:and:be:birds:blowing:can:complex:cured:desires:disease司司司司司司1 11 11 1 1 2 1 19.1 1 1 1 1 1 1 1- 1彰彰琴 笔 莉琴彰*琴由ZR彰琴、5:孕频频频 频 频频频频频频频频频频频频频3.问题分析:这道题较难,再加上审题的失误导致我在这道题上做了 更多的工作。可能办法有点笨,但没

26、有深入思考,所以最终程序较为 麻烦。从我最终编写的程序来看,能够实现对各种输入情况下单词数 的统计,实现这一功能主要问题在以下几点:首先说明程序的思路: 输入一个含有各种字符的字符串,然后将其中的每一个单词依次挑选 出来同时将其储存在用结构体定义好的 一组字符串中;然后将这些单 词中不同的单词挑出来存到另一二元结构体 单词,频率的每一项的 “单词”元素中;然后对二元结构体根据“单词”元素进行排序;然 后根据每个“单词”元素在原来储存的所有单词中的出现次数得到 频率并且同时将频率值保存到“频率”元素中并输出。(1)单词的分离过程,这应该是其中几乎最麻烦的过程。由于要将 每个单词识别出来,分开并且储存下来所以要定义一系列的字符串用 于存储每个单词,为此定义了结构体:struct wchar a20;in100;然后需要判断单词。从第一个字符开始,遇到字母后开始将原字 符串的字符录入到单词字符串,遇到不是字母的字符时停止,给末尾 加上0后这一单词的录入便完成,然后从这个非字母字符开始在 往下判断,遇到下一个字母也就是下一个单词的首字母时子进行下一 个单词的录入,直到完成所有录入。完成以上工作之后,为了进行下一步的统计频率,还需要将其中不同的单词挑出来然后存储到二元结构体的 Word元素中

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1