C语言程序设计教程
n=n+1; }
printf(“%f\n”,m); }
课后作业及上机任务
❖ 教材P98习题: 11、13(4)(6)~(9)、2(3)(5)
❖ 上机调试P98习题10、12
❖ 编写并调试本节例题
课后练习
(1) 1+3+5+…+99
(2) 2+4+6+…+100
(3) 1-2+3-4+…+99-100
scanf(“%d”,&n);
for (m=2;m<n-1;m++)
if (n%m==0) { yes=0; break;
也可用n/2 或sqrt(n)
}
if (yes==1) 也可用m>=n-1
printf(“yes\n”);
else
printf(“no\n”);
}
补充例题:百钱百鸡问题
穷举法
s=s+i;
for (s=0,i=1;i<=10;) { s=s+i; i++}
初始表达式; while (条件表达式)
{ 循环体; 修正表达式;
}
s=0; i=1; while (i<=10)
{ s=s+i; i++;
}
修正表达式
说明: 1、省略初始表达式时, 分号不能省。 2、省略修正表达式时, 循环体内应有改变条件 表达式的值的语句。
算法分析:
设现有人口为m=12亿,则: 1年后人口:m(1+2%)m 2年后人口:m(1+2%)m 3年后人口:m(1+2%)m …… 10年后人口: m(1+2%)m
因此: 初值:m=12 迭代公式:m=m(1+2%) 终止条件:10年
迭代法
main( ) { float m=12; int n=1; while (n<=10) { m=m*(1+0.02);
main( ) { int s=0, i=1;
do { s=s+i;
i=i+1; } while (i<=10); printf(“s=%d\n”,s); }
P85例18:搬砖问题。
在某一范围内逐个 穷 验证是否满足要求 举 的方法称为穷举法 法
36块砖,36人搬;男搬4, main( )
若问有几种解决方法,
h
while ((c=getchar( ))!=EOF) putchar(c);
h ^z
}
EOF为符号常数,在stdio.h中定义: #define EOF –1(当键盘输入^Z或遇到 文件结束标志时,其值为-1)
main( ) { int c;
c=getchar( ); while (c!=EOF); { putchar(c);
printf(“\n”); 换行换行
}
}
小结
❖ 循环控制有两种方法:计数法和标志法。 ➢ 能确定循环次数时,采用计数法,用for语句比较清晰;
➢ 不能确定循环次数时,采用标志法,设法找出循环终止 条件,用while或do-while语句来实现。
❖ 用while与do-while语句能实现的程序,用for语句未必 可以实现。 ❖ while语句是先判断后执行,do-while语句是先执行后 判断。在循环体至少执行一次的情况下两者等价。
P99习题9:验证欧拉公式
补充举例:打印图形。
1 2 3 4 5 6 7 8 9 10 11 ***** ***** ***** ***** *****
算法分析: 第1行:1个空格,5个*号,换行 第2行:2个空格,5个*号,换行 第3行:3个空格,5个*号,换行 第4行:4个空格,5个*号,换行 第5行:5个空格,5个*号,换行
P91例22:打印九九乘法表
形状
123 4 5 6 7 8 9 123 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 … …
形状
main( )
……
{ int i,j;
for (i=1;i<=9;i++)
for (i=1;i<=9;i++) 打印表头
{ for (j=1; j<=i; j++)
c=getchar( ); } }
P83例17:口令检查函数
#include “stdio.h”
将循环
void wait_a_char(char c) 体合并
{ char ch;
到了条
while ((ch=getchar( ))!=c);
件表达 式中
return( );
}
P12例6:求1+2+3+…+10
}
}
main( ) { int number=0;
15 *1
*2 **3
while (number++<=1)
printf(“*%d\n”,number);
printf(“**%d\n”,number);
}
类似P98习题10
#include “stdio.h”
16 e
main( )
e
{ int c;
n=0
3次
输出n 的值 输出n 的值 输出n 的值
0<=1成立 n=0+1
1<=1成立 2<=1不成立
n=1+1
n=2+1
0
1
2
n
0123
输出n 的值
3
P83例14~16:
main( ) { int number=0;
14 1
2
while (number<=1)
{ number++;
printf(“%d\n”,number);
第i(1~5)行:6i个-i个空空格格,,6-i个*i__,,换换行行
main( )
{ int i,j;
for (i=1;i<=5;i++)
{ for (j=1;j<=6i;-ji+;j++)+) printf(“ ”);
6-i个空格
for (j=1;j<=i6;-ji+;j++)+) ii个个6*-ii_个*_ printf(“*%_d”)_;”,i);
– §3.1~3.2多分支结构(else if、switch) 2学时
• §4 循环结构程序设计 4学时
本节
P98习题10: main( )
应在条件表达式或 循环体中改变条件 表达式的值,否则 会出现死循环。
{ int n=0;
whiprlient(fn(+“+<%=d1\)t”,n);循时环要体用为{ }多括个起语来句
第i(1~5)行:i个空格,5个*号,换行
main( )
{ int i,j;
for (i=1;i<=5;i++)
பைடு நூலகம்
{ for (j=1;j<=i;j++) printf(“ ”);
i个空格
for (j=1;j<=5;j++) 5个*号 printf(“*”);
printf(“\n”); 换行
}
}
循环语句嵌套时,当外层 循环变量取1个值时,内 层循环变量要取遍所有值
4x+3y+z/2=36
printf(“children:%d\n”,z);
x+y+z=36
}
可得:
y++;
类似问题:
0≤x<9 0≤y<12 2≤z≤36
} x++; } }
P99习题7:百马百担问题 P99习题6:换零钱问题 P99习题8:客票问题 P99习题9:验证欧拉公式
P87例19:爱因斯坦阶梯问题。
while ((x%x%33=!==22&|&| xx%%55!===44|&|&xx%%6!6==5=)5)
x+=14; printf(“flight of stairs=%d\n”,x); }
程序中有
无错误?
运行结果:flight of stairs=119
P80例11:人口增长问题。
按年2%的增长速度,现有12 亿人,则10年后将有多少人?
课后练习
(1) 1+3+5+…+99
(2) 2+4+6+…+100
(3) 1-2+3-4+…+99-100
(4) 1 1 1 1
23
n
(5)
1
1 2!
1 3!
1 n!
main( ) { int s=0, i=1;
while (i<=10) { s=s+i; i=i+1; }
printf(“s=%d\n”,s); }
printf(“%d\n”,n);
}
n
n=0
0123
0<=1成立 1<=1成立 2<=1不成立
n=0+1
n=1+1
n=2+1
输出n 的值 输出n 的值 2次
输出n 的值
1
2
3
P98习题10用do-while实现的对比:
main( )
{ int n=0;