|
【期末複習】C語言期末複習 |
一派護法 十九級 |
【8】 #include <stdio.h>
void main() { int i, j; for (i = 1; i <= 9; i++) { for (j = 1; j <= 9 - i; j++) printf(" "); for (; j <= 9; j++) printf("%d*%d=%-2d ", i, j, i * j); putchar('\n'); } } 特別注意在%-2d後有一個空格,減號表示靠左顯示。
|
一派護法 十九級 |
減號靠左顯示可以按如下方法記憶: -+ 左右
|
一派護法 十九級 |
【第7題和第8題一模一樣】 寫的時候注意printf("%d*%d=%-2d ", i, j, i * j);一定要把最後三個參數寫全,不要疏忽大意寫成了:printf("%d*%d=%-2d ", i * j);導致不必要的丟分。
|
一派護法 十九級 |
【6】 #include <stdio.h>
void main() { int i, j; for (i = 1; i <= 9; i++) { for (j = 1; j < i; j++) printf(" "); for (; j <= 9; j++) printf("%d*%d=%-2d ", i, j, i * j); putchar('\n'); } }
|
一派護法 十九級 |
【5】 #include <stdio.h>
void main() { int i, j; for (i = 1; i <= 9; i++) { for (j = 1; j <= i; j++) printf("%d*%d=%-2d ", i, j, i * j); putchar('\n'); } }
|
一派護法 十九級 |
【4】 #include <stdio.h>
void main() { int y, m, d; int sum = 0; int month; int leap = 0; scanf("%d%d%d", &y, &m, &d); if (y % 100 == 0 && y % 400 == 0) leap = 1; if (y % 100 != 0 && y % 4 == 0) leap = 1; for (month = 1; month <= m - 1; month++) { switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: sum += 31; break; case 2: if (leap) sum += 29; else sum += 28; break; default: sum += 30; } } sum += d; printf("第%d天\n", sum); }
|
一派護法 十九級 |
最后还剩下第2题和第3题。
|
一派護法 十九級 |
今天接着复习。
|
一派護法 十九級 |
【2】 #include <stdio.h>
void main2() { long int i, bonus; scanf("%ld", &i); if (i <= 100000) bonus = i * 0.1; else if (i <= 200000) bonus = 0.1 * 100000 + 0.075 * (i - 100000); else if (i <= 400000) bonus = 0.05 * (i - 200000); else if (i <= 600000) bonus = 0.03 * (i - 400000); else if (i <= 1000000) bonus = 0.015 * (i - 600000); else bonus = 0.01 * (i - 1000000); printf("%d\n", bonus); } 【3】 #include <stdio.h> #include <math.h>
void main() { long int i, j; for (i = 0; i < 100000; i++) { j = sqrt(i + 100); if (j * j == i + 100) { j = sqrt(i + 268); if (j * j == i + 268) printf("%ld\n", i); } } }
|
一派護法 十九級 |
特别注意,在输出long int的时候要写%ld,而不是%d,这个特别容易出错。
|
一派護法 十九級 |
第三章复习完毕。 接下来是,第五章。
|
一派護法 十九級 |
|
一派護法 十九級 |
|
一派護法 十九級 |
求最大公因数时,只需记住m=n, n=r就行。
|
一派護法 十九級 |
// the least common multiple int lcm(int m, int n) { return m * n / gcf(m, n); }
// the greatest common factor int gcf(int m, int n) { int r; do { r = m % n; m = n; n = r; } while (r != 0); return m; }
|
一派護法 十九級 |
【1】 #include <stdio.h>
int gcf(int m, int n) { int r; do { r = m % n; m = n; n = r; } while (n != 0); return m; }
int lcm(int m, int n) { return m * n / gcf(m, n); }
void main() { int m, n; scanf("%d%d", &m, &n); printf("%d\n", lcm(m, n)); }
|
一派護法 十九級 |
【2】 #include <stdio.h> #define N 4
void convert(int A[][N]) { int i, j, temp; for (i = 0; i < N - 1; i++) { for (j = i + 1; j < N; j++) { temp = A[i][j]; A[i][j] = A[j][i]; A[j][i] = temp; } } }
void main() { int i, j; int A[][N] = {{1, 2, 3, 4}, {3, 4, 5, 6}, {5, 6, 6, 7}, {7, 8, 9, 0}}; for (i = 0; i < N; i++) { for (j = 0; j < N; j++) printf("%d ", A[i][j]); printf("\n"); } printf("\n"); convert(A); for (i = 0; i < N; i++) { for (j = 0; j < N; j++) printf("%d ", A[i][j]); printf("\n"); } }
|
一派護法 十九級 |
【3】 #include <stdio.h> #define N 100
int filter(int a[], int n, int b[]) { int i, j; double ave = 0.0; for (i = 0; i < n; i++) ave += a[i]; ave /= n; j = 0; for (i = 0; i < n; i++) { if (a[i] > ave) b[j++] = a[i]; } return j; }
void main() { int i, n, a[N], b[N], count; scanf("%d", &n); for (i = 0; i < n; i++) scanf("%d", &a[i]); count = filter(a, n, b); for (i = 0; i < count; i++) { printf("%-5d", b[i]); if ((i + 1) % 5 == 0) printf("\n"); } printf("\n"); }
|
一派護法 十九級 |
【4】 #include <stdio.h> #define N 10
int sum(int n) { return (n / 100 + n % 100 / 10 + n % 10); }
void main() { int a[N]; int i, count = 0; for (i = 0; i < N; i++) { scanf("%d", &a[i]); if (sum(a[i]) == 5) count++; } printf("%d\n", count); }
|
一派護法 十九級 |
【5】 #include <stdio.h>
int fact(n) { if (n == 1 || n == 0) return 1; else return n * fact(n - 1); }
void main() { int x, a; scanf("%d", &x); a = fact(x); printf("%d\n", a); }
注意要考虑0!
|
一派護法 十九級 |
【6】 #include <stdio.h>
int str2int(char *str) { int n = 0; while (*str != '\0') { if (*str >= '0' && *str <= '9') n = n * 10 + (*str - '0'); str++; } return n; }
void main() { char str[50]; int n; gets(str); n = str2int(str); printf("%d\n", n); }
|
一派護法 十九級 |
【7】 #include <stdio.h>
void _strcpy(char *target, char *src) { while (*src != '\0') *target++ = *src++; *target = '\0'; // 这句话非常重要 }
void main() { char str[256]; char str2[256]/* = "there is a key, there is a hat"*/; gets(str); _strcpy(str2, str); puts(str2); }
|
一派護法 十九級 |
【8】 #include <stdio.h> #include <string.h>
char *getFileExtName(char *filename) { int len = strlen(filename); int i; for (i = len - 1; i >= 0; i--) // 注意是i>=0,不是i>0 { if (filename[i] == '.') return filename + i + 1; } return filename + len; // 获取最后一个\0的位置,无需加1 }
void main() { char filename[100]; gets(filename); printf("Extension: %s\n", getFileExtName(filename)); }
|
一派護法 十九級 |
【9】 #include <stdio.h>
int _strcmp(char *str1, char *str2) { while (*str1 == *str2 && *str1 != '\0' && *str2 != '\0') { str1++; str2++; } if (*str1 > *str2) return 1; else if (*str1 < *str2) return -1; else return 0; }
void main() { char str1[100]; char str2[100]; int rs; gets(str1); gets(str2); rs = _strcmp(str1, str2); if (rs == 1) printf("str1 > str2\n"); else if (rs == -1) printf("str1 < str2\n"); else if (rs == 0) printf("str1 == str2\n"); }
|
一派護法 十九級 |
【10】 #include <stdio.h>
void draw(int level) { int i, j; for (i = 0; i < level; i++) { for (j = 0; j < level - 1 - i; j++) putchar(' '); for (j = 0; j < 2 * i + 1; j++) putchar('*'); putchar('\n'); } }
void main() { int i; scanf("%d", &i); draw(i); }
|
一派護法 十九級 |
【11】 #include <stdio.h>
int prime(int a[]) { int count = 0, i, j; int flag; for (i = 2; i < 1000; i++) // 必须以2开头 { flag = 1; for (j = 2; j < i; j++) { if (i % j == 0) { flag = 0; break; // 注意break无法跳出两层循环,所以只能设置flag } } if (flag == 1) a[count++] = i; } return count; }
void main() { int a[1000]; int i; int count = prime(a); printf("共有%d个素数。\n", count); for (i = 0; i < count; i++) { printf("%4d", a[i]); if ((i + 1) % 10 == 0) printf("\n"); } }
|
一派護法 十九級 |
也可以不设置flag,直接判断内层循环结束后i是否等于j就行: int prime(int a[]) { int count = 0, i, j; for (i = 2; i < 1000; i++) // 必须以2开头 { for (j = 2; j < i; j++) { if (i % j == 0) break; } if (i == j) a[count++] = i; } return count; }
|
一派護法 十九級 |
【12】 #include <stdio.h>
double H(int n, double x) { switch (n) { case 0: return 1; case 1: return 2 * x; default: return 2 * x * H(n - 1, x) - 2 * (n - 1) * H(n - 2, x); } }
void main() { int n; double x; scanf("%d%f", &n, &x); printf("%.2f", H(n, x)); }
|
一派護法 十九級 |
【13】 #include <stdio.h>
int fibon(int n) { switch (n) { case 0: case 1: return n; default: return fibon(n - 1) + fibon(n - 2); } }
void main() { int n; scanf("%d", &n); printf("fn = %d\n", fibon(n)); }
|
一派護法 十九級 |
【14】 #include <stdio.h>
int narcis(int m[]) { int i, count = 0; int a, b, c; for (i = 100; i <= 999; i++) { a = i / 100; b = i % 100 / 10; c = i % 10; if (a * a * a + b * b * b + c * c * c == i) m[count++] = i; } return count; }
void main() { int m[1000]; int i; int count = narcis(m); for (i = 0; i < count; i++) { printf("%4d", m[i]); if ((i + 1) % 5 == 0) putchar('\n'); } putchar('\n'); }
|