西安交通大学C++程序设计第三章作业
西安交通大学C++程序设计第三章作业

西安交通大学实验报告课程_计算机程序设计_实验名称_控制结构_第 1 页共 15页系别_______________ 实验日期 2014年 3 月 10 日专业班级___ ____组别_____________ 实验报告日期 2014年 3 月 15 日姓名_ ___ __学号____ 报告退发 ( 订正、重做 ) 同组人_________________________________ 教师审批签字一、实验目的:掌握C++语言中的基本控制结构:顺序结构、条件结构、循环结构(do……while ;for ;while等)的使用,尤其是多重循环和条件结构的复合。
二、实验内容:1.第一题:编写程序求斐波那契数列的第n项和前n项和。
斐波那契数列是形如:0、1、1、2、3、5、8、13、……其通项为:F0=0; F1=1; Fn=Fn-1+Fn-2.(1)要点分析:步骤一:输入需要计算的项数n;步骤二:判断输入的项数是否合理,若否,返回第一步;步骤三:从第一项逐项加到第n项;步骤四:输出计算结果;步骤五:选择是否继续运算,若是,返回第一步;否则结束程序。
(2)源程序代码:#include<iostream>using namespace std;int main(){int an_1=0,ch,an=1,S=0,i=1,m=0;double n;//将n定义为双精度以便检验输入是否合理;do//开始循环体;{cout<<"请输入一个正整数n,将计算数列的前n项和:";cin>>n;while(n<=0||n!=(int)n)//对n输入有误的重新输入;{cout<<"您输入的不是正整数!请重新输入:";cin>>n;}while(i<n)//求前n项和,由1到n逐项相加;{S=S+an;m=an;//将an储存于m中;an=an+an_1;an_1=m;//将原来的an赋予an_1;i=i+1;}cout<<"前"<<n<<"项和为:"<<S<<";第"<<n<<"项为:F("<<n-1<<")="<<m<<endl;cout<<"如需继续计算请按1;如要结束请按2!";cin>>ch;}while(ch==1);//选择是否再进行新一轮运算;cout<<"运行结束!";return 0;}(3)实验结果:测试了输入合理和输入不合理以及多次输入的功能:(4)问题分析:不知道第n项是Fn还是Fn-1,最终按照Fn-1算了。
大学C 程序设计教程 - 西安交通大学共25页文档

语句序列可以是一个语句,也可以是复合语句结构(分程序)
6
分程序
{ <局部数据变量说明部分> <执行语句段>
}
▪ 分程序在语法上是一个整体,相当于一个语句。 ▪ 分程序中也可以再嵌套新的分程序,用以构成更加复杂
的控制结构。
7
选择结构(之二)
▪ 多路(开关)选择语句 :
switch(整数表达式)
{ case 数值1: 语句序列1; …... case 数值n: 语句序列n; [default : 语句序列n+1;]
条件?
不成立
9
循环结构(之二)
▪ for语句用来实现计数循环: for (<表达式1>; <表达式2>; <表达式3>)
<循环体>
10
C++数据类型的分类
11
类型不同的数据之间的混合算术运算
▪ 不同类型的数据在参加运算之前会自动转换成 相同的类型, 然后再进行运算。
▪ 转换规则
• 转换的原则是由低级向高级转换 char -> int -> float -> double
化)处理,最后到求解域中只是比较简单的编程问题。
20
基本思想和方法
▪ 基本思想
• 从问题本身开始,经过逐步求精,将解决问题的步骤分解为由 基本程序结构模块组成的结构化程序框图,据此编写程序。
▪ 基本方法
• 从题目本身开始, 找出解决问题的基本思路, 将其用结构化框 图(可能是非常粗糙)表示。
• 对框图中的比较抽象的、用文字描述的模块进一步分析细化, 结果仍用结构化框图表示。
23
结束语
西安交大C++程序设计课外测验作业

西安交通大学实验报告课程__计算机程序设计__实验名称_课外实验题目__第 1 页共 19 页系别___ _______ 实验日期 2014 年 4月 3日专业班级____组别_____________ 实验报告日期 2014 年4 月 5日姓名___ _____学号_ _报告退发 ( 订正、重做 )同组人_________________________________ 教师审批签字一、实验目的复习巩固本阶段所学的知识,包括数组的使用、函数的使用、循环语句和条件语句的使用等。
二、实验内容(一)第一题:1、编写一个程序,计算m~n范围内的每个正整数的全部素因子。
其中的m和n由键盘输入。
评分标准:(1)程序框架完整,代码规范;(20%)(2)数据类型的定义和使用方法正确;(20%)(3)程序控制结构使用正确;(20%)(4)算法正确,清晰合理;(20%)(5)运行结果正确,输入和输出格式如下所示。
(20%)请输入m和n:15 1815的非平凡因子:3 516的非平凡因子:2 4 817的非平凡因子:18的非平凡因子:2 3 6 91.源程序代码:#include<iostream>using namespace std;void suyinzi(int x);int main(){int m,n;cout<<"请输入正整数m和n(m<=n):";cin>>m>>n;while(m>n){cout<<"您输入有误,m应该小于等于n,请重新输入:";cin>>m>>n;}for(int j=m;j<=n;j++)//对于范围内的正整数逐一判断寻找因子{suyinzi(j);}return 0;}void suyinzi(int x)//寻找并输出x的所有非平凡因子{cout<<x<<"的非平凡因子为:";for(int i=2;i<=x/2;i++){if(x%i==0){cout<<i<<" ";}}cout<<endl;}2.实验结果:3.问题分析:此题简单,但当该数没有非平凡因子时,如能够输出:“x没有非平凡因子!”而非仅仅输出空白则更好。
西南交通大学C++第三章选择循环大作业(有答案)

、单项选择题:
⒈以下不是C++语言的特点。
A、运算符丰富B、数据结构丰富
C、可以直接访问物理地址D、C++函数包含的语句数目没有限制
⒉下列关于C++语言标识符的叙述中正确的是。
A、标识符中可以出现下划线和中划线(减号)。
B、标识符中不可以出现中划线,但可以出现下划线。
C、标识符中可以出现下划线,但不可以放在标识符的开头。
二、阅读下列程序,写出程序运行后的结果:
1、#include<iostream>
using namespace std;
void main()
{int i,s=0,t=0;
for(i=0;i<10;i++)
{s++;
if (i>5)break;
t++;}
cout<<"i="<<i<<endl;
cout<<"s="<<s<<endl;
if(count%4==0)cout<<end}}
cout<<endl;}
三、编写程序:
1、数学灯谜
有算式:A B C D
_C D C
________ ____________
A B C
其中A , B , C , D均为一位非负整数
要求:找出A , B , C , D各值。
2、编写程序,统计1005000之间各位数
c=c+32;i=i-32;cout<<c<<’;’<<i;
2009第三章 C语言语句与结构化程序的三种基本结构

3.2.1 表达式语句
赋值表达式语句的一般格式: <变量名> = <表达式>; 其中 “=”是赋值号, 其意义是将赋值号右边表 达式的值赋到赋值号左边的变量中去。 如: x = 5; 表示将5赋给变量x x = x+20;表示将x的内容+20再赋给x
3.2.2 数据的输出
C语言的输入和输出是通过调用I/O函数来完成 的,常用的有三对:
2. %s格式符和附加的格式说明符“m .n ”一起
使用, 其中“.n”这个附加的格式说明符是使对
输出的字符串截取n位字符。
3.2.2 数据的输出
例如: main() { printf(”%3s,%7.2s,%.4s,%- 5.3s\n”,
“china”,”china”,”china”,”china”),
3.2.3 数据的输入
scanf()函数
用于接受键盘输入的各种类型的多个数据。 scanf (格式控制字符串, 变量地址表列) ; 在scanf()函数中格式控制字符串的含义与printf() 函数中略有不同(参见P64表3.3) 输入的格式说明字符有: 格式控制问题 %d %o %x %c %s %f %e
3.2.3 数据的输入
例如:关于格式说明符的使用的例子.
?
P66 4、scanf()函数在使用时应该 注意的问题+例3.7
输入:12345678901234 输出:1 , 234 , 789012 ,34.000000 输入:12345678901234 输出: , 12 , 345.000000
3.2.3 数据的输入
getchar( )函数
函数功能:从键盘读取用户输入的一个字符, 并 将该字符的ASCII码值作为函数返回值。 注: 用户在输入字符后, 再按回车键, 输入的内 容才能被getchar()函数处理。
C程序设计第四版第三章答案

/*假设国民生产总值的年增长率为9%,计算十年后的国民生产总值与现在的相比增长了多少百分比,计算公式为p=(1+r)^n.r为年增长率,n为年数,p为与现在相比的倍数。
*//*#include<stdio.h>#include<math.h>double Beishu(double r,int n){double p;p=pow(1+r,n);return (double)p;}int main(){printf("%f\n",Beishu(0.09,10));return 0;}*//*存款利息的计算,有1000元,想存5年,有5种存法。
*/#include<stdio.h>#include<math.h>/*double Summoney1(double r1,int n1)//一次存5年。
{double P1;P1=1000*(1+n1*r1);return P1;}*///先存两年到期后,本息和再存3年。
/*double Summoney2(double r2,int n2,double r3,int n3){double P2;P2=(1000*(1+n2*r2))*(1+n3*r3);return P2;}*///先存3年到期后,本息再存两年/*double Summoney3(double r4,int n4,double r5,int n5){double P3;P3=(1000*(1+n4*r4))*(1+n5*r5);return P3;}*///每次存一年,然后将本息和再存一年,一直存5次。
/*double Summoney4(double r6,int n6){double P4;P4=1000*pow((1+r6),n6);return P4;}*///存活期存款,利息每季度结算一次/*double Summoney5(double r7,int n7){double P5;P5=1000*pow((1+r7/4),4*n7);return P5;}int main(){//printf("%f\n",Summoney1(0.0585,5));//printf("%f\n",Summoney2(0.0468,2,0.054,3));//printf("%f\n",Summoney3(0.054,3,0.0468,2));//printf("%f\n",Summoney4(0.0414,5));printf("%f\n",Summoney5(0.0072,5));return 0;}*///3.购房贷款/*double Remoney(double d,double p,double r){double m;m=(log( p)-log(p-d*r))/log(r+1);return m;}int main(){printf("%.1f\n",Remoney(300000,6000,0.01));return 0;}*///4.程序分析/*int main(){int c1,c2;c1=197;c2=198;printf("c1=%c,c2=%c\n",c1,c2);printf("c1=%d,c2=%d\n",c1,c2);return 0;}/*当a,b是97.98是输出的是a,b,97,98;*当a,b是197.198是输出的是?,?,-59,-58;*///当第三行为int c1,c2;时,输出的是?,?,197,198//7。
《大学C++程序设计教程》课后习题-西安交通大学

第1章 C++语言简介1.在计算机上调试运行本章的所有例题,熟悉实验环境和方法。
2.仿照例1-3,编写一个计算矩形面积的程序。
3.乘法计算器程序:可以根据例1-4自行改编。
4.修改例1-5的生日卡程序,使其能够输入和显示日期。
5.使用梯形法计算下式定积分的值。
⎰-+11sin dx e x x积分区域等分数可取为200,并将计算结果和手算结果相比较。
提示:e x 用math.h 中得库函数exp(x)表示。
第2章 控制结构1.编写计算阶乘 n!的程序。
2.编写程序求斐波那契数列的第n 项和前n 项之和。
斐波那契数列是形如0, 1, 1, 2, 3, 5, 8, 13, ...其通项为:F 0 = 0;F 1 = 1;F n = F n -1+F n -2。
3.编程求 ...)12()!(2)!2(...5423132arcsin 221252++++⋅⋅⋅⋅+⋅+≈+n n x n x x x x n n ,其中1<x 。
提示:结束条件可用 ε<u ,其中u 为通项。
4.求解猴子吃桃问题。
猴子在第一天摘下若干个桃子,当即就吃了一半,又感觉不过瘾,于是就多吃了一个。
以后每天如此,到第10天时,就只剩下了一个桃子。
请编程计算第一天猴子摘的桃子个数。
5.用弦截法求一元方程0)(=x f 在区间[]10,x x 之间的一个根。
提示:考虑当区间[]10,x x 足够小,在此区间中方程0)(=x f 仅有一个单根的情况,如图2.14所示。
图2.14 弦截法求方程的解此时如)(0x f 和)(1x f 异号,则可用两点间直线公式求出x 2:)()()(0101002x f x f x f x x x x ---= 然后用x 2代入原式求出f (x 2),判断f (x 2)与f (x 1)和f (x 0)中的哪一个同号,就用x 2和f (x 2)代替之,即如果f (x 2)和f (x 0)同号,就用x 2和f (x 2)代替x 0和f (x 0),反之用x 2和f (x 2)代替x 1和f (x 1),然后再继续上述过程直至|x 2-x 0|或|x 2-x 1|小于给定的误差控制值。
西安交通大学《程序设计基础

西安交通大学18年9月课程考试《程序设计基础(高起专)》作业考核试题1、B2、A3、B4、B5、B一、单选题共30题,60分1、要打开A盘上user子目录下名为abc.txt的文本文件进行读、写操作,下面符合此要求的函数调用是()。
Afopen("A.\user\abc.txt","r")Bfopen("A.\\user\\abc.txt","r+")Cfopen("A.\user\abc.txt","rb")Dfopen("A.\\user\\abc.txt","w")正确答案是:B2、语句while(!E);中的表达式!E等价于()。
AE==0BE!=1CE!=0DE==1正确答案是:A3、若执行fopen函数时发生错误,则函数的返回值是()。
A地址值B0C1DEOF正确答案是:B4、以下说法错误的是()AC语言函数分为由系统提供的标准库函数和由程序员自己定义的函数B在主函数main()中可以调用其他函数,其他函数之间不可以相互调用CC语言的程序是由一个函数或多个函数组成的D对于一个很大的任务,一般把它分解成若干源文件,分别编写和调试正确答案是:B5、已知int j,i=1;执行语句“j=i++;”后,变量i的值是( )A1B2C-1D-2正确答案是:B6、变量的指针,其含义是指该变量的()。
A值B地址C名D一个标志正确答案是:B7、关于建立函数的目的,以下正确的说法是()。
A提高程序的执行效率B提高程序的可读性C减少程序的篇幅D减少程序文件所占内存正确答案是:B8、以下对C语言函数的描述中,正确的是()。
AC程序必须由一个或一个以上的函数组成BC函数既可以嵌套定义又可以递归调用C函数必须有返回值,否则不能使用函数DC程序中有调用关系的所有函数必须放在同一个程序文件中正确答案是:A9、经过下列的语句int j,a[10],*p;定义后,下列语句中合法的是()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西安交通大学实验报告课程_计算机程序设计_实验名称_控制结构_第 1 页共 15页系别_______________ 实验日期 2014年 3 月 10 日专业班级___ ____组别_____________ 实验报告日期 2014年 3 月 15 日姓名_ ___ __学号____ 报告退发 ( 订正、重做 ) 同组人_________________________________ 教师审批签字一、实验目的:掌握C++语言中的基本控制结构:顺序结构、条件结构、循环结构(do……while ;for ;while等)的使用,尤其是多重循环和条件结构的复合。
二、实验内容:1.第一题:编写程序求斐波那契数列的第n项和前n项和。
斐波那契数列是形如:0、1、1、2、3、5、8、13、……其通项为:F0=0; F1=1; Fn=Fn-1+Fn-2.(1)要点分析:步骤一:输入需要计算的项数n;步骤二:判断输入的项数是否合理,若否,返回第一步;步骤三:从第一项逐项加到第n项;步骤四:输出计算结果;步骤五:选择是否继续运算,若是,返回第一步;否则结束程序。
(2)源程序代码:#include<iostream>using namespace std;int main(){int an_1=0,ch,an=1,S=0,i=1,m=0;double n;//将n定义为双精度以便检验输入是否合理;do//开始循环体;{cout<<"请输入一个正整数n,将计算数列的前n项和:";cin>>n;while(n<=0||n!=(int)n)//对n输入有误的重新输入;{cout<<"您输入的不是正整数!请重新输入:";cin>>n;}while(i<n)//求前n项和,由1到n逐项相加;{S=S+an;m=an;//将an储存于m中;an=an+an_1;an_1=m;//将原来的an赋予an_1;i=i+1;}cout<<"前"<<n<<"项和为:"<<S<<";第"<<n<<"项为:F("<<n-1<<")="<<m<<endl;cout<<"如需继续计算请按1;如要结束请按2!";cin>>ch;}while(ch==1);//选择是否再进行新一轮运算;cout<<"运行结束!";return 0;}(3)实验结果:测试了输入合理和输入不合理以及多次输入的功能:(4)问题分析:不知道第n项是Fn还是Fn-1,最终按照Fn-1算了。
这样的话,输入的第n项应为Fn-1而不是Fn.2.第二题:用截弦法求一元方程f(x)=0在区间[x0,x1]之间的一个根。
(1)要点分析:步骤一:预先定义一个函数,其后按照该函数进行计算;步骤二:输入区间端点以及误差范围;步骤三:通过不断的趋近找到近似值,当满足误差范围时停止循环并输出结果。
(2)源程序代码:#include<iostream>#include<cmath>using namespace std;double F(double x)//预先定义一个函数;{double y;y= x*x-4*x+3;return y;}int main(){double x0,x1,x2,q,m,n;cout<<"请依次输入区间的左右端点、给定的误差范围:";cin>>x0>>x1>>q;m=x0;//将输入的初始区间储存在m,n中;n=x1;x2=x0-(((x0-x1)*F(x0))/(F(x0)-F(x1)));//进行第一次计算得到x2的初始值;do//不断缩小区间直至满足误差范围;{if(F(x2)*F(x0)>0){x0=x2;}else{x1=x2;}x2=x0-(((x0-x1)*F(x0))/(F(x0)-F(x1)));}while(fabs(x2-x0)>=q&&fabs(x1-x2)>=q);cout<<"方程x*x-4*x+3=0 在区间["<<m<<","<<n<<"]上的一个根为:"<<x2<<endl;return 0;}(3)实验结果:考虑了不同误差范围对结果的影响,以及输入范围过大而导致的无法执行的情况:1)误差范围为0.1:2)误差范围为0.000001:3)误差范围为0.00001,但是从1到5,而对于方程x^2-4x+3=0来说,闭区间[1,5]内有两解,并且1就是其一个解。
此时无法求解:4)误差范围为0.00001,但区间改为[1.1,5],此时只有一解便可执行求解。
3.第三题:编写一个程序,寻找用户输入的几个整数中的最小值。
假定用户输入的第一个数值指后面要输入的数值个数。
(1)要点分析:步骤一:输入所要输入的整数的个数;步骤二:输入要输入的某个整数;步骤三:判断输入的是否为整数,若不是,提示重新输入,返回第二步;步骤四:对输入的第一个整数,将其储存下来作为已输入的最小整数,对后来的输入的整数,判断其是否小于原来储存的最小数,若是,用该数替换原最小数;步骤五:判断需要输入的整数是否已经输入完毕,若否,返回第二步;若是,执行下一步;步骤六:输出最小数。
(2)源程序代码:#include<iostream>using namespace std;int main(){int n;double a,b;int i=1;cout<<"请输入您接下来要输入的整数个数:";cin>>n;while(i<=n)//循环输入n个整数;{cout<<"请输入您要输入的第"<<i<<"个整数:";cin>>a;while(a!=(int)a)//判断是否为整数;{cout<<"您输入的不是整数,请重新输入该数字!";cin>>a;}if(i==1)//对第一次输入的整数,默认将其储存下来作为最小数;{b=a;}if(a<b)//比较输入值与前面i-1个数中的最小值,将小者储存于b;{b=a;}i=i+1;}cout<<"您输入的整数中最小的是:"<<b<<endl;return 0;}(3)实验结果:(4)问题所在:关于i=1时的a.b比较的问题:程序中通过将前面输入的数字的最小值储存下来,然后再下一轮将其与输入的数字比较再保留较小者来实现筛选最小数,而第一次输入的时候没有已储存的较小数,因而将第一个数要默认储存下来,因而对第一个数的处理与以后略有不同,故设计了if(i==1) b=a; 的语句。
4.第四题:有一分数序列:,,,,,,……(即后一项的分母为前一项的分子,后一项的分子为前一项的分子与分母之和),求其前n项和。
(1)要点分析:步骤一:预设数列的第一项的分母与分子,并设和S=0,i=1;步骤二:输入需要计算的项数n;步骤三:求S+第i项即前i项和;步骤四:由第i项得到第i+1项;步骤五:i=i+1;步骤六:判断是否已经计算完前n项,若是,输出前n项和;否则返回第三步。
(2)源程序代码:#include<iostream>using namespace std;int main(){int n,a=2,b=1,i=1,m;double S=0;int co;do{cout<<"请输入一个正整数n的值,系统将计算该分数列的前n项和:";cin>>n;do{S=S+(a/(b*1.0));m=a;//将前一项的分子储存于m;a=a+b;//得到后一项的分子;b=m;//将前一项的分子赋给后一项的分母;i=i+1;}while(i<=n);cout<<"该分数列的前"<<n<<"项和为:S("<<n<<")="<<S<<endl;cout<<"请问是否需要再算其他n项和?如需则按,否则按!";cin>>co;}while(co==1);//选择继续计算时执行循环体;return 0;}(3)实验结果:(4)问题分析:关于数的类型的选择的问题。
起初选择了将所有数都定义为double,但这样占内存太多,于是将大多数直接改为int,结果后来的运算中总是会警告,给b乘以1.0才算了事。
5.第五题:将所有水仙花数求和,再计算平均数,输出和数与平均数(必做题)(1)要点分析:步骤一:定义初始S=100,sum=0,i=0;步骤二:分离出S的各位数字;步骤三:判断S是不是水仙花数,若是,i=i+1,sum=sum+S;步骤四:S=S+1;步骤五:判断S是否仍未三位数,若是,返回第二步;若否,求平均数ave=sum/i,输出平均数以及这些数的和。
(2)源程序代码:#include<iostream>using namespace std;int main(){double ave;int i=0,a,b,c,S=100,s,sum=0;do{a=S/100;//分离百位数;b=S/10%10;//分离十位数;c=S%10;//分离个位数;s=a*a*a+b*b*b+c*c*c;if(S==s)//统计其中的水仙花数;{i=i+1;//统计水仙花数的个数;sum=sum+S;//求和;ave=sum/(i*1.0);//求平均数;}S=S+1;}while(S<=999);//在三位数范围内循环判断;cout<<"共有"<<i<<"个水仙花数,它们的和为:"<<sum<<endl;cout<<"它们的平均数为:"<<ave<<endl;return 0;}(3)实验结果:(4)问题分析:需要分离各位数字;还有数据类型的转化:ave=sum/(i*1.0)。