已阅读5页,还剩118页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2019/6/8,1,第3章 程序控制结构,ed2k:/|file|%E8%89%B2%E6%88%92%20DVD%E6%9C%AA%E5%88%A0%E5%85%A8%E6%B8%85%E6%99%B0%E7%89%88.AVI|2021681152|05768D47B60034A21D11796F378FC9F2|/,2019/6/8,2,内容:,关系运算和逻辑运算 条件控制语句及条件表达式 多分支控制语句 循环语句for,while,dowhile 自增、自减运算 逗号运算符和逗号表达式 break和continue语句,重点:,选择结构程序设计 循环结构程序设计,2019/6/8,3,解决步骤图示:,需要选择结构描述,示例1:A,B两个整数,如果A大于B,则输出A,否则输出B。,2019/6/8,4,选择结构需要解决的两个问题,控制选择结构执行方向的条件表示 一般用关系表达式,逻辑表达式来描述条件 控制结构的结构描述,N,Y,2019/6/8,5,关系运算符 优先级,用关系运算符将两个表达式(可以是算术表达式、关系表达式、赋值表达式或逻辑表达式)连接起来的式子,称为关系表达式,其值为0或1。,关系运算符和关系表达式,从左向右,结合性:,2019/6/8,6,示例: 8=4 其值为“假”,表达式的值为0。 50 其值为“真”,表达式的值为1。 思考:x=1与x=1意义相同吗?,注意:关系表达式的值为逻辑值“真”或“假”,以1代表“真”,以0代表“假”。,2019/6/8,7,逻辑运算符和逻辑表达式,逻辑运算符 优先级,2019/6/8,8,真 真 假 假 真 真 真 假 假 真 假 真 假 真 真 假 假 真 假 假 真 真 假 假,a b ! a ! b a&b a|b,逻辑运算符和逻辑表达式(续),2019/6/8,9,逻辑表达式的值是一个逻辑量“真”或“假”。C语言编译系统在给出逻辑结果时,以数值1代表“真”,以0代表“假” 在判断一个量是否为“真”时,以非0代表“真”,以0代表“假”。 例如: 若x = 10, 则 !x的值为0。 若a = 3, b = 2, 则a&b的值为1。 5 & 0 |8的值为1。,逻辑运算符和逻辑表达式(续),2019/6/8,10,结合性,从左向右,例如: 5 3 & 4 | 8 4 的结果为 1,2019/6/8,11,特点 在逻辑表达式的求解中并不是所有的运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行下一个运算符。 例如:已知a=3,b=0,c=2,则执行下列表达式后a,b,c分别是多少? a & b & (c=4),2019/6/8,12,!(非) 算术运算符 关系运算符 & | 赋值运算符,各种运算符优先级,例如: xc 等效于(!a) & (bc),2019/6/8,13,练习1:,能正确表示x大于等于10或x小于等于0的逻辑表达式是: 能正确表示x大于等于0且小于等于10的逻辑表达式是:,X=10 | X=0,X=0 & X=10,2019/6/8,14,能正确判断变量x中的字符是英文字母的表达式是:,(X=a & X=A & X=Z),?,2019/6/8,15,if 选择结构,必要时,注意 使用复合语句。,2019/6/8,16,#include int main(void) int a,b,max; scanf(“%d,%d“, ,示例: 求两个整数中较大的数,int a , b , max,键盘输入a,b值,amax,maxb,1,0,bmax,输出max值,if (表达式) 语句,2019/6/8,17,#include int main(void) int a,b,max; scanf(“%d,%d“, ,示例: 求两个整数中较大的数,int a , b , max,键盘输入a,b值,ab,1,0,amax,输出max值,if (表达式) 语句1 else 语句2,bmax,2019/6/8,18,if-else形式的执行流程,if-else 形式结构:if (表达式) 语句1; else 语句2;,2019/6/8,19,#include int main(void) int a,b,max; scanf(“%d,%d“, ,示例: 求两个整数中较大的数,可以通过条件表达式来完成赋值,max=ab?a:b;,2019/6/8,20,条件运算符 ?: 条件表达式的形式: 表达式1?表达式2:表达式3 计算过程:先计算表达式1,若其值为非零,则结果为表达式2的值,否则就是表达式3的值。,条件运算符和条件表达式,2019/6/8,21,示例2:根据如下描述的算法,编程。,#include int main(void) float a,b ; scanf(“%f,%f“, ,必须用复合语句,定义变量,键盘输入两个实数,ab,1,0,a,b互换,依次输出a,b的值,2019/6/8,22,练习:阅读下列源程序,写出运行结果,#include int main(void) int a=4,b=3,c=3,t=0; if(a=c) t=a;a=c;c=t; printf(“%d %d %dn”,a,b,c); return 0; ,结果: 3 0 3,2019/6/8,23,示例3:求ax2+bx+c=0的实根(要求:a,b,c的值从键盘输入,a不等于0),#include #include void main( ) int a,b,c; float d,x1,x2; scanf(“%d%d%d”, ,思考:若改为求两个根,应如何修改源程序?,2019/6/8,24,-1 (x0) 请编写程序,输入一个x值,输出对应的y值。,if (x0) y=-1; else if (x=0) y=0; else y=1;,变量定义,由键盘输入x值,X0,1,0,y=-1,X=0,1,0,y=0,y=1,输出x,y值,2019/6/8,25,else-if形式结构 : if (表达式1) 语句1; else if (表达式2) 语句2; else 语句n+1;,else-if形式的执行流程,2019/6/8,26,示例5:请仔细检查下列程序:,#include void main( ) intx,y; scanf(“%d”,x); if x1 y=x; else (1=x10) y=2x-1; y=3x-11; printf(“%d”,y); ,2019/6/8,27,在一个if语句中又包含了另 一个if语句,称为if语句的 嵌套。,一般形式为: if ( ) if ( ) 语句1; else 语句2; else if ( ) 语句3; else 语句4;,C语言规定, else总是和它 上面离它最近 的if配对。,if 语句的嵌套,2019/6/8,28,程序段1,程序段2,在if子句中嵌套,在else子句中嵌套,if (x=0) if (x0) y=-1; else y=0; else y=1;,if (x0) y=-1; else if (x=0) y=0; else y=1;,-1 (x0) 请编写程序,输入一个x值,输出对应的y值。,2019/6/8,29,#include #include void main() /*已知三角形的三边,计算其面积*/ int a,b,c; float s; double re; scanf(“%d,%d,%d“, ,示例7,2019/6/8,30,复习小结:,关系运算符和关系表达式、逻辑运算符和逻辑表达式; 条件表达式; if语句,if-else形式: if (表达式) 语句1; else 语句2;,if形式: if (表达式) 语句;,else-if形式 if (表达式1) 语句1; else if (表达式2) 语句2; else 语句n;,2019/6/8,31,示例8:从键盘输入一个整数放在a中,当输入的值为1时,显示A,输入2时显示B,输入3时显示C,当输入其他整数时显示D。,2019/6/8,32,多分支控制语句(switch语句),switch语句是实现多分支 选择结构的另一个语句。,switch (表达式) case 常量表达式1:语句1;break; case 常量表达式n:语句n;break; default :语句n+1; ,switch语句的 基本格式,各常量表达式的值必须互不相同,且必须是整型或字符型。,2019/6/8,33,示例:阅读下列源程序,请写出运行结果,#include void main() int j; scanf ( “%d ” , ,输入1 结果 111 输入2 结果 ? 输入3 结果 ?,2019/6/8,34,示例:源程序:,#include void main( ) int a; scanf(“%d”, ,2019/6/8,35,示例: 将1至7中的任意一个数字转化成对应的英文星期几的前三个字母,如1转化为Mon,7转化为Sun等。,#include void main() int a; printf(“请输入整数: “); scanf(“%d“,/*输入的不是0至7的整数时执行*/ ,2019/6/8,36,示例7:用公式f=p*w*s*(1-d) 计算运输费。,吨公里运价,运输距离,折扣,货重,s250(公里) d=0 250s500 d=0.02 500s1000 d=0.05 1000s2000 d=0.08 2000s3000 d=0.10 3000s d=0.15,switch (表达式) case 常量表达式1:语句1;break; case 常量表达式n:语句n;break; default :语句n+1; ,示例,2019/6/8,37,用if语句、else-if语句完成上述例题, 并做对比。,?,要根据运输距离计算折扣d,关键 是要构造switch后的表达式,根据 题目,选择 c=s/250 来求c的值。 if (s=3000) c=12; else c=s/250;,程序中当c的值为2,3时, d的值都是0.05,则这两 个case语句可以共同使用 一个语句。,分析,说明,2019/6/8,38,源程序:,#include void main() int c,s; float f,p,w,d; scanf(“%f,%f,%d”, case 4:,case 5: case 6: case 7: d=0.08; break; case 8: case 9: case 10: case 11:d=0.01;break; case 12: d=0.15; f=p*w*s*(1-d); printf(“运费:%.2fn”, f);,2019/6/8,39,思考:如果将全部的break语句去掉会有什么结果?,2019/6/8,40,选择结构应用举例,输入三个整数,输出最大数和最小数。,定义变量a,b,c,max,min,输入a,b,c的值,ab,1,0,max=a min=b,max=b min=a,maxc,1,0,max=c,minc,1,min=c,0,输出 max和 min的值,#include void main( ) int a, b, c, max, min ; scanf ( “%d,%d,%d” , ,2019/6/8,41,编写简单的计算器程序。用户输入运算数和四则运算符,输出计算结果。,float a,b; char c;,输入一个运算符,输入参与运算的两个运算数,c=?, + , - , *, / ,其他,计算和并输出结果,计算差并输出结果,计算积并输出结果,计算商并输出结果,输出错误信息,#include void main( ) float a,b; char c; printf(“输入一个运算符+,-,*,/:”); scanf(“%c”, ,2019/6/8,42,循环结构程序设计,示例9:编写满足1+2+3+n500中最大的n并求其和的程序。,本题是一个累加求和的问题, 当累加和sum500时反复执行 循环体(sum+=n; n=n+1;), 否则结束循环。,0,1,2019/6/8,43,循环结构需要解决的两个问题,控制循环执行的条件表示 可以使用c中的任意表达式,一般是关系表达式或逻辑表达式 循环结构的结构描述,2019/6/8,44,格式: for(表达式1;表达式2;表达式3) 语句;,0,真(非0),表达式2?,语句 计算表达式3,循环体外语句,表达式1,执行流程:,for语句,表达式1,2,3 可以是任何类型 的表达式,甚至 可以省略。,2019/6/8,45,示例9:编写满足1+2+3+n500中最大的n并求其和的程序。(第1种解法),#include void main( ) int n ,sum=0; for(n=1; sum500; n+) sum=sum+n; n- -; sum=sum-n; printf(“%d,%d“,n-1,sum); ,#include void main( ) int n ,sum; for(n=0,sum=0; sum500; sum+=n,n+); n- -; sum=sum-n; printf(“%d,%d“,n-1,sum); ,2019/6/8,46,示例10:在3100之间所有3的倍数中,找出个位数为2的数。,定义变量 i,for( i=3; i=100 ; i+=3 ),i % 10=2,输出 i值,#include void main( ) int i; /*i从3开始,每循环一次增加3*/ for( i=3;i=100;i+=3 ) if (i%10=2) /*i%10的值就是i的个位数*/ printf (“%4d”,i); printf(“n”); ,2019/6/8,47,#include void main( ) int i ,sum; for(i=1,sum=0; i=10; i+) sum=sum+i; printf(“%d“,sum); ,示例:用for语句编程,计算1+2+.+10,2019/6/8,48,#include int main(void) int i, sum; sum = 0; for ( i = 1; i = 100; i+ ) sum = sum + i; printf( “sum = %dn”, sum); return 0; ,示例:求 1+1/2+1/3+ 1/100,for(i=1; i=100; i+) sum=sum+1.0/i;,int i; double sum;,printf( “sum = %fn”, sum);,2019/6/8,49,输入一个正整数n,求前n项和,即循环n次 #include int main(void) int i, sum; sum = 0; for ( i = 1; i = 100; i+ ) sum = sum + i; printf( “sum = %dn”, sum); return 0; ,示例:求 1+2+3+n,for(i=1; i=n; i+) sum=sum+i;,printf(“Enter n:“); scanf(“%d“, ,Enter n: 100 Sum = 5050,2019/6/8,50,#include int main(void) int i, sum; printf(“Enter n: “); scanf(“%d“, ,示例:求1+1/2+1/3+ 1/n,#include int main(void) int i; double sum; printf(“Enter n: “); scanf(“%d“, ,源程序,2019/6/8,51,求前n项和,即循环n次,每次累加1项。 for (i = 1; i = n ; i+) sum = sum + item (第i项) item = 1.0 / (2 * i - 1),示例:求 1+1/3+1/5+ 的前n项和,2019/6/8,52,#include int main(void) int i, n; double item, sum; printf(“Enter n: “); scanf (“%d“, ,示例:求 1+1/3+1/5+,源程序,2019/6/8,53,求前n项和,即循环n次,每次累加1项。 for (i = 1; i = n ; i+) sum = sum + item (第i项) item = flag * 1.0 / denominator denominator = denominator + 2 flag = -flag,示例:求 1-1/3+1/5- 的前n项和,item = flag*1.0/(2 * i - 1),2019/6/8,54,#include int main(void) int denominator, flag, i, n; double item, sum; printf(“Enter n: “); scanf (“%d“, ,源程序,2019/6/8,55,n! = 1*2*n for (i = 1; i = n ; i+) product = product * item (第i项) item=i,示例:求n!,product = ?,2019/6/8,56,#include int main(void) int i, n; double product; printf(“input n: n“); scanf (“%d“, ,源程序,2019/6/8,57,输入实数x和正整数n, 计算xn = x * x * * x for (i = 1; i = n ; i+) power = power * item (第i项) item=?,示例:求 xn,2019/6/8,58,#include int main(void) int i, n; double x, power ; printf(“Enter x, n: n“); scanf (“%lf%d“, ,求 xn 源程序,2019/6/8,59,示例:程序解析,输入一个正整数n,生成一张2的乘方表,输出20 到2n的值,可以调用幂函数计算2的乘方。,for (i = 0; i = n ; i+) power = pow(2, i); /*调用幂函数pow(2,i)计算2的i次方*/ 输出power的值; ,2019/6/8,60,生成乘方表源程序,#include #include int main(void) int i, n; double power; printf(“Enter n:“); scanf(“%d“, ,Enter n: 4 pow(2,0)= 1 pow(2,1)= 2 pow(2,2)= 4 pow(2,3)= 8 pow(2,4)= 16,2019/6/8,61,生成阶乘表,输入一个正整数n,生成一张阶乘表,输出0!到n!的值。要求定义和调用函数fact(n)计算n!,函数类型是double。,for (i = 0; i = n ; i+) power = pow(2, i); /*调用幂函数pow(2,i)计算2的i次方*/ 输出power的值; ,for (i = 0; i = n ; i+) product = fact(i); /* 调用自定义函数fact(i)计算i! */ 输出product的值; ,2019/6/8,62,#include double fact(int n); /* 自定义函数的声明 */ int main(void) int i, n; double result; printf(“Enter n:“); scanf(“%d“, ,生成阶乘表源程序,Enter n: 3 0!=1 1!=1 2!=2 3!=6,double fact(int n) /* 函数首部 */ int i; double product; product = 1; for (i = 1; i = n; i+) product = product * i; return product; /* 将结果回送主函数 */ ,2019/6/8,63,字符输入/输出函数),格式:getchar( ),功能: 从标准设备(一般是键盘) 输入一个字符。getchar函数没有 参数,函数值就是从设备输入的 字符。头文件为stdio.h,2019/6/8,64,字符输入/输出函数,格式:putchar(c),功能:将c值所对应的字符输出 到标准输出设备上。 (输出设备一般为显示器)。,c可以是整型或字符型。 一次只能输出一个字符, 头文件为stdio.h 。,2019/6/8,65,#include int main(void) int digit, i, letter, other; char ch; digit = letter = other = 0; printf(“Enter 10 characters: “); for(i = 1; i = a ,input 10 characters: Reold 123? letter=5, digit=3, other=2,多层缩进的书写格式 使程序层次分明,示例,2019/6/8,66,假设自动售货机出售4种商品,薯片(crisps)、爆米花(popcorn)、巧克力(chocolate)和可乐(cola),售价分别是每份3.0、2.5、4.0和3.5元。 在屏幕上显示以下菜单,用户可以连续查询商品的价格,当查询次数超过5次时,自动退出查询;不到5次时,用户可以选择退出。当用户输入编号14,显示相应商品的价格;输入0,退出查询;输入其他编号,显示价格为0。 1 Select crisps 2 Select popcorn 3 Select chocolate 4 Select cola 0 Exit,示例,2019/6/8,67,#include Int main(void) int choice, i; double price; for( i = 1; i = 5; i+) printf(“1 Select crisps n“); printf(“2 Select popcorn n“); printf(“3 Select chocolate n“); printf(“4 Select cola n“); printf(“0 exit n“); printf(“Enter choice: “); scanf(“%d“, ,1 Select crisps 2 Select popcorn 3 Select chocolate 4 Select cola 0 Exit Enter choice: 1 price = 3.0 1 Select crisps 2 Select popcorn 3 Select chocolate 4 Select cola 0 Exit Enter choice: 7 price = 0.0 1 Select crisps 2 Select popcorn 3 Select chocolate 4 Select cola 0 Exit Enter choice: 0 Thanks,2019/6/8,68,int main(void) int blank, digit, i, other; char ch; blank = digit = other = 0; printf(“Enter 10 characters: “); for(i = 1; i = 10; i+) ch = getchar(); switch (ch) case : case n: blank +; break; case 0 : case 1 : case 2 : case 3 : case 4 : case 5 : case 6 : case 7 : case 8 : case 9 : digit +; break; default: other +; break; printf(“blank=%d, digit=%d, other=%dn“, blank, digit, other); return 0; ,Enter 10 characters: Reold 123? blank=1, digit=3, other=6,示例,输入10个字符,分别统计出其中空格或回车、数字和其他字符的个数。,2019/6/8,69,格式:while(表达式) 语句;,0,真(非0),表达式?,循环体外语句,语句,执行流程:,while语句,注意使用 复合语句。,2019/6/8,70,示例9:编写满足1+2+3+n500中最大的n并求其和的程序。(第3种解法),#include void main( ) int n=1,sum=0; while ( sum500 ) sum+=n; n=n+1; n=n-1; sum=sum-n; printf(“n=%d,sum=%dn”, n-1,sum); ,可使用自增运算符描述来提高编译效率(n+),2019/6/8,71,自增和自减运算符 + 运算符的作用是使变量的值增1。 - 运算符的作用是使变量的值减1。 常见的用法有: +i , -i 在使用i前,先使i的值加(减)1 i+ , i- 在使用i后,先使i的值加(减)1,2019/6/8,72,示例:,已知 i=5 j=i+; j=? i=? j=+i; j=? i=?,5,6,6,6,i+1 不等同于 i+,2019/6/8,73,注意: 1 自增和自减运算符只能用于变量,表达式 (x+y)+ 是不合法的。 2 自增和自减运算符的结合方向是“自右向左”。如表达式 -i+ 等价于 -(i+)。 3 具有一定的二义性,使用时请慎重! 如:设i原值是3,则(i+)+(i+)+(i+)的值可能是9,也可能是12,2019/6/8,74,练习:,已知a=3,b=0,c=2,则执行下列表达式后a,b,c分别是多少? 1、a & b & c- - 2、a &+ b | -c,3,1,2,3,0,2,2019/6/8,75,逗号运算符和逗号表达式 逗号运算符: , 逗号表达式: 表达式1,表达式2 求解过程: 先求解表达式1,再求表达式2,整个逗号表达式的值是表达式2的值。,2019/6/8,76,逗号运算符和逗号表达式(续) 例如 a=3 a=4*6,a+5 /*整个逗号表达式的值为29。*/ 注意 一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式,例如: (a=4*6,a+5),a+6 /*整个表达式的值为30。*/ 逗号运算符是所有运算符中级别最低的。,2019/6/8,77,练习:,下面程序段的输出结果: int a,b,c; a=(b=c=5,+b,b+(c+); printf(“a=%d,b=%d,c=%dn”,a,b,c);,下面程序段的输出结果: int a=10,b=10,c,d; c=(+a,b+,a+,+b); d=-a,b-,-a,b-; printf(“a=%d,b=%d,c=%d,d=%dn”,a,b,c,d);,a=11,b=6,c=6,a=10,b=10,c=12,d=11,考虑=“号和”,“的优先级别,2019/6/8,78,格式:do 语句 while(表达式);,真(非0),表达式?,语句,循环体外语句,执行流程:,do while 语句,假(0),2019/6/8,79,示例:,#include void main() int k =100; while (k0) k=k-1; printf(“%d”,k); ,#include void main() int k =100; do k=k-1; while (k0) ; printf(“%d”,k); ,结果:,100,结果:,99,2019/6/8,80,示例9:编写满足1+2+3+n500中最大的n并求其和的程序。(第3种解法),0,1,#include void main( ) int n = 1 , sum = 0; do sum += n; +n; while ( sum 500 ); n- -; sum=sum-n; printf(“n=%d,sum=%d“ , n-1,sum); ,2019/6/8,81,程序,示例11: 求两个数m和n的最大公约数,当mm,r-n m % nr 直到r=0时,输出n的值。,当r!=0时,输出n值,2019/6/8,82,#include void main( ) int m,n,r; scanf(“%d,%d”, ,2019/6/8,83,#include void main( ) long a=1,b=1,j=1; while(j=15) printf(“%8ld,%8ld“,a,b); a=a+b; b=b+a; j+; ,示例12:请编程输出一数列,已知第一,第二个数都是1,从第三个数开始,每个数都是与其相邻的前两个数之和,求这一数列的前30个数,请编程。,2019/6/8,84,思考:若将示例10,改为求这一数列,直到其数不小于105 ,应该如何编程?,变量定义,a=1, b=1,输出a值,当b105 时,输出b值,a=a+b,a,b值互换,#include void main( ) long a=1,b=1,c; printf(“n%8ld“,a); while(b1e+5) printf(“%8ld“,b); a=a+b; c=a;a=b;b=c; ,2019/6/8,85,一个循环体内又包含另一个完 整的循环结构,称为循环的嵌套。,内嵌的循环中还可以嵌套循环, 这就是多重循环。,循环的嵌套,2019/6/8,86,for( ) while( ) ,Do for() while();,while() for() ,for() for() ,注意:以下四种均为合法的嵌套循环结构,2019/6/8,87,练习:阅读下列源程序,写出运行结果:,#include void main() int i,j; for( i = 1;i = 9;i+ ) for( j = 1;j = i;j+) printf(“%3d“ , i * j); printf(“n“); ,2019/6/8,88,输出结果: 1 2 4 3 6 9 4 8 12 16 5 10 15 20 25 6 12 18 24 30 36 7 14 21 28 35 42 49 8 16 24 32 40 48 56 64 9 18 27 36 45 54 63 72 81,2019/6/8,89,阅读下列源程序,写出运行结果:,#include void main() int i,j; for(i=1;i=4;i+) for(j=1;j=5-i;j+) printf(“ “); for(j=1;j=2*i-1;j+) printf(“*“); printf(“n“); ,2019/6/8,90,阅读下列源程序,写出运行结果:,#include void main() float sum=1.0,t,s=1.0; int i; for(i=1;i=100;i+) t=s/i; sum=sum+t; s=-s; printf(“sum=%5.4fn“,sum); ,1-1/2+1/3-1/4+1/99-1/100,2019/6/8,91,break语句用于循环语句和switch语句。 作用:跳出循环语句和switch 语句。,while() . if( ) break; . ,示例: #include void main( ) int i,s=0; for(i=1;i5) break; printf(“s=%dn”,s); ,break语句,1 3 6 10 15,2019/6/8,92,continue语句类似于break语句,但不是退出循环,而是跳过循环体下面未执行的语句,接着执行循环下一次迭代。如: while( ) if ( ) continue; ,continue语句,#include void main() int n; for(n=100;n=200;n+) if(n%3=0) continue; printf(“%5d”,n); 功能?,2019/6/8,93,复习小结,1:顺序结构程序设计: 2:选择结构程序设计: 3:循环结构程序设计:,注意:break和continue语句的应用。,库函数调用语句; 赋值等表达式语句。,if语句; Switch语句; 条件表达式;,while循环; do 循环; for 循环;,case后的表达式中不能出现变量,并且数据类型必须是整型、字符型或枚举型,各常量表达式必须互不相同。,2019/6/8,94,循环结构应用举例,示例13:用近似公式求e1+1/1!+1/2!+1/n! 分析:设t分别代表求和公式中的每一项,则第i项总可以用第i-1项推算出来,即 t=t/i。,#include void main( ) float e=1.0,t=1.0; int i,n; scanf(“%d”, ,2019/6/8,95,实验2.3的参考源程序,#include void main() double a,ra,tax,pr; int b; scanf(“%lf“,case 4: case 5: case 6: case 7: case 8: case 9:ra=0.10;break; case 10: ra=0.15; tax=a*ra; pr=a-tax; printf(“na=%.1fn“,a); printf(“rate=%.2f tax=%.2f profit=%.2fn“,ra,tax,pr); ,2019/6/8,96,#include void main() int i; double a, rate,tax,profit; printf(“输入奖金数目a=“); scanf(“%lf“,switch(i) case 0: rate=0.0;tax=0.0;profit=a; break; case 1: tax=(a-500)*0.05; profit=a-tax;rate=tax/a; break; case 2: case 3: tax=(a-1000)*0.08+500*0.05; profit=a-tax;rate=tax/a; break;,2019/6/8,97,case 4: case 5: case 6: case 7: case 8: case 9: tax=(a-2000)*0.10+1000*0.08+500*0.05;profit=a-tax; rate=tax/a;break; case 10: default: tax=(a-5000)*0.15+2000*0.10+1000*0.08+500*0.05; profit=a-tax; rate=tax/a; printf(“nrate=%.4f,tax=%.4f,profit=%.4fn“,rate,tax,profit); ,2019/6/8,98,示例14:百钱买百鸡问题。公鸡每只5元,母鸡每只3元,小鸡3只一元,问一百元买一百 只鸡有几种解法。,#include void main( ) int x, y, z ; for(x=0; x=19; x+) for(y=0;y=33-x; y+) z=100-x-y; if (z%3=0 ,枚举法,2019/6/8,99,示例15:猴子吃桃,第一天摘下若干个桃子,当天吃了一半后又多吃了一个,从第二天起,猴子每天都是吃了前一天剩下的一半多1个桃子。到第10天,猴子想吃桃子时发现只剩下了1个桃子,请编程计算猴子第一天共摘下多少个桃子?,分析: 根据题意,可以依次从第10天推出第九天的桃子数,从第九天推出第8天的桃子数,.。 用循环的算法来解决,循环变量控制天数(从10至1),循环体:n1=(n2+1)*2和n2=n1 其中n2为当天的桃子数,n1为前一天的桃子数。,递推法,2019/6/8,100,参考源程序:,#include void main( ) int i, n1 ,n2; /*n2为当天的桃子数,n1为前一天的桃子数*/ for(i=10,n2=1;i1;i-) n1=(n2+1)*2; /*依次求出前一天的桃子数*/ n2=n1; printf(“ 第1天摘的桃子数为:%dn ”,n1); ,2019/6/8,101,字符输入/输出函数),格式:getchar( ),功能: 从标准设备(一般是键盘) 输入一个字符。getchar函数没有 参数,函数值就是从设备输入的 字符。头文件为stdio.h,2019/6/8,102,字符输入/输出函数,格式:putchar(c),功能:将c值所对应的字符输出 到标准输出设备上。 (输出设备一般为显示器)。,c可以是整型或字符型。 一次只能输出一个字符, 头文件为stdio.h 。,2019/6/8,103,示例16:,编程:对键盘输入的任何 一个大写英文字符输出与 此对应的小写字符。,输入C cc+32 输出c,转换的算法:,2019/6/8,104,#include void main( ) char c; c=getchar(); c=c+32; putchar(c); ,输入c,转换,输出,2019/6/8,105,示例17:阅读下列源程序,总结其功能。,#include void main( ) int sum=0; char c; while(c=getchar( )!=n) sum+=c; printf(“nsum=%d“,sum); ,运行时输入: AaBb,功能:由键盘输入一个字符串,计算该字符串各字符对应的ASCII码值的累加和。,结果: 326,2019/6/8,106,练习:,1:执行下面程序片段的结果是( )。 int x=23; do printf(“%2d”,-x); while(!x);,22,2019/6/8,107,练习(续):,2:请写出以下源程序的运行结果。 #include void main() int a= -1,b=4,k; k=(a+=0) ,1 0 3,2019/6/8,108,练习(续):,3:请写出以下源程序的运行结果。 #include void main() int j; for(j=0;j3;j+) switch (j) case 1: printf(“%d”,j); case 2: printf(“%d”,j); default : printf(“%d”,j); ,011122,2019/6/8,109,练习(续):,4:以下程序运行后的输出结果是? #include void main( ) char c ; int n=100; float f=10 ; double x ; x=f*=n/=(c=50
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 六年级科学上册第二单元形状与结构7桥的形状和结构教案教科版
- 2024-2025学年新教材高中语文第一单元以意逆志知人论世第2课自主赏析湘夫人学案新人教版选修中国古代诗歌散文欣赏
- 2024年床上用织物制品项目合作计划书
- 2024-2025学年新教材高中英语Unit1CulturalHeritageReadingforWriting同步基础练习新人教版必修第二册
- 2024-2025学年新教材高中英语课时分层作业二Unit1Laughoutloud含解析外研版选择性必修第一册
- 玉溪师范学院《健康教育学》2021-2022学年第一学期期末试卷
- 玉溪师范学院《城市绿地系统规划》2023-2024学年第一学期期末试卷
- 2024小型维修合同
- 2024干货调料食品配送合同
- 2024标准建设工程设计合同模板
- 硝酸钾安全技术说明书MSDS
- 如何做好谈话笔录演示文稿
- 耐酸泵厂家排名前十耐酸碱泵十大品牌
- 第三单元《工具与技术》知识点-教科版六年级科学上册
- 小学道德与法治人教三上册安全护我成长心中的(吴运芝)
- 主通风机司机巡回检查制度
- TD-T 1056-2019 县级国土调查生产成本定额
- 出监教育内容2
- 四川省乡村机耕道建设规范和技术标准(试行)
- 中建八局建筑工程绿色施工技术及管理手册(420余页 图文并茂)
- 娃娃家区角游戏方案
评论
0/150
提交评论