1、高2015级信息学竞赛培训资料 程序设计讲稿4 本讲涉及的单词: 1、if 如果 2、else 否则 3、switch 开关 4、case 案例、事例 5、default 缺省、默认 6、break 打断 一、关系运算符及其优先级 1、关系运算符: 程序中经常需要比较两个量的大小关系,以决定程序的下一步工作,比较两个量的大小关系的运算符称为关系运算符,C/C++中有以下关系运算符: > 大于 < 小于 == 等于 >= 大于等于 <= 小于等于
2、 != 不等于 关系运算符都是双目运算符,其结合性为左结合型。关系运算符的优先级低于算术运算符,高于赋值运算符。六个关系运算符中,>、<、>=、<=的优先级相同,==和!=的优先级相同,但前者高于后者。 2、关系表达式 关系表达式的一般形式:表达式 关系运算符 表达式 例如:a+b>c+d、 x<=3/2、a<(b>c)、a!=(c==d) 关系表达式运算的结果只有两种:真或假(正确或错误,成立或不成立),用数字1和0表示。 例如:5>3 的运算结果是1(正确),而3<5的结果是0(错误) int main() { char c='k'; i
3、nt i=1,j=2,k=3;
float x=3e+5,y=0.85;
printf("%d,%d\n",'a'+5 4、5,因为字符’a’的ASCII码是97。
(3) 1 5、所有的算术运算符关系运算符,也高于&&和||。
a && b ,只有在a和b都为正确的时候,结果才“正确”,其他情况都为“错误”
例如:如果x=4,那么 (x>4 && x<10) 的结果就是“错误”;
而(x>=2 && x<10) 的结果就是“正确”;
a || b ,只有在a和b都“错误”的时候,结果才“错误”,其他情况都为“正确”
例如:如果x=4,那么 (x>4 || x<10) 的结果就是“正确”;
而(x<=2 || x>10) 的结果就是“错误”;
!a,表示将a的值取反,如果a为正确,则 !a 为错误,如 6、果a为错误,则!a为正确
例如:!(4>5)的结果为正确,而!(4<5)的结果为错误。
2、逻辑表达式
用逻辑运算符、关系运算符构成的式子,成为逻辑表达式:
举例:
数学表达式 -2 <= x < 10 的C语言条件表达式:
x是奇数的条件表达式:
x是偶数的条件表达式:
x能被11整除的条件表达式: 7、
x能被4整除但不能被100整除,或者能被400整除的C语言表达式:
条件表达式: m % 2==1 && m<=20 || m>10
在m=5的时候,表达式的值为:
在m=8的时候,表达式的值为: 8、
在m=13的时候,表达式的值为:
在m=16的时候,表达式的值为:
在m=23的时候,表达式的值为:
在m=30的时候,表达式的值为:
三、分支语句
格式:if(条件) 语句1;
else 语句2;
功能:如果 条件成立 则执行语句1,否则执行语句2;
其中,上面的格式中 ”else 语句2;” 可以省略,上面的格式写成了两行,其实可以写成一行的,这样做只是为了程序更加美观。
例7、编程输入两个整数,输出其中的大数。
解答程序 9、1
解答程序2
int main()
{
int a,b,MAX;
scanf("%d%d",&a,&b);
MAX=a;
if(MAXb) MAX=a;
else MAX=b;
printf("MAX=%d\n",MAX);
return 0;
}
解答 10、程序1中,先把a的值赋给变量MAX,再用if语句判别MAX和b的大小,如果MAXb,则把a的值赋给MAX,否则把b赋给b。这里的否则相当于a<=b。
思考:能否写成下面的形式,如果不能,该怎样修改?
if(a>b) MAX=a;
if(a 11、)
{
char c;
scanf("%c",&c);
if(c>='0' && c<='9')
printf("Digit\n");
else if(c>='A' && c<='Z')
printf("Capital\n");
else if(c>='a' && c<='z')
printf("Small\n");
else
printf("Other\n");
return 0;
}
如果c是数字字符则输出”digit”
否则如果c是大 12、写字母则输出”Capital”
否则如果c是小写字母则输出"Small"
否则输出" Other "
四、条件运算符
C/C++中有一个与if ~ else ~ 类似的运算符”? :”,它是三目运算符,其格式为:
表达式1?表达式2:表达式3
其含义是:如果表达式1成立,则以表达式2作为条件表达式的结果,否则以表达式3作为条件表达式的结果。
例如:if(a>b) MAX=a;
else MAX=b;
可以改写为:MAX = a>b? a: b;
条件运算符的优先级高于赋值运算符,低于算术运算符、关系运算符和逻辑运算 13、符。
请用关系运算符改写例7的程序。
五、开关语句
C/C++语言还提供了另一种用于多分支选择的语句——switch语句,其一般形式如下:
形式:
switch(表达式)
{
case 常量表达式1:语句1
case 常量表达式2:语句2
…
case 常量表达式n:语句n
default:语句n+1
}
其含义是:计算表达式的值,然后依次与case后面的常量表达式的值比较。当与某个常量表达式的值相等时,即执行其后面的语句,然后不再判断,转而执行后面的所有case后的语句(包括default 14、语句)。当表达式的值与所有case后面常量表达式的值都不相等时,则执行default后的语句。
例9、编程输入一个数字,输出与这个数字对应星期几的英语单词,比如输入1,则应是星期一,输出“Monday”,7则应是星期日,输出“Sunday”。
解答程序1
int main()
{
int a;
scanf("%d",&a);
switch(a)
{
case 1 : printf("Monday\n");
case 2 : printf("Tuesday\n");
case 3 : printf( 15、"Wednesday\n");
case 4 : printf("Tursday\n");
case 5 : printf("Friday\n");
case 6 : printf("Saturday\n");
case 7 : printf("Sunday\n");
default : printf("error\n");
}
return 0;
}
int main()
{
int a;
scanf("%d",&a);
switch(a)
{
16、 case 1 : printf("Monday\n"); break;
case 2 : printf("Tuesday\n");break;
case 3 : printf("Wednesday\n");break;
case 4 : printf("Tursday\n");break;
case 5 : printf("Friday\n");break;
case 6 : printf("Saturday\n");break;
case 7 : printf("Sunday\n");break;
default 17、 printf("error\n");break;
}
return 0;
}
解答程序1:当输入4后,则程序输出:
Tursday
Friday
Saturday
Sunday
error
由此看来,整数上面对switch语句含义的解释,当表达式与某个常量值相等时,则从这里开始所有的case后面的语句都会执行。
解答程序2:当输入4后,程序输出:
Tursday
因为在每条ca 18、se后面的语句后加上了一个break;这里的break表示中断switch语句的执行。所以当输出Tursday后,再执行break;这时,跳出的switch语句,所以后面case语句再不会被执行。
使用switch语句的要注意以下几点:
1) case语句后的常量表达式的值不能有相同的;
2) case后可以有多条语句,他们不必用{}括起来
3) default可以省略。
思考:请用if语句改写上面的程序。
六、编程实例
例10、打折(P1013)
一件衣服950元,若消费满3000元,可打八五折。输入购买衣服件数,输出需要支付的金额(单位:元), 19、保留两位小数。
【输入】
一个整数N,表示顾客购买衣服数量。
【输出】
一个实数,表示需要支付的金额。保留两位小数。
【样例】
4
3230.00
2
1900.00
【数据范围】
0 <= N <= 10000000
【分析】
1、 先计算买n件衣服的钱数:p=950*n;
2、 在判断:如果p>=3000 则输出p*0.85;否则输出p (保留两位小数)
例11、三整数排序(P1015)
输入三个整数a,b,c,从小到大排序后输出。
【输入】
一行三个整数a,b,c。
20、输出】
由小到大输出这三个数。整数之间用一个空格分开。
【样例】
20 7 33
7 20 33
解法程序:
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c); // 输入a,b,c的值
if(a>b) { t=a; a=b; b=t; } //如果a>b,则交换a,b的值;
if(a>c) { t=a; a=c; c=t; } //如果a>c,则交换a,c的值;
if(a>c) { t=a; a=c; c=t; } 21、 //如果b>c,则交换b,c的值;
printf("%d %d %d\n",a,b,c); //输出答案:输出a,b,c的只值
return 0;
}
关于程序的一点解释:
语句:if(a>b) { t=a; a=b; b=t; }
因为如果满足条件a>b要执行三句话,t=a; a=b; b=t;如果条件不满足,这三句话就不会执行。所以用{}把这三句括起来,这样的语句称为复合语句。
如果写成这样:
if(a>b) t=a; a=b; b=t;
则满足条件a>b,就只会执行t=a;
而不满足,则a=b和b=t;还会照样执行。
22、
例12、三角形 (P1017)
输入三角形三边长度值a,b,c(均为正整数),完成下列任务:
(1)、如果这三边根本无法构成三角形,则输出“not a triangle”。
(2)、如果能构成三角形,则计算这个三角形的面积并输出。
(3)、然后再判断这个三角形是否是直角三角形,如果是则输出“yes”,否则输出“no”。
【输入】
一行三个正整数a,b,c。
【输出】
如果a,b,c不能构成三角形,则输出一行“not a triangle”。 如果能构成一个三角形,则:
第 1 行:一个保留2位小数的实数,表示三角形面积;
23、第 2 行:如果这个三角形是一个直角三角形,则输出“yes”,否则输出“no”。
【样例输入】
3 4 5
6.00
yes
2 2 2
1.73
no
4 2 7
not a triangle
【数据范围】
1<=a,b,c<=10000
【样例解释】
构成三角形的条件:“任意两边之和大于第三边。”
已知三角形三边,计算面积用海伦公式:
p=(a+b+c)/2;
面积S=sqrt(p*(p-a)*(p-b)*(p-c))。
例13、 鸡兔同笼(P1016)
已知鸡和兔的总量为n,总腿数为m 24、输入n和m,依次输出鸡的数目和兔的数目。
样例输入1:14 32 样例输出1:12 2
样例输入2:10 16 样例输出2:No answer
分析:按照程序解答问题的三段论:
1、输入数据:n和m;
2、解答方法:设鸡有x只,兔有y只,则列方程:
解方程得: , 这里,x和y必须为正整数。
3、输出答案:如果“m是偶数,且x>0,且y>0”,则该题目解是x和y,否则输出No answer。
x和y必须为正整数
程序的语言描述
用c语言补充完整
25、定义n,m,x,y四个整数变量;
输入变量n,m的值;
x=(4n-m)/2;
y=(m-2n)/2;
如果m是偶数且x>0且y>0
输出x和y的值,中间隔一个空格
否则
输出No answer
int main()
{
if(m % 2==0 && x>0 && y>0)
else
return 0;
}
课后作业:
题库:P1013~P1035
第8页






