北科c++实验6-函数与预处理

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

本周实验内容:函数与预处理1完成下面实验内容,将程序清单或运行结果截图复制到实验文档中,以“学号+姓名+班级+实验6.doc”命名实验文档,将文档上传至ftp服务器上的“C++\”目录下。注:本此实验内容与教材略有不同,请按本文档完成实验内容。一、实验目的1、理解函数的概念和定义。2、锻炼调试程序的能力。二、实验内容和实验要求按实验指导书P166至P167的要求,完成实验6的实验内容及自测练习。1.练习题1运行结果截图:思考题及问题:答案:2.练习题2运行结果截图:思考题及问题:答案:3.练习题3运行结果截图:思考题及问题:答案:4.练习题4运行结果截图:思考题及问题:答案:5.练习题五(此题为新增内容)⑴数字反射⑵要求编写一个函数,接收一个整数值,返回这个数中数字逆序后的结果值。例如:给定数7631,函数返回1367.⑶思路①通过%10运算与循环的结合,可依次获得给定数的每位数字。例如:7631%10=1,获得了个位数;7631/10=763,即丢掉了个位数字。继续下去,可依次得到数字1、3、6、7.②边循环边将每次得到的数字添加到需返回的数值中。例如:0*10+1=1;1*10+3=13;13*10+6=136;136*110+7=1367.⑷程序代码⑸运行结果6.练习题六(此题为新增内容)⑴猜数字游戏⑵要求编写一个程序,可以玩“猜数字”的游戏。具体描述如下:程序在1~1000之间的整数中随机选择需要猜的数。然后显示:Ihaveanumberbetween1and1000.Canyouguessmynumber?Pleasetypeyourfirstguess.玩家于是输入猜想的第一个数。程序会做出如下响应之一:1.ExcellentYouguessedthenumber!Wouldyouliketoplayagain(yorn)?2.Toolow.Tryagain.3.Toohigh.Tryagain.如果玩家的猜测是不正确的,程序应继续循环,直到玩家最终猜对为止。此过程中程序要一直提醒玩家是猜大了(Toolhigh)还是猜小了(Toollow),这样帮助玩家尽快获得正确的答案。⑶思路①通过rand()函数产生随机数。关于rand()的介绍和使用方法已附在本文档最后,请参考使用。②程序流程介绍如下:a)产生一个让玩家猜想的介于1~1000的数,并显示提示.b)通过循环检测玩家猜想是否正确。如正确,输出相应提示并退出循环;如不正确,输出相应提示,继续循环。③本题中关于函数的使用不做具体限制,可使用函数,也可不使用函数。若使用函数,可将本程序按功能进行分解,每一个子功能应用函数。⑷程序代码⑸运行结果三、自测练习1.自测练习1源程序文本:运行结果截图:2.自测练习2源程序文本:运行结果截图:3.自测练习3设计一个打印年历的程序。要求:打印每个月的月历的功能由一个独立的函数完成,程序运行时,主程序通过若干次调用该函数完成年历的输出。注意处理闰年问题。(此题选做!)提示:①在主程序中输入年份,然后调用打印月历的函数依次打印该年12个月的月历。打印月历的函数参数为:年份,月份,无返回值。打印结果:纵向对应星期日至星期六,依次在相应位置输出日期。如:2012年4月的月历:2012年4月月历:日一二三四五六123456789101112131415161718192021222324252627282930②此函数有两个问题需要解决:1、该月的天数。关于此问题只需注意闰年的影响即可。2、该月的第一天是星期几?这个问题需找一个参照点,如设2000年1月1日为参照点,这天是星期六,则可计算该月的第一天距离参照点有多少天,如2012年4月1日与2000年1月1日相差4474天,4474&7=1,所以2012年4月1日是星期日。③可设计一个专门的函数计算某年某月的天数,一个专门的函数计算某年某月某日是星期几,一个专门的函数计算两个日期之间相差的天数……4.自测练习4有一个8层灯塔,每层所点灯数都等于该层上一层的两倍,一共有765盏灯,求塔底的灯数。(此题选作!)提示:两种方法,一为数学法(此略);二为穷举法。即对塔底的灯数从1盏开始,依次检验8层灯的总数是否为765盏,若是,则找到答案,若不是,则塔底灯数加1进行下一次测试。可设计一个函数计算塔底灯数为n盏时,8层灯的总灯数。课后作业(此次作业要求写到作业纸上,注明班级、学号和姓名,下周上课前提交!无需抄题,只写答案即可!)1、判断对错。如果错误,请说明理由。a)地址运算符&只能作用于常量和表达式。b)声明为void*类型的指针可以被间接引用。c)未经过强制类型转换的不同类型的指针不能相互赋值。2、针对下列各题,各编写一条C++语句完成指定的任务。假设双精度的浮点数存储在8个字节中,数组在内存中的开始地址为1003600。这道练习题的每个部分应该在恰当的地方使用前面部分的结果。a)声明一个含有10个元素的double类型的数组numbers,并把10个元素初始化为0.0,1.1,2.2…,9.9。假设符号常量SIZE已定义为10b)声明一个指针nPtr,指向double类型的变量c)利用一条for语句,用数组下标表示法打印数组numbers的10个元素。以小数点后面精度为1的格式打印每个数。d)编写两条不同的语句,将数组numbers的开始地址赋给指针变量nPtr。e)利用一条for语句,使用指针/偏移量表示法通过指针nPtr打印数组numbers的元素f)利用一条for语句,把数组名作为指针,用指针/偏移量表示法打印数组numbers的元素。g)利用一条for语句,使用指针/下标表示法通过指针nPtr打印数组numbers的元素。h)分别用数组下标表示法、把数组名作为指针的指针/偏移量表示法、nPtr的指针下标表示法和nPtr的指针/偏移量表示法引用数组numbers的第4个元素。i)假设nPtr指向数组numbers的开始位置,则nPtr+8引用的是哪个地址?该位置存储的值是什么?j)假设nPtr指向numbers[5],则执行nPt-=4之后nPtr引用的是哪个地址?该位置存储的值是什么?3、找出下列语句中的错误,并修改错误。a)int*number;coutnumberendl;b)double*realPtr;long*integerPtr;integerPtr=realPtr;c)int*x,y;x=y;d)chars[]=“thisisacharacterarray”;for(;*s!=‘\0’;s++)cout*s‘‘;e)shorint*numPtr,result;void*genericPtr=numPtr;result=*genericPtr+7;f)doublex=19.34;doublexPtr=&x;coutxPtrendl;4、请问下面的程序做什么?#includeiostreamusingnamespacestd;voidmystery1(char*,constchar*);//prototypeintmain(){charstring1[80];charstring2[80];cout“Entertwostrings:“;cinstring1string2;mystery1(string1,string2);coutstring1endl;}//endmainvoidmystery1(char*s1,constchar*s2){while(*s1!=’\0’)s1++;for(;*s1=*s2;s1++,s2++);//emptystatement}//endfunctionmystery15、请问下面的程序做了什么?#includeiostream#includeiostreamusingnamespacestd;voidmystery2(constchar*);//prototypeintmain(){charstring1[80];cout“Enterastring:“;cinstring1;coutmystery2(string1)endl;}//endmainvoidmystery2(constchar*s){intx;for(x=0;*s!=’\0’;s++)x++;returnx;}//endfunctionmystery26、以下程序的输出结果是什么?intnumber=99;int*ptr=&number;//addressofnumberis0012FF7Ccoutnumber““*ptr““ptr;7、以下程序的输出结果是什么?charc[]=“Helloyou”;char*sptr=c;for(;*sptr!=‘u’;sptr++)cout*sptr;8、以下程序的输出结果是什么?inta[]={1,2,3,4,5};int*ptr=a;couta[3]““*(ptr+3)““ptr[3];9、以下程序的输出结果是什么?intmain(){chars1[]=“Boston,Massachusetts“;char*sptr2=“NewYork,NY”;couts1““sPtr2;for(inti=0;(s1[i]=sptr2[i]!=’\0’;i++);coutendls1““sptr2endl;return0;}10、以下程序的输出结果是什么?charx[]=“Itisaniceday”;chary[25],z[15];cout“Thestringinarrayxis:“x“\nThestringinarrayyis:strcpy(y,x)“\n”;strncpy(z,x,9);z[9]=‘\0’;cout“Thestringinarrayzis:“zendl;11、以下程序的输出结果是什么?char*s1ptr=“C++isfun”;char*s2ptr=“C++isfuneverday”;if(strncmp(s1ptr,s2ptr,10)==0)cout”Equal”;elsecout“NotEqual“;12、编写程序:a)问题描述:编写一段简单的程序实现加密与解密。函数encrypt将一个字符指针作为参数,并通过将其值加1使用指针下标表示法改变指针指向的值。函数decrypt将字符指针作为参数,并通过将其值减1使用指针表示法来改变其指向的值。函数main调用函数encrypt和decrypt,并将加密字符串和解密字符串打印出来。b)实例输出:c)程序模板#includeiostreamusingnamespacestd;/*函数encrypt的原型声明*//*函数decrypt的原型声明*/intmain(){//初始化一个输入字符串charstring[]=“thisisasecret!”;encrypt(string);cout“Encryptedstringis:“string“\n”;decrypt(string);cout“Decryptedstringis:“stringendl;Encryptedstringis:uijt!jt!b!tfdsfu”Decryptedstringis:thisisasecret!return0;}voidencrypt(chare[]){/*函数encrypt的具体实现*/}voiddecrypt(char*ePtr){/*函数decrypt的具体实现*/}d)强化练习(选做!):假定完成的程序用于保护密码。大多数密码系统都会限制密码字符的个数。修改程序,使输入的密码可以为25个字符,但是如果多于10个字符,密码就会被截断。有些密码系统还提示用户重新输入密码以确认前次输入的正确性,将这个特点也加入到程序中。程序的交互如下所示:依据交互的形式改写以上程序,

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功