第1章 C++语言简介
1. 修改例1-1的Hello World!程序,使其能够在计算机屏幕上显示:I am a student, and I like
programming!
2. 修改例1-3的加法计算器程序,编写一个乘法计算器程序。 3. 修改例1-4的生日卡程序,使其能够输入和显示日期。 4. 参考例1-5,使用梯形法计算下式定积分的值。
?1?1(sinx?ex)dx
其中积分区域等分数可取为200,并将计算结果和手算结果相比较。
提示:ex用标准数学函数库cmath中的库函数exp(x)表示。 5. 仿照例1-6,编写一个计算矩形面积的程序。
第2章 基本数据类型
1. 为例2-2添加数据检验部分。给出三边长,检验其是否能构成一个三角形的方法是
检查是否任意两边和均大于第三边。如果检验不合格,输出信息“Error Data!” 2. 输入两个角度值x、y,计算如下式子的值。
sin(|x|?|y|)cos(|x?y|)
3. 编写一个程序,要求完成以下要求:
1) 2) 3) 4)
提示用户输入任意的3个小数; 显示这三个小数;
将这三个小数相加,并显示其结果; 将结果按四舍五入方法转换成整数并显示。
4. 从键盘输入任意三个整数,然后输出这三个数并计算其平均值。
5. 编写一个程序,将字符串“Love”译成密码,译码方法采用替换加密法,其加密规
则是:将原来的字母用字母表中其后面的第3个字母的来替换,如字母c就用f来替换,字母y用b来替换。
提示:分别用4个字符变量来存储'L'、'o'、'v'和'e',利用ASCII表中字母的排列关系,按照译码方法对各个变量进行运算后输出即可。
第3章 控制结构
1. 编写计算阶乘 n!的程序。 2. 计算1!+2!+3!+4!+......+10!,即
10?i!
i?13. 编写程序求斐波那契数列的第n项和前n项之和。斐波那契数列是形如
0, 1, 1, 2, 3, 5, 8, 13, ... 其通项为:
F0 = 0; F1 = 1; Fn = Fn?1+Fn?2。
x31?3?x5(2n)!x2n?14. 编程求arcsinx?x???...?2n?...,其中x?1。 22?32?4?52(n!)(2n?1)提示:结束条件可用 u??,其中u为通项,ε为预先给定的精度要求。 5. 用牛顿迭代法求方程:2x3—4x2十3x一6=0在1.5附近的根。 提示:迭代公式 xn?1?xn?f(xn)
f'(xn)结束迭代过程的条件为(f(xn?1)??)与(xn?1?xn??)同时成立,其中ε为预先给
定的精度要求。
6. 求解猴子吃桃问题。猴子在第一天摘下若干个桃子,当即就吃了一半,又感觉不过瘾,
于是就多吃了一个。以后每天如此,到第10天想吃时,发现就只剩下了一个桃子。请编程计算第一天猴子摘的桃子个数。
7. 编写一个程序,寻找用户输入的几个整数中的最小值。并假定用户输入的第一个数值指
定后面要输入的数值个数。例如:当用户输入数列为: 5 20 15 300 9 700时,程序应该能够找到最小数9 8. 有一分数序列
23581321,,,,,,...1235813
(即后一项的分母为前一项的分子,后项的分子为前一项分子与分母之和),求其前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阶方阵转置,如下所示。
?4?2 ??3??1689??4?6745?? ??881615???5711??9231?785?? 4167??51511? 转置前方阵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来替换。
请将字符串“I love you”译成密码。
第5章 函数
1.编写字符串反转函数mystrrev( ),该函数的功能为将指定字符串中的字符顺序颠倒排列。然后再编写主函数验证之。函数声明为:
void mystrrev(char string[])
该函数无需返回值。
提示:求字符串长度可以直接调用库函数strlen( ),但在程序首部应加上 #include
int imax(int array[], int count);
// 求整型数组的最大元素
int imin(int array[], int count); // 求整型数组的最小元素
其中参数count为待考察的数组中的元素个数,函数的返回值即为求得的最大或最小元素之值。要求同时编写出主函数进行验证。
3.编写函数isprime(int a)用来判断变量a是否为素数,若是素数,函数返回1,否则返回0。调用该函数找出任意给定的n个整数中的素数。 4.打印出以下的杨辉三角形(要求打印出10行)
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 … …
提示:打印杨辉三角形有两种方法:
1)杨辉三角形表现的是二项式(a?b)n的展开式的系数。例如,
(a?b)2?a2?2ab?b2, 故杨辉三角形的第三行(对应n=2)为
1
2
1
一般地,二项式(a?b)n的展开式为
0n01n?11mn?mmn0nCnab?Cnab?...?Cnab?...?Cnab
其中第m项Cn?mn!。
m!(n?m)!2)可直接根据杨辉三角形的形式来推出每项的值。由下面的杨辉三角形可以看出,杨辉三角形每行的第一个数和最后一个数均为1,除第一行外,每行中间的各数等于上一
mmm?1行位于该数左上方和正上方的两数之和,即Cn。 ?1?Cn?Cn5.用弦截法求一元方程f(x)?0在区间?x0,x1?之间的一个根。
提示:考虑当区间?x0,x1?足够小,在此区间中方程f(x)?0仅有一个单根的情况,如下图所示。
图5.6 弦截法求方程的解
此时如f(x0)和f(x1)异号,则可用两点间直线公式求出x2:
x2?x0?x0?x1f(x0)
f(x0)?f(x1)然后用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.编写一个函数, 用于将一个字符串转换为整型数值。其原型为: int atoi(char *string);
其中参数string为待转换的字符串(其中包括正、负号和数字),返回值为转换结果。 6.编写一个函数,用于生成一个空白字符串,其原型为:
char *mystrspc(char *string, int n); 其中参数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