nullnull选择结构程序
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
关系运算符和关系表达式关系运算符和关系表达式关系运算符及其优先次序
6种关系运算符:
>、<、>=、<=、==、!=
优先级别不同:null关系表达式
用关系运算符将两个表达式连接起来的式子称为关系表达式;
如:i= =(c=d), x+y>a-b 等;
关系表达式的求值结果为0或者1,
1代表真,0代表假,且结果为整型;
如:a=3,b=2,c=1, 则d= a >b的值为1;
而f=a>b>c的值为0;
程序设计中最好不要对两个浮点数直接进行相等性比较;方法如:
fabs(a-b)<1E-6
关系运算符的结合性是左结合;逻辑运算符与逻辑表达式逻辑运算符与逻辑表达式逻辑运算符及其优先次序优化原则
一元逻辑运算符:!(not),右结合
二元逻辑运算符:&& (and)、||(or),左结合
逻辑运算的真值表a&&b a,b中只要有一个为假,其值为假;
a||b a,b中只要有一个为真,其值为真;
!a a为真,!a为假,a为假,!a为真;null逻辑运算符的优先级从高到低依次为:
高低null 用逻辑运算符将关系表达式、算术表达式、赋值表达式等连接起来的式子称为逻辑表达式;
逻辑表达式的值为真或假(1或0);如:
digit=c>=’0’ && c<=‘9’
c!=‘\n’ | | !a && (b=3)
判断一个量是否为真假时,0为假,非0即真;
如:a=4; 则 !a为0,a=4,b=5时,a&&b为1;
一个逻辑表达式往往是复杂的,此时应严格区分运算符的优先次序及运算对象;如:逻辑表达式null5>3&&2||8<4-!0③④②⑥null 逻辑运算符的执行,只是在下一该逻辑运算符必须执行才能求出表达式的值时才执行;如:
a&&b&&c 只有当a为非0时才判b …
a||b||c 当a为真时,不再判b和c运算符优先级比较运算符优先级比较!优于算术运算符
算术运算符优于关系运算符
关系运算符优于&&,&&优于||if语句if语句1. 语法1:if (表达式)语句
语义:判断表达式的值,为真时执行语句,否则不执行;if语句的三种形式null如:
#include
void main()
{
char ch;
ch=getchar();
if(ch>’a’&&ch<=‘z’) ch+=‘A’-’a’;
putchar(ch);
}null2. 语法2:
if (表达式)
语句1;
else
语句2;
语义:
判断表达式的值,为真时执行语句1,否则执行语句2;null如:#include
main()
{
int a,b;
scanf(“%d%d”,&a,&b);
if(a>b) printf(“max=%d\n”,a);
else printf(“max=%d\n”,b);
}
null3. 语法3:
if (表达式1)
语句1;
else if (表达式2)
语句2;
else if (表达式3)
语句3;
……
else
语句n+1;null从键盘上输入字符,判别其分类:控制符、数字、大写字母、小写字母、其他字符。例null#include “stdio.h”
main()
{ char c;
c=getchar();
if (c<32)
printf(“This is a control character.\n”);
else if (c>=‘0’&&c<=‘9’)
printf(“This if a digit.\n”);
else if (c>=‘A’&&c<=‘Z’)
printf(“This is a capital letter.\n”);
else if (c>=‘a’&&c<=‘z’)
printf(“This is a small letter.\n”);
else
printf(“This is an other charater.\n”);
}null(1)三种形式的if语句中,if 关键字后均为表达式(逻辑表达式、关系表达式、赋值表达式、变量等);
如:if (a=5) 语句;
if (b) 语句;
(2)if 语句中,条件表达式必须用括号括起来,在语句后必须加分号;
(3)满足条件需执行一组语句时,该组语句必须用{ }括起来;
(4)if 语句嵌套时,else 总是与它最靠近的if 匹配;
null如: if (a+b>c&&b+c>a&&a+c>b)
{
s=0.5*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf(“area=%6.2f\n”,area);
}
else printf(“It is not a trilateral.”);null有一函数:编程,输入x的值,输出相应的y值。nullmain()
{ int x,y;
scanf(“%d”,&x);
if (x<0) y=-1;
else if (x= =0) y=0;
else y=1;
printf(“x=%d,y=%d\n”,x,y);
} if (x>=0)
if (x>0) y=1;
else y=0;
else y=-1;null(5)因为if 语句执行时总是简单地测试其中作为条件的“表达式”的值是0还是非0,便可利用这种特性来简化程序设计。如:
if (expression!=0)
完全可用
if (expression)
来代替条件运算符及其表达式条件运算符及其表达式1. 运算符:?:
2. 格式:e1?e2:e3
3. 语义:判e1的值,为1时计算e2, 否则计算e3;
如:max=(a>b)?a:b 等价于
if (a>b) max=a;
else max=b;null 条件运算符的结合方向自右至左
如:a>b?a:c>d?c:d 等价于 a>b?a:(c>d?c:d)
再如:c>a&&c>b?c:a>b?a:b 计算顺序应是:c > a && c > b ? c : (a > b ? a : b)⑥④
null条件运算符的优先级仅高于逗号运算符与赋值运算符;
只有当if语句的真假均只执行一个赋值语句且给同一变量赋值时,才能用条件表达式取代;
条件表达式可使程序简洁;
null语法1:switch(表达式){
case C1:语句序列1;
case C2:语句序列2;
……
case Cn:语句序列n;
default: 语句序列n+1;
}switch语句null其中:switch中的表达式必须放在括号中;
C1至C i 是常量表达式,与switch中表达式的取值对应;
default可缺省,适于表达式e的值不是C1到Cn的情况
语义:
nullnull例:switch(grade){
case ‘A’:printf(“85~100\n”);
case ‘B’:printf(“70~84\n”);
case ‘C’:printf(“60~69\n”);
case ‘D’:printf(“<60\n”);
default: printf (“error\n”);
}null语法2:switch(表达式){
case C1:语句序列1;break;
case C2:语句序列2;break;
……
case Cn:语句序列n;break;
default: 语句序列n+1;break;
}
语义:nullnull例:switch(grade){
case ‘A’:printf(“85~100\n”); break;
case ‘B’:printf(“70~84\n”); break;
case ‘C’:printf(“60~69\n”); break;
case ‘D’:printf(“<60\n”); break;
default: printf (“error\n”); break;
}null说明:
(1)default可省略;
(2)C1~Cn必须互不相同;
(3)C1~Cn无次序影响;
(4)允许多个case共用一个执行语句;
(5) break语句只能跳出一层,内外层情况常可相同;nullswitch(ch){
case ‘0’: case ‘1’:
case ‘2’:
case ‘3’:
case ‘4’: case ‘5’: case ‘6’:
case ‘7’:
case ‘8’:
case ‘9’:digit++; break;
case ‘ ‘: case ‘\t’:
case ‘\n’: white++; break;
default: character++;
}nullint x=1, y=0;
switch(x);
{ case 1: switch(y);
{case 0:printf(“**1**\n”); break;
case 1:printf(“**2**\n”); break;
}
case 2: printf(“**3**\n”);
}运行结果为:
**1**
**3**null例:运输公司计算运费标准如下
s<250 无折扣
250<=s<500 2%折扣
500<=s<1000 5%折扣
1000<=s<2000 8%折扣
2000<=s<3000 10%折扣
3000<=s 15%折扣运费:
f=p*w*s*(1-d)
其中:
p是基本运费
w是重量(吨)
s是距离(公里)
d是折扣c=s/250nullmain()
{ int c,s;
float p,w,d,f;
scanf(“%f,%f,%d”,&p,&w,&s);
if(s>=3000) c=12;
else c=s/250;
switch(c)
{ case 0 : d=0; break;
case 1 : d=2; break;
case 2 : case 3 : d=5; break;
case 4 : case 5 : case 6 : case 7 : d=8; break;
case 8 : case 9 : case 10 : case 11 : d=10; break;
case 12 : d=15;
}
f=p*w*s*(1-d/100.0);
printf(“f=%.2f\n”,f);
}程序举例程序举例例:判断某一年是否闰年。闰年条件是:
1、能被4整除,但不能被100整除;
2、能被100整除,又能被400整除;nullyear%4!=0ynleep=0year%100!=0ynleep=1year%400!=0ynleep=0leep=1leep输出是闰年输出非闰年ynnullvoid main()
{
int year,leep;
scanf(“%d”,&year);
if(year%4!=0) leep=0;
else if(year%100!=0) leep=1;
else if(year%400!=0) leep=0;
else leep=1;
if (leep)
printf(“%d is”,year);
else
printf(“%d is not ”,year);
printf(“a leep year”);
}经验交流之一经验交流之一【规则1】不可将布尔变量直接与TRUE、FALSE 或者1、0 进行比较。
【规则2】应当将整型变量用“==”或“!=”直接与0 比较。
【规则3】不可将浮点变量用“==”或“!=”与任何数字比较。
【规则4】应当将指针变量用“==”或“!=”与NULL 比较。
之二之二程序中有时会遇到if/else/return 的组合,应该将如下不良风格的程序
if (condition)
return x;
return y;
改写为
if (condition)
{
return x;
}
else
{
return y;
}
或者改写成更加简练的
return (condition ? x : y);