交换两个数
t=a; a=b; b=t;
后两位四舍五入
原数乘100 加上0.5 取整 除以100输出
例如将2.437—>2.44 double x; x=x*100; x=x+0.5; x=(int)x; //x的接受类型任然是double类型 x=x/100; //x=2.44if最简单的用法
格式:if(表达式) 语句 功能:如果表达式为真,执行语句,反之不执行
if的范围问题
if(表达式) 语句A; 语句B; 只控制A的执行或不执行,无法控制语句B一定会执行if(表达式) { 语句A; 语句B; } if都控制if…else…用法 是一个语句
if…else if…else…用法 一个语句
if(1) 成立执行A A; if else(2) 1不成立,2成立执行B B; else 1,2都不成立,执行C C;if语句的嵌套
if() if() 语句1; else() 语句2; else if() 语句3; else 语句4; 注:if与else的配对关系,else总是与它上面的最近的未佩对的if配对 如果if与else的数目不一样,为实现程序设计者的思想,可以加花括号来确定配对关系 if() { if() 语句1; } else 语句2; 这里的else就与第一个if进行配对了举例
90<=score<=100 写法是错误的 因为:90<=score逻辑值永远为1或0,那么1或0永远小于100,所以执行的结果永远为真(1) 正确的写法:90<=score&&score<=100
两个变量值得互换
例:int a=3; int b=5; 方法:加一个另外变量 int t; a,b互换如下 t=a; a=b; b=t;对三个变量的值进行排序
编写代码完成:a最大,b中间,c最小 方法:定义一个中间变量t if(a<b) { t=a; a=b; b=t; } if(a<c) { t=a; a=b; b=t; } if(b<c) { t=b; b=a; a=t; }if的常见问题
空语句问题
if(3>2); 等价于 if(3>2) ; 这是一个空语句错误示范
if(表达式1); 有一个空语句 A; 第二个语句 else else无法与第一个if语句匹配 B;语句执行问题
if(表达式1) A; else if(表达式2) B; else C; 即使表达式1和2都成立也只会执行A语句语句逻辑上有漏洞(虽然不会出错)
if(表达式1) A; else if(表达式2) B; else if(表达式3) C;不合法语句
if(表达式1) A; else(表达式2) 这样写法不正确:要么去掉(表达式2);要么在else后加if B; switch语句一般形式:
switch(控制表达式) { case常量表达式1: 语句1; break; case常量表达式2: 语句2; break; case常量表达式3: 语句3; break; ....... default: 语句n; break; }举例
scanf("%d",&val); switch(val) { case 1: printf("一层开\n"); break; case 2: printf("二层开\n"); break; default : printf("没有这一层\n"); break; } 当break去掉后,输入1 将输出:一层开和二层开 因为:case1和case2都是程序的入口,先找到入口后再自上而下执行,不再进行判断。case后面的称为标签:常量表达式 只能是:枚举常量、数值常量、字符、常变量、宏名
for语句
一般形式为:for(表达式1;表达式2;表达式3) 注:for语句中的表达式可以部分或者全部省略,但是两个;不能省略。
表达式2是一个逻辑表达式,当表达式2为假就跳出for循环 #include <stdio.h> int main(void) { int a=-1,b=2; for(; a++,b--; ) printf("%d %d",a, b); } 程序的输出结果为:-1 1 0 0 注:for循环每次判断表达式a++,b--的值,这是逗号表达式,首先计算a++,再计算b--, 整个表达式的值是b--的值,若逗号表达式值不为0,则执行for循环执行过程
for(i=1; i<4; ++i) 表达式(1,2,3) sum = sum + i; 表达式 4 printf("sum=%d\n", sum); 先执行1,在执行2(2成立的话),执行4,再执行3, 3执行完表示一次循环结束。 i=1,1<=4 成立 sum=1,i=2 第一次循环结束 i=2,2<=4 成立 sum=1+2=3,i=3 第二次循环结束 i=3,3<=4 成立 sum=1+2+3=6, 第三次循环成立 i=4,4<=4 成立 sun=1+2+3+4=10,i=5 第四次循环成立 i=5,5<=4 不成立 执行下一个语句 i的最终值是5多个for循环的嵌套使用
for(1;2;3) for(4;5;6) A; B; 先执行:1->2(成立)->4->5(成立)->A->6 一次循环结束 例如: 内部:6->5(成立)->A->6->5(不成立) 外部:->3->2(成立)->4->5(成立)->A->6 ->5(不成立)->3->2(不成立)->B 结束while语句
一般形式
while(表达式) { 循环体 }执行顺序
while(表达式) 语句; 表达式成立执行下面语句举例
求回文数 int main(void) { int val; int m; int sum=0; scanf("%d",&val); m=val; while(m); { sum=sum*10+m%10; m=m/10; } if(sum==m) printf("YES\n"); } ``` 整数求逆 对一个整数做%10得到它的个位数 对一个整数做/10,去掉它的个位数do…while语句
一般形式:
do { 循环体语句 }while(表达式); 先执行循环体里面的语句,然后判断表达式是否成立,如果表达式成立继续执行循环体语句do…while并不等价于for,也不等价于while
主要用于人机交互 例如: char ch; do { ... ... printf("想继续吗?(Y/N)"); scanf("%c",&ch); }while('Y'==ch||'y'==ch);break语句和continue语句
break语句作用
1. 如果用于循环是用来终止循环的 2. 如果用于switch则用来终止switch break不能直接用于if,除非if属于循环内部的一个字句 举例: for(i=1;i<3;++i) { if(3>2) break; 终止for循环,一次也不输出哈哈 printf("哈哈\n"); } 注:在多层循环中break只能终止距离它最近的循环continue语句的作用
用于跳过本次循环余下的语句,转去判断是否需要执行下次循环 例: for(1;2;3) { A; B; continue; 执行完本语句后会执行语句3,C,D会被跳过去 C; D; } while(表达式) { A; B; continue; C,D会被跳过去,继续判断表达式是否成立 C; D; }for循环与while循环的相互比较 for( ;条件; ) == while(条件)
for(1;2;3) A; 等价于 1; while(2) { A; 3; }例子:
for(i=1;i<101;++i) { sum=sum+i; } 等价于 i=1; while(i<101) { sum=sum+i; ++i; }for while do…while使用时刻 如果有固定次数使用for 如果必须执行一次用do…while 其他情况用while
分三步:
流程
知道程序的流程是如何运行的每个语句的功能
试数