程序设计基础

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

程序:
//【例3-12】求1到100的和 #include <stdio.h>
int main(int argc, char *argv[]) {
int num, sum;
num = 1; sum = 0;
while (num <= 100) {
sum = sum + num; num++; }
printf("sum=%d\n", sum);
for(i=1; ;i++) sum=sum+i; 也相当于:
i=1; while(1) {sum=sum+1;i++;}
2020/7/9
合肥工业大学宣城校区
26
➢for语句注意
表达式3也可以省略,但此时程序设计者应另外设 法保证循环能正常结束。
在上面的for语句中只有表达式1和表达式2,而没 有表达式3。i++的操作不放在for语句的表达式3的 位置处,而作为循环体的一部分,效果是一样的, 都能使循环正常结束。
可以省略表达式1和表达式3,只有表达式2,即只 给循环条件。 在这种情况下,完全等同于while语句。可见for语 句比while语句功能强,除了可以给出循环条件外, 还可以赋初值,使循环变量自动增值等。
➢for语句注意
3个表达式都可省略,如:for(; ;) 语句相当于 while(1) 语句。即不设初值,不判断条件(认为表达 式2为真值),循环变量不增值。无终止地执行循环 体。
s6: printf sum;
End
初始化部分、循环条件、循环体语句、步长修改4部分缺一
不可。
➢引述
算法由4部分组成: 1)初始化:建立循环前所必须的条件; sum=0; k=1; 2)循环测试:当满足循环条件时进行循环,
否则终止循环; k<=100
3)循环体: 需要重复执行的操作; sum=sum+k;
for ( ; i<=100;i++) sum=sum+i;
执行时,跳过求解表达式1这一步,其他不变。
Βιβλιοθήκη Baidu
2020/7/9
合肥工业大学宣城校区
25
➢for语句注意
如果表达式2省略,即不判断循环条件,循环无终止地 进行下去。也就是认为表达式2始终为真。 表达式1是 一个赋值表达式,表达式2空缺。它相当于:

sum=sum+i;
// for循环体
i++;
//相当于for语句中的表达式3
} 故for语句的一般格式等价于下列语句:
表达式1; while (表达式2)
{
语句;
表达式3;
}
➢for语句注意
for语句的一般形式中的“表达式1”可以省略,此时应 在for语句之前给循环变量赋初值。注意省略表达式1时, 其后的分号不能省略。如
c=a+b;
printf("%d",c);
return 0;
}
➢引述
✓(2)选择结构 对给定的条件进行判断,根据判定结果选择某种操作。 问题2:输入两个整数,进行比较后将较大的输出。 算法设计: 1) 输入两个整数,分别存放在变量a和b中; 2) 进行比较,并将较大的存放在变量c中; 3) 输出变量c。 用C语言伪代码描述: 1) scanf ("%d%d",&a,&b); 2) if(a>=b) c=a; else c=b; 3) printf("%d",c);
1)输入两个整数,分别存放在变量a和b中;
2)进行加法计算,并将和存放在变量c中;
3)输出变量c。
用C语言伪代码描述:
#include <stdio.h>
1)scanf ("%d%d",&a,&b);
int main()
2)c=a+b; 3)printf("%d",c); 用C程序描述为:
{ int a,b,c; printf(“输入两个数:”); scanf ("%d%d',&a,&b);
运行结果: 1↙ sum=55
再运行一次: 11↙ sum=0
运行结果: 1↙ sum=55
再运行一次: 11↙ sum=11
➢for语句
✓ 语句一般格式 :
for (表达式1 ; 表达式2 ;表达式3)
循环体语句
✓ for语句是比较常用的循环语句,它能清晰地体现循环结构的四
个组成部分。初始化部放在表达式1中;循环条件写在表达式2
➢引述
✓问题3:计算1+2+3+......+100 方法1:
#include <stdio.h> int main() {
int sum=0; sum=1+2+......100; printf("sum=%d",sum); return 0; }
缺点:语句太长。
➢引述
✓问题3:计算1+2+3+......+100 方法2:
分析:
本题即求1+2+...+100,num为循环变量,要设一个累加变量sum
放置和,则循环的4部分为
初始化部分: num=1;sum=0;
循环条件:
num<=100
循环体语句: sum=sum+num;
步长修改:
num++;
用while语句前,实现初始化部分,循环条件放在while后面的括号中,
步长修改也算做循环体语句中。
中;步长修改通常在表达式3中。
表达式1
✓ 程序流程图
表达式2!=0? N
Y 循环体语句
表达式3
➢for语句
✓执行流程: (1)先执行表达式1(初始化表 达式)。注意在整个循环中它只 执行一次。
(2)重复下面的过程:计算表达 式2(判断表达式),若为真(非0), 就执行一次循环体语句,然后再 执行表达式3(修正表达式);再 计算表达式2(判断表达式),判断 是否为“真”,……直至表达式 2(判断表达式)的值为假(0),就不 再执行循环体了。
条件表达式!=0? N
Y 循环体语句
➢ while语句
✓说明:
(1)while表达式的括号后一般不要加“;”; (2)条件表达式是循环条件表达式,可以是任意表达式,在计算时如果是
非0,则其为值认为是真,否则认为是假。 (3) 注意循环体语句是复合语句的情况下,一定不要丢掉“{ }”。
✓ 【例】 求前100个自然数的和。
return 0; }
✓ 【例】 计算1+1/2+1/3+......+1/100
分析:
用k表示循环变量,sum存放和,则循环的四部分为:
初始化部分: k=1;sum=0;
循环条件:
k<=100
循环体语句: sum=1.0/k+sum;
步长修改:
k++;
程序:
//【例3-13】求1+1/2+1/3+...+1/100 #include <stdio.h>
int main(int argc, char *argv[]) {
int k; float sum;
k = 1; sum = 0;
while (k <= 100) {
sum = sum + 1.0 / k; k++; }
printf("sum=%f\n", sum);
return 0; }
请思考:如果sum=sum+1.0/k; 改成sum=sum+1/k; 程序运
sum=sum+ki; k=k+1; } printf(“sum=%d\n”,sum); }
#include <stdio.h> {
int sum=0,i; scanf(“%d”,&i); do {
sum=sum+i; i=i+1; } while(i<=10); printf(“sum=%d\n”,sum); }
在一般情况下,用while语句和用do-while语句处理同一问题时,若二者的循 环体部分是一样的,它们的结果也一样。但是如果while后面的表达式一开始 就为假(0值)时,两种循环的结果是不同的。
#include <stdio.h> {
int sum=0,k; scanf(“%d”,&i); while(k<=10) {
程序:
//【例3-14】求1到100以内能被3整除但不能被7整除 的数之和 #include <stdio.h> #include <stdlib.h>
int main(int argc, char *argv[]) {
int k; int sum;
k = 1; sum = 0;
while (k <= 100) {
伪语言算法描述:
Begin
s1: sum=0; k=1;
-------初始化部分
s2 : if k<=100 then goto s3 -------循环条件
else goto s6
s3: sum=sum+k;
-------循环体语句
s4: k++;
-------步长修改
s5: goto s2;
上面4部分缺一不可
行的结果会是什么呢?
注意: (1) 如果while的 (条件表达式) 值为0,则循环体一次也 不执行 (如当i的初值=101)。 (2)在循环体中必须有使循环趋向结束的操作,否则循环 将无限进行(死循环)。 (3)在循环体中,语句的先后位置必须符合逻辑,否则会 影响运算结果。 (4) 为了保证循环正常运行,应该特别注意:
程序设计基础
第八章循环流程控制
2020/7/9
合肥工业大学宣城校区
1
循环结构程序设计
➢ 引述 ➢ while语句 ➢ do-while语句 ➢ for语句 ➢ 循环中的问题 ➢ 循环嵌套
➢引述
✓(1)顺序结构
程序的执行是按照各语句出现的先后次序,顺序执行。
问题1:输入两个整数,并求和打印结果
算法设计:
表达式1
表达式2!=0? N Y
循环体语句 表达式3
➢for语句
例程序段:
sum=0;
for (i=1;i<=n;i++)
sum=sum+i;
等价于下面的一段用while语句实现的代码。
sum=0;
i=1;
/* 相当于for语句中的表达式1 */
while (i<=n)
// 相当于for语句中的表达式2
1)控制条件的初始状态(初始值); 2)循环控制条件的描述; 3)循环体内部对控制条件的影响。
✓ 【例】计算1~100之间,能被3整除但不能被7整除的数之和。
分析:
初始化部分: 循环条件: 循环体语句:
步长修改:
k=1; sum=0 k<=100 if(k%3==0 && k%7!=0)
sum=sum+k; k++;
提示:while(条件表达式)后的分号不能丢。
循环体语句
Y 表达式!=0? N
✓ 【例】计算1+3+5+......+99
分析:
初始化部分: 循环条件: 循环体语句: 步长修改:
num=1; sum=0 num<100 sum=sum+num num=num+2
程序:
//【例3-15】求1+2+3+...+100 #include <stdio.h>
if (k % 3 == 0 && k % 7 != 0) sum = sum + k;
k++; }
printf("sum=%d\n", sum);
return 0; }
➢do-while语句
✓ 语句一般格式 :
do
循环体语句
while(条件表达式);
✓ 语句功能:当流程到达do后,立即执行循环体一次,然后才对判断表达 式进行计算、测试。若表达式的值为真(非0),则重复执行一次循环体; 否则退出。do…while语句属于直到型循环;与while结构相比,do…while 结构至少要执行一次循环体。这样的结构应用在需要事先执行一次循环 体的程序非常容易理解。执行流程见图。
#include <stdio.h> int main() {
int sum=0; sum=sum+1; sum=sum+2; ...... sum=sum+100; printf("sum=%d",sum); return 0; }
语句太多。
➢引述
✓问题3:计算1+2+3+......+100 方法3:
int main(int argc, char *argv[]) {
int num, sum;
num = 1; sum = 0;
do {
sum = sum + num; num++; } while (num <= 100);
printf("sum=%d\n", sum);
return 0; }
✓ while与do-while比较
4)增量修改:修改控制循环次数变量的值, 使循环测试条件趋向假,即循环趋向结束。
k++;
➢ while语句
✓ while语句是条件循环语句,根据条件是否成立,确定循环是否进行。 ✓ 语句一般格式 :
while (条件表达式) 循环体语句
✓ 语句功能:计算条件表达式的值,为非0(逻辑真)时,执行循环体, 每执行一次,就判断一次条件表达式的值,直到表达式的值为0 时结束 循环,转去执行while后面的语句。while语句属于当型循环(即当条件 表达式为值时执行循环体)。执行流程见图。
相关文档
最新文档