《基本程序设计》PPT课件.ppt

上传人:牧羊曲112 文档编号:4851291 上传时间:2023-05-19 格式:PPT 页数:138 大小:577.50KB
返回 下载 相关 举报
《基本程序设计》PPT课件.ppt_第1页
第1页 / 共138页
《基本程序设计》PPT课件.ppt_第2页
第2页 / 共138页
《基本程序设计》PPT课件.ppt_第3页
第3页 / 共138页
《基本程序设计》PPT课件.ppt_第4页
第4页 / 共138页
《基本程序设计》PPT课件.ppt_第5页
第5页 / 共138页
点击查看更多>>
资源描述

《《基本程序设计》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《基本程序设计》PPT课件.ppt(138页珍藏版)》请在三一办公上搜索。

1、1,第三章 基本程序设计,2,#include iostreamusing namespace std;void main()int i=1,j=1;couti+i+i+endl;coutiendl;cout(+j)+(+j)+(+j)endl;coutjendl;cout+j+j+j+endl;,3,3.1 顺序结构程序设计,例3.1.1“鸡兔同笼问题”:在一个笼子里养着鸡与兔,但不知其中鸡有多少只,兔有多少只。只知道鸡和兔的总数是a,鸡与兔的总脚数是b,求鸡与兔各有多少只。思路分析:首先从题目本身开始,找出解决问题的基本思路。每只鸡有两只脚,每只兔有四只脚。假设有x只鸡和y只兔,则根据已知

2、条件可列出如下方程组:x+y=a 2x+4y=b对该方程组做进一步的转换可得:,4,5,#includeusing namespace std;void main()int a,b,x,y;couta;coutb;x=(4*a-b)/2;y=(b-2*a)/2;cout鸡的数量为:xendl;cout兔的数量为:yendl;,6,编程技巧:,1在顺序结构的程序设计中,主函数(即main函数)的函数体的执行顺序为语句的书写顺序。即写在前面的语句先执行,写在后面的语句后执行,且每条语句都会被执行一次;2组成顺序结构的常见语句有:(1)说明语句,包括变量、常量定义;(2)表达式语句,由表达式(一般为

3、赋值表达式)加分号构成;(3)输入/输出流语句;(4)复合语句,由 括起来的多条语句组成,具体应用见例;(5)空语句,由独立的分号构成,具体应用见例3在程序中,输入语句的前面通常应该增加一条输出语句,用于提示操作者应该输入几个什么数据类型的数据。,7,例3.1.2 输入一位同学的三门课程考试成绩,计算该同学的平均成绩,要求输出数据的形式如下例:科目 成绩 英语 67 程序设计 78.5 大学物理 89 该生的平均成绩为:78.17,8,思路分析:本程序要求的计算内容很简单,在输入考试成绩score1,score2,score3的基础上,通过运算式子average=(score1+score2+

4、score3)/3可以求出该生的平均成绩。本例的重点在输出数据的位置控制上,如题目示例所示:要求前四行输出的两列信息要对齐,且最后计算出的平均成绩的小数部分只显示两位数字。,9,10,#include iostream#include iomanipusing namespace std;void main()double score1,score2,score3,average;coutscore1score2score3;average=(score1+score2+score3)/3;coutsetw(10)科目setw(12)成绩endl;coutsetw(10)英语setw(12)s

5、core1endl;coutsetw(10)程序设计setw(12)score2endl;coutsetw(10)大学物理setw(12)score3endl;coutfixed;cout.precision(2);cout该生的平均成绩为:averageendl;,11,编程技巧:,1对于输出的多列信息对齐的问题可以通过控制输出的数据所占的位置宽度来实现。实现方法为:在输出该数据前先通过setw(n)来设置该数据输出时所占的最少位置宽度n。使用时需注意;(1)setw(n)所设置的位置宽度只对其后输出的一个数据生效;(2)使用setw(n)时需增加文件包含#include iomanip;,

6、12,2该设置也可以通过cout.width(n);来实现。即语句coutsetw(10)科目setw(12)成绩endl;可更换为:cout.width(10);cout科目;cout.width(12);cout成绩;注意:此方法不再需要文件包含#include iomanip。请大家自行对比这两种方法的优缺点。,13,3在输出一个浮点数时,系统会在科学记数法和小数点法两种形式里按照一定的规则(通常在整数部分超过6位时采用科学记数法)自动选择采用哪种形式输出。若想规定不管什么样的浮点数均使用小数点形式输出,可采用coutfixed;语句来实现4以小数点形式输出浮点数时,系统默认输出的浮点数

7、的整数和小数部分的总位数最多只有6位数字。若想规定输出的浮点数的小数部分的位数可通过cout.precision(n);语句来实现。其中n代表小数部分的位数(若数据的实际位数超过n,则按4舍5入规则处理后输出;若数据的实际位数少于n,则其余位数用0补齐)。5.t:跳8个空格,14,1、在输出该数据前先通过setw(n)来设置该数据输出时所占的最少位置宽度n。setw(n)所设置的位置宽度只对其后输出的一个数据生效;使用setw(n)时需增加文件包含#include iomanip2、cout.width(n);与setw(n)一样 只是不需要#include iomanip“3、输出一个浮点数

8、coutfixed4、cout.precision(n);5.t:跳8个空格,15,3.2 选择结构程序设计,例3.2.1 从键盘输入一个数,计算并输出该数的绝对值。思路分析:对于0和正数而言,其绝对值就是该数本身;对于负数而言,其绝对值为该数与-1相乘的结果。本题算法的实质就是判断什么情况下需要执行“该数与-1相乘”这个操作,同时意味者该操作对应的语句虽然书写在了程序中,但在某种情况下是可能不会被执行的。,16,17,#includeusing namespace std;void main()float m;coutm;if(m0)m=-1*m;cout你输入数据的绝对值为:mendl;,

9、18,编程技巧:,1在程序中,如果书写的某些语句只有在特定的条件成立的情况下才会被执行时,需要把这些语句书写在一路分支选择结构的实现语句if中。(1)if关键字的后面跟一对圆括号(),圆括号中书写需要判断的条件;(2)如果在特定的条件成立的情况下才会被执行的语句超过一条时,这些语句要放在一对花括号 中,此时这一对花括号及其中括起来的所有语句一起组成一条复合语句。,19,2关系运算符,20,注意:,(1)若满足条件,关系表达式的值为布尔值true;(2)若不满足条件,关系表达式的值为布尔值false;(3)关系运算符若为两字符,在书写时两字符间不能加空格;(4)=与=的区别:如x=1为条件表达式

10、,判断x是否等于1。x=1为赋值表达式,将数值1存入变量x中;(5)两个浮点数之间一般不用=来判断是否相等;(6)关系运算符的优先级低于算术运算符,高于赋值运算符。,21,例3.2.2输入一个年份,判断该年是否为闰年,并输出判断结果。闰年的条件:(1)能被4整除,但不能被100整除的年份;(2)能被100整除,又能被400整除的年份,22,思路分析:,假设用year表示年份,则判断year年是否为闰年的问题就转换成了判断数字year是否满足闰年的条件(1)或者条件(2)。在该条件(1)中又要求两个子条件“能被4整除”和“不能被100整除”同时成立。要表示多个条件之间的这种逻辑关系就需要用到本例

11、编程技巧部门中介绍的逻辑运算符。本例中要求根据对year年份的不同判断结果决定输出不同的信息,因此在条件成立时执行一种操作,条件不成立时执行另一种操作。这两种操作不管条件如何,均必有一种操作且只有一种操作会被执行。,23,#include using namespace std;void main()int year;coutyear;if(year%4=0,24,25,注意:(1)由逻辑运算符构成的逻辑表达式的运算结果也是布尔值;(2)逻辑非(!)放在一个条件表达式的前面,用于表示该条件的相反条件。即若原条件成立,则增加逻辑非后表示的条件一定不成立;(3)逻辑与(&)运算符的前后各书写一个条

12、件,只有前后的两个条件都成立时,由逻辑与表示的条件才成立;(4)逻辑或(|)运算符的前后同样需要各书写一个条件,但它只要求这两个条件中有任何一个条件成立就可以了。即只有前后的两个条件都不成立时,由逻辑或表示的条件才不成立;(5)逻辑非运算符的优先级与算术运算的+和-平级,逻辑与和逻辑或运算符的优先级低于关系运算符,高于赋值运算符。,26,运算符优先级,括号+,-,sizeof,-(取负运算)!*,/,%+,-,=,=,!=&|?:赋值运算=逗号运算,,低,高,27,1、if语句及if-else语句2、if-else语句的嵌套3、switch语句,28,顺序结构的实现方法分支结构的实现方法循环结

13、构的实现方法,三种基本控制结构的实现,29,实现选择结构的方法,30,条件的描述方法,31,构成条件可以为:,变量、常量、函数,32,实现选择结构的语句,33,if语句 三种形式,34,嵌套形式,35,36,#include using namespace std;void main()char ch;cinch;if(ch=A,37,语句1;语句2;语句n;,38,从键盘输入两个实数x和y,如果y的值大于x则交换x,y的值并输出x,y.,#includeusing namespace std;void main()double x,y,t;coutxy;if(yx)t=x;x=y;y=t;c

14、outx,yendl;,39,#includeusing namespace std;void main()double x,y;cinx;if(x8.0)y=6.0*x-5.0;else y=10.0-3*x;coutx=xty=yendl;,40,输入一个年份,判断是否闰年。闰年条件:,(1)能被4整除,但不能被100整除的年份;(2)能被100整除,又能被400整除的年份。,41,#include using namespace std;void main()int year;bool IsLeapYear;coutyear;IsLeapYear=(year%4=0,42,运行结果:En

15、ter the year:20002000 is a leap year,43,嵌套形式,44,嵌套形式规则嵌套,45,46,例:输入两个整数,比较两个数的大小,#includevoid main(void)int x,y;coutxy;if(x!=y)if(xy)coutyendl;else coutxyendl;else coutx=yendl;,47,运行情况1:Enter x and y:5 8 xx=y运行结果3:Enter x and y:12 8 xy,48,49,50,51,52,例将等级成绩按下表转换成对应消息输出 等级成绩 消息A或a优秀B或b 良好C或c 一般D或d及格

16、F或f 不及格,53,#includeusing namespace std;void main()char grade;coutgrade;if(grade=A|grade=a)cout优秀endl;else if(grade=B|grade=b)cout良好endl;else if(grade=C|grade=c)cout一般endl;else if(grade=D|grade=d)cout及格endl;else if(grade=F|grade=f)cout及格endl;elsecoutErrorendl;,54,判断两个float型数值相等要小心,因为float型数值在内存中不能精确的

17、存储,所以判断两个float型数值相等不相等,一般比较两个值的差是否小于某值。,55,#include#include using namespace std;int main()float num1=float(10.0);float num2=float(3.0);float quotient=0.0;quotient=num1/num2;,56,if(fabs(quotient-3.33333).00001)cout Yes,the quotient quotient is equal to 3.33333 endl;elsecout No,the quotient quotient i

18、s not equal to 3.33333 endl;return 0;,57,#include#include using namespace std;int main()char letter=;cout letter;if(toupper(letter)=P)cout Pass endl;elsecout Fail endl;return 0;,58,#include#include using namespace std;int main()string name=;cout age;if(age 21)cout name is over 21.endl;elsecout name

19、is not over 21.endl;return 0;,59,#include#include using namespace std;void main()string a1=20040417;string str;coutstr;if(str=a1)coutThe password is correct.press any key to enter!;else cout密码错!endl;,60,switch语句一般形式,61,switch 语句,62,63,#include void main(void)int day;cout day;switch(day)case 0:cout S

20、unday endl;break;case 1:cout Monday endl;break;case 2:cout Tuesday endl;break;,例:输入一个06的整数,转换成星期输出,64,case 3:cout Wednesday endl;break;case 4:cout Thursday endl;break;case 5:cout Friday endl;break;case 6:cout Saturday endl;break;default:cout“输入数据不在规定范围内 endl;,65,66,67,程序清单,68,69,例:编制一个完成两个数四则运算的程序,方

21、法一 程序清单,70,71,方法二 程序清单,72,73,实现循环结构的方法,74,75,76,77,格式:do 语句;while(条件);,78,对比下列程序:,程序1:#includevoid main(void)int i,sum(0);cini;while(i=10)sum+=i;i+;coutsum=sumendl;,程序2:#includevoid main(void)int i,sum(0);cini;do sum+=i;i+;while(i=10);coutsum=sumendl;,79,格式:for(表达式1;表达式2;表达式3),说明:,80,81,for(表达式1;表达式

22、2;表达式3)语句,表达式1;while(表达式2)语句 表达式3;,while(条件)语句 修正控制变量,for(;条件;修正控制变量)语句,表达式1;for(;表达式2;表达式3)语句,82,#includevoid main(void)int sum(0);for(int i=0;i=10;i+)sum+=i;coutsum=sumendl;,运行结果:sum=55,例 求自然数110之和分析:本题需要用累加算法,累加过程是一个循环过程,可以用while语句实现。,83,#include void main(void)int n,right_digit;cout n;coutThe nu

23、mber in reverse order is;do right_digit=n%10;cout right_digit;n/=10;while(n!=0);coutendl;,例 输入一个整数,将各位数字反转后输出,84,运行结果:Enter the number:365The number in reverse order is 563思考问题:若要求计算出该数的反序数,该如何修改?,85,循环结构与选择结构相互嵌套,例 输出100至200中个位数为3且能被3整除的数#includevoid main(void)int n;for(n=100;n=200;n+)if(n%3=0,86,#

24、include void main(void)int n,k;cout n;cout Number n Factors;for(k=1;k=n;k+)if(n%k=0)cout k;cout endl;,例 输入一个整数,求出它的所有因子,87,运行结果1:Enter a positive integer:36Number 36 Factors 1 2 3 4 6 9 12 18 36 运行结果2:Enter a positive integer:7Number 7 Factors 1 7,88,例 读入一系列整数,统计出正整数个数i和负整数个数j,读入0则结束,分析:需要读入一系列整数,但是

25、整数个数不定,要在每次读入之后进行判断,因此使用while循环最为合适。循环控制条件应该是n!=0。由于要判断数的正负并分别进行统计,所以需要在循环内部嵌入选择结构。,89,#includevoid main(void)int i=0,j=0,n;coutn;while(n!=0)if(n0)i+=1;if(nn;cout“正整数个数:”i“负整数个数:”jendl;,90,例编程求n!,n从键盘输入。分析:n!=1*2*3*(n-1)*n=(n-1)!*n要求某自然数的阶乘,可以先求比它小1的自然数的阶乘,用其值再乘该自然数本身,因此可以按下面方法通过for语句控制循环来求解。,91,#in

26、clude using namespace std;void main()int mul=1,j,n;coutn;for(j=1;j=n;j+)mul*=j;coutmul=mulendl;,92,例计算1-1/2+1/3-1/100分析:因题中计算式每相邻的两项正负号相反,我们可以设置一个变量(sign)来控制符号的变化,在循环计算过程中使得每循环一次,符号也变化一次。,93,#include using namespace std;void main()int deno;double sum=1.0,sign=1.0,term;for(deno=2;deno=100;deno+)sign=

27、-sign;/改变正、负号 term=sign*(1.0/deno);/deno:计数 sum=sum+term;coutsum=sumendl;,94,此例中应注意:语句term=sign*(1.0/deno);可以换成 term=sign/deno;但不能写成term=sign*(1/deno);因为此处1/deno是整数除法,95,例如果一个三位数的个位数、十位数和百位数的立方和等于自身,则称该数为水仙花数,编程找出所有的水仙花数。分析:设:i为百位数,j为十位数,k为个位数 水仙花数:n=ijk=i3+j3+k3可用下面方法从n=ijk中分别提取数字i、j和ki=n/100;j=(n/

28、10)%10;k=n%10,96,#includeusing namespace std;void main()int n,i,j,k;for(n=100;n=999;n=n+1)i=n/100;j=(n/10)%10;k=n%10;if(n=i*i*i+j*j*j+k*k*k)/判断n是否水仙花数coutn=i3+j 3+k3endl;,97,例计算级数:1+x-x2/2!+x3/3!-+(-1)n+1xn/n!分析:根据通项式:(-1)n+1xn/n!=(-x/n)(-1)nxn-1/(n-1)!)可以得出前后两项之间的关系,利用此关系用循环加以实现。,98,#include using

29、namespace std;void main()int j,n;double sum=1.0,term=-1.0,x;coutxn;for(j=1;j=n;j+)term=-term*x/j;sum=sum+term;coutsum=sumendl;,99,100,#include void main()const double pi=3.14;int r;double area;for(r=1;r100)break;coutarea=areaendl;coutpiendl;coutrendl;,101,#include void main()int n;for(n=100;n=200;n+

30、)if(n%3=0)continue;cout“n=“n;,102,例求100-150之间和400-450之间能被9整除的数。#includeusing namespace std;void main()int n;for(n=100;n150,103,#include void main()int i,sum=0;i=1;Loop:if(i=100)sum=sum+i;i+;goto loop;cout“sum=“sum;,104,#include using namespace std;void main()int j=1,sum=0;loop:sum+=j;j+;if(j=100)got

31、o loop;coutsum=sumendl;,105,例 判断一个整数是否为素数,106,流程图,107,方法一:程序清单,108,#includeusing namespace std;void main()int m,j;coutm;for(j=2;jm;j+)if(m%j=0)break;if(j=m)coutm是素数。endl;else coutm不是素数。endl;,109,方法二:程序清单,110,并列关系允许同名,嵌套关系不允许同名,111,计算1!+2!+3!+4!+.+20!#include using namespace std;void main()int sum=0,

32、t;for(int i=1;i=20;i+)/累加各n!t=1;for(int j=1;j=i;j+)/计算n!t*=j;sum+=t;coutsum=sumendl;,112,例回文数是指正读与反读都一样的数,如:232,编程求100到999之间的回文数.分析:当百位数为i(i=1,2,9)时,i j i(j=0,1,2,9)就是回文数.,113,#includeusing namespace std;void main()int n,i,j;for(i=100;i=999;i=i+100)for(j=i/100;j=99;j=j+10)n=i+j;cout n;coutendl;,114,

33、循环结构的嵌套,#includevoid main(void)int i(1),a(0);for(;i=5;i+)do i+;a+;while(i3);i+;couta”,”iendl;,115,例 编写程序输出以下图案,*,116,#includevoid main(void)int i,j,n=4;for(i=1;i=n;i+)/输出前4行图案 for(j=1;j=30;j+)cout;/在图案左侧空30列 for(j=1;j=8-2*i;j+)cout;for(j=1;j=2*i-1;j+)cout*;coutendl;,117,for(i=1;i=n-1;i+)/输出后3行图案 for

34、(j=1;j=30;j+)cout;/在图案左侧空30列 for(j=1;j=7-2*i;j+)cout*;coutendl;,118,119,方 法 一:程 序 清 单,120,方 法 二:程 序 清 单,121,122,123,124,程序清单,125,源程序清单:#includeusing namespace std;void main()double e=1.0,u=1.0;int n=1;while(u=1.0e-7)u=u/n;e=e+u;n=n+1;coute=e,(n=n)endl;,126,求两个整数的最大公约数和最小公倍数。,127,#include void main()

35、int a,b,num1,num2,temp;coutnum1num2;if(num1num2)temp=num1;num1=num2;num2=temp;,128,a=num1,b=num2;while(b!=0)temp=a%b;a=b;b=temp;cout最大公约数是aendl;cout最小公倍数是num1*num2/a;,129,证明:650之间的偶数可分解为两个素数之和,130,#include iostream.h#include math.h bool prime(int n)bool flag=true;int i;for(i=2;i=sqrt(n);i+)if(n%i=0)

36、flag=false;break;return flag;,131,void main(void)int i,j;/bool prime(int y);for(i=6;i=50;i+=2)for(j=3;j=i/2;j+=2)if(prime(j),132,期中考试题,1、从键盘输入一组0100之间的正整数,求这组数据最大值、最小值及累加和,并输出结束。2、求Sn=a+aa+aaa+aaaa之值。n和a由键盘输入。3、用迭代法求 x=求平方根的迭代公式为 Xn+1=1/2(Xn+a/Xn)要求前后两次的X 的差的绝对值小于10-54、用牛顿迭代法求方程在1.5附近的根 2X3-4X2+3X-6

37、=05、用二分法求方程在(-10,10)之间的根 2X3-4X2+3X-6=0,n个a,133,#include using namespace std;void main()int a=5,n=5,count=1,sn=0,tn=0;while(count=n)tn=tn+a;sn=sn+tn;a=a*10;count+;coutsnendl;,134,#includevoid main()const int N=10;int x,max,min,sum;cinx;max=x;min=x;sum=x;for(int i=1;ix;if(x0,135,3、#include#include vo

38、id main()double a,xn0,xn1;couta;xn0=sqrt(a/a/2;xn1=(xn0+a/xn0)/2;doxn0=xn1;xn1=(xn0+a/xn0)/2;while(fabs(xn0-xn1)=1e-5);couta的平方根的值xn1endl;,136,#include 牛顿迭代法#include void main()double x,x0,f,f1;x=1.5;dox0=x;f=(2*x0-4)*x0+3)*x0-6;f1=(6*x0-8)*x0+3;x=x0-f/f1;while(fabs(x-x0)=1e-5);cout方程的根=xendl;,137,#include 二分法#include void main()double x0,x1,x2,fx0,fx1,fx2;docoutx1x2;fx1=x1*(2*x1-4)*x1+3)-6;fx2=x2*(2*x2-4)*x2+3)-6;while(fx1*fx20);dox0=(x1+x2)/2;fx0=x0*(2*x0-4)*x0+3)-6;if(fx0*fx1)=1e-5);cout方程的根=x0endl;,138,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号