C程序设计第ch习题课v剖析_第1页
C程序设计第ch习题课v剖析_第2页
C程序设计第ch习题课v剖析_第3页
C程序设计第ch习题课v剖析_第4页
C程序设计第ch习题课v剖析_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

会计学1C程序设计第ch习题课v剖析第6章指针习题6-1用指针重新编写冒泡排序程序。习题6-2编写程序,将某一个输入的位数不确定的正整数按照标准的三位分节格式输出,例如,当用户输入82668634时,程序应该输出82,668,634。习题6-3编写程序,把10个整数1、2、…、10赋予某个int型数组,然后用int型指针输出该数组元素的值。习题6-4用指针编写一个程序,当输入一个字符串后,要求不仅能够统计其中字符的个数,还能分别指出其中大、小写字母、数字以及其他字符的个数。第1页/共34页第6章指针习题6-5编写一个函数,用于将一个字符串转换为整型数值。其原型为:intatoi(char*string);习题6-6编写一个函数,用于生成一个空白字符串,其原型为:char*mystrspc(char*string,intn);第2页/共34页习题6-1冒泡排序程序voidbubble_up(int*ptr,intcount){ for(inti=0;i<count;i=i+1) for(intj=count-1;j>i;j=j-1) if(*(ptr+j-1)>*(ptr+j)) { inttmp=*(ptr+j-1); *(ptr+j-1)=*(ptr+j); *(ptr+j)=tmp; }}ptr为指针intmain(){ constintCOUNT=16; intlist[COUNT]= { 503,87,512,61,908,170,897,275, 653,426,154,509,612,677,765,703 }; bubble_up(list,16); cout<<"Theresultis:"<<endl; for(inti=0;i<16;i++) cout<<list[i]<<""; cout<<endl; return0;}第3页/共34页习题6-2例如,当用户输入82668634时,程序应该输出82,668,634。intmain(){ intnum; chararray[50]; char*ptr=array; cout<<"请输入一个正整数:"; cin>>num; intk=0; while(num!=0) { *ptr=num%10+'0'; num=num/10; ptr++; k++; if(k%3==0) { *ptr=','; ptr++; } }; *ptr=0; strrev(array); cout<<"该整数按照标准的三位分节格式输出为:"; cout<<array<<endl; return0;}第4页/共34页习题6-5编写一个函数,将一个数字字符串转换为一个整数函数原型:

intatoi(char*string);输入与输出:请输入待转换的字符串值:-529转换后的整型数值是:-529第5页/共34页习题6-5intatoi(char*string){ intnum=0; ints=1; if(*string=='-') { s=-1; string++; } if(*string=='+') { s=1; string++; }while(*string!=0&&*string>='0'&&*string<='9') { num=num*10+*string-'0'; string++; } returns*num;}第6页/共34页习题6-6char*mystrspc(char*string,intn);

char*mystrspc(char*string,intn){ char*ptr=string; while(n>0) { *string=''; string++; n--; } *string=0; returnptr;}intmain(){ char*str; intn; cout<<"请输入空白字符串的长度:"; cin>>n; str=newchar[n]; cout<<“\n结果如下,注意观察#之间的空格数:\n"<<endl; cout<<"#"<<mystrspc(str,n)<<"#"<<endl; cout<<""; for(inti=0;i<n;i++) cout<<i%10;cout<<endl<<endl; return0;}第7页/共34页第7章函数与指针习题7-1使用递归算法编写如下程序:对于任意给定的实数X和整数k>0,计算Xk。习题7-2Ackermann函数ack(m,n)由以下递归定义:习题7-3使用递归算法编写求斐波那契数列的第n项的函数,并编出主函数进行验证。第8页/共34页第7章函数与指针习题7-4编写一个求立方的函数cube,并重载它,使之可以对输入的整型量和实型量数值求立方。习题7-5重载判断两个数值大小的函数max,这些数值可能是整型数、实型数和字符型,函数的返回值为两个数值中的最大值。习题7-6编写一个函数,用于去掉字符串尾部的空格符,其原型为:char*mytrim(char*string);习题7-7编写一个函数,用于去掉字符串前面的空格,其原型为:char*myltrim(char*string);第9页/共34页第7章函数与指针习题7-8编写一个程序,当输入一个整数以后,可以转换成相应的英文单词输出。如:123转换成onehundredtwentythree。习题7-9用牛顿法或者二分法编写一个求方程f(x)=0在区间[a,b]中的实根的函数,其原型为:doubleequation(double(*func)(double),doublea,doubleb,doubleeps);第10页/共34页习题7-2#include<iostream>usingnamespacestd;intack(intm,intn){ if(m==0)returnn+1; elseif(n==0)returnack(m-1,1); returnack(m-1,ack(m,n-1));}结果:ack(0,0)=1

ack(2,3)=9

ack(2,4)=11第11页/共34页习题7-6mytrim(char*string);char*mytrim(char*string){ char*ptr=string; while(*ptr!=0) ptr++; do { ptr--; } while(*ptr==''); *(++ptr)=0; returnstring;}intmain(){ charstr[]="Theartofcomputerprogramming"; cout<<"截取前的原始字符串是:["<<str<<']'<<endl; cout<<"截取空格后的字符串是:["<<mytrim(str)<<']'; return0;}第12页/共34页习题7-7myltrim(char*string);char*myltrim(char*string){ char*ptr=string; while(*ptr=='') ptr++; strcpy(string,ptr); returnstring;}第13页/共34页第8章结构化设计方法1.输入某小组5个人的姓名、性别、出生年份等信息,统计男女人数以及1988年以后(含1988年)出生的人数。2.定义一个名为Circle(圆)的结构体,其数据成员是圆的外接矩形的左上角和右下角两点的坐标,计算该圆的面积。3.读入5个用户的姓名和电话号码,按姓名的字典顺序排列后,输出每个用户的姓名和电话号码。4.口袋中有红、黄、蓝、白、黑五种颜色的小球若干个。如果每次都从口袋中取出3个不同颜色的小球,共有多少种组合,请打印出每种组合的3种颜色。要求使用枚举类型来表示小球的颜色。5.用自顶向下、逐步求精的程序设计方法找出2~10000之内的所有完全数(所谓完全数,即其各因子之和正好等于本身的数。如6=1+2+3,28=1+2+4+7+14,所以6,28都是完全数)第14页/共34页第9章类和对象习题9-1设计一个Dog类,包含name、age、sex和weight等属性以及对这些属性操作的方法。实现并测试这个类。习题9-2设计并测试一个名为Ellipse的椭圆类,其属性为外接矩形的左上角与右下角两个点的坐标,并能计算出椭圆的面积。习题9-3.仿照Date类设计一个Time类,可以设置时间、进行时间的加减运算、按各种可能的格式输出时间。第15页/共34页习题9-1设计一个Dog类#include<iostream>#include<string>usingnamespacestd;classDog{ stringname; int age; charsex; floatweight;public: Dog(stringName,intAge,charSex,floatWeight); stringGetName(){returnname;} intGetAge(){returnage;} charGetSex(){returnsex;} floatGetWeight(){returnweight;} voidSpeak(){cout<<"Arf!Arf!"<<endl;}};Dog::Dog(stringName,intAge,charSex,floatWeight){ name=Name; age=Age; sex=Sex; weight=Weight;}intmain(){ Dogdog1("ahuang",3,'m',2.4); cout<<"Dog'sname:"<<dog1.GetName()<<endl; cout<<"Dog'sage:"<<dog1.GetAge()<<endl; cout<<"Dog'ssex:"<<dog1.GetSex()<<endl;cout<<"Dog'sweight:"<<dog1.GetWeight()<<endl; cout<<"Dogspeak:"; dog1.Speak(); return0;}第16页/共34页习题9-3.设计一个Time类classTime{ inthour,minute,second;public: intSecCalc(); Time(inth=0,intm=0,ints=0); //构造函数

voidSetTime(inth=0,intm=0,ints=0); //时间设置

voidprint_12(); voidprint_24(); TimeAdd(Time&); TimeSub(Time&);};第17页/共34页第9章类和对象习题9-4.合并Date类和Time类为一个DateAndTime类,修改相应的成员函数,当时间递增到新的一天时,应能够修改日期值。#include<iostream.h>#include<afx.h>classCDateTime{ CTimet;public: CDateTime(inty,intm,intd,inth,intmm,ints) {t=CTime(y,m,d,h,mm,s); } voidAddDay(intdays) {t=t+CTimeSpan(days,0,0,0); } voidIncDay() {t=t+CTimeSpan(1,0,0,0);} voidprint_ymd() {CStrings=t.Format("%Y,%m%d"); cout<<s<<endl; }};intmain(){ CDateTimex(2007,4,27,1,2,3); x.print_ymd(); x.AddDay(5); x.print_ymd(); return0;}第18页/共34页第10章类和对象(二)1.定义一个Dog类,包含name、age、sex、weight等属性,设计一个构造函数,可以对这些属性进行初始化。实现并测试这个类。2.设计并测试一个名为Ellipse的椭圆类,其属性为其圆心坐标以及半长轴和半短轴的长度。设计一个构造函数对这些属性进行初始化,并通过成员函数计算出椭圆的面积。3.仿照Date类设计一个Time类,设计多个重载的构造函数,可以设置时间、进行时间的加减运算、按各种可能的格式输出时间。4.合并Date类和Time类为一个DateAndTime类,修改相应的成员函数,当时间递增到新的一天时,应能够修改日期值。第19页/共34页习题10-1定义一个Dog类classDog{ charname[20]; int age; charsex; doubleweight;public: Dog(char*Name="",intAge=0,charSex='m',doubleWeight=0) { strcpy(name,Name); age=Age; sex=Sex; weight=Weight; } char*GetName(){returnname;} intGetAge(){returnage;} charGetSex(){returnsex;} doubleGetWeight(){returnweight;} voidSpeak(){cout<<"Arf!Arf!"<<endl;}};第20页/共34页习题10-2设计Ellipse类classEllipse{ intx1,y1,x2,y2;public: Ellipse(inta=0,intb=0,intc=0,intd=0): x1(a),y1(b),x2(c),y2(d){ } voidGetPosition(int&a,int&b,int&c,int&d) { a=x1,b=y1,c=x2,d=y2; } doubleArea() { return(double)x2*y2*3.1415926; }};第21页/共34页习题10-3设计Time类classTime{ inthour,minute,second;public: intSecCalc(); Time(inth=0,intm=0,ints=0); //构造函数

voidSetTime(inth=0,intm=0,ints=0); //时间设置

voidprint_12(); voidprint_24(); TimeAdd(Time&); TimeSub(Time&);};第22页/共34页第11章继承习题11-1从类Person中派生出一个教师类,新增的属性有:专业、职称和主讲课程(一门),并为这些属性定义相应的方法。习题11-2许多研究生既有学生的属性,又有教师的属性。试通过多重继承说明一个研究生类。习题11-3修改例10-4,从Point类中派生出一个Line类。Line类增加一个数据成员EndPoint,计算线的长度。试比较一下与直接使用Point类来构造Line类的不同之处。习题11-4.从Date类和Time类派生一个DateAndTime类,修改相应的成员函数,当时间递增到新的一天时,应能够修改日期值。第23页/共34页习题11-1从类Person派生Teacher类classPerson{protected: char Name[10]; int Age; int Sex; public: Person(char*name="",intage=0,charsex='m') { strcpy(Name,name); Age=age; Sex=(sex=='m'?0:1); } voidShowMe() {cout<<Name<<"\t"<<Sex<<"\t"<<Age<<"\t";}};第24页/共34页习题11-1从类Person派生Teacher类classTeacher:publicPerson { charSpecialty[20]; charPosition[20]; charMajorCourse[20]; public: Teacher(char*name="xxx",intage=0,charsex='m',char*spec="x",char*pos="x",char*maj="x") :Person(name,age,sex) { strcpy(Specialty,spec); strcpy(Position,pos); strcpy(MajorCourse,maj); } voidTeacher::ShowMe() { Person::ShowMe(); cout<<Specialty<<"\t"<<Position<<"\t"<<MajorCourse<<endl; }};第25页/共34页第12章多态性习题12-2扩充例11-6,从中派生出一个正方形类和圆柱体类,写一个测试程序,输出正方形的面积和圆柱体的体积。提示:正方形数据成员:一个顶点和边长;圆柱体数据成员:圆和高。PointSquareCircleCylinder第26页/共34页第12章多态性习题12-3扩充实例编程中的日期类,为Date类增加一个成员函数,可以判断一个日期是否是系统当前日期。从键盘输入你的生日,如果今天是你的生日则显示:“HappyBirthday!”,否则显示“还有xx天是你的生日”或“你的生日已经过去了xx天,明年的生日要再等yy天”。第27页/共34页第13章模板与异常处理习题13-1编写一个求绝对值的函数模板,并测试。习题13-2请将例4-5的冒泡排序函数改写成为模板函数并编写一个程序进行测试。习题13-3例13-6中所定义的通用栈类实际上是不完善的,如无法根据用户需求改变栈的大小,没有提供栈满溢出无法压入和空栈无法弹出提示等,请改进该程序。。习题13-5例6-1给出的求阶乘n!的函数,当用户的输入太大时(如51),会出现错误,请编写一个程序,使用异常处理机制来解决这一问题。第28页/共34页第14章标准库和输入/输出流习题14-1编写一个程序,分别用不同的域宽(0~10)打印出整数12345和浮点数1.2345。观察当域宽小于数值的实际需要的域宽时会发生什么情况。输出:12345123451234512345123451234512345123451234512345输出:1.23451.23451.23451.23451.23451.23451.23451.23451.23451.2345第29页/共34页第14章标准

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论