《C程序设计教学教程第2版》课后知识题.docx
《《C程序设计教学教程第2版》课后知识题.docx》由会员分享,可在线阅读,更多相关《《C程序设计教学教程第2版》课后知识题.docx(13页珍藏版)》请在冰豆网上搜索。
![《C程序设计教学教程第2版》课后知识题.docx](https://file1.bdocx.com/fileroot1/2023-2/22/151d7b7d-30e9-45f9-bb66-a65ee8bb2210/151d7b7d-30e9-45f9-bb66-a65ee8bb22101.gif)
《C程序设计教学教程第2版》课后知识题
第1章C++语言简介
1.修改例1-1的HelloWorld!
程序,使其能够在计算机屏幕上显示:
Iamastudent,andIlikeprogramming!
2.修改例1-3的加法计算器程序,编写一个乘法计算器程序。
3.修改例1-4的生日卡程序,使其能够输入和显示日期。
4.参考例1-5,使用梯形法计算下式定积分的值。
其中积分区域等分数可取为200,并将计算结果和手算结果相比较。
提示:
ex用标准数学函数库cmath中的库函数exp(x)表示。
5.仿照例1-6,编写一个计算矩形面积的程序。
第2章基本数据类型
1.为例2-2添加数据检验部分。
给出三边长,检验其是否能构成一个三角形的方法是检查是否任意两边和均大于第三边。
如果检验不合格,输出信息“ErrorData!
”
2.输入两个角度值x、y,计算如下式子的值。
3.编写一个程序,要求完成以下要求:
1)提示用户输入任意的3个小数;
2)显示这三个小数;
3)将这三个小数相加,并显示其结果;
4)将结果按四舍五入方法转换成整数并显示。
4.从键盘输入任意三个整数,然后输出这三个数并计算其平均值。
5.编写一个程序,将字符串“Love”译成密码,译码方法采用替换加密法,其加密规则是:
将原来的字母用字母表中其后面的第3个字母的来替换,如字母c就用f来替换,字母y用b来替换。
提示:
分别用4个字符变量来存储'L'、'o'、'v'和'e',利用ASCII表中字母的排列关系,按照译码方法对各个变量进行运算后输出即可。
第3章控制结构
1.编写计算阶乘n!
的程序。
2.计算1!
+2!
+3!
+4!
+......+10!
,即
3.编写程序求斐波那契数列的第n项和前n项之和。
斐波那契数列是形如
0,1,1,2,3,5,8,13,...
其通项为:
F0=0;
F1=1;
Fn=Fn1+Fn2。
4.编程求
,其中
。
提示:
结束条件可用
,其中u为通项,ε为预先给定的精度要求。
5.用牛顿迭代法求方程:
2x3—4x2十3x一6=0在1.5附近的根。
提示:
迭代公式
结束迭代过程的条件为(
)与(
)同时成立,其中ε为预先给定的精度要求。
6.求解猴子吃桃问题。
猴子在第一天摘下若干个桃子,当即就吃了一半,又感觉不过瘾,于是就多吃了一个。
以后每天如此,到第10天想吃时,发现就只剩下了一个桃子。
请编程计算第一天猴子摘的桃子个数。
7.编写一个程序,寻找用户输入的几个整数中的最小值。
并假定用户输入的第一个数值指定后面要输入的数值个数。
例如:
当用户输入数列为:
520153009700时,程序应该能够找到最小数9
8.有一分数序列
(即后一项的分母为前一项的分子,后项的分子为前一项分子与分母之和),求其前n项之和。
9.求a+aa+aaa+aaaa+......+aa...a(n个),其中a为1~9之间的整数。
例如:
当a=1,n=3时,求1+11+111之和;
当a=5,n=7时,求5+55+555+5555+55555+555555+5555555之和。
10.猜幻数游戏。
由系统随机给出一个数字(即幻数),让游戏者去猜,如果猜对,则打印成功提示;否则,打印出错提示,并提示游戏者选择下一步动作,最多可以猜5次。
第4章数组与字符串
1.使用数组来求斐波那挈数列的第n项和前n项之和。
2.编写程序,将4阶方阵转置,如下所示。
转置前方阵A转置后方阵A
3.使用数组编写一个统计学生课程平均分的程序:
输入6个学生的学号和3门课程的成绩(整数形式),统计每个学生3门课程的平均分(整数形式),最后输出统计结果。
输出格式:
学号 高数 英语 体育 平均分
-----------------------------------------------------------------
4.编写一个程序,要求用户输入一个十进制正整数,然后分别转换成为二进制数、八进制数和十六进制数输出。
5.输入10个字符到一维字符数组s中,将字符串置逆。
即s[0]与s[9]互换,s[1]与[8]互换,...,s[4]与s[5]互换,输出置逆后的数组s。
6.替换加密(恺撒加密法):
加密规则是:
将原来的小写字母用字母表中其后面的第3个字母的大写形式来替换,大写字母按同样规则用小写字母替换,对于字母表中最后的三个字母,可将字母表看成是首未衔接的。
如字母c就用F来替换,字母y用B来替换。
请将字符串“Iloveyou”译成密码。
第5章函数
1.编写字符串反转函数mystrrev(),该函数的功能为将指定字符串中的字符顺序颠倒排列。
然后再编写主函数验证之。
函数声明为:
voidmystrrev(charstring[])
该函数无需返回值。
提示:
求字符串长度可以直接调用库函数strlen(),但在程序首部应加上#include
2.编写一组求数组中最大最小元素的函数。
该组函数的原型为
intimax(intarray[],intcount);//求整型数组的最大元素
intimin(intarray[],intcount);//求整型数组的最小元素
其中参数count为待考察的数组中的元素个数,函数的返回值即为求得的最大或最小元素之值。
要求同时编写出主函数进行验证。
3.编写函数isprime(inta)用来判断变量a是否为素数,若是素数,函数返回1,否则返回0。
调用该函数找出任意给定的n个整数中的素数。
4.打印出以下的杨辉三角形(要求打印出10行)
1
11
121
1331
14641
15101051
……
提示:
打印杨辉三角形有两种方法:
1)杨辉三角形表现的是二项式
的展开式的系数。
例如,
故杨辉三角形的第三行(对应n=2)为
121
一般地,二项式
的展开式为
其中第m项
。
2)可直接根据杨辉三角形的形式来推出每项的值。
由下面的杨辉三角形可以看出,杨辉三角形每行的第一个数和最后一个数均为1,除第一行外,每行中间的各数等于上一行位于该数左上方和正上方的两数之和,即
。
5.用弦截法求一元方程
在区间
之间的一个根。
提示:
考虑当区间
足够小,在此区间中方程
仅有一个单根的情况,如下图所示。
图5.6弦截法求方程的解
此时如
和
异号,则可用两点间直线公式求出x2:
然后用x2代入原式求出f(x2),判断f(x2)与f(x1)和f(x0)中的哪一个同号,就用x2和f(x2)代替之,即如果f(x2)和f(x0)同号,就用x2和f(x2)代替x0和f(x0),反之用x2和f(x2)代替x1和f(x1),然后再继续上述过程直至|f(x)|小于给定的误差控制值。
第6章指针
1.使用指针编写一个对整型数组进行排序的函数,排序方法使用例4-6的交换排序法(冒泡排序法)。
2.编写程序,将某一个输入的位数不确定的正整数按照标准的三位分节格式输出,例如,当用户输入82668634时,程序应该输出82,668,634。
3.编写程序,把10个整数1、2、…、10赋予某个int型数组,然后用int型指针输出该数组元素的值。
4.用指针编写一个程序,当输入一个字符串后,要求不仅能够统计其中字符的个数,还能分别指出其中大、小写字母、数字以及其他字符的个数。
提示:
要输入包含空格的字符串需借助输入流对象的get()成员函数,如cin.get(str,100);语句就能将从键盘输入的前99个字符(含可能出现在其中的任意个空格)存入到字符数组str中去,若用户输入字符数少于99,则以回车换行表示输入结束。
5.编写一个函数,用于将一个字符串转换为整型数值。
其原型为:
intatoi(char*string);
其中参数string为待转换的字符串(其中包括正、负号和数字),返回值为转换结果。
6.编写一个函数,用于生成一个空白字符串,其原型为:
char*mystrspc(char*string,intn);
其中参数string为字符串,n为空白字符串的长度(空格符的个数)。
返回值为指向string的指针。
第7章函数与指针
1.使用递归算法编写如下程序:
对于任意给定的实数X和整数k>0,计算Xk。
2.Ackermann函数ack(m,n)由以下递归定义:
ack(0,n)=n+1
ack(m,0)=ack(m-1,1)
ack(m,n)=ack(m-1,ack(m,n-1))其中m>0,n>0
编写一个计算此函数的递归程序。
3.使用递归算法编写求斐波那契数列的第n项的函数,并编出主函数进行验证。
4.编写一个求立方的函数cube,并重载它,使之可以对输入的整型量和实型量数值求立方。
5.重载判断两个数值大小的函数max,这些数值可能是整型数、实型数和字符型,函数的返回值为两个数值中的最大值。
6.编写一个函数,用于去掉字符串尾部的空格符,其原型为:
char*mytrim(char*string);
其中参数string为字符串,返回值为指向string的指针。
7.编写一个函数,用于去掉字符串前面的空格,其原型为:
char*myltrim(char*string);
其中参数string为字符串,返回值为指向string的指针。
8.编写一个程序,当输入一个整数以后,可以转换成相应的英文单词输出。
如:
123转换成onehundredtwentythree.
9.用牛顿法或者二分法编写一个求方程f(x)=0在区间[a,b]中的实根的函数,其原型为:
doubleequation(double(*func)(double),doublea,doubleb,doubleeps);
其中参数func,a和b分别为求根函数和区间两端点,eps为精度。
第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都是完全数)
第9章类和对象
(1)
1.定义一个Dog类,包含name、age、sex、weight等属性以及对这些属性操作的方法。
实现并测试这个类。
2.设计并测试一个名为Ellipse的椭圆类,其属性为外接矩形的左上角与右下角两个点的坐标,并能计算出椭圆的面积。
3.仿照Date类设计一个Time类,按各种可能的格式输出时间。
第10章类和对象
(2)
1.定义一个Dog类,包含name、age、sex、weight等属性,设计一个构造函数,可以对这些属性进行初始化。
实现并测试这个类。
2.设计并测试一个名为Ellipse的椭圆类,其属性为其圆心坐标以及半长轴和半短轴的长度。
设计一个构造函数对这些属性进行初始化,并通过成员函数计算出椭圆的面积。
3.仿照Date类设计一个Time类,设计多个重载的构造函数,可以设置时间、进行时间的加减运算、按各种可能的格式输出时间。
4.合并Date类和Time类为一个DateAndTime类,修改相应的成员函数,当时间递增到新的一天时,应能够修改日期值。
第11章继承
1.从类Person中派生出一个教师类,新增的属性有:
专业、职称和主讲课程(一门),并为这些属性定义相应的方法。
2.许多研究生既有学生的属性,又有教师的属性。
试通过多重继承说明一个研究生类。
3.修改例11-5,从Point类中派生出一个Line类。
Line类增加一个数据成员EndPoint,计算线的长度。
试比较一下与直接使用Point类来构造Line类的不同之处。
4.从Date类和Time类派生一个DateAndTime类,修改相应的成员函数,当时间递增到新的一天时,应能够修改日期值。
第12章多态性
1.定义一个类Base,该类含有虚函数display,然后定义它的两个派生类FirstB和SecondB,这两个派生类均含有公有成员函数display,在主程序中,定义指向基类Base的指针变量ptr,并分别定义Base、FirstB、SecondB的对象b1、f1、s1,让ptr分别指向b1、f1、s1的起始地址,然后执行这些对象的成员函数display。
2.扩充例12-6,从中派生出一个正方形类和圆柱体类,写一个测试程序,输出正方形的面积和圆柱体的体积。
提示:
正方形数据成员:
一个顶点和边长;圆柱体数据成员:
圆和高。
3.扩充实例编程中的日期类,为Date类增加一个成员函数,可以判断一个日期是否是系统当前日期。
从键盘输入你的生日,如果今天是你的生日则显示:
“HappyBirthday!
”,否则显示“还有xx天是你的生日”或“你的生日已经过去了xx天,明年的生日要再等yy天”。
第13章模板与异常处理
1.编写一个求绝对值的函数模板,并测试。
2.请将例4-6的冒泡排序法改写成为模板函数并编写一个程序进行测试。
3.例13-6中所定义的通用栈类实际上是不完善的,如无法根据用户需求改变栈的大小,没有提供栈满溢出无法压入和空栈无法弹出提示等,请改进该程序。
4.C++中的数组类型比较简单,它的下标只能从0开始,没有负数下标,而且没有数组越界检查。
请用类模板设计一个newArray类,该类的对象可以是整型、浮点型、字符型等任何元素类型的数组,而且当访问数组成员时,如果下标越界,程序可以报错并终止。
如下是一些例子:
newArrayA1(3)//同传统类型的整型数组
//包含5个元素的浮点型数组,其成员为A2[-2],A2[-1],A2[0],A2[1],A2[2]
newArrayA2(-2,3)
请编写一个测试程序。
5.例5-1给出的求阶乘n!
的函数,当用户的输入太大时(如50),会出现错误,请编写一个程序,使用异常处理机制来解决这一问题。
第14章标准库和输入输出流
1.编写一个程序,分别用不同的域宽(0~10)打印出整数12345和浮点数1.2345。
观察当域宽小于数值的实际需要的域宽时会发生什么情况。
2.编写一个程序,将华氏温度0度~212度转换为浮点型摄氏温度,浮点数精度为3。
转换公式如下:
Celsius=5.0/9.0*(Fahrenheit-32);
输出用两个右对齐列,摄氏温度前面加上正负号。
3.编写一个程序,打印出ASCII字符集中码值为33~126的字符的ASCII码表。
要求输出十进制值、八进制值、十六进制值以及码值所表示的字符。
4.修改例14-9的程序,重载>>运算符,使其能够直接使用cin语句输入Date类对象。
5.编写一个程序,可以读入一个C++语言的源文件,每一行加上行号后保存到另一个后缀为.prn的同名文件中。
第15章链表
1.编写程序,将表格中的数据元素逆转,假设表格采用顺序表类来存储。
2.编写程序,将表格中的数据元素逆转,假设表格采用带头结点链表类来存储。
3.设计一个算法,将一个带头结点的链表A分解为两个带头结点的链表B和C,使得B表中含有A表中序号为奇数的元素,而C表中含有A表中序号为偶数的元素,且保持其相对顺序。
4.设有两个有序带头结点的链表,编写程序,将这两个有序链表归并为一个有序带头结点的链表。
5.设有一个带头结点的链表,其结点值均为浮点数,编写程序,将此链表中的结点按值从小到大链接。
6.设有一个带头结点的链表,其结点值均为整数,编写程序,反复找出链表中最小的结点,并输出其值,然后将其从链表中删除,直到链表为空为止。
第16章程序设计与软件开发技术
1.修改16.2节中的电话簿管理程序,增加通过姓名查找电话的功能。
2.修改16.2节中的电话簿管理程序,增加通过电话号码查找姓名的功能。
3.思考和分析:
仔细研究你的手机的功能,编写一个程序,模拟手机的菜单功能。
4.思考和分析:
编写一个程序,模拟电视遥控器的功能。