1 判断
1.1 分段函数,级联的if-else if
1.2 分段函数,不写成级联的if-else if
2 循环
如果没有循环
2.1 for、do-while、while使用场景
1 #include <stdio.h> 2 3 int main() 4 { 5 int x; 6 int ret = 0; 7 8 scanf("%d", &x); 9 int t = x; 10 while ( x > 1 ) { 11 x /= 2; 12 ret ++; 13 } 14 printf("log2 of %d is %d.", t, ret); 15 16 return 0; 17 }
2.2 算平均数
1 #include <stdio.h> 2 3 int main() 4 { 5 int sum = 0; 6 int count = 0; 7 int number; 8 9 scanf("%d", &number); 10 while ( number != -1 ) { 11 sum += number; 12 count ++; 13 scanf("%d", &number); 14 } 15 16 double dsum = sum; 17 printf("The average is %f. ", dsum / count); 18 19 return 0; 20 }
2.3 猜数字游戏
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 5 int main() 6 { 7 srand(time(0)); 8 int a = rand(); 9 10 printf("%d ", a%100); 11 12 return 0; 13 }
1 #include <stdio.h> 2 3 int main() 4 { 5 int number = rand()%100+1; 6 int count = 0; 7 int a = 0; 8 printf("我已经想好了一个1到100之间的数。"); 9 do { 10 printf("请猜这个1到100之间数:"); 11 scanf("%d", &a); 12 if ( a > number ) { 13 printf("你猜的数大了。"); 14 } else if ( a < number ) { 15 printf("你猜的数小了。"); 16 } 17 count ++; 18 } while (a != number); 19 printf("太好了,你用了%d次就猜到了答案。 ", count); 20 21 return 0; 22 }
2.4 整数逆序
2.4.1 整数逆序去除零
2.4.2 整数逆序不去零
1 #include <stdio.h> 2 3 int main() 4 { 5 int x; 6 scanf("%d", &x); 7 int digit; 8 int ret = 0; 9 10 while ( x> 0 ) { 11 digit = x%10; 12 printf("%d", digit); 13 ret = ret*10 + digit; 14 // printf("x=%d,digit=%d,ret=%d ", x, digit, ret); 15 x /= 10; 16 } 17 // printf("%d", ret); 18 19 return 0; 20 }
2.5 整数分解
输入:
1200
输出:
0 0 1 2
#include <stdio.h> int main() { int x; scanf("%d", &x); int mask = 1; int t = x; while ( t>9 ) { t /= 10; mask *=10; } printf("x=%d, mask=%d ", x, mask); do { int d = x / mask; printf("%d", d); if ( mask > 9 ) { printf(" "); } x %= mask; mask /= 10; } while ( mask > 0 ); printf(" "); return 0; }
2.6 求最大公约数
2.6.1 枚举法
1 #include <stdio.h> 2 3 int main() 4 { 5 int a,b; 6 int min; 7 8 scanf("%d %d", &a, &b); 9 if ( a<b ) { 10 min = a; 11 } else { 12 min = b; 13 } 14 int ret = 0; 15 int i; 16 for ( i = 1; i < min; i++ ) { 17 if ( a%i == 0 ) { 18 if ( b%i == 0 ) { 19 ret = i; 20 } 21 } 22 } 23 printf("%d和%d的最大公约数是%d. ", a, b, ret); 24 25 return 0; 26 }
2.6.2 辗转相除法
1 #include <stdio.h> 2 3 int main() 4 { 5 int a,b; 6 int t; 7 8 scanf("%d %d", &a, &b); 9 int origa = a; 10 int origb = b; 11 while ( b != 0 ) { 12 t = a%b; 13 a = b; 14 b = t; 15 } 16 printf("%d和%d的最大公约数是%d. ", origa, origb, a); 17 18 return 0; 19 }
2.7 分式求和
#include <stdio.h> int main() { int n; int i; double ret=0.0; scanf("%d", &n); for ( i=1; i<=n; i++ ) { ret += 1.0/i; } printf("%f ", ret); return 0; }
#include <stdio.h> int main() { int n; int i; double ret=0.0; int sign = 1; scanf("%d", &n); for ( i=1; i<=n; i++ ) { ret += 1.0*sign/i; sign = -sign; } printf("%f ", ret); return 0; }
sum+=1.0/i; 除号两边,1.0是浮点数,整形的i也会变成浮点数。
3 break,continue
1
以下代码段的输出是:
int sum = 0;
for ( int i=0; i<10; i++ ) {
if ( i%2 ) continue;
sum += i;
}
printf("%d
", sum);
正确答案:20
2
以下代码段的输出是:
int sum = 0;
for ( int i=0; i<10; i++ ) {
if ( i%2 ) break;
sum += i;
}
printf("%d ", sum);
int sum = 0;
for ( int i=0; i<10; i++ ) {
if ( i%2 ) break;
sum += i;
}
printf("%d ", sum);
正确答案:0
参考资料
程序设计入门——C语言_浙江大学_中国大学MOOC(慕课) http://www.icourse163.org/course/ZJU-199001
UVA 10100Longest Match
UVA 147Dollars
归并排序模板
找礼物(find)
水流(water)dfs
细菌(disease) 位运算
单词接龙
关于jquery的each遍历,return只终止当前循环,不好使的解决办法
jquery中ajax回调函数使用this