77范文网 - 专业文章范例文档资料分享平台

C++程序设计实践样例(3)

来源:网络收集 时间:2019-06-11 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

C++程序设计实践教材

#include using namespace std; int main(){

int input;

cout<<\ cin>>input;

if(input%2) cout<<\ \ //如果能被 2 整除,是偶数 else }

cout<<\ \ //否则是基数

return 0;

形式中,奇数的末位为 1,偶数末位为 0。可以用整数 n 与 1 进行按位与运算:

[分析二] (可选) 判断一个数的奇偶,只需判断最后一位,在二进制表示

n&1 为非 0(真),则是奇数,为 0(假),则是偶数。

在上面程序中,将 if 判断的条件改为 n&1 即可,其它部分不用修改。

#include using namespace std; int main(){

int input;

cout<<\ if(n&1) cout<<\ \ //如果能被 2 整除,是偶数 cin>>input; else cout<<\ \ //否则是基数 return 0;

}

[测试数据]

345 680 -34 -23.5(有意用非整数测试)

分别用以上各数作为输入数据,测试程序,分析程序结果,并进行记录。

2. 范例:编程求一元二次方程 ax2+bx+c=0 的根。包括以下判断和结果:若 输入 a=0,给出提示;若?>0,输出两个不等实根;若?=0,输出两个相等实根; 若?<0,输出两个复数根。

[程序] 根据以上要求,编写下列源程序,请与主教材例 2.8 作对比。 #include #include using namespace std; int main(){

double a,b,c;

double delta,x1,x2; int sign;

cout << \一元二次方程 a*x*x+b*x+c=0\\n\ cout<<\输入三个系数a(a!=0), b, c:\ cin>>a>>b>>c;

cout<<\ if(a==0){

11

第一章 控制台应用程序

cout<<\二次项系数为0,不是一元二次方程\ exit(0);

delta=b*b-4*a*c; }

if(delta==0){

cout<<\方程有两个相同实根:\ cout<<\ }

if(delta>0) sign=1; else {

else sign=0;

delta=sqrt(fabs(delta)); x1=-b/(2*a); x2=delta/(2*a); if(sign){

cout<<\方程有两个不同实根:\

cout<<\ }

else{ //delta<0

cout<<\方程无实根!有两个不同复数根:\

cout<<\ } } return 0; }

3.编写程序:输入一门课程的成绩,若高于 90 分,输出\若高于

80 而低于 90,输出\ 高于 70 而低于 80,输出\ 高于 60 而低 于 70,输出\ 否则,输出\。用 if-else 嵌套和 switch 语句两 种方法实现。

[注意] if-else 嵌套使用时,注意 else 子句总与其最近的 if 配对;对数据划

分区间时,注意关系和逻辑表达式的正确书写。注意 if-else 与 switch 的区别与联 系,switch 特适合某个整型或字符型表达式的值与一组常量匹配的情况。

4. 编写程序:输入一个数,判断是否是 3 或 7 的倍数,可分四种情况输出: 1) 是 3 的倍数,但不是 7 的倍数; 2) 不是 3 的倍数,是 7 的倍数; 3) 是 3 的倍数,也是 7 的倍数;

4) 既不是 3 的倍数,也不是 7 的倍数;

实验四 循环结构程序设计

1. 循环控制语句用于实现循环程序结构,要求掌握三种循环结构 while、 一、实验目的

do-while、for 的区别与联系,如何相互转换,并能正确使用。

12

C++程序设计实践教材

2. 掌握与循环语句相关的 break 和 continue 语句的使用。

二、实验内容

1. 范例:输入正整数 n,求 n 的阶乘。

[分析] n!=1?2?3?????n,因此可以从 1 开始,由 1!乘以 2 得到 2!,再乘以 3 得到 3!??????,以此推出 n!。 [程序]

#include using namespace std; int main() {

int n,i;

double result=0; //result是结果 cout<<\请输入正整数:\ cin>>n; if(n<1){

cout<<\输入错误!\ return 1; }

result=1;

for(i=2;i<=n;i++) result*=i; cout<

2. 范例:输入若干字符,统计其中数字字符,白字符和其它字符的个数,输入 EOF 结束。

[分析] 要统计若干字符,需用循环反复输入,读入数据后用 switch 语句判断字 符的种类;要统计三种字符数,需定义三个用于计数的变量 nDigit,nWhite,nOther 并首先置 0;读入字符用 cin.get()函数,在这里,用 while 循环比较合适。白字符 指空格键,tab 键和回车键。EOF 表示 End of File,其值为-1,从键盘输入(ctrl+z) 即可。这里采用重载的 int cin.get()函数,它返回的是整型数,所以能返回 EOF。 [程序]

#include using namespace std; int main(){

char c;

int nWhite, nOther, nDigit; nWhite = nOther = nDigit = 0; c=cin.get(); while(c!=EOF){

switch (c){

case '0': case '1': case '2' :case '3' :case '4': case '5': case '6': case '7' :case '8': case '9':

13

第一章 控制台应用程序

nDigit++; break;

case ' ': case '\\n': case '\\t':

nWhite++; break; default:

nOther++; break;

}

c=cin.get(); //读入下一字符

}

cout<<\ cout<<\ cout<<\ return 0; }

[思考]

①如果要分别统计数字 0~9 各数字出现的次数,怎样才能有效地实现?

②如果要统计输入的一段文字中出现的行数、单词数和字符数,又如何有效实 现?

③本例采用的是什么算法?

3. 编写程序:约瑟夫(Josephus)问题:n 个人围坐成一圈,从 1 开始顺序编 号;游戏开始,从第一个人开始由 1 到 m 循环报数,报到 m 的人退出圈外, 问最后留下的那个人原来的序号。

[分析] 本题首先要定义一个数组,其元素个数为 n。n 定义为常变量,以便定义 数组。数组元素的值标识该人是否出局,1 在圈内,0 出局。值为 0 的元素不参 加报数。可用一个整型数 k 做计数器,采用倒计数,记录留下的人数。

[提示]数组是线性排列的,而人是围成圈的,用数组表示要有一种从数组尾部跳 到其头部的技巧,即下标加 1 除以 n 求余数。

4. 范例:将输入的小写字母转换为大写字母。

[提示]由 ASCII 码表可以看出,大写英文字母的 ASCII 码值在 65 至 90 之间,小写英

文字母的 ASCII 码值在 97 至 122 之间,每一个英文字母的大写和小写的 ASCII 码相差 32 (以上均为十进制)。 #include using namespace std; int main(){

char str[100]; int i = 0;

cout << \ cin.getline(str,100); do{

if (str[i]<'a'||str[i]>'z') continue; //条件可有多种写法,也可不用continue

14

C++程序设计实践教材

str[i]-= 32; }while ( str[++i]!='\\0');

cout << \ return 0; }

[思考]但当用户输入一个空串,即用户开始输入时就以 Enter 键结束, string[0] 中就是表征输入串结束的'\\0'字符。由于是 do_while 循环,所以肯定

要进入循环,在循环结束前由 i++ 使 i 的值修改为 1,使得循环体完成后的判断 是对 string[1] 进行,从而跳过对 string[0] 中的串结束符'\\0'判断, 导致在这 种所谓\边界\的情况中,程序不能正确运行。怎样修改?考虑两种方法。

程序的质量指标和算法的质量指标一样,包括程序的正确性、可读性、健壮 性以及高的执行效率和低的存储空间要求。正确性是指对于各种合法的输入,即 使是苛刻的带有刁难性的输入数据也能够得到满足规格要求的结果,这其中就包 括应当能处理各种边界情况。

5. 编程:设计一个程序,输入某天是几月几日,要求算出这一天是本年的 第几天。

[分析] 要算出某天是当年的第几天,应该将当年中本月之前所有月的天数 相加,再加上本月的天数。但这里有一个闰年问题,二月是一个特殊月,如该年 是闰年,则二月有 29 天,否则,便是 28 天,所以,还必须给出年份。

[提示] 判断某年是闰年的条件是:该年号能被 4 整除但不能被 100 整除, 或者能被 400 整除的是闰年。如,1996,2000 是闰年,但 1800 不是闰年。

实验五 常用算法:枚举法 递推法 迭代法

一、实验目的

掌握常用算法:枚举法,递推法、迭代法。

二、实验内容

a

1. 编程求和:s=a+aa+aaa+?+aa?a,其中 a 是 1~9 中的一个数字。 [提示] 令各项为 b0,b1,b2,?bn

则 b0 = a

b1 = b0*10+a b2 = b1*10+a?

即每一项是为前一项乘以 10 加 a,递推得到各项并求和。

2. 编程求出所有的\水仙花数\,所谓\水仙花数\是指一个三位数, 其 各位数字的立方和等于该数本身,例如 153 是一个\水仙花数\,因为 153= 3 3 1 +5 +3 。采用枚举法。 3

3. 范例:设函数 f(x)定义在区间[a,b]上,f(x)连续且满足 f(a)*F(b)<0,求 f(x) 在[a,b]上的根。采用割线法,迭代公式为:

xi+1 = x i+( x i-1- x i)/(f(x i)-f(x i-1))*f(x i)

其代换规律为:首先用两端点函数值的绝对值较大者的对应点作为 x i-1,较小者

n 个

作为 x i,即如果|f(a)|<|f(b)|,则 x i-1?a,x i?b。用迭代公式得出 x i+1,f(x i+1)。

15

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C++程序设计实践样例(3)在线全文阅读。

C++程序设计实践样例(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/657211.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: