|
【期末複習】C語言期末複習 |
一派护法 十九级 |
【冒泡排序法】 #include <stdio.h> #include <stdlib.h>
int main() { int i, j, n, temp, *nums; scanf("%d", &n); nums = (int *)calloc(n, sizeof(int)); for (i = 0; i < n; i++) scanf("%d", nums + i); for (i = 1; i <= n - 1; i++) // 大循環:[1, n-1],共比較n-1輪,特別注意這裡是1開頭 { for (j = 0; j < n - i; j++) // 小循環:[0, n-i),每輪進行n-i次 { if (nums[j] < nums[j + 1]) // 這裡寫<是從大到小, >是從小到大 { temp = nums[j]; nums[j] = nums[j + 1]; nums[j + 1] = temp; } } } for (i = 0; i < n; i++) printf("%d ", nums[i]); putchar('\n'); free(nums); return 0; }
|
一派护法 十九级 |
#include <stdio.h> #define N 10 void fun(int *nums) { int cnt, num; for (cnt = 0, num = 0; cnt < 10; num++) { if (num % 2 == 1 && num % 3 == 1 && num % 5 == 1) { nums[cnt] = num; cnt++; } } } int main() { int i; int nums[N]; FILE *fp; if ((fp = fopen("tmp.txt", "w")) == NULL) { printf("文件打不開!\n"); return 1; } fun(nums); for (i = 0; i < N; i++) { printf("%d ", nums[i]); fprintf(fp, "%d ", nums[i]); } fclose(fp); return 0; } /*void fun(int *nums) { int i, num = 0; for (i = 0; i < N; num++) { if (num % 2 == 1 && num % 3 == 1 && num % 5 == 1) { nums[i] = num; i++; } } }*/ 编写中出现的错误:3处 以后练习时要尽量做到写一次就编译通过且正常运行。因为考试时根本无法在电脑上实际调试。
|
一派护法 十九级 |
【冒泡排序法复习】 #include <stdio.h> #include <stdlib.h>
int main() { int *nums, n, i, j, temp; scanf("%d", &n); nums = (int *)calloc(n, sizeof(int)); for (i = 0; i < n; i++) scanf("%d", nums + i); for (i = 1; i <= n - 1; i++) { for (j = 0; j < n - i; j++) { if (nums[j] > nums[j + 1]) { temp = nums[j]; nums[j] = nums[j + 1]; nums[j + 1] = temp; } } } for (i = 0; i < n; i++) printf("%d ", nums[i]); free(nums); return 0; }
|
一派护法 十九级 |
【冒泡排序法复习】 #include <stdio.h> #include <stdlib.h> int main() {...
错误1:最后忘了putchar('\n')!!!!!!!!!! 错误2:之前忘了 int *nums, n, i, j, temp;最后的 分号
|
一派护法 十九级 |
#include <stdio.h>
int main() { char s1[20] = "成都"; char *s2 = "大学"; int i; for (i = 0; s1[i] != '\0'; i++); while (*s2 != '\0') s1[i++] = *s2++; s1[i] = '\0'; puts(s1); return 0; } 存在的错误:忘了最后的s1[i] = '\0';
|
一派护法 十九级 |
Both *p++ and (*p)++ return the current value of *p. But *p++ increases the pointer while (*p)++ makes the value incremented.
|
一派护法 十九级 |
#include <stdio.h>
int main() { int a[3][4]; int b[4][3]; int i, j; for (i = 0; i < 3; i++) { for (j = 0; j < 4; j++) { scanf("%d", *(a + i) + j); b[j][i] = a[i][j]; } } for (i = 0; i < 4; i++) { for (j = 0; j < 3; j++) printf("%4d", b[i][j]); putchar('\n'); } return 0; }
|
一派护法 十九级 |
#include <stdio.h> #include <string.h>
int main() { char strs[10][100]; int i; int max_i = 0; for (i = 0; i < 10; i++) gets(strs[i]); for (i = 1; i < 10; i++) { if (strcmp(strs[max_i], strs[i]) < 0) max_i = i; } printf("最大的串是:%s\n", strs[max_i]); return 0; }
|
一派护法 十九级 |
#include <stdio.h>
int main() { int nums[3][4]; int i, j; for (i = 0; i < 2; i++) for (j = 0; j < 4; j++) scanf("%d", &nums[i][j]); for (j = 0; j < 4; j++) nums[2][j] = nums[0][j] + nums[1][j]; for (i = 0; i < 3; i++) { for (j = 0; j < 4; j++) printf("%4d", nums[i][j]); putchar('\n'); } return 0; }
|
一派护法 十九级 |
#include <stdio.h> #include <string.h>
int main() { char str[21]; int i, len; int flag = 0; gets(str); len = strlen(str); for (i = 0; i < len - i - 1; i++) { if (str[i] != str[len - i - 1]) { flag = 1; break; } } if (flag == 1) puts("不構成回文\n"); else puts("構成回文\n"); return 0; }
|
一派护法 十九级 |
for (i = 0; i < len - i - 1; i++)也可以寫成 for (i = 0; i < len / 2; i++)
|
一派护法 十九级 |
【選擇法排序字符串】 #include <stdio.h> #include <string.h>
#define N 10
int main() { char strs[N][100]; char *sorted[N], *temp; // 注意,這裡的temp是char *型,不再是int類型了 int i, j, max_j; for (i = 0; i < N; i++) { gets(strs[i]); sorted[i] = strs[i]; } for (i = 0; i < N - 1; i++) { max_j = i + 1; for (j = i + 2; j < N; j++) if (strcmp(sorted[max_j], sorted[j]) > 0) //// 這兩個運算符決定是升序還是降序排列 max_j = j; if (strcmp(sorted[i], sorted[max_j]) > 0) /// { temp = sorted[i]; sorted[i] = sorted[max_j]; sorted[max_j] = temp; } } puts("\nResult: "); // 用了puts的話末尾就不要加\n for (i = 0; i < N; i++) puts(sorted[i]); return 0; }
|
一派护法 十九级 |
#include <stdio.h>
int main() { int nums[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int key, i, len, flag = 0; scanf("%d", &key); len = sizeof(nums) / sizeof(int); for (i = 0; i < len / 2; i++) { if (nums[i] == key || nums[len - i - 1] == key) { flag = 1; break; } } if (flag) puts("found"); else puts("not found"); return 0; }
|
一派护法 十九级 |
#include <stdio.h> #define N 50
int main() { char str[N]; char digital[N]; int i; int j = 0; gets(str); for (i = 0; i < N; i++) if (str[i] >= '0' && str[i] <= '9') digital[j++] = str[i]; for (i = 0; i < j; i++) printf("%c ", digital[i]); // 注意這裡是digital[i],不是[j],不要寫錯了 putchar('\0'); return 0; }
|
一派护法 十九级 |
#include <stdio.h> #include <string.h>
int main() { char password[13]; int i, pass = 0; for (i = 0; i < 3; i++) { printf("請輸入密碼:"); gets(password); if (strcmp(password, "admin") == 0) { pass = 1; break; } } if (!pass) puts("sorry"); return 0; }
|
一派护法 十九级 |
#include <stdio.h> #include <string.h>
int main() { int minlen = -1; int min_i; int i, len; char name[15][20]; for (i = 0; i < 15; i++) { gets(name[i]); len = strlen(name[i]); if (minlen == -1 || minlen > len) { minlen = len; min_i = i; } } printf("名字最短的學生是:%s\n", name[min_i]); return 0; }
|
一派护法 十九级 |
#include <stdio.h>
int main() { int nums[3][4] = {7, 8, 9, 10, 11, 52, 76, 38, 34, 55, 2, 1}; int i, j, r, c, max; max = nums[0][0]; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { if (max < nums[i][j]) { max = nums[i][j]; r = i; c = j; } } } printf("nums[%d][%d] = %d\n", r, c, max); return 0; }
|
一派护法 十九级 |
#include <stdio.h>
int main() { char str[100]; char ch; int i; printf("請輸入字符串:"); gets(str); printf("請輸入字符:"); ch = getchar(); for (i = 0; str[i] != '\0'; i++) { if (str[i] == ch) break; } if (str[i] != '\0') { for (; str[i + 1] != '\0'; i++) str[i] = str[i + 1]; str[i] = '\0'; } puts(str); return 0; }
|
一派护法 十九级 |
#include <stdio.h>
int main() { int a[4][4] = {{1}, {6, 1}, {8, 7, 1}, {9, 5, 3, 1}}; int i, j; for (i = 0; i <= 2; i++) for (j = 1; j <= 3; j++) a[i][j] = a[j][i]; for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) printf("%d ", a[i][j]); putchar('\n'); } return 0; }
|
一派护法 十九级 |
第4章已全部复习完!
|
一派护法 十九级 |
现在开始复习第3章。 已看完第15题(最后一题),现在开始从第一题看起。
|
一派护法 十九级 |
【1】 #include <stdio.h>
int main() { int i, j, k; int count = 0; for (i = 1; i <= 4; i++) { for (j = 1; j <= 4; j++) { for (k = 1; k <= 4; k++) { if (i != j && i != k && j != k) { printf("%d ", i * 100 + j * 10 + k); count++; } } } } printf("\n共有%d个数\n", count); return 0; }
|
一派护法 十九级 |
【9】 #include <stdio.h>
void main() { int i, j; for (i = 0; i < 8; i++) { for (j = 0; j < 8; j++) { if ((i + j) % 2 == 0) printf("%c%c", 0xa1, 0xf6); else printf(" "); } putchar('\n'); // 注意每一行的回车符不要忘了 } }
|
一派护法 十九级 |
【10】 #include <stdio.h>
void main() { int i = 0, j = 0; while (i < 8) { j = 0; while (j < 8) { if ((i + j) % 2 == 0) printf("%c%c", 0xa1, 0xf6); else printf(" "); j++; } putchar('\n'); // 注意每一行的回车符不要忘了 i++; } }
|
一派护法 十九级 |
【11】 #include <stdio.h>
void main() { int i = 0, j = 0; do { j = 0; do { if ((i + j) % 2 == 0) printf("%c%c", 0xa1, 0xf6); else printf(" "); j++; } while (j < 8); putchar('\n'); // 注意每一行的回车符不要忘了 i++; } while (i < 8); }
|
一派护法 十九级 |
【12】 #include <stdio.h>
void main() { long f1, f2; int i; f1 = f2 = 1; for (i = 0; i < 20; i++) { printf("%12ld %12ld", f1, f2); if (i % 2 == 1) // 注意换行的条件是余数等于1! putchar('\n'); f1 = f1 + f2; f2 = f1 + f2; } }
|
一派护法 十九级 |
【13】 #include <stdio.h>
void main() { int a, n, i, j; long int num, sum; printf("please input a and n\n"); scanf("%d,%d", &a, &n); printf("a=%d,n=%d\n", a, n); sum = 0; i = 1; while (i <= n) { num = 0; j = 1; while (j <= i) // 特别注意这里是<=i,不是n { num = num * 10 + a; j++; } sum += num; i++; } printf("a+aa+...=%ld\n", sum); }
|
一派护法 十九级 |
【14】 #include <stdio.h> #define N 10
void main() { double height = 100.0; double length = height; // 第一次落地時,距離就等於其高度 int i = 1; // i嚴格代表落地次數 while (i <= N) { if (i >= 2) length += height * 2; // 第二次及以上落地時,加上反彈高度乘2 height /= 2.0; i++; } printf("the total of road is %f\n", length); printf("the tenth is %f meter\n", height); }
|
一派护法 十九级 |
【14】 #include <stdio.h> #define N 10 void main() {...
注意,最後是%f不再是%d,這個特別容易疏忽而導致扣分
|
一派护法 十九级 |
接下來是第2~8題。
|