第4章 分支结构的程序设计
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分析问题:设三个整数分别为:a、b、c,构成三角形的条件为:a+b>c&&a+c>b&&b+c>a
构成等边三角形的条件为:a==b&&b==c;构成等腰三角形的条件为:a==b||b==c||a==c。构成直角三角形的条件为:a*a+c*c==b*b||a*a+b*b==c*c||c*c+b*b==a*a。
#include <stdio.h>
int main()
{
int a,b,c;
printf("请输入第1条边:");
scanf("%d",&a);
printf("请输入第2条边:");
scanf("%d",&b);
printf("请输入第3条边:");
scanf("%d",&c);
if( a+b>c&&a+c>b&&b+c>a)
图4.7 if…else if流程图
例4.5:从键盘输入一个数给x,然后判断该变量是否大于零,若大于零的话,则输出一行文字说明该变量是正数,否则的话再判断变量x的值是否为零,若为零的话,则输出一行文字说明该变量是零,否则的话则x的值是负数,输出一行文字说明该变量是负数。
分析:输入的数分三种情况:正数、负数、零。流程图如图4.8所示。
{
printf("能构成一个三角形\n");
if (a==b&&b==c)
printf("能构成一个等边三角形\n");
else if(a==b||b==c||a==c)
printf("能构成一个等腰三角形\n");
else if(a*a+c*c==b*b||a*a+b*b==c*c||c*c+b*b==a*a)
语句块1
else
语句块2图4.4 if…e Nhomakorabease语句流程图
例4.3:判断从键盘输入的数是正数还是负数,输入数0结束程序运行。
分析问题:数从键盘输入,输入的数如果大于0则输出“输入的数是正数”,如果是小于0则输出“输入的数是负数”,如果是等于0,则程序运行结束。
流程图如图4.5所示。
图4.5程序流程图
}
解析:switch中表达式的值为3,从case 2+1入口,执行语句k+=2;得k=3,由于此语句后无break;语句,继续执行case 4后语句:k+=3;最后k=6。
例4.8输入一个字符,如果是Y、N或y、n,则分别执行一输出语句;如果是其他字母则执行另一输出语句。
程序如下所示:
#include<stdio.h>
break;
default:
printf("\n this is other char.\n");
}
}
例4.9编写程序,实现如下功能:
输入一个实数后,屏幕上显示如下菜单:
1.输出相反数
2.输出平方数
3.输出平方根
4.退出
输入1,输出该数的相反数;输入2,输出该数的的平方数;输入3,输出该数的的平方根;输入4退出此程序。输入1~4之外的数,显示“请输入1~4之间的数字”。
void main()
{
char ch;
printf(" please input Y/N(y/n) :");
scanf("%c" , &ch);
switch (ch)
{
case'y':
case'Y': printf("\n this is'Y'or 'y'.\n");
break;
case'n':
case'N': printf("\n this is'N'or 'n'.\n");
printf("能构成一个直角三角形\n");
else
printf("能构成一个一般的三角形\n");
}
else
printf("不能构成一个三角形\n");
return 0;
}
4.5 switch
switch语句格式:
switch(表达式)
{
case常量表达式1:
语句序列1
[break;]
case常量表达式2:
图4.6流程图
#include <stdio.h>
int main()
{
int nsum=0,n=0,psum=0,p=0;
/*nsum负数累加值,n负数个数,psum正数累加值,p正数个数(0作为正数)*/
int i,x; /* i用于控制循环次数,x用户存储输入的数*/
for(i=1;i<=10;i++)
#include <stdio.h>
int main()
{
int x=1;
printf("\n请输入一整数(输入0程序退出):");
scanf("%d",&x);
while(x)
{
if(x > 0)
printf("输入的数%d是正数.\n",x);
else
printf("输入的数%d是负数.\n",x);
printf("\n请输入一整数(输入0程序退出):");
scanf("%d",&x);
}
return 0;
}
例4.4:从键盘输入10个整数,把所有的正数相加以及所有的负数相加,最后输出所有正数的和,以及所有负数的和。
分析问题:要从键盘输入十个整数,所以采用循环结构,输入的数分正数和负数,各进行累加。流程图如图4.6所示。
语句序列2
[break;]
.
.
.
case常量表达式n;
语句序列n
[break;]
default:
语句序列n+1
}
图4.9语句执行的流程图
例4.7求执行下列程序段后k的值。
char c='2';int k=1;
switch(c+1-'0')
{ case 2:k+=1;
case 2+1:k+=2;
case 4:k+=3;
{
printf("请输入10整数中的第%d个数:",i);
scanf("%d",&x);
if(x>=0)
{
psum+=x;
p++;
}
else{
nsum+=x;
n++;
}
}
printf("\n有%d个正数,和为:%d\n有%d个负数,和为:%d\n",p,psum,n,nsum);
return 0;
}
图4.8流程图
编译程序及运行
#include <stdio.h>
int main()
{
int x;
printf("输入一数值:");
scanf("%d",&x);
if(x > 0) printf("x是正数.\n");
else if(x == 0) printf("x是零.\n");
else printf("x是负数.\n");
分析:此题涉及多个菜单的选择,因此用到多分支结构——switch,switch可以不同条件实现不同的程序块,如此题中输入数字1,则执行输出相反数的程序块。
图4.10菜单选择流程图
#include <stdio.h>
#include <math.h>
intmain()
{
int i;
float m;
int c=5;
return 0;
}
4.4
if语句的嵌套是指if语句中又包含了一个或多个if语句。上一节介绍的if-else if结构也是if语句的嵌套结构。
例4.6:编写一个程序,由键盘输入三个整数作为三角形的三条边,判断是否能构成一个三角形,如能并判断是等边三角形、等腰三角形、直角三角形,还是其它一般的三角形。
printf("输入任意一个整型数:\n");
scanf("%f",&m);
printf(*************************\n");
printf("1.输出相反数\n");
printf("2.输出平方数\n");
printf("3.输出平方根\n");
printf("4.退出\n");
编译程序及运行
步骤1:在Visual C++环境下新建文件可用[开始]→[程序]→[Microsoft Visual C++6.0] →[Microsoft Visual C++6.0] →[文件] →[新建]→[文件] →[C++ Sourse File],输入文件名4-6.c
步骤2:在4-6.c文件中输入以下完整的源程序。
4.3
if语句形式之三
if(表达式1)
语句块1
else if(表达式2)
语句块2
.
.
.
else if(表达式n-1)
语句块n-1
else
语句块n
功能:从上到下依次判断表达式的值,当出现某个值为真(非0)时,执行与其相对应的语句,并跳过其余条件的判别;如果所有的表达式均为假(0),则执行语句n。
程序流程图如图4.7所示。
printf("*************************\n");
while(1)
{
scanf(“%d”,&c);
switch(c)
{
case 1:printf("输出相反数:%f\n",-m);break;
case 2:printf("输出平方数:%f\n",m*m);break;
case 3:printf("输出平方根:%f\n",sqrt(m));break;
case 4:break;
default:printf("请输入1~4之间的数字!\n");
}
if(c==4) break;
}
}
#include<stdio.h>
int main( )
{
int x,sum=0;
scanf("%d",&x);
for( ; x ; scanf("%d",&x))
if(x>0)
sum=sum+x;
printf("正数总和为:%d\n",sum);
return 0;
}
4.2
if语句形式之二
if(表达式)
第
本章重点
●if语句的三种形式
●if语句的应用
●if~else语句的应用
●if~else if语句的应用
●switch语句的程序流程
4
if语句形式之一
if(表达式)
语句块
图4.1 if语句流程图
例4.1:从键盘输入一批数,统计正数的和,当输入0时程序结束。
分析问题:通过循环输入整数,假设输入变量为x;然后要判断该数是否为0,如果不为0,再判断值是否大于零,如果大于零,加入和。
构成等边三角形的条件为:a==b&&b==c;构成等腰三角形的条件为:a==b||b==c||a==c。构成直角三角形的条件为:a*a+c*c==b*b||a*a+b*b==c*c||c*c+b*b==a*a。
#include <stdio.h>
int main()
{
int a,b,c;
printf("请输入第1条边:");
scanf("%d",&a);
printf("请输入第2条边:");
scanf("%d",&b);
printf("请输入第3条边:");
scanf("%d",&c);
if( a+b>c&&a+c>b&&b+c>a)
图4.7 if…else if流程图
例4.5:从键盘输入一个数给x,然后判断该变量是否大于零,若大于零的话,则输出一行文字说明该变量是正数,否则的话再判断变量x的值是否为零,若为零的话,则输出一行文字说明该变量是零,否则的话则x的值是负数,输出一行文字说明该变量是负数。
分析:输入的数分三种情况:正数、负数、零。流程图如图4.8所示。
{
printf("能构成一个三角形\n");
if (a==b&&b==c)
printf("能构成一个等边三角形\n");
else if(a==b||b==c||a==c)
printf("能构成一个等腰三角形\n");
else if(a*a+c*c==b*b||a*a+b*b==c*c||c*c+b*b==a*a)
语句块1
else
语句块2图4.4 if…e Nhomakorabease语句流程图
例4.3:判断从键盘输入的数是正数还是负数,输入数0结束程序运行。
分析问题:数从键盘输入,输入的数如果大于0则输出“输入的数是正数”,如果是小于0则输出“输入的数是负数”,如果是等于0,则程序运行结束。
流程图如图4.5所示。
图4.5程序流程图
}
解析:switch中表达式的值为3,从case 2+1入口,执行语句k+=2;得k=3,由于此语句后无break;语句,继续执行case 4后语句:k+=3;最后k=6。
例4.8输入一个字符,如果是Y、N或y、n,则分别执行一输出语句;如果是其他字母则执行另一输出语句。
程序如下所示:
#include<stdio.h>
break;
default:
printf("\n this is other char.\n");
}
}
例4.9编写程序,实现如下功能:
输入一个实数后,屏幕上显示如下菜单:
1.输出相反数
2.输出平方数
3.输出平方根
4.退出
输入1,输出该数的相反数;输入2,输出该数的的平方数;输入3,输出该数的的平方根;输入4退出此程序。输入1~4之外的数,显示“请输入1~4之间的数字”。
void main()
{
char ch;
printf(" please input Y/N(y/n) :");
scanf("%c" , &ch);
switch (ch)
{
case'y':
case'Y': printf("\n this is'Y'or 'y'.\n");
break;
case'n':
case'N': printf("\n this is'N'or 'n'.\n");
printf("能构成一个直角三角形\n");
else
printf("能构成一个一般的三角形\n");
}
else
printf("不能构成一个三角形\n");
return 0;
}
4.5 switch
switch语句格式:
switch(表达式)
{
case常量表达式1:
语句序列1
[break;]
case常量表达式2:
图4.6流程图
#include <stdio.h>
int main()
{
int nsum=0,n=0,psum=0,p=0;
/*nsum负数累加值,n负数个数,psum正数累加值,p正数个数(0作为正数)*/
int i,x; /* i用于控制循环次数,x用户存储输入的数*/
for(i=1;i<=10;i++)
#include <stdio.h>
int main()
{
int x=1;
printf("\n请输入一整数(输入0程序退出):");
scanf("%d",&x);
while(x)
{
if(x > 0)
printf("输入的数%d是正数.\n",x);
else
printf("输入的数%d是负数.\n",x);
printf("\n请输入一整数(输入0程序退出):");
scanf("%d",&x);
}
return 0;
}
例4.4:从键盘输入10个整数,把所有的正数相加以及所有的负数相加,最后输出所有正数的和,以及所有负数的和。
分析问题:要从键盘输入十个整数,所以采用循环结构,输入的数分正数和负数,各进行累加。流程图如图4.6所示。
语句序列2
[break;]
.
.
.
case常量表达式n;
语句序列n
[break;]
default:
语句序列n+1
}
图4.9语句执行的流程图
例4.7求执行下列程序段后k的值。
char c='2';int k=1;
switch(c+1-'0')
{ case 2:k+=1;
case 2+1:k+=2;
case 4:k+=3;
{
printf("请输入10整数中的第%d个数:",i);
scanf("%d",&x);
if(x>=0)
{
psum+=x;
p++;
}
else{
nsum+=x;
n++;
}
}
printf("\n有%d个正数,和为:%d\n有%d个负数,和为:%d\n",p,psum,n,nsum);
return 0;
}
图4.8流程图
编译程序及运行
#include <stdio.h>
int main()
{
int x;
printf("输入一数值:");
scanf("%d",&x);
if(x > 0) printf("x是正数.\n");
else if(x == 0) printf("x是零.\n");
else printf("x是负数.\n");
分析:此题涉及多个菜单的选择,因此用到多分支结构——switch,switch可以不同条件实现不同的程序块,如此题中输入数字1,则执行输出相反数的程序块。
图4.10菜单选择流程图
#include <stdio.h>
#include <math.h>
intmain()
{
int i;
float m;
int c=5;
return 0;
}
4.4
if语句的嵌套是指if语句中又包含了一个或多个if语句。上一节介绍的if-else if结构也是if语句的嵌套结构。
例4.6:编写一个程序,由键盘输入三个整数作为三角形的三条边,判断是否能构成一个三角形,如能并判断是等边三角形、等腰三角形、直角三角形,还是其它一般的三角形。
printf("输入任意一个整型数:\n");
scanf("%f",&m);
printf(*************************\n");
printf("1.输出相反数\n");
printf("2.输出平方数\n");
printf("3.输出平方根\n");
printf("4.退出\n");
编译程序及运行
步骤1:在Visual C++环境下新建文件可用[开始]→[程序]→[Microsoft Visual C++6.0] →[Microsoft Visual C++6.0] →[文件] →[新建]→[文件] →[C++ Sourse File],输入文件名4-6.c
步骤2:在4-6.c文件中输入以下完整的源程序。
4.3
if语句形式之三
if(表达式1)
语句块1
else if(表达式2)
语句块2
.
.
.
else if(表达式n-1)
语句块n-1
else
语句块n
功能:从上到下依次判断表达式的值,当出现某个值为真(非0)时,执行与其相对应的语句,并跳过其余条件的判别;如果所有的表达式均为假(0),则执行语句n。
程序流程图如图4.7所示。
printf("*************************\n");
while(1)
{
scanf(“%d”,&c);
switch(c)
{
case 1:printf("输出相反数:%f\n",-m);break;
case 2:printf("输出平方数:%f\n",m*m);break;
case 3:printf("输出平方根:%f\n",sqrt(m));break;
case 4:break;
default:printf("请输入1~4之间的数字!\n");
}
if(c==4) break;
}
}
#include<stdio.h>
int main( )
{
int x,sum=0;
scanf("%d",&x);
for( ; x ; scanf("%d",&x))
if(x>0)
sum=sum+x;
printf("正数总和为:%d\n",sum);
return 0;
}
4.2
if语句形式之二
if(表达式)
第
本章重点
●if语句的三种形式
●if语句的应用
●if~else语句的应用
●if~else if语句的应用
●switch语句的程序流程
4
if语句形式之一
if(表达式)
语句块
图4.1 if语句流程图
例4.1:从键盘输入一批数,统计正数的和,当输入0时程序结束。
分析问题:通过循环输入整数,假设输入变量为x;然后要判断该数是否为0,如果不为0,再判断值是否大于零,如果大于零,加入和。