ImageVerifierCode 换一换
格式:DOC , 页数:17 ,大小:201KB ,
资源ID:9005703      下载积分:10 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

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

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

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请。


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(编程与综合练习题-c指针.doc)为本站上传会员【xrp****65】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

编程与综合练习题-c指针.doc

1、17 第五章 数组与指针习题 二、编程与综合练习题 5.3 打印杨辉三角形(10行)。使用二维数组并利用每个系数等于其肩上两系数之和。 解:好的算法无特例,二维数组共用11列,第1列全0,方便计算 #include using namespace std; int main(){ int a[10][11]={0,1},i,j; //初始化时写好第1行,其余各行全0 for(i=1;i<10;i++) //为了全部算法无特例,共用11列,第1列全0,方便计算 for(j=1;j<=i+1;j++) a[i][j

2、]=a[i-1][j-1]+a[i-1][j]; for(i=0;i<10;i++){ for(j=1;j<=i+1;j++) cout< #include using namespace std; void inverse(int [], int [],int,int);//注意数组最高

3、维可缺省,例5.5因初学未省 void multi(int [], int [], int [],int,int,int); void output(int [],int,int); int main(){ int middle[6*3], result[6*4];//注意写作6*3等可清楚看出矩阵的行列 int matrix1[3*6]={8,10,12,23,1,3,5,7,9,2,4,6,34,45,56,2,4,6}; int matrix2[3*4]={3,2,1,0,-1,-2,9,8,7,6,5,4}; output(matrix1,

4、3,6); inverse(matrix1,middle,3,6); output(middle,6,3); output(matrix2,3,4); multi(middle,matrix2,result,6,3,4); output(result,6,4); return 0; } void inverse(int matrix1_1[],int middle_1[],int a,int b){ int i,j; for (i=0;i

5、 middle_1[i+j*a]=matrix1_1[i*b+j]; return; } void multi(int middle_1[],int matrix2_1[],int result_1[],int a,int b,int c){ int i,j,k;

6、 for (i=0;i

7、cout < using namespace std; int atoi(char s[]){ int

8、 temp=0,f=1,i=0; while(s[i]!='\0'&&s[i]!='-'&&(s[i]<'0'||s[i]>'9')) i++;//去除串前部无效字符 if(s[i]=='-'){//读负号 f=-1; i++; } if(s[i]<'0'||s[i]>'9') cout<<"error!"<='0'&&s[i]<='9'){//转换数字串 temp=temp*10+s[i]-48; i++; } return f*temp; } int main(){

9、 char num[20]; cin.getline(num,19); cout<

10、对。 ival=ip; 错,赋值类型错,指针型不能赋给整型。 *ip=ival; 错,未确定指针ip初值,用ival给随机内存赋值是危险的。但语法对。 ip=ival; 错,赋值类型错,整型不能赋给指针型。 *ip=&ival; 错,赋值类型错,地址(指针型)不能赋给整型。 ip=&ival; 对,地址赋给指针型。 dp=ip; 错,整型指针不能赋给双精度指针。 dp=*ip; 错,赋值类型错,整型不能赋给指针型。 *dp=*ip; 对,赋值类型转换 5.7 编程定义一个整型、一个双精度型、一个字符型的指针,并赋初值,然后显示各指针所指目标的值与地址,各指针的值与指针

11、本身的地址及各指针所占字节数(长度)。 *其中地址用十六进制显示。 解:注意:字符指针输出是字符串,必须强制转换为无类型指针 #include using namespace std; int main(){ int *ip,ival=100; double *dp,dval=99.9; char *cp,cval='A'; ip=&ival; dp=&dval; cp=&cval; cout<<*ip<<'\t'<<&*ip<<'\t'<

12、'\t'<

13、t'<

14、安排了4个字节。 5.8 分别编写下列字符串处理函数 (1)char *strcat1(char *s,const char *ct); 将串ct接到串s的后面,形成一个长串。【例6.7】以数组为参数,现用指针为参数。 (2)int strlen1(const char * s); 求字符串长度的函数,返回串长(不包括串结束符)。 (3)char * reverse (char *); 反置字符串s,即可将“break”成为“kaerb”。 (4)char * strchr( const char *cs,char c); 查找字符c在串cs中第一次出现的位置,返

15、回指向该字符的指针,若没有出现则返回NULL。 (5)char *strstr (const char *cs1,const char *cs2); 返回串cs2作为子串在cs1中第一次出现的位置,若没有出现则返回NULL。 解:为了函数的通用性,有些可不要返回值的函数,也保留返回值。反置字符串函数,从串两头的指针同时向中间移动,重合或交错时停止。查找子串,先找子串的第一个字符,再核对子串其他字符。 #include using namespace std; char* strcat1(char* s,const char* ct){ char* st=s;

16、 while(*s) s++;//*s作为条件,等效*s!=0 while(*s++=*ct++); return st; } int strlen1(const char* s){ int i=0; while(*s++) i++; return i; } char* reverse (char* s){ char temp,* temp1=s,* temp2=s; while(*temp2) temp2++; temp2--; //指针移回串尾 while(temp2-temp1>0){//注意此处,从串两头的指针同时

17、向中间移动,重合或交错时停止 temp=*temp1; *temp1=*temp2; *temp2=temp; temp1++; temp2--; } return s; } char* strchr( const char*cs,char c){ while(*cs!=c&&*cs) cs++; if(*cs==0) cs=NULL; //未找到返回NALL return (char*)cs; } char *strstr (const char *cs1,const char *cs2){ char *temp; char

18、temp1=(char*)cs2; while(*cs1){ //只要主串还有字符未查,则继续 while(*cs1!=*cs2&&*cs1) cs1++; //找到主串含有子串的第一个字符,或主串查完停止 temp=(char*)cs1; temp1=(char*)cs2; if(*cs1){ //核对子串其他字符 while(*cs1++==*temp1++||*temp1); if(*temp1==0) return temp; //找到子

19、串返回 } } return NULL; //未找到返回NAL } int main(){ char a[40]="李明"; char b[20]="是东南大学学生"; char c[40]="Southeast University"; char *cp; cout<

20、t<<"字符串长度为:"<

21、cout<

22、以去除最后一位,以n=3657为例。 由此图可见,由string指向应填入的字符数组的相应位置。 由调用的最底层开始,回归时填入,每次回归,指针后移一位,由此得 char * itoal(int n,char *string){ if(n/10) string=itoal(n/10,string); *string++=n%10+48;//字符,ASCII码 return string; } 考虑,数字串结束符和负数,得完整的函数。 char * itoal(int n, char *string){ if(n<0){ *string++=’_’;

23、 n=-n; } if(n/10)string=itoal(n/10,string); *string++=n%10+48; *string=’\0’; return string; } 源代码: #include using namespace std; char* reverse (char* s){ char temp,* temp1=s,* temp2=s; while(*temp2) temp2++; temp2--;//指针移回串尾 while(temp2-temp1>0){//注意此处,从串两头的指针同时向中间移动,

24、重合或交错时停止 temp=*temp1; *temp1=*temp2; *temp2=temp; temp1++; temp2--; } return s; } char *itoa (int n,char *string){ char *temp=string; if(n<0){ *temp++='-'; n=-n; } do{//注意个位放在前了 *temp++=n%10+48; }while(n=n/10);//显式的循环 *temp='\0'; if(*string=='-') temp=stri

25、ng+1;//有负号仅反转数字部分 else temp=string; reverse(temp);//个位放到后面 return string; } char *itoa1 (int n,char *string){ if(n<0){ *string++='-'; n=-n; } if(n/10) string=itoa1(n/10,string);//隐式循环 *string++=n%10+48; //第一次是数字最高位放串的最前面的字符(不含符号),注意指针移动在后 *string='\0'; return string;//注意返回

26、的指针已后移一字符 } char *itoa0 (int n,char *string){ itoa1(n,string); return string; } int main(){ int num; char st[20]; cin>>num; cout<<"输出数字串:"<>num; cout<<"输出数字串:"<中定义一个日期时间的结构: struct tm{ int tm_sec

27、 //秒 int tm_min; //分 int tm_hour; //时 int tm_mday; //日 int tm_mon; //月 int tm_year; //年,实际放的是与1970年的差,如1990年为20 int tm_wday; //星期 int tm_yday; //一年中的第几天 int tm_isdst; //是否夏时制 }; 函数 time_t time(time_t *tp)是提取当前时间,time_t即长整型,代表从1970年1月1日00:00:00开始计算的秒数(格林尼治时间),放在首地址为tp的单元内。

28、 函数 tm *localtime(const time_t *tp) 将tp地址单元中的时间转换为日期时间结构的当地时间;(函数 tm *gmtime(const time_t *tp)转换为日期时间结构的格林尼治时间;) 函数 char *asctime(tm *tb)将tb地址单元中的tm结构的日期时间转换为字符串(供显示),它有固有格式,如: Sun Sep 16 01:03:52 1973 利用以上资源,重新设计一个日期时间类(DataTime),要求定义对象时取当前时间进行初始化,显示时重取显示时刻的时间并显示出来。 解: #include

29、ream> #include using namespace std; class datatime{ tm *timedata; long allsecond; char *tmp; public: datatime(){ time(&allsecond); timedata=localtime(&allsecond); tmp=asctime(timedata); cout<

30、ata=localtime(&allsecond); tmp=asctime(timedata); cout<>ch; if(ch=='y'||'Y') dt.gettime(); return 0; } 5.11 完善自定义字符串类mystring,函数包括:构造函数、拷贝构造函数、析构函数,并重载运算符[ ],=(分别用mystring和C字符串拷贝),+(

31、strcat),+=,<,==(strcmp)。 解: 此例既是对第4章的复习也是一个提高。拷贝构造函数的应用请参阅4.4.2节末尾两项说明,本例形参使用引用,仅在返回时调用了拷贝构造函数。运算符的重载请参阅4.5节。 #include using namespace std; const int n=256; class mystring{ char str[n]; //存放字符串的数组容器 int maxsize; //最大可用元素数,可防止数组出界,提高健壮性 int last; //已用

32、元素最大下标 public: mystring(){ last=0; maxsize=n; str[0]='\0'; cout<<"缺省构造函数"<

33、数"<

34、erator[](int i){ //返回引用,可读可写 if(i>last) last=i; //下标运算符,可添加长度但不查边界 return str[i]; } mystring operator=(mystring &); mystring & operator=(char * ms);//这里重载的=是把C风格字符串赋给mystring mystring operator+(mystring &); mystring operator+=(mystring &); bool operator<(mystring &); bool o

35、perator==(mystring &); }; mystring mystring::operator=(mystring & ms){ last=-1; do{ last++; str[last]=ms.str[last]; }while(last

36、last]!='\0'&&last

37、last&& temp.last

38、 str[last] ='\0'; //截尾处理时,必须加串结束符 return *this; } bool mystring::operator<(mystring & ms){ //重载<运算符 int i=0,k; do{ k=str[i]-ms.str[i]; i++; }while(k==0&&i

39、ystring & ms){ int i=0,k; if(last!=ms.last) return false; do{ k=str[i]-ms.str[i]; i++; }while(k==0&&i

40、函数生成 mystring ms4(ms3),ms5=ms3,ms6; //ms4,ms5用拷贝构造函数生成;ms6用缺省构造函数 ms6=sp4; //ms6赋值是返回引用,不用拷贝构造函数 ms1.show(); ms2.show(); ms3.show(); ms4.show(); ms5.show(); ms6.show(); ms4=ms1+ms2+ms6;//注意temp和临时变量由拷贝构造函数生成 ms4.show(); ms1+=ms2+=ms3; ms1.show(); if(ms1

41、t<<"应排在"<

42、]='.';//写入 ms1[i]='\0'; i=0; ms1.show(); return 0; } 5.12 将习题5.8中的字符串处理函数移植到mystring类中,其中strcat已重载为+运算符, 请将其它4个转为成员函数。对比成员函数与独立函数构造上有何不同? 解:这四个函数因mystring内部有串长,又要求下标索引,再加上str字符数组可直接使用,构造大不相同。 #include using namespace std; const int n=256; class mystring{ char str[n];

43、 //存放字符串的数组容器 int maxsize; //最大可用元素数,可防止数组出界,提高健壮性 int last; //已用元素最大下标 public: mystring(){ last=-1; maxsize=n; str[0]='\0'; cout<<"缺省构造函数"<

44、[last]; }while(s[last]!='\0'&&last

45、ndl; } void show(){//如需重载<<,则参见9.3.3节,暂时未学到,替代方法是用show()函数 cout<last) last=i; //下标运算符,可添加长度但不查边界 return str[i]; } my

46、string & operator=(mystring &); mystring & operator=(char * ms);//这里重载的=是把C风格字符串赋给mystring mystring operator+(mystring &); //这里返回不能用引用 mystring & operator+=(mystring &); bool operator<(mystring &); bool operator==(mystring &); }; void mystring::reverse(){ int i=0,j=last-1; char temp;

47、 while(j>i){//注意此处,从串两头同时向中间移动,重合或交错时停止 temp=str[i]; //头尾交换 str[i]=str[j]; str[j]=temp; i++; j--; } } int mystring::strchr(char c){ int i; for(i=0;i!=last;i++) if(str[i]==c) return i; return -1; //未找到返回-1 } int mystring::strstr(mystring str1){ int i=0,k=1; while(str[

48、i]!='\0'){//只要主串还有字符未查,则继续 while(str[i]!=str1[0]&&str[i]!='\0') i++;//找到主串含有子串的第一个字符,或主串查完停止 if(str[i]!='\0'){//核对子串其他字符 while(str[i+k]==str1.str[k]&&k

49、g::operator=(mystring & ms){//这里返回值改为引用,不调用拷贝构造函数 last=-1; do{ last++; str[last]=ms.str[last]; }while(last

50、ze-1); str[last] ='\0'; //截尾处理时,必须加串结束符 return *this; } mystring mystring::operator+(mystring & ms){//注意+和+=的不同 mystring temp(*this);//+必须在一份拷贝上进行 int i=-1; temp.last--;//串的结尾是结束符,连接时要覆盖掉 do{ temp.last++; i++; temp.str[temp.last]=ms.str[i]; }while(i

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服