时间:2023-02-09 13:14:30 | 栏目:C代码 | 点击:次
if的用法
上代码:
#include <stdio.h> int main() { short a = 1; short b = 2; int c = a - b; if( c > 0 ) { printf("a > b\n"); } else { printf("a <= b\n"); } return 0; }
下面为输出结果:
if ... else ...剪裁与组合
裁剪
组合
上代码:
#include <stdio.h> int main() { short a = 2; short b = 2; int c = a - b; if( c > 0 ) printf("a > b\n"); else if( c == 0 ) printf("a == b\n"); else printf("a < b\n"); return 0; }
下面为输出结果:
小结
switch-更简洁的多分支选择结构
上代码:
#include <stdio.h> int main() { int a = 1; int b = 2; char sign = 0; printf("Input a sign: "); scanf("%c", &sign); switch(sign) { case '+': printf("%d + %d = %d\n", a, b, a + b); break; case '-': printf("%d - %d = %d\n", a, b, a - b); break; case '*': printf("%d * %d = %d\n", a, b, a * b); break; default: printf("Unsupported Sign: %c\n", sign); } return 0; }
下面为输出结果:
switch 实验小结
switch 语句的分支合并技巧
上代码:
#include <stdio.h> int main() { int num = 0; printf("Input a number: "); scanf("%d", &num); switch( num ) { case 1: case 2: case 3: case 4: case 5: printf("%c\n", 'A' + (num - 1)); break; default: printf("Invalid Input\n"); } return 0; }
下面为输出结果:
小结
while - 循环结构的直接支持
上代码:
#include <stdio.h> int main() { int sum = 0; int i = 1; while( i <= 100 ) { sum = sum + i; i = i + 1; } printf("sum = %d\n", sum); printf("i = %d\n", i); return 0; }
下面为输出结果:
进阶while循环
上代码:
#include <stdio.h> int main() { int sum = 0; int i = 1; while( i <= 1000 ) { if( (i % 3) == 0 ) { sum = sum + i; printf("i = %d\n", i); } i = i + 1; } printf("sum = %d\n", sum); return 0; }
下面为部分输出结果:
小结
if 语句可以看作只循环一次的 while 语句
while语句可以看作扩展的 if 语句
while(...)
if(...)
while(...)
{
}
do...while 循环结构
do...while 的构成与执行
上代码:
#include <stdio.h> int main() { int sum = 0; int input = 0; int i = 0; while( i > 100 ) printf("while( i > 0 )\n"); do printf("do...while( i > 0 )\n"); while( i > 100 ); do { printf("Input: "); scanf("%d", &input); sum = sum + input; } while( sum < 100 ); printf("sum = %d\n", sum); return 0; }
下面为输出结果:
这里注意一个问题:while 和 do...while 的区别,可以看到 i 为 0 时,while 循环里面的不会执行,而 do...while 会执行一次。
循环结构的套路
真:执行循环体
假:结束循环
for循环结构(更简洁的循环结构)
for ( 0.初始化循环变量; 1.循环条件; 3.改变循环变量 )
{
2.循环体;
}
可以用下面的图表示:
上代码:
#include <stdio.h> int main() { int esum = 0; int osum = 0; int i = 0; for(i=1; i<=100; i=i+2) { osum = osum + i; esum = esum + (i + 1); } printf("osum = %d\n", osum); printf("esum = %d\n", esum); return 0; }
下面为输出结果:
for循环注意事项
for ( 0.初始化循环变量; 1.循环条件; 3.改变循环变量 )
{
2.循环体;
}
上代码:
#include <stdio.h> int main() { int sum = 0; int i = 1; for(; i <= 100; ) { sum = sum + i; i = i + 1; } printf("sum = %d\n", sum); return 0; }
下面为输出结果:
小结
再论break
上代码:
#include <stdio.h> int main() { int sum = 0; int i = 1; while( 1 ) { sum = sum + i; if( i == 100 ) break; i = i + 1; } printf("sum = %d\n", sum); printf("i = %d\n", i); return 0; }
下面为输出结果:
再上一段代码:
#include <stdio.h> int main() { int target = 30; int input = 0; for(;;) { printf("Input: "); scanf("%d", &input); if( input == target ) break; else if( input < target ) printf("It's small!\n"); else if( input > target ) printf("It's big!\n"); } printf("Target = %d\n", input); return 0; }
下面为输出结果:
break遵循最近匹配原则
上代码:
#include <stdio.h> int main() { int i = 0; for(i=1; i<=10; i=i+1) { switch( i % 2 ) { case 0: printf("%d is even number!\n", i); break; case 1: printf("%d is odd number!\n", i); break; } } return 0; }
下面为输出结果:
可以看到,break 对应的是 switch ,而不是 for,这就是 break 的最近匹配原则。
再上一段代码:
#include <stdio.h> int main() { int k = 0; int input = 0; printf("Input: "); scanf("%d", &input); switch( input % 2 ) { case 0: printf("case 0\n"); for(k=0; k<=2; k=k+1) if( k ) break; break; case 1: printf("case 1\n"); break; } return 0; }
下面为输出结果:
如果把case 0 下面的 break 去掉一个,那么输出结果就会变成下面这样:
这还是因为 break 的最近匹配原则,去掉一个 break 后,break匹配的就是 for 了,所以也会输出第二个 case 后面的内容。
continue一循环体终结者
上代码,打印1000以内能被7整除的整数,并统计数量:
#include <stdio.h> int main() { int i = 0; int n = 0; for(i=1; i<1000; i=i+1) { if( i % 7 ) continue; printf("%d ", i); n = n + 1; } printf("\n"); printf("Count: %d\n", n); return 0; }
下面为输出结果:
小结