版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章程序的控制结构(2)——循环C程序设计语言西南财经大学王磊1第6章程序的控制结构(2)——循环C程序设计语言西南财经大6.1循环结构P循环体YN当P为真循环体P循环体YN当P为真循环体当型循环两种形式P循环体NY直到P为真循环体P循环体Y直到P为真循环体直到型循环两种形式N6.1循环结构P循环体YN当P为真循环体P循环体YN当P为真循环——while语句,for语句while(表达式)
{
循环语句;}do
{
循环语句;}while(表达式);for(表达式1;表达式2;表达式3)
{
循环语句;}循环——while语句,for语句while(表达式)
{while语句while(表达式)
{
循环语句;}只要表达式的值为非0(真),就重复执行while循环语句,直到表达式值为0(假)时止P循环体YNwhile语句while(表达式)
{P循环体YNdo-while语句do
{
循环语句;
}while(表达式);首先执行语句,然后判断表达式的值。如果表达式为0,结束while循环语句。否则,再次执行循环语句。语句会被至少执行一次P循环体YNdo-while语句do
{P循环体YNfor语句for(表达式1;表达式2;表达式3)
{
循环语句;}循环起始条件(通常对循环变量赋初值)循环结束条件(每次执行循环语句前需判断)循环增量(循环语句执行完一次后计算表达式3的值)(1)计算表达式1,计算表达式2。若表达式2的值0(不满足结束条件),则执行循环语句,若表达式2的值=0,则结束循环;执行循环语句;(3)计算表达式3,再次判断表达式2的值.依此重复下去,直到表达式2的值=0(假)。for语句for(表达式1;表达式2;表达式3)
{循注意循环变量的使用通过循环变量i
的值来控制循环次数。For循环的循环总次数是已知的。for(i=1;i<=100;i++){sum+=i;}注意循环变量的使用通过循环变量i的值来控制循环次数for语句for(表达式1;表达式2;表达式3)
{
循环语句;}相当于:
表达式1和表达式3可以没有或者是用逗号分隔的多个表达式的组合。但最好不要有太多的表达式组合
表达式1;
while(表达式2){
循环语句;
表达式3;
}for语句for(表达式1;表达式2;表达式3)
{选择三种循环的一般原则如果循环次数已知,用for如果循环次数未知,用while如果循环体至少要执行一次,用do-while这只是“一般”原则,不是“原则”选择三种循环的一般原则如果循环次数已知,用for注意在for和while语句之后一般没有分号有分号表示循环体就是分号之前的内容(空循环体)while(i<100);
i++;for(i=0;i<100;i++);
printf("%d",i);for通常有一个循环变量控制循环的次数,不要在循环体内改变这个变量注意在for和while语句之后一般没有分号例:计算n!=1×2×…n分别用如下语句编程forwhiledo-while例:计算n!=1×2×…n分别用如下语句编程循环次数已知,首先考虑用for循环语句#include<stdio.h>main(){inti,n;/*i是循环变量*/longp=1;/*存放阶乘的值*/printf("Pleaseentern:");scanf("%d",&n);
for(i=1;i<=n;i++){p=p*i;}printf("%d!=%ld\n",n,p);}例:计算n!=1×2×…n循环次数已知,首先考虑用for循环语句例:计算n!=1×2例:计算n!=1×2×…nWhile循环语句实现inti=1;while(i<=n){p=p*i;i++;}do…while循环语句实现inti=1;do{p=p*i;i++;}while(i<=n);例:计算n!=1×2×…nWhile循环语句实现只猜1次直到猜对为止最多猜10次例:循环控制语句——猜数游戏只猜1次直到猜对为止最多猜10次例:循环控制语句——猜数游戏猜数游戏用到的库函数怎样模拟计算机“想”一个数呢?随机函数rand()产生[0,RAND_MAX]
之间的随机数magic=rand();#include<stdlib.h>RAND_MAX在stdlib.h中定义,不大于双字节整数的最大值32767产生[0,b-1]之间的随机数magic=rand()%b;产生[a,a+b-1]之间的随机数magic=rand()%b+a;猜数游戏用到的库函数怎样模拟计算机“想”一个数呢?例#include<stdlib.h>#include<stdio.h>
main(){
intmagic;/*计算机"想"的数*/
intguess;/*人猜的数*/
magic=rand()%100+1;
/*“想”一个[1,100]之间的数magic*/ printf("Pleaseguessamagicnumber:"); scanf("%d",&guess);
if(guess>magic) {printf("Wrong!Toohigh!\n"); }
elseif(guess<magic) {printf("Wrong!Toolow!\n"); }
else
{ printf("Right!\n"); printf("Thenumberis:%d\n",magic); }}只猜1次例#include<stdlib.h>只猜1次例#include<stdlib.h>#include<stdio.h>main(){
intmagic;
intguess;
intcounter;/*记录人猜次数的计数器变量*/ magic=rand()%100+1;
counter=0;
/*计数器变量count初始化为0,统计猜测次数*/
do{ printf("Pleaseguessamagicnumber:"); scanf("%d",&guess);
counter++;/*计数器变量count加1*/
if(guess>magic) printf("Wrong!Toohigh!\n");
elseif(guess<magic) printf("Wrong!Toolow!\n");
}while(guess!=magic);
printf("Right!\n"); printf("counter=%d\n",counter);}直到猜对为止例#include<stdlib.h>直到猜对为止#include<stdlib.h>#include<stdio.h>#include<time.h>main(){
intmagic;
intguess;
intcounter; srand(time(NULL)); magic=rand()%100+1; counter=0;
do{ printf("Pleaseguessamagicnumber:"); scanf("%d",&guess); counter++;
if(guess>magic) printf("Wrong!Toohigh!\n");
elseif(guess<magic) printf("Wrong!Toolow!\n");
else
printf("Right!\n"); }while((guess!=magic)&&(counter<10));
printf("counter=%d\n",counter);}实验3最多猜10次#include<stdlib.h>实验3最多猜10次6.3嵌套循环While循环语句的嵌套;
while(){ …
while() {…}}for(;;){…
while(){}
do{}while();…}6.3嵌套循环While循环语句的嵌套;for(;使用嵌套的循环体时,应注意以下问题
在嵌套的各层循环体中,使用复合语句(即用一对大花括号将循环体语句括起来)保证逻辑上的正确性
内层和外层循环控制变量不应同名,以免造成混乱
嵌套的循环最好采用右缩进格式书写,以保证层次的清晰性
代码风格问题循环嵌套不能交叉,即在一个循环体内必须完整的包含着另一个循环
使用嵌套的循环体时,应注意以下问题在嵌套的各层循环体中,使例:打印乘法九九表
例:打印乘法九九表例#include<stdio.h>main(){
intm,n;
for(m=1;m<10;m++) printf("%4d",m);/*打印表头*/ printf("\n");
for(m=1;m<10;m++) printf("-"); printf("\n");
for
(n=1;n<10;n++)
{
for
(m=1;m<10;m++) { printf("%4d",n*m); } printf("\n"); }}例#include<stdio.h>例:打印下三角乘法九九表
例:打印下三角乘法九九表#include<stdio.h>main(){
intm,n;
for(m=1;m<10;m++) printf("%4d",m);/*打印表头*/ printf("\n");
for(m=1;m<10;m++) printf("-"); printf("\n");
for
(m=1;m<10;m++)
{
for
(n=1;
n<=m;n++) { printf("%4d",m*n); } printf("\n"); }}例#include<stdio.h>例6.5流程的转移控制break语句continue语句goto语句6.5流程的转移控制break语句break和continuebreak语句:退出循环结构语句或者switch如果是嵌套循环,则只退出break语句所在的循环。continue:中断本次循环体的执行过程,并进行循环的下一轮break和continue少用为妙break和continuebreak语句:break和continue假假真真break表达式1表达式2循环语句后的下一条语句循环语句后的下一条语句假假真真
表达式1表达式2continuebreak和continue假假真真break表达式1表达式例:单步运行演示break语句和continue语句的用法区别#include<stdio.h>main(){
inti,n;
for(i=1;i<=5;i++) { printf("Pleaseentern:"); scanf("%d",&n);
if(n<0)
break; printf("n=%d\n",n); } printf("Programisover!\n");}Pleaseentern:10↙n=10Pleaseentern:-10↙Programisover!例:单步运行演示break语句和continue语句的用法区例
:单步运行演示break语句和continue语句的用法区别#include<stdio.h>main(){
inti,n;
for(i=1;i<=5;i++) { printf("Pleaseentern:"); scanf("%d",&n);
if(n<0)
continue; printf("n=%d\n",n); } printf("Programisover!\n");}Pleaseentern:10↙n=10Pleaseentern:-10↙Pleaseentern:20↙n=20Pleaseentern:-20↙Pleaseentern:30↙n=30Programisover!例:单步运行演示break语句和continue语句的用法标号举例error:printf(“Errors!,exit!\n”);Goto语句举例gotoerror;一般形式语句标号:…………goto语句标号;goto与标号(label)标号举例goto与标号(label)是goto的过错?还是程序员的过错?破坏了结构化设计风格容易带来错误隐患如非必需,尽量不用gotomain(){
intsum;
goto
next;
sum=0;/*被goto跳过*/next:
printf("%d",sum);}是goto的过错?还是程序员的过错?破坏了结构化设计风格其他流程转移控制标准库函数exit()
作用是终止整个程序的执行,强制返回操作系统调用该函数需要嵌入头文件<stdlib.h>用法:exit(code);code参数设置(惯例):
0
表示程序正常退出;
非0
表示程序出现某种错误退出。其他流程转移控制例题分析:素数问题 给定一个正整数n=91,判断它是不是素数。判断标准:素数只能被自身和1整除。例如,91%1=0,91%91=0.思路:将2至n-1之间的所有整数,同n进行求余操作,判断余数是否为0,如果发现任意一次为0,则n必然不是素数。循环语句。例题分析:素数问题 给定一个正整数n=91,判断它是不是素数程序结构intmain(){ //定义变量、初始化
//进行计算、处理
//输出结果
}程序结构intmain()intmain(){ intn=91; intx;//循环变量
intcount=0;//用于统计n被整除的次数
for(x=2;x<=n-1;x++) { if(n%x==0) count++; }
if(count>0) printf(“n不是是素数"); else printf("n是素数");
return0;}intmain()思考1:目的:假设判断是否能够整除(n%x==0)的计算开销很大,程序应该尽量减少该操作。对上述程序进行优化利用break或continue缩减需要被检查的除数范围,还是[2,n-1]???思考1:目的:假设判断是否能够整除(n%x==0)的计算思考2:求出所有的100-200之间的素数双重循环问题。思考2:求出所有的100-200之间的素数双重循环问题。6.6程序排错最优秀的程序员也很难保证其编写的程序能够在计算机上一次调试通过。程序出错并不可怕,只要学会一定的程序测试和排错技巧,出错就不再可怕;相反,我们还可以在错误中学习并牢记宝贵的知识,并教导我们如何预防错误的再次发生。掌握一些预防错误发生和减少错误的技术非常重要:好的算法设计、好的编程风格、限制全局数据结构的使用、边界条件测试等。VC编译软件中有自动整理格式功能只要选取需要的代码,按ALT+F8就能自动整理成带缩进格式的c文件。6.6程序排错最优秀的程序员也很难保证其编写的程序能够在计程序中常见的出错原因——11、编译错误;编译过程中出现的错误,通常属于语法错误,即编写的语句不符合C语言的语法规则。Undefinedsymbol‘XXX’XXXstatementmissing;ExpressionsyntaxerrorRedeclarationof‘XXX’Toofewparameterincall;程序中常见的出错原因——11、编译错误;程序有哪些错误?#include<stdio.h>#include<math.h>main(){ intm,i,k; printf("Pleaseenteranumber:") scanf("%d",m); k=sqrt(m); for(i=2;j<=k,i++) { if(m%i==0)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业环保标语宣传标语范文两篇
- (高级)三级炼化贮运工职业技能鉴定理论考试题库(含答案)
- 2025年河北工艺美术职业学院高职单招职业适应性测试近5年常考版参考题库含答案解析
- 专题06 统一多民族国家的巩固与发展(第1期)
- 电动车购销合同年
- 幼儿园主题教育活动策划方案五篇
- 艺考培训合同协议书
- 经销商合作合同范本
- 餐饮承包合同范本
- 全日制劳动合同范本
- 第1课 隋朝统一与灭亡 课件(26张)2024-2025学年部编版七年级历史下册
- 【历史】唐朝建立与“贞观之治”课件-2024-2025学年统编版七年级历史下册
- 产业园区招商合作协议书
- 人教版八级物理下册知识点结
- 2021年高考真题-生物(湖南卷) 含解析
- 幼儿园2024-2025学年第二学期园务工作计划
- 2024公路工程施工安全风险辨识与管控实施指南
- 新疆2024年新疆和田师范专科学校招聘70人笔试历年典型考题及考点附答案解析
- 【正版授权】 ISO 15978:2002 EN Open end blind rivets with break pull mandrel and countersunk head - AIA/St
- 2024时事政治考试题库(基础题)
- 2024山西文旅投资集团招聘117人公开引进高层次人才和急需紧缺人才笔试参考题库(共500题)答案详解版
评论
0/150
提交评论