版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章C语言的控制结构5.1算法与程序5.2顺序结构5.3选择结构5.4循环结构第5章C语言的控制结构5.1算法与程序程序的组成数据结构:对数据的描述算法:对操作的描述程序设计的基本过程1.分析问题2.设计算法3.实现程序程序设计的3种基本结构5.2顺序结构59↙a=5,b=9a=9,b=5定义变量a、b、tt=a,a=b,b=t开始结束给a、b赋值输出a、b的值输出a、b的值#include<stdio.h>intmain(){}inta,b,t;scanf("%d%d",&a,&b);printf("a=%d,b=%d\n",a,b);t=a;a=b;b=t;printf("a=%d,b=%d\n",a,b);return0;例5.1交换两个变量的值并输出结果。单分支ifif(表达式)语句5.3选择结构
5.3.1if语句【例5.2】输入一个实数,输出其绝对值。程序运行情况:-5.6↙5.600000#include<stdio.h>intmain(){floatx;scanf("%f",&x);if(x<0)x=-x;printf("%f\n",x);return0;}复合语句(compoundstatement)运行情况如下:3.6-3.2↙-3.20,3.60#include<stdio.h>intmain(){floatx,y,t;scanf("%f%f",&x,&y);if(x>y){t=x;x=y;y=t;}printf("%.2f,%.2f\n",x,y);return0;}【例5.3】编程,输入两个实数,从小到大的次序输出这两个数。用大括号括起来的语句序列双分支ifif(表达式)
语句1else
语句2【例5.4】从键盘输入一个字符,如果是数字字符,
则输出“Itisanumber.”;否则,输出“Itisnotanumber.”。判断条件是:ch>=’0’&&ch<=’9’#include<stdio.h>intmain(){charch;scanf("%c",&ch);if(ch>='0'&&ch<='9')printf("Itisanumber.\n");elseprintf("Itisnotanumber.\n");return0;}运行情况如下:9↙Itisanumber.单分支嵌套If语句的嵌套if(表达式1)语句1else
语句2if(表达式2)语句2else语句3【例5.5】输入x值,计算下面的函数值,并输出结果。#include<stdio.h>intmain(){intx,y;scanf("%d",&x);if(x<0)y=-1;elseif(x==0)y=0;elsey=1;printf("x=%d,y=%d\n",x,y);return0;}双分支嵌套if(表达式1)
语句1else
语句2if(表达式2)语句1else语句2if(表达式3)语句3else语句4else与if的匹配规则:每个else总是与它前面相距最近的尚未配对的if配对。【例5.6】输入x、y值,计算下面的函数值,并输出结果。#include<stdio.h>intmain(){floatx,y,f;scanf("%f%f",&x,&y);if
(x>0)if
(y>0)f=x*x+y*y;elsef=x*x-y*y;elseif
(y>0)f=x+y;elsef=x-y;printf("x=%.1f,y=%.1f,f=%.1f\n",x,y,f);return0;}一般形式5.3.2switch语句switch(表达式){case常量表达式1:语句组1case常量表达式2:语句组2……case常量表达式n:语句组ndefault:语句组n+1}根据学生成绩grade输出分数段switch(grade){case'A':printf("90~100\n");case'B':printf("80~89\n");case'C':printf("70~79\n");case'D':printf("60~69\n");case'E':printf("0~59\n");}当grade的值为'C'时,则输出?70~7960~690~59switch(grade){case'A':printf("90~100\n");break;case'B':printf("80~89\n");break;case'C':printf("70~79\n");break;case'D':printf("60~69\n");break;case'E':printf("0~59\n");break;}}改进程序例5.7根据输入的百分制成绩score,转换成相应的五分制成绩grade并输出。转换规则为:#include<stdio.h>#include<stdlib.h>intmain(){floatscore;printf("Pleaseinputscore:");scanf("%f",&score);
if(score>100||score<0){printf("Thescoreiserror\n");exit(0);}switch((int)score/10){case0: case1:case2:case3:case4:case5:printf("E\n");break;case6:printf("D\n");break;case7:printf("C\n");break;case8:printf("B\n");break;case9:case10:printf("A\n");}rerurn0;}程序运行两次:Pleaseinputscore:35↙EPleaseinputscore:81↙B#include<stdio.h>#include<math.h>#include<stdlib.h>intmain(){doublea,b,d;charp;scanf("%lf%c%lf",&a,&p,&b);switch(p){case'+':d=a+b;break;case'-':d=a-b;break;case'*':d=a*b;break;case'/':if(fabs(b)>1e-6){d=a/b;break;}default:printf("error\n");exit(0);}printf("=%.2f\n",d);return0;}例5.8设计四则运算程序(+-*/)如输入:4+5↙ABCD提交单选题1分#include<stdio.h>intmain(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;case3:a++;b++;}printf("\na=%d,b=%d",a,b);return0;}a=2,b=1a=1,b=1a=1,b=2a=2,b=2ABCD提交单选题1分5.4循环结构5.4.1while语句While语句的一般形式while(表达式)
语句说明:循环体有可能一次也不执行循环体可为任意类型语句:
复合语句、简单语句、空语句下列情况,退出while循环判断条件不成立(为零)循环体内遇break无限循环:while(非0值)
【例5.9】求1到100之和,即1+2+3+…+100#include<stdio.h>intmain(){inti,sum;i=1;sum=0;while(i<=100){sum=sum+i;i++;}printf("%d",sum);return0;}变量初值循环变量值改变,使循环条件向”假”变化.循环条件循环体i=10,sum=9i=9,sum=9i=2,sum=1运行出现错误ABCD提交程序的运行结果是().
main()
{
int
i=1,sum=0;
while(i<10){
sum=sum+1;i++;}
printf("i=%d,sum=%d",i,sum);
}单选题1分程序的运行结果是().
main()
{
int
i=1,sum=0;
while(i<10)
sum=sum+1;i++;
printf("i=%d,sum=%d",i,sum);
}i=10,sum=9i=9,sum=9i=2,sum=1运行出现错误ABCD提交单选题1分在C语言中,为了结束由while语句构成的循环,while后一对圆括号中表达式的值应该为().01True非0ABCD提交单选题1分do-While语句的一般形式5.4.2do-while语句
do
语句while(
表达式
)
;特点:先执行循环体,后判断表达式说明:循环体语句至少执行一次表达式语句假真使用do-while求1到100之和,即1+2+3+…+100#include<stdio.h>intmain(){inti,sum;i=1;sum=0;while(i<=100){sum=sum+i;i++;}printf("%d",sum);return0;}#include<stdio.h>intmain(){inti,sum;i=1;sum=0;do{sum=sum+i;i++;}while(i<=100);printf("%d",sum);return0;}以下叙述正确的是().
do-while语句构成的循环不能用其它语句构成的循环来代替.
do-while语句构成的循环只能用break语句退出.
用do-while语句构成的循环,在while后的表达式为非零时结束循环.
用do-while语句构成的循环,在while后的表达式为零时结束循环ABCD提交单选题1分【例5.10】输入一个整数,计算它是几位数。如输入32564,输出5。#include<stdio.h>intmain(){
longx;
intn=0;
printf("inputx=");
scanf("%ld",&x);
do
{
n++;
x/=10;
}
while(
);
printf("outputn=%d\n",n);return0;}分析:设x=32564若x=x/10,则x=3256若x=x/10,则x=325若x=x/10,则x=32若x=x/10,则x=3若x=x/10,则x=0x!=0for语句的一般形式5.4.3for语句
for(表达式1;表达式2;表达式3)语句后续语句0非0若i和sum为整型变量,则以下程序的运行结果是().sum=0;for(i=2;i<10;i=i+2)sum=sum+i;printf("%d",sum);20221819ABCD提交单选题1分对for(表达式1;;表达式3)可理解为().
for(表达式1;0;表达式3)
for(表达式1;1;表达式3)
for(表达式1;表达式1;表达式3)
for(表达式1;表达式3;表达式3)ABCD提交单选题1分若i为整型变量,则以下循环执行次数是().for(i=2;i==0;)printf("%d",i--);
无限次
0次
1次
2次ABCD提交单选题1分【例5.11】输入10个数,输出其中的最大值。#include<stdio.h>intmain(){floatx,max;inti;printf("inputfirstnumber:\n");scanf("%f",&x);max=x;for(i=1;i<=9;i++){scanf("%f",&x);if(x>max)max=x;}printf("max=%f\n",max);return0;}5.4.6break语句
提前结束循环
#include<stdio.h>intmain(){inti;for(i=100;i<=300;i++)if(i%17==0)break;printf("i=%d\n",i);return0;}【例5.12】找出100~300之间第一个能被17整除的数。运行结果:i=102while(){…for(){…break;}…}注意:1.break语句只能用于switch语句或循环语句。当用于循环语句时,break语句通常与if语句配合使用。2.当用于嵌套的循环结构时,break语句只能跳出(或终止)包含这条break语句本身的最内层循环。例如5.4.5continue语句结束本次循环,开始下一次循环#include<stdio.h>intmain(){inti,n=0;floatx,y=1;for(i=1;i<=10;i++) {scanf("%f",&x); if(x==0)continue; y*=x;n++; }printf("y=%.2f,n=%d\n",y,n);return0;}【例5.13】输入10个数,计算并输出这10个数中非0数据的乘积,并统计和输出非0数据的个数。以下程序的运行结果是().
main()
{
intn;
for(n=1;n<=10;n++)
{
if(n%3==0)continue;
printf("%d",n);
}
}
1245781036912
1234567890ABCD提交单选题1分5.4.6单重循环程序举例#include<stdio.h>intmain(){longf1=1,f2=1;inti;for(i=1;i<=10;i++){printf("%10ld%10ld",f1,f2);if(i%2==0)printf("\n");f1=f1+f2;f2=f2+f1;}return0;}【例5.14】求Fibonacci数列前20项。该数列如下:1,1,2,3,5,8,13,21,…【例5.15】输入一个大于1的自然数,判断该数是否为素数,如果是素数,输出“yes”,否则输出“no”。#include<stdio.h>intmain(){longn;inti;printf("inputn:");scanf("%ld",&n);for(i=2;i<=n-1;i++)if(n%i==0)break;if(i==n)printf("yes\n");elseprintf("no\n");return0;}分析:设n为大于1的自然数如果n不能被2,3,…,n-1整除,则n是素数。#include<stdio.h>#include<math.h>intmain(){longn,k;inti;printf("inputn:");scanf("%ld",&n);
k=(int)sqrt(n);for(i=2;i<=k;i++)if(n%i==0)break;if(i>k)printf("yes\n");elseprintf("no\n");return0;}
则:
【例5.16】按下面的幂级数展开式计算e的值。要求误差小于10-5。#include<stdio.h>intmain(){floatt=1,e=1;inti=0;while(t>=1e-5){i++;t=t*1.0/i;e=e+t;}printf("e=%.5f\n",e);return0;}分析:设t表示一般项,
e表示和t=1,e=1t=t/1,e=e+t,t=t/2,e=e+tt=t/3,e=e+t,t=t/4,e=e+t……直到t<10-5s=1!+2!+3!+……+n!s=0;t=1;for(i=1;i<=n;i++){t=t*i;s=s+t;
}
5.4.7多重循环结构#include<stdio.h>intmain(){inti,j;
for(i=0;i<3;i++) /*外循环*/{printf("i=%d:",i);
for(j=0;j<4;j++)
/*内循环*/
printf("j=%-3d",j);
/*内循环的循环体*/printf("\n");}return0;}例5.17该程序用于演示嵌套循环的执行过程。运行结果如下:i=0:i=1:i=2:j=0j=1j=2j=3j=0j=1j=2j=3j=0j=1j=2j=3【例5.18】输出1~100中所有的素数。#include<stdio.h>#include<math.h>intmain(){intn,i,k;for(n=2;n<=100;n++){k=sqrt(n);for(i=2;i<=k;i++)if(n%i==0)break;if(i>k)printf("%5d",n);}return0;}分析:for(n=2;n<=100;n++){判断n是否为素数若n是素数,则输出n}【例5.18】每行10个,输出1~100中所有的素数。#include<stdio.h>#include<math.h>intmain(){intn,i,k,count=0;for(n=2;n<=100;n++){k=sqrt(n);for(i=2;i<=k;i++)if(n%i==0)break;if(i>k){printf("%5d",n);count++;if(count%10==0)printf("\n");}}return0;}分析:for(n=2;n<=100;n++){判断n是否为素数若n是素数,则输出n}【例5.19】编写程序输出如下图形:
*
************************#include<stdio.h>intmain(){inti,j;for(i=1;i<=5;i++){for(j=1;j<=5-i;j++)putchar('');for(j=1;j<=2*i-1;j++)putchar('*');putchar('\n');}return0;}空格个数:第1行:4第2行:3第3行:2第4行:1第5行:0第1行:1星号个数:第2行:3第3行:5第4行:7第5行:9第i
行:5-i第
i行:2i-1#include<stdio.h>#include<conio.h>main(){
inti,n,sum;
sum=0;
/**********FILL**********/
_____
/**********FILL**********/
for(i=1;_____;i++)
/**********FILL**********/
if(_____)
if(i%2==0)
{
sum=sum+i;
n++;
printf("%6d",i);
/**********FILL**********/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 分寸课件教学课件
- 单位信息化建设方案
- 土地租赁50年合同文档版
- 小班健康活动收拾玩具
- 电工知识培训课件
- 期中考试课件版
- 小学语文《gkh》课件
- 工程建设资金筹措及支付2024年度协议3篇
- 2024年度版权共有许可使用合同
- 2024年度物流服务合同的货物运输与服务要求3篇
- 2024年创意市集承办协议
- 英语演讲技巧与实训学习通超星期末考试答案章节答案2024年
- 中国锂电池及其负极材料回收再利用行业市场深度调研及竞争格局与投融资研究报告(2024-2030版)
- 广东省广州市天河区2024-2025学年八年级上学期语文期中测试卷(含解析)
- 2023年贵州省贵阳市公安局公务员考试《行政职业能力测验》历年真题及详解
- 营养专科护士总结汇报
- 2024秋期国家开放大学专科《宪法学》一平台在线形考(形考作业1至4)试题及答案
- 乒乓球女单世界第一首位零零后孙颖莎介绍课件
- 创新实践(理论)学习通超星期末考试答案章节答案2024年
- 2024实施就业优先战略促进高质量充分就业的意见(就业是最基本的民生)
- 英语我的家乡甘肃酒泉课件
评论
0/150
提交评论