内容正文:
单招零距离·计算机专业综合·下册
else if(f-0)printf("待定")
/关*关*关**关*关关*$ound关*※关*关*兴关关关关/
else if(f-1)printf("晋级");
elseprintf(”出错”);
4. 程序设计题:从键盘输入一个整数,如果整数在1一12,则输出对应的季节(月份和季节
对应关系如下表所示),否则输出“输入出错!”。
#includestdio.h>int main( )
关关 关关 *关关 **BEGIN** 关*关* 苦 *关
月份
季节
1-3月
春季
4一6月
夏季
7一9月
秋季
10-12月
冬季
* 关**关关*关关END*关*关关关关关关
第二节
选择结构应用举例
知识体系
[分段函数问题(如商场打折、行李计费、IP地址分类问题等
最大值最小值问题
间年问题
选择结构应用举例方程求解
日期相关问题
四则运算
知识梳理
选择结构通过判断某些特定条件是否满足来决定下一步的执行流程,是非常重要的控制
结构。常见的有单分支选择结构、双分支选择结构、多分支选择结构以及嵌套的分支结构,形
式灵活多变。
C语言中的选择结构语句有两种:if语句和switch语句。switch语句一般用于判断固定
值的时候;if语句用于判断区间或范围的时候。用switch语句能实现的,用f语句都能实现
反之则不然。
.68.
总复习方案·第四章 选择结构程序设计
典例精析
【例1】有一个分段函数如下,编一程序,输入一个x值,输出y值。
(一1(x<0)
y-0(x-0)
1(x0)
【分析】
1 本题有两种方法:首先通过scanf(“%d”,&.x);语句的执行,得到x的值,方法
一是先判断如果x<0,则将-1赋给v,否则继续判断,如果x=一0,则将0赋给y,否则将1
赋给y;方法二是先判断x一0,如果条件成立,直接执行嵌套的if.....else,否则直接执行最
后一个else,将一1赋给y。
【答案】
方法一:
#include<stdio.h>
int main()
int x,y;
scanf(“d”,&.x);
if(x0)y--1;
else if(x--0)y-0;
elsey-l;
printf(“x-%d,y-%dn”,x,y);
方法二:
#includestdio.h>
int main()
int x.y;
scanf(“%d”,&x)
if(x>-0)
if(x>0)y-1;
elsey-0;
elsey--1;
printf(“x-%d,y-%dn”,x,y);
【例2】输入3个数,按从大到小的顺序输出。
【分析】设3个数分别是a、b和c,把它们中最大者存放在a中,把次大者存放在b中,e
中存放最小者,然后依次输出a、b和c
【答案】
共include"stdio.h"
int main()
1
inta,b,c,t;
.69.
单招零距离·计算机专业综合·下册
printf (”please input the three number:");
scanf(”%d,%d,%d”,&.a,&.b,&.c);
if (ab)t=a;a=b;b=t; /*a和b的值交换*
if (ac)t=a;a=c;c=t;)/*a和c的值交换×/
if (b<c){t=b;b=c;c=t;)/xb和c的值交换*/
printf("%d,%d,%dn”,a,b,c)
)
运行时从键盘输入2,3,1,程序运行结果为:3,2,1
【例3】求一元二次方程ax{}+bx十c=0的根。
【分析】
由键盘输入a,b,c。假设a,b,c的值任意,并不保证b{②一4ac0。需要在程序中
进行判别,如果b{}一4ac0,就计算并输出方程的两个实根,否则就输出“方程有共辄复根”的
信息。
【答案】
共include <stdio.h>
#include <math.h>
int main()
double a,b,c,disc,xl,x2,p,q;
printf(“输入方程的3个系数(a,b,c):n”)
scanf("%lf%lf%1f",&.a,&.b,&.c);
if(fabs(a)<-1e-6)//判断a是否为零
printf(“n该方程不是一个二次方程!n”);
else
disc-b*b-4*a*c;
if(fabs(disc)--le-6)
printf(“方程有两个相等实根:%8.4fn”,-b/(2*a));
else if( disc>1e-6)
(x1-(-b+sart(disc))/(2*a);
x2-(-b-sqrt(disc))/(2*a);
printf(“方程有两个相等实根:n”);
printf(“x1-%7.2f
x2-%7.2f
”,x1,x2);
1
else
(p--b/(2*a);
q-sqrt(-disc)/(2*a);
printf(“方程有两个共矩复根:
”);
printf(“x1一%7.2f十%7.2fi
”,p,q);//打印虚根;
printf(“x2-%7.2f-%7.2fi
”,p,q)
)
.
70.
总复习方案·第四章 选择结构程序设计
【例4】
从键盘输入一个日期(年一月一日),计算这个日期是这一年中的第几天?
【分析】本题的解法一般是先计算某月以前月份的总天数,再加上当月的天数,需要注意
的是当输入的月份超过2月份且当年是国年时,因当年2月份天数是29天,总天数要加1。
【答案】
#includestdio.h>
int main()
( int day, month,year, sum, leap;
printf("请输入一个日期(yyyy一mm一dd):");
scanf("%d-%d-%d",&.year,&.month,&.day);
switch(month)/先计算某月以前月份的总天数
( case 1:sum =0;break;
case 2:sum - 31:break
case 3:sum - 59;break:
case 4:sum - 90;break:
case 5:sum -120:break:
case 6:sum -151:break;
case 7:sum -181;break
case 8:sum -212;break;
case 9:sum = 243;break:
case 10:sum - 273:break;
case11:sum - 304;break;
case 12:sum - 334:break:
default:printf("data error");break
。
sum=sum十day;/再加上某天的天数
if(year%400==0 l1(year%4=-0&.&.year%100!=0))//判断是不是闯年
leap-1;
else
leap-0;
if(leap=-1&.&.month>2)//*如果是闺年且月份大于2,总天数应该加一天
sum+十:
printf(”这是这一年的第%d天。”,sum);
printf(“
");
巩固练习
1. 若运行以下程序时输入:2022<回车>,则程序的运行结果是
#include<stdio.h
int main()
.71.
单招零距离·计算机专业综合·下册
( inty,t;
scanf("%d",&.y);
=($y%4==0&.&y% 10!=0)lly%400==0)?1:;
if(t)
printf("%dis”,y);
else
printf("%d is not",y);
printf("a leapyear");
2. 若运行如下程序是输入,610/<回车>,则程序的运行结果是
,include<stdio.h>
int main()
i float x,y;
char c;
doubler;
scanf(“%f%f%c”,&.x,&.y,&.c);
switch(c)
case'十':r-x十y:break:
case'-':r-x-y;break;
case'*':r=x*y;break;
case':r-xy;break;
)
printf(“%f”,r);
3.以下程序的功能是;输入一个字符,如果它是一个大写字母,则把它变成小写字母;如
果它是一个小写字母,则把它变成大写字母;其他字符不变。请填空。
#include<stdio.h>
int main()
/
char ch;
scanf("%c”,&.ch);
iff(
)ch-ch士32;
else if(ch>-a'&.&.ch<-z')
printf(“%c”,ch);
一
4.程序填空题:本题功能是从键盘输人一个日期(年一月一日),计算这个日期是这一年
中的第几天?
甘include"stdio.h"
int main()
int year,month,day,days-o;
printf("请输入一个日期(yyyy一mm一dd):n”);
.72.
总复习方案·第四章 选择结构程序设计
scanf("%d-%d-%d".&.year,&.month,&.day)
switch(month-1)
(case 11:days+-30;
case 10:days十=
case9:days+-30:
case 8:days+-31;
case 7:days+-31;
case 6:days+-30;
case5:days+-31;
case 4:days+-30;
case3:days+-31;
case 2: if(
days+-29;
else
days十-28;
case 1:days+-31;
)
days一
printf("%d一%d-%d是这一年中第%d天.
”,year,month,day,days);
)
5.输入一个十进制数,根据输入的数输出所对应的英文星期单词,若所输入的数小于1
或大于7,则输出“Error”,请编程实现。
共include<stdio.h>
int main()
/inta;
scanf("%d",&a);
关关关关*关关关*关BEGIN关关关关关关x关*关关/
/*关关*关*关**关*END关关***关关**关关/
拓展练习
1. 写出下列程序的运行结果。
#include<stdio.h
intmain()
.73.
单招零距离·计算机专业综合·下册
( int i,t,s=0;
for(i=1;i=10;i++)
t-i%3;
switch(t)
case0:s-s十1;
case 1:s=s+2:break:
case2:s=s+3:
)
if(s>18)break;
)
printf(“i=%d,s=%d”,i,s)
2. 写出下列程序的运行结果。
#includeSstdio.h
int main()
( int i-1,n=0,s=-1;
switch(i%5)
default:s=s+2;++n;
case 1:s=s十1;++i;break;
case 3:s=s十3;n十+;
case4:s-s+5;i++;
)
printf("i-%d,n-%dns-%dn",i,n,s);
。
3.以下程序的功能是;根据输入的三角形的三条边,判断是否能组成三角形,若可以则输
出它的面积和三角形的类型。请填空。
甘include”math.h”
int main()
float a,b,c:
float s,area;
scanf(“%f%f%f”,&.a,&.b,8.c);
if(
rs-(a十b十c)/2;
area-aqrt(s*(s一a)*(s-b)*(s-c));
printf(“%f",area);
if
printf(“等边三角形”);
elseif(
)
printf(“等腰三角形”);
else if((axa+bxb==c*c)|I(a*a+c*c==bxb) |(b*b+c*c==a*
. 74·
总复习方案·第四章 选择结构程序设计
a))
printf(“直角三角形”);
elseprintf(“一般三角形”);
/
else
printf(“不能组成三角形”);
4. 程序设计题;从键盘输入一个整数,输出这个数能被3、5、7整除的所有可能的情况。
共include"stdio.h"
int main()
. intx,t-0;
scanf("%d",&.x);
(**关******关*BEGIN**** ******
(*关***关*关关关*END*
5.程序设计题:IP地址分类如下:
A类地址:1.0.0.1-126.255.255.254
B类地址:128.0.0.1-191.255.255.254
C类地址:192.0.0.1-223.255.255.254
D类地址:224.0.0.0-239.255.255.255
E类地址,240-
从键盘输入一个ip地址的第一个字节的十进制数值,判断其所属的地址类别(A~E)。
共include"stdio.h'
int main()
intx:chart:
scanf("%d”,&x)
)
.75.
单招零距离·计算机专业综合·下册
技能实践
1. 程序填空题:某邮局对邮寄包裹有如下规定,若包裹的长、宽、高任一尺寸超过1米或
重量超过30千克,不予邮寄;对可以邮寄的包裹每件收手续费0.5元,再加上根据表4一2按
不同重量weigh计算的邮资。请填空。
重量与邮资
重量(千克)
邮资(元/千克)
weigh<10
0.80
10<weigh<20
0.75
20<weigh<30
0.70
tinclude"stdio.h"
int main()
float len,weigh,hei,wid,mon,r:
scanf(“%f%f%f%f”,&.len,&wid,&.hei,&.weigh)
if(len>1|wid>1 hei>1l weigh>30)
else if(weigh10)
r-0.8;
else if(weigh<-20)
r-0.75:
else if(weigh<-30)
if(r-一-1)
printf(“error
");
else
printf(“%f”,mon);)
_
2. 程序改错题:假设风速为整数,根据风速判断风的类别,风速和类别的关系如下
风速(MPH)
类别
低于25
弱风
2538
强风
3~54
大风
55~72
狂风
73以上
腿风
.76·
总复习方案·第四章 选择结构程序设计
#include <stdio.h>
int main()
( int x;
printf(”请输入风速X一”);
scanf("%d",&.x)
if(x<72)
printf(“此风为腿风
”);
else if(x>-55)
printf(”此风为狂风n”);
else if(x>-39)
printf(“此风为大风n”);
/**** * ****FOUND*******¥关/
else if(x-25)
printf(”此风为强风n”);
else
printf(”此风为弱风n”)
。
3. 程序设计题:假设英文大小写字母的权值分别为
A-E,a-e
””。
F-J,f一j
K-O,k-0
P-T,p-t
U-Y,u-y
乙,7
从键盘输入一个英文单词,计算出该英文单词的权重(英文单词的权重为该单词各字母权
值之和)。
甘include<stdio.h
#include_ctype.h>
int main()
char word[8o];
int i,t,weight-0;
关关关**BEGIN*关关*关*关*关关关/
(* 关$*$关$关$*关$*$*$*$*BEGIN*$*$*$关$**$*$关$关$关*
.771 4.3 5.2 2
【技能实践】
1.(1)floatx,y;
(2)(x>-1)
(3)(x>=0)
(4)y=fabs(x-log(5)/log(10))
2.year%4==0&&year%100||year%400==0
3.(1)c=getchar()
(2)isalpha(c)
(3)isdigit(c)
4.(1)c=c+5
(2)c=c+5-26
5.(1)scanf("%f%f%f",&a,&b,&c);
改为scanf("%lf%lf%lf",&a,&b,&c);
(2)a+b>c&&a+c>b
改为a+b>c&&a+c>b&&b+c>a
(3)a==b==c改为a==b&&b==c
6.#include<stdio.h>
intmain()
{ doublex;
scanf("%lf",&x);
printf("%.2lf,",x);
if(x<0)printf("error!");
elseif(x<60)printf("%c",'F');
elseif(x<70)printf("%c",'E');
elseif(x<80)printf("%c",'D');
elseif(x<90)printf("%c",'C');
elseif(x<100)printf("%c",'B');
elseif(x==100)printf("%c",'A');
elseprintf("error!");
}
第二节 switch语句
【知识梳理】
一、switch的用法
2.相等 break
3.(1)分号
(2)整 字符
(3)":" 常 变 1 整 字符
三、switch与多分支if的关联
1.多
2.1 从匹配处向下依次执行 break
【巩固练习】
1.4
2.∗∗0∗∗
∗∗2∗∗
3.a=2
4.passwarn67
5.m=3
【拓展练习】
1.AB
2.a=5,b=6
3.23
4.(1)'a' (2)'b' (3)'c' (4)'d' (5)break;
5.(1)m (2)len=31 (3)len=29 (4)break;
【技能实践】
1.Welcome!
2.(1)c=(int)(s/200)
(2)printf("%f",p∗w∗s∗(1-d/100.0));
3.(1)switch(pk=getchar())
(2)case'6':case'7':case'8':case'9':f=-1;break;
(3)case'A':case'J':case'K':case'Q':f=0;break;
(4)case'w':case'W':f=1;break;
(5)if(f==-1)printf("落选");
(6)elseif(f==0)printf("待定");
(7)elseif(f==1)printf("晋级");
4.#include"stdio.h"
main()
{ intn;
scanf("%d",&n);
if(n<1||n>12)
printf("输入出错!");
else
{ switch((n-1)/3)
{ case0:printf("春季!");break;
case1:printf("夏季!");break;
case2:printf("秋季!");break;
case3:printf("冬季!");break;
}
}
}
第3节 选择结构应用举例
【巩固练习】
1.2022isnotaleapyear
2.0.600000
3.ch>='A'&&ch<='Z' ch=ch-32
4.(1)31
(2)year%4==0&&year%100! =0||year%400
==0
61
单招零距离计算机专业综合下册
(3)days+day
5.switch(a)
{ case1:printf("Monday
");break;
case2:printf("Tuesday
");break;
case3:printf("Wednesday
");break;
case4:printf("Thursday
");break;
case5:printf("Friday
");break;
case6:printf("Saturday
");break;
case7:printf("Sunday
");break;
default:printf("Error
");break;
}
【拓展练习】
1.i=8,s=21
2.i=2,n=0
s=0
3.(1)a+b>c&&a+c>b&&b+c>a
(2)a==b&&b==c
(3)a==b||b==c||a==c
4.if(x%3==0)
t=t+3;
if(x%5==0)
t=t+5;
if(x%7==0)
t=t+7;
switch(t)
{ case15:printf("能被3、5、7整除
");break;
case12:printf("能被5、7整除
");break;
case10:printf("能被3、7整除
");break;
case8:printf("能被3、5整除
");break;
case7:printf("能被7整除
");break;
case5:printf("能被5整除
");break;
case3:printf("能被3整除
");break;
case0:printf("不能被3、5、7整除
");break;
}
5.if(x>=1&&x<=126)
t='A';
elseif(x>=128&&x<=191)
t='B';
elseif(x>=192&&x<=223)
t='C';
elseif(x>=224&&x<=239)
t='D';
elseif(x>=240)
t='E';
putchar(t);
【技能实践】
1.(1)r=-1
(2)r=0.70
(3)0.50+weigh∗r
2.(1)if(x>72)或if(x>=73)
(2)elseif(x>=25)
3.gets(word);
for(i=0;word[i];i++)
{ t=toupper(word[i]);
if(t>='A'&&t<='E')weigh+=1;
elseif(t>='F'&&t<='J')weigh+=2;
elseif(t>='K'&&t<='O')weigh+=3;
elseif(t>='P'&&t<='T')weigh+=4;
elseif(t>='U'&&t<='Y')weigh+=5;
else weigh+=6;
}
printf(“weight(“%s”)=%d
”,word,weight);
第五章 循 环 结 构
第一节 while循环
【知识梳理】
一、while循环的格式
2.表达式 真(非0) 循环体 假(0)
3.(1)只有一句 复合语句
(2)假(0) 死循环 分号 空语句
(3)一次也不
二、while循环解决实际问题的一般步骤
1.初始条件
2.条件表达式
3.循环体
4.改变条件 结束循环
【巩固练习】
1.C 2.A
3.2500
4.-2 -3
【拓展练习】
1.(1)t+i (2)i+=2;
2.(1)x>=0.001 (2)x/=2
3.inti,t=0,sum=0,flag=1;
i=1;
while(i<=100)
{t=t+i;
71
总复习方案参考答案