02选择结构程序设计.docx

上传人:b****4 文档编号:3674491 上传时间:2022-11-24 格式:DOCX 页数:20 大小:22.86KB
下载 相关 举报
02选择结构程序设计.docx_第1页
第1页 / 共20页
02选择结构程序设计.docx_第2页
第2页 / 共20页
02选择结构程序设计.docx_第3页
第3页 / 共20页
02选择结构程序设计.docx_第4页
第4页 / 共20页
02选择结构程序设计.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

02选择结构程序设计.docx

《02选择结构程序设计.docx》由会员分享,可在线阅读,更多相关《02选择结构程序设计.docx(20页珍藏版)》请在冰豆网上搜索。

02选择结构程序设计.docx

02选择结构程序设计

选择结构程序设计

作者巨同升

所谓选择结构程序,是指程序中的语句完全按照它们的排列次序执行。

顺序结构程序一般由四个部分组成:

1.定义变量部分;

2.已知变量赋值或输入部分;

3.未知变量求值部分;

4.输出结果部分。

顺序结构程序的编写方法,与求解物理题很相似。

1.变量相当于物理量,有几个物理量就定义几个变量。

并明确哪些变量是已知的,哪些变量是未知的。

2.给出已知变量的值。

若已知变量有明确的值,则用赋值语句给出;否则用输入语句获得。

3.根据已知变量与未知变量的关系,用赋值语句求得未知变量的值。

4.输出求得的未知变量的值。

选择结构程序设计

1、从键盘输入两个整数,求出最大数并输出。

解:

解法1:

⑴编程思路:

①首先定义变量,x,y存储两个整数,max存储求出的最大数。

②用输入语句输入变量x,y的值。

③若x>y,则变量max取x的值,否则取y的值。

④输出求得的变量max的值。

⑵源程序:

main()

{intx,y,max;

 scanf("%d%d",&x,&y);

 if(x>y)

max=x;

 else

max=y;

 printf("max=%d\n",max);

}

注意:

①else之后不能直接写条件,如不能写作else(x<=y),但可以写作elseif(x<=y)。

解法2:

⑴编程思路:

同解法1。

⑵源程序:

main()

{intx,y,max;

 scanf("%d%d",&x,&y);

 max=x>y?

x:

y;/*使用条件表达式判断求值*/

 printf("max=%d\n",max);

}

2、从键盘输入一个实数,求其绝对值并输出。

解:

解法1:

⑴编程思路:

①首先定义变量,x存储该实数,y存储其绝对值。

②用输入语句输入变量x的值。

③若x>0,则变量y取x的值,否则取-x的值。

④输出求得的变量y的值。

⑵源程序:

main()

{floatx,y;

 scanf("%f",&x);

 if(x>=0)

y=x;

 else/*否定x>=0,即x<0*/

y=-x;

 printf("y=%f\n",y);

}

解法2:

⑴编程思路:

①首先定义变量x,先存储该实数,后存储其绝对值。

②用输入语句输入变量x的值。

③若x<0,则将变量x取负之后再存入x;否则x保持不变。

④输出求得的变量x的值。

⑵源程序:

main()

{floatx;

 scanf("%f",&x);

 if(x<0)

x=-x;

 printf("y=%f\n",x);

}

3、从键盘输入x的值,求y的值并输出。

解:

解法1:

采用三条平行的if语句分别求值,每条if语句对应于一种情况(一个分支)。

⑴编程思路:

①首先定义变量x,y。

②用输入语句输入变量x的值。

③若x>0,则变量y取1;若x=0,则变量y取0;若x<0,则变量y取-1。

④输出求得的变量y的值。

⑵源程序:

main()

{floatx,y;

 scanf("%f",&x);

 if(x>0)

y=1;

 if(x==0)/*等号不能写作=*/

y=0;

 if(x<0)

y=-1;

 printf("y=%f\n",y);

}

注意:

①if(x==0)不能写作if(x=0),因为后者表示赋值,x的值总为0,即条件总为假。

②在一组平行的if语句中,不管前边的if语句条件是真是假,后边的if语句总要执行。

解法2:

采用嵌套的if语句分别求值,共分为三种情况(三个分支)。

⑴编程思路:

①首先定义变量x,y。

②用输入语句输入变量x的值。

③若x>0,则变量y取1;否则若x=0,则变量y取0;否则若x<0,则变量y取-1。

④输出求得的变量y的值。

⑵源程序:

main()

{floatx,y;

 scanf("%f",&x);

 if(x>0)/*若满足x>0*/

y=1;

 elseif(x==0)/*否定x>0,同时满足x=0*/

y=0;

 else/*再否定x=0,必然是x<0*/

y=-1;

 printf("y=%f\n",y);

}

注意:

①在两个嵌套的if语句中,只有前边的if语句条件是假(或者是真),后边的if语句才会执行。

4、从键盘输入三个整数,求出最大数并输出。

解:

解法1:

⑴编程思路:

①首先定义变量,a,b,c存储三个整数,max存储求出的最大数。

②用输入语句输入变量a,b,c的值。

③先求出前两个数中的最大数,并存入变量max中。

若a>b,则max取a的值,否则取b的值。

④再用第三个数与前两个数中的最大数比较,求出三个数中的最大数,并存入变量max中。

若c>max,则max取c的值,否则max保持不变。

⑤输出求得的变量max的值。

⑵源程序:

main()

{inta,b,c,max;

 scanf("%d%d%d",&a,&b,&c);

 if(a>b)

max=a;

 else

max=b;

 if(c>max)/*该if语句与第一个if语句平行*/

max=c;

 printf("max=%d\n",max);

}

解法2:

利用条件运算符求出三个数中的最大数。

⑴编程思路:

同解法1。

⑵源程序:

main()

{inta,b,c,max;

 scanf("%d%d%d",&a,&b,&c);

 max=a>b?

a:

b;

 max=c>max?

c:

max;

 printf("max=%d\n",max);

}

解法3:

⑴编程思路:

①首先定义变量,a,b,c存储三个整数,max存储求出的最大数。

②用输入语句输入变量a,b,c的值。

③若a>b同时a>c,则max取a的值。

若b>a同时b>c,则max取b的值。

若c>a同时c>b,则max取c的值。

④输出求得的变量max的值。

⑵源程序:

main()

{inta,b,c,max;

 scanf("%d%d%d",&a,&b,&c);

 if(a>b&&a>c)

max=a;

 if(b>a&&b>c)/*或elseif(b>a&&b>c)*/

max=b;

 if(c>a&&c>b)/*或elseif(c>a&&c>b)*/

max=c;

 printf("max=%d\n",max);

}

注意:

①因为该程序中的三个条件是互相排斥的,即只有第一个条件为假时,才需要判断第二个条件;只有前两个条件均为假时,才需要判断第三个条件,故可以用三个嵌套的if语句进行判断。

②同时因为三个条件是相互独立、互不依赖的,故也可以用三个平行的if语句进行判断。

5、从键盘输入两个数,然后按升序输出。

解:

解法1:

⑴编程思路:

①首先定义变量,a,b存储两个数,t作为交换a,b的中间变量。

②用输入语句输入变量a,b的值。

③若a>b,则将变量a,b的值相交换,以保证a的值较小,b的值较大。

④按照先a后b顺序输出两个变量的值。

⑵源程序:

main()

{floata,b,t;

 scanf("%f%f",&a,&b);

 if(a>b)

 {t=a;a=b;b=t;}

 printf("%f,%f\n",a,b);

}

注意:

①用于交换变量a,b值的三条赋值语句,必须括起来作为一条复合语句。

即当条件为真时,三条赋值语句都执行;当条件为假时,三条赋值语句都不执行。

解法2:

⑴编程思路:

①首先定义变量a,b,用于存储两个数。

②用输入语句输入变量a,b的值。

③若a

⑵源程序:

main()

{floata,b;

 scanf("%f%f",&a,&b);

if(a

printf("%f,%f\n",a,b);

else

printf("%f,%f\n",b,a);

}

6、从键盘输入三个整数,按升序排序后输出。

解:

⑴编程思路:

①首先定义变量,a,b,c存储两个数,t作为交换a,b,c的中间变量。

②用输入语句输入变量a,b,c的值。

③若a>b,则将变量a,b的值相交换,以保证a的值较小,b的值较大。

④若a>c,则将变量a,c的值相交换,以保证a的值较小,c的值较大。

此时变量a的值最小。

⑤若b>c,则将变量b,c的值相交换,以保证b的值较小,c的值较大。

此时变量a的值最小,变量b的值次之,变量c的值最大。

即a,b,c已按升序排序。

⑥输出变量a,b,c的值。

⑵源程序:

main()

 {inta,b,c,t;

  scanf("%d%d%d",&a,&b,&c);

  if(a>b)

   {t=a;a=b;b=t;}/*三条赋值语句必须括起来*/

  if(a>c)/*三条if语句相互平行*/

   {t=a;a=c;c=t;}

  if(b>c)

   {t=b;b=c;c=t;}

  printf("a=%d,b=%d,c=%d\n",a,b,c);}

注意:

①用于交换两个变量值的三条赋值语句,必须括起来作为一条复合语句。

即当条件为真时,三条赋值语句都执行;当条件为假时,三条赋值语句都不执行。

②因为后面的两个判断不应依赖于其前边判断,故必须用三个平行的if语句进行判断。

6、从键盘输入一个字符,若为小写字母,则转化为相应的大写字母,否则保持不变。

解:

解法1:

⑴编程思路:

①首先定义变量,ch1用于存储输入的字符,ch2用于存储转化之后的字符。

②用输入语句输入一个字符并存入变量ch1。

③若ch1>='a'&&ch1<='z'(即ch1的值为小写字母),则将ch1-32(即转化为相应的大写字母)赋给ch2;否则直接将ch1赋给ch2。

④最后输出ch2的值。

⑵源程序:

#include

main()

{charch1,ch2;

 ch1=getchar();/*或scanf("%c",&ch1);*/

 if(ch1>='a'&&ch1<='z')/*不能写作if('a'<=ch1<='z')*/

ch2=ch1-32;

 else

ch2=ch1;

 putchar(ch2);/*或printf("ch2=%c\n",ch2);*/

}

注意:

①if(ch1>='a'&&ch1<='z')不能写作if('a'<=ch1<='z')。

解法2:

⑴编程思路:

①首先定义变量ch,先存储输入的字符,后存储转化之后的字符。

②用输入语句输入一个字符并存入变量ch。

③若ch>='a'&&ch<='z'(即ch的值为小写字母),则将ch-32(即转化为相应的大写字母)再赋给ch;否则ch保持不变。

④最后输出ch的值。

⑵源程序:

#include

main()

{charch;

 ch=getchar();/*或scanf("%c",&ch);*/

 if(ch>='a'&&ch<='z')/*不能写作if('a'<=ch<='z')*/

ch=ch-32;

 putchar(ch);/*或printf("ch=%c\n",ch);*/

}

7、从键盘输入一个字符,若为小写字母,则转化为相应的大写字母;若为大写字母,则转化为相应的小写字母,否则保持不变。

解:

解法1:

⑴编程思路:

①首先定义变量,ch1用于存储输入的字符,ch2用于存储转化之后的字符。

②用输入语句输入一个字符并存入变量ch1。

③若ch1>='a'&&ch1<='z'(即ch1的值为小写字母),则将ch1-32(即转化为相应的大写字母)赋给ch2;否则,若ch1>='A'&&ch1<='Z'(即ch1的值为大写字母),则将ch1+32(即转化为相应的小写字母)赋给ch2;否则直接将ch1赋给ch2。

④最后输出ch2的值。

⑵源程序:

#include

main()

{charch1,ch2;

 ch1=getchar();

 if(ch1>='a'&&ch1<='z') 

ch2=ch1-32;

 else  if(ch1>='A'&&ch1<='Z')/*此处else不能缺省*/

ch2=ch1+32;

 else

ch2=ch1;    

 putchar(ch2); 

}

注意:

①因为只有ch1不是小写字母时,才需要判断ch1是不是大写字母,故第二个if语句应嵌套在第一个if语句的else子句中。

②若第二个if语句与第一个if语句平行(即第二个if语句之前无else),则第二个if语句中的else仅否定第二个条件ch1>='A'&&ch1<='Z',即只要不是大写字母,ch2=ch1;都要执行。

显然与题目要求不符。

解法2:

⑴编程思路:

①首先定义变量ch,先存储输入的字符,后存储转化之后的字符。

②用输入语句输入一个字符并存入变量ch。

③若ch>='a'&&ch<='z'(即ch的值为小写字母),则将ch-32(即转化为相应的大写字母)再赋给ch;否则,若ch>='A'&&ch<='Z'(即ch的值为大写字母),则将ch+32(即转化为相应的小写字母)再赋给ch;否则ch保持不变。

④最后输出ch的值。

⑵源程序:

#include

main()

{charch;

 ch=getchar();

 if(ch>='a'&&ch<='z') 

ch=ch-32;

 elseif(ch>='A'&&ch<='Z')/*此处else不能缺省*/

ch=ch+32;    

 putchar(ch); 

}

注意:

①因为只有ch不是小写字母时,才需要判断ch是不是大写字母,故第二个if语句应嵌套在第一个if语句的else子句中。

②若第二个if语句与第一个if语句平行(即第二个if语句之前无else),则当输入一个小写字母(如’f’)时,先执行第一个if语句,因ch1>='a'&&ch1<='z'为真,故转化为相应的大写字母(如’F’);接着执行第二个if语句,又因此时ch1>='A'&&ch1<='Z'为真,故再转化为相应的小写字母(如’f’)。

显然与题目要求不符。

8、从键盘输入一个字符,若为小写字母,则转化为相应的大写字母;若为大写字母,则转化为相应的小写字母;否则转化为ASCII码表中的下一个字符。

解:

解法1:

⑴编程思路:

①首先定义变量,ch1用于存储输入的字符,ch2用于存储转化之后的字符。

②用输入语句输入一个字符并存入变量ch1。

③若ch1>='a'&&ch1<='z'(即ch1的值为小写字母),则将ch1-32(即转化为相应的大写字母)赋给ch2;否则,若ch1>='A'&&ch1<='Z'(即ch1的值为大写字母),则将ch1+32(即转化为相应的小写字母)赋给ch2;否则将ch1+1(即转化为ASCII码表中的下一个字符)赋给ch2。

④最后输出ch2的值。

⑵源程序:

#include

main()

{charch1,ch2;

 ch1=getchar();

 if(ch1>='a'&&ch1<='z') 

ch2=ch1-32;

 else  if(ch1>='A'&&ch1<='Z')/*此处else不能缺省*/

ch2=ch1+32;

else ch2=ch1+1;

 putchar(ch2); 

}

注意:

①第二个if语句应嵌套在第一个if语句的else子句中,而不能与第一个if语句平行。

解法2:

⑴编程思路:

①首先定义变量ch,先存储输入的字符,后存储转化之后的字符。

②用输入语句输入一个字符并存入变量ch。

③若ch>='a'&&ch<='z'(即ch的值为小写字母),则将ch-32(即转化为相应的大写字母)再赋给ch;否则,若ch>='A'&&ch<='Z'(即ch的值为大写字母),则将ch+32(即转化为相应的小写字母)再赋给ch;否则将ch+1(即转化为ASCII码表中的下一个字符)再赋给ch。

④最后输出ch的值。

⑵源程序:

#include

main()

{charch;

 ch=getchar();

 if(ch>='a'&&ch<='z') 

ch=ch-32;

 elseif(ch>='A'&&ch<='Z')/*此处else不能缺省*/

ch=ch+32;

else ch=ch+1;

 putchar(ch); 

}

注意:

①第二个if语句应嵌套在第一个if语句的else子句中,而不能与第一个if语句平行。

9、从键盘输入两个整数及一个运算符,分别求出其和差积商并输出。

(其中运算符在两个整数之间输入)

解法1:

⑴编程思路:

①首先定义变量,a,b存储两个整数,s存储两个整数的运算结果,ch存储运算符。

②用输入语句输入变量a,b,ch的值。

③若ch为加号,则s=a+b;若ch为减号,则s=a-b;若ch为乘号,则s=a*b;若ch为除号,则s=a/b。

④最后输出变量s的值。

⑵源程序:

main()

{inta,b,s;

 charch;

 scanf("%d%c%d",&a,&ch,&b);/*运算符在两个整数之间输入*/

 if(ch=='+')s=a+b;/*单引号不可少*/

 elseif(ch=='-')s=a-b;

 elseif(ch=='*')s=a*b;

 elseif(ch=='/')s=a/b;

 printf("s=%d\n",s);

}

注意:

①因为四个判断相互排斥、互不依赖,故既可以采用嵌套的if语句进行判断,也可以采用平行的if语句进行判断。

解法2:

⑴编程思路:

同解法1。

⑵源程序:

main()

{inta,b,s;

 charch;

 scanf("%d%c%d",&a,&ch,&b);/*运算符在两个整数之间输入*/

 if(ch=='+')s=a+b;/*单引号不可少*/

 if(ch=='-')s=a-b;

 if(ch=='*')s=a*b;

 if(ch=='/')s=a/b;

 printf("s=%d\n",s);

}

解法3:

⑴编程思路:

同解法1。

⑵源程序:

main()

{inta,b,s;

 charch;

 scanf("%d%c%d",&a,&ch,&b);/*运算符在两个整数之间输入*/

 switch(ch)

 {case'+':

s=a+b;break;/*case之后要有空格,单引号不可少*/

case'-':

s=a-b;break;

case'*':

s=a*b;break;

case'/':

s=a/b;

 }

 printf("s=%d\n",s);

}

10、从键盘输入一个百分制分数,将其转化为等级分输出。

解法1:

利用嵌套的if语句进行判断选择。

⑴编程思路:

①首先定义变量,score存储输入的百分制分数,ch存储转化后的等级分。

②用输入语句输入变量score的值。

③若score<=100同时score>=90,则ch赋值为'A';否则,若score>=80,则ch赋值为'B';否则,若score>=70,则ch赋值为'C';否则,若score>=60,则ch赋值为'D';否则,若score>=0,则ch赋值为'E'。

④最后输出变量ch的值。

⑵源程序:

main()

{intscore;

charch;

scanf("%d",&score);

if(score<=100&&score>=90)

 ch='A';

elseif(score>=80)/*此处else不能缺省*/

 ch='B';

elseif(score>=70)/*此处else不能缺省*/

 ch='C';

elseif(score>=60)/*此处else不能缺省*/

 ch='D';

elseif(score>=0)/*此处else不能缺省*/

 ch='E';

printf("Gradeis%c\n",ch);

}

注意:

①因为后面的判断依赖于前面的判断,故必须采用嵌套的if语句进行判断。

解法2:

利用平行的if语句进行判断选择。

⑴编程思路:

①首先定义变量,score存储输入的百分制分数,ch存储转化后的等级分。

②用输入语句输入变量score的值。

③若score<=100同时score>=90,则ch赋值为'A';若score<90同时score>=80,则ch赋值为'B';若score<80同时score>=70,则ch赋值为'C';否则,若score<70同时score>=60,则ch赋值为'D';score<60同时score>=0则ch赋值为'E'。

④最后输出变量ch的值。

⑵源程序:

main()

{intscore;

charch;

scanf("%d",&score);

if(score<=100&&score>=90)

 ch='A';

if(score<90&&score>=80)

 ch='B';

if(score<80&&score>=70)

 ch='C';

if(score<70&&score>=60)

 ch='D';

if(score<60&&score>=0)

 ch='E';

printf("Gradeis%c\n",ch);

}

注意:

①因为后面的判断不依赖于前面的判断,故可以采用平行的if语句进行判断。

同时由于后面的判断条件与前面的判断条件相互排斥,故也可以采用嵌套的if语句进行判断。

解法3:

利用switch语句进行判断选择。

⑴编程思路:

①首先定义变量,整型变量g存储输入的百分制分数,ch存储转化后的等级分。

②用输入语句输入变量g的值。

③通过g除以10(整除),将一个百分制分数转化为一个0到10之间的整数。

而且同一个分数段将转化为同一个整数,如90到99均转化为9。

④利用switch语句根据表达式g/10的值,跳转到相应的分支执行,求出变量ch的值。

⑤最后输出变量ch的值。

⑵源程序:

main()

{intg;/*g为整型变量*/

 charch;

 scanf("%d",&g); 

 switch(g/10) 

{case10:

 /*当g=100时,转到此处*/

case9:

ch='A';break;/*当g>=90且g<100时,转到此处*/

  case8:

ch='B';break;/*当g>=80且g<90时,转到此处*/

case7:

ch='C';break;/*当g>=70且g<80时,转到此处*/

case6:

ch='D';break;/*当g

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1