c语言课件第五章(颜辉)
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
x=x/10
scanf( “%d”, &x); while (x!=0){
digit = x %10; x = x/10 ; printf( “%d ”, digit); }
例4-10
# include <stdio.h> void main( ) { char c;
printf("Please input a character:\n"); c = getchar(); if(c>='a' && c <= 'z' || c>='A' && c <= 'Z')
sum-x
printf("sum=%d", sum);
}
输入 1 2 5 -10
输入 -10 1 2 5
scanf("%d", &x); while (x>0){
sum + = x; scanf("%d", &x); }; printf("sum=%d", sum); }
5.2 break 和 continue 语句
例T1-1 求1+2+3+4+……+ n
算法: i =1 to n
s=s+t t++ i++
算法: i =1 to n
s=s+i i++
程序段: s=0; for(i=1; i<=n; i++)
s=s+i;
例T1-2 求1+1/2+1/3+……+ 1/n
算法: i =1 to n
s=s+t t++
sum=0; i=1; while(i<=10){
sum=sum+i; i++; }
sum=0; for(i=1; i<=10; i++)
sum=sum+i;
程序举例
例T1-1 求1+2+3+4+……+ n 例T1-2 求1+1/2+1/3+1/4+……+ 1/n 例T1-3 求1-1/2+1/3-1/4+…… 1/n 例T1-4 求1-1/3+1/5-1/6+…… 前n项之和 例T2-1 求n! 例T2-2 求xn 例T3-1 求1-1/3+1/5-1/7+…… ,直到最后1项的绝对值<10-5 例T4-1 输入100个整数,求其中正数之和 例T4-2 输入一个正整数n, 再输入n个数,输出最大值 例T5 输出Fibonacci序列前20个数
例T8 输入一行字符,统计英文字母、数字和其他字符
# include <stdio.h> void main( ) { char c;
int letter=0, digit=0, other=0;
while((c = getchar())!='\n')
c = getchar(); while(c!='\n'){
do-while 语句
do 语句 while (表达式);
语句
0 表达式 非0
i=1; do {
printf("%d", i); i++; } while(i<=10);
while (表达式) 语句;
do 语句 while (表达式);
表达式
非0 语句
先判断 0
后循环
语句
先循环
0
表达式
非0
后判断
printf("This is a letter.\n"); else if(c>='0' && c <= '9')
printf("This is a digit.\n"); else
printf("This is an other character. \n"); }
输入一行字符,统计英文字母、数字和其他字符。
5.1 循环语句
问题 • 打印整数1~10 • 打印整数1~100 • 打印整数1~n
i=1; while(i<=10){
printf("%d", i); i++; }
printf("%d", 1); printf("%d", 2); …… printf("%d", 10);
i=1; printf("%d", i); i++; printf("%d", i); i++; …… printf("%d", i); i++;
#include "stdio.h" void main( ) {
char c; int i=0;
#include "stdio.h" void main( ) {
char c; int i=0;
for (i=0; i<10;i++) { c=getchar(); if (c=='\n') break; putchar(c);
while 语句
while (表达式) 语句;
循环条件
表达式
0
i=1; while(i<=10){
printf("%d", i); i++; }
非0
语句
循环体 循环不变式 改变循环条件
10
求 sum= i
i=1
sum=0; i=1; while(i<=10){
sum=0 sum+1 —> sum
scanf("%d", &n); if(n>=1){
scanf("%d", &x); max=x; for (i=1; i<n; i++){
scanf("%d", &x); if (max < x) max=x; } printf("%d", max); } }
x
max
max
x
例T5 输出Fibonacci序列前20个数
12345 % 10 = 5 12345 / 10 = 1234
1234 % 10 = 4 1234 / 10 = 123
123 % 10 = 3
123 / 10 = 12
12 % 10 = 2
12 / 10 = 1
1 % 10 = 1
1 / 10 = 0 结束
循环不变式 x%10 循环条件 x==0
} printf("%d",sum); }
例4-7 求最大值
输入3个数,输出其中的最大值。 #include <stdio.h> void main( ) {
int a, b, c, max;
printf("input a, b, c:\n");
scanf("%d%d%d", &a, &b, &c);
putchar(c); c=getchar(); }
for (i=0; 1 ;i++) {
c=getchar(); if ( i >= 10 || c == '\n) break; putchar(c); }
break 流程
结束循环 while(exp){
语句1 if (expb) break; 语句2 }
是素数 && !=0 !=0
程序段: n=sqrt(m); for(i=2; i<=n; i++)
if(m%i==0) break; if(i>n) printf("yes\n") else printf("no\n”);
例T7 将一个正整数逆序输出
确定:循环条件和循环不变体
12345 5 4 3 2 1
if(c>='a' && c <= 'z' || c>='A' && c <= 'Z') letter++;
else if(c>='0' && c <= '9') digit++;
0
exp 非0
语句1
非0
循 环
体
0expb
语 句2
continue 流程
跳过continue后面的语句, 继续下一次循环
while(exp){ 语句1 if (expc) continue; 语句2
}
0
exp 非0
语句1
非0
循 环
体
0expb
语 句2
break 和 continue
输入:abc ↙ efgh ↙ 123 ↙
程序段:
s=0; flag=1; for(i=1; i<=n; i++){
s=s+1.0/i*flag; flag=-flag; }
例T1-4 求1-1/3+1/5-…… 前n项和
算法:
i =1 to n s=s+t t=1.0/i*flag flag=-flag i++
算法: i =1 to n
例T3-1 求1-1/3+1/5-…直到最后1项的绝对值<10-5
i =1 to n s=s+t t=1.0/tt*flag flag=-flag tt=tt+2
i++
算法: while |t|>=1E-5
s=s+t flag=-flag tt=tt+2 t=1.0/tt*flag
程序段:
s=0; flag=1; tt=1; t=1; while(fabs(t) >= 1E-5){
i++
算法: i =1 to n
s=s+t t=1.0/i i++
程序段: s=0; for(i=1; i<=n; i++)
s=s+1.0/i;
例T1-3 求1-1/2+1/3-1/4+…… 1/n
i =1 to n s=s+t t=1.0/i i++
算法: i =1 to n
s=s+t t=1.0/i*flag flag=-flag i++
} }
输出:abc
for (i=0; i<10;i++) { c=getchar(); if (c=='\n') continue; putchar(c);
} }
输出:abcefgh1
例T6 输入m,判断m是否为素数
算法:除了1和m,不能被其它数整除。
m
%2 %3 %4 %5
不是素数 || =0 =0
max = a;
a
if(max < b) max = b;
b
if(max < c) max = c;
c
printf("max is %d\n", max);
}
max max max
例T4-1输入一个正整数n, 再输入n个数,输出最大值
void main() { int i , max, n, x;
算法: i =1 to n
f=f*i i++
程序段: f=1; for(i=1; i<=n; i++)
f=f*i;
例T2-2 求xn
算法: i =1 to n
f=f*t t++ i++
算法: i =1 to n
f=f*t t=x i++
程序段: f=1; for(i=1; i<=n; i++)
f=f*x;
1, 1, 2, 3, 5, 8, …… x1 x2 t
x1 x2 t
x1=x2=1; t=x1+x2; x1=x2; x2=t;
程序段: x1=x2=1; printf("%d %d", x1, x2); for(i=1; i<=18; i++){
t=x1+x2; printf("%d ", t); x1=x2; x2=t; }
#include "stdio.h" void main( ) {
char c; int i=0;
for (i=0; i<10;i++) { c=getchar(); if (c=='\n') break; putchar(c);
} }
循环何时结束?
c=getchar(); for (i=0; i<10 && c! ='\n'; i++){
while 和 do-while
while 和 do-while 的用法比较
输入一些数,求和,直到输入负数为止。
void main( ) {
int x, sum=0;
void main( ) {
int x, sum=0;
do{
scanf("%d", &x);
sum + = x; } while (x>0);
for (exp1; exp2; exp3) 语句;
exp1
exp2 0
非0 语句
exp1; while(exp2){
语句; exp3; }
exp3
while 和 for
while 和 for
while (表达式) 语句;
exp1; while(exp2{
语句; exp3; }
for (exp1; exp2; exp3) 语句;
s=s+t t=1.0/tt*flag flag=-flag tt=tt+2 i++
程序段:
s=0;flag=1;tt=1; for(i=1; i<=n; i++){
s=s+1.0/tt*flag; tt+=2; flag=-flag; }
例T2-1 求n!
算法: i =1 to n
f=f*t t++ i++
sum+2 —> sum
sum=sum+i; i++; }
sum+3 —> sum
……
sum=sum+? 循环不变式
sum+10 —> sum
for 语句Βιβλιοθήκη exp1exp2非0
语句
exp3