- 表格形式输出数据
#includeint main() { for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { printf("%d ", i + j*10+1); } printf("n"); } return 0; }
2. 简易计算器
#define _CRT_SECURE_NO_WARNINGS//vs中认为scanf不安全,解决报错 #includeint main() { char c; double n1, n2; while (1) { printf("输入运算符n"); scanf("%c", &c); while ((m = getchar()) != 'n') { continue; } printf("输入两个数n"); scanf("%lf %lf", &n1, &n2); while ((m = getchar()) != 'n') { continue; } switch (c) { case '+': printf("%lfn", n1 + n2); break; case '-': printf("%lfn", n1 - n2); break; case '*': printf("%lfn", n1 * n2); break; case '/': if (n2 != 0) printf("%lfn", n1 / n2); else printf("除数不能为0n"); break; default: break; } } return 0; }
3. 一个数是否为2个素数之和
#define _CRT_SECURE_NO_WARNINGS//scanf报错 #include#include //导入bool #include //导入sqrt bool sushu(int num); int main() { int num; while (1) { scanf("%d", &num); int flag = 0; for (int i = 1; i <= num / 2; i++) { if (sushu(i) && sushu(num - i)) { printf("%d=%d+%dn", num, i, num - i); flag = 1; break; } } if (!flag) printf("%d不为两个素数之和n", num); } return 0; } //判断是否为素数 bool sushu(int num) { //aqrt参数类型为double int m = sqrt((double)num); for (int i = 2; i <= m; i++) { if (num % i == 0) return false; } return true; }
4. 二进制与十进制相互转换
#define _CRT_SECURE_NO_WARNINGS #includeint bin(char s[]); int pow(int k); char* dec(int num); int main() { int m,num; char s[20] = {' '}; char *p,c; while (1) { printf("输入2进行二进制转十进制,输入10进行十进制转二进制n"); scanf("%d", &m); //去缓存 while ((c = getchar()) != 'n') continue; switch (m) { case 2: printf("输入二进制数n"); scanf("%s", s); while ((c = getchar()) != 'n') continue; num=bin(s); printf("%dn", num); break; case 10: printf("输入十进制数n"); scanf("%d", &num); while ((c = getchar()) != 'n') continue; p = dec(num); for (int i = 0; i < 15; i++) { printf("%c", *p); p++; } printf("n"); break; default: break; } } return 0; } //二进制转十进制 int bin(char s[]) { int len = 0,num=0; for (int i = 0; i < 20; i++) { if (s[i] != ' ') len++; } for (int i = len - 1; i >= 0; i--) { num += (s[i] - '0') * pow(len - i - 1); } return num; } //十进制转二进制 char* dec(int num) { //c语言不乐意让你返回局部变量地址,用static static char s[15] = { ' ' }; int nu[15],k=0; for (int i = 0; i < 15; i++) { nu[i] = pow(i); } for (int i = 0; i < 15; i++) { if (num < nu[15 - i - 1]) { s[i] = '0'; } else { s[i] = '1'; num -= nu[15 - i - 1]; } } return s; } //计算2的k次方 int pow(int k) { int num = 1; for (int i = 1; i <= k; i++) { num *= 2; } return num; }
5. 八进制与十进制相互转换
#define _CRT_SECURE_NO_WARNINGS #includeint oct(char s[]); int pow(int k); char* dec(int num); int main() { int m, num; char s[20] = { ' ' }; char* p, c; while (1) { printf("输入8进行八进制转十进制,输入10进行十进制转八进制n"); scanf("%d", &m); while ((c = getchar()) != 'n') continue; switch (m) { case 8: printf("输入八进制数n"); scanf("%s", s); while ((c = getchar()) != 'n') continue; num = oct(s); printf("%dn", num); break; case 10: printf("输入十进制数n"); scanf("%d", &num); while ((c = getchar()) != 'n') continue; p = dec(num); for (int i = 0; i < 10; i++) { printf("%c", *p); p++; } printf("n"); break; default: break; } } return 0; } //八进制转十进制 int oct(char s[]) { int len = 0, num = 0; for (int i = 0; i < 20; i++) { if (s[i] != ' ') len++; } for (int i = len - 1; i >= 0; i--) { num += (s[i] - '0') * pow(len - i - 1); } return num; } //十进制转八进制,原理同二进制 char* dec(int num) { static char s[10] = { ' ' }; int nu[10], k = 0; //8的10次方已经是int范围内的最大值,再大就越界了,,不想不会处理越界 for (int i = 0; i < 10; i++) { nu[i] = pow(i); } for (int i = 0; i < 10; i++) { if (num < nu[10 - i - 1]) { s[i] = '0'; } else { s[i] =num/ nu[10 - i - 1] + '0'; num -= num / nu[10 - i - 1] * nu[10 - i - 1]; } } return s; } //8的k次方 int pow(int k) { int num = 1; for (int i = 1; i <= k; i++) { num *= 8; } return num; }
6. 求数组平均数
#define _CRT_SECURE_NO_WARNINGS #includeint main() { int sum=0,len=0,m; printf("输入任意个数字n"); //sanf返回读取到的元素个数,但是%d读不到换行符 while (scanf("%d", &m)) { s[i] = m; i++; if (getchar() == 'n') break; } for (int j = 0; j < 20; j++) { //数组多余值都为0 sum += s[j]; } printf("%lfn", (double)sum / i); return 0; }
7. 输出数组
#define _CRT_SECURE_NO_WARNINGS #includeint main() { int num[20] = { 0 }, m; int k = 0; while (scanf("%d", &m)) { num[k] = m; k++; if (getchar() == 'n') break; } for (int i = 0; i < k; i++) { printf("%d ", num[i]); } printf("n"); return 0; }
- 数组最大值
#define _CRT_SECURE_NO_WARNINGS #includeint main() { int num[20] = { 0 }, m; int k = 0,max=-1000000000; while (scanf("%d", &m)) { num[k] = m; k++; if (getchar() == 'n') break; } for (int i = 0; i < k; i++) { if (max < num[i]) max = num[i]; } printf("最大值为%dn",max); return 0; }
- 数组最小值
#define _CRT_SECURE_NO_WARNINGS #includeint main() { int num[20] = { 0 }, m; int k = 0, min = 1000000000; while (scanf("%d", &m)) { num[k] = m; k++; if (getchar() == 'n') break; } for (int i = 0; i < k; i++) { if (min > num[i]) min = num[i]; } printf("最小值为%dn", min); return 0; }
- 数组拆分合并
#define _CRT_SECURE_NO_WARNINGS #includevoid Split(int num[], int odd[], int even[], int k); void display(int array[],int len); void Merge(int odd[], int even[], int num_merge[]); int main() { int num[20] , m; int k = 0; int odd[20], even[20]; int num_merge[20]; while (scanf("%d", &m)) { num[k] = m; k++; if (getchar() == 'n') break; } Split(num, odd, even, k); Merge(odd, even, num_merge); display(odd,sizeof(odd)/sizeof(m)); display(even, sizeof(even) / sizeof(m)); display(num_merge, sizeof(num_merge) / sizeof(m)); return 0; } //拆分数组 void Split(int num[], int odd[], int even[],int k) { int m = 0, n = 0; for (int i = 0; i < k; i++) { if (num[i] % 2 == 0) { even[m] = num[i]; m++; } else { //0也是偶数 odd[n] = num[i]; n++; } } } //输出数组 void display(int array[],int len) { //数组作为参数时,传递进来的是地址,此时sizeof为地址的大小8字节 for (int i = 0; i < len; i++) { if(array[i] != -858993460) printf("%d ", array[i]); } printf("n"); } //合并数组 void Merge(int odd[], int even[],int num_merge[]) { int k=0; for (int i = 0; i < 20; i++) { //未初始化的int数组未赋值的部分值都为-858993460,不知道是不是都这样 if (odd[i] != -858993460) { k++; num_merge[i] = odd[i]; } else break; } for (int j = 0; j < 20; j++) { if (even[j] != -858993460) num_merge[k + j] = even[j]; else break; } }
- 拷贝数组
#includevoid display(int num[]); int main() { int num[10] = {1,2,3,4,5,6,7,8,9,10}; int num_copy[10]; //不能数组赋值给数组,只能逐个赋值 for (int i = 0; i < 10; i++) { num_copy[i] = num[i]; } display(num_copy); return 0; } void display(int num[]) { for (int i = 0; i < 10; i++) { printf("%d ", num[i]); } printf("n"); }
- 标准差
#include#include double pfc(double m, int n); int main() { int num[10] = { 1,2,3,4,5,6,7,8,9,10 }; int sum = 0; double ave,sum2=0; for (int i = 0; i < 10; i++) { sum+=num[i]; } ave = (double)sum / 10; for (int i = 0; i < 10; i++) { sum2 += pfc(ave, num[i]); } printf("%lfn", sqrt(sum2 / 10)); return 0; } //差的平方 double pfc(double m, int n) { return (m-n)*(m-n); }
- 矩阵相加
#includevoid init(int array[][5]); void display(int array[][5]); void add(int array1[][5], int array2[][5], int array[][5]); int main() { int array1[5][5], array2[5][5],array[5][5]; init(array1); init(array2); display(array1); display(array2); add(array1, array2, array); display(array); return 0; } //二维数组可以以a[5][5]或a[][5]的形式传递,不能是a[][] void init(int array[][5]) { for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) array[i][j] = j + 1; } } void display(int array[][5]) { for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) printf("%d ", array[i][j]); printf("n"); } printf("n"); } void add(int array1[][5], int array2[][5], int array[][5]) { for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) array[i][j] = array1[i][j] + array2[i][j]; } }
- 矩阵行列互换
#includevoid init(int array[][4]); void display(int array[][4],int m,int n); void translate(int ans[4][5], int array[5][4]); int main() { int array[5][4],ans[4][5]; init(array); display(array,5,4); translate(ans, array); for (int i = 0; i < 4; i++) { for (int j = 0; j < 5; j++) printf("%d ", ans[i][j]); printf("n"); } return 0; } void init(int array[][4]) { for (int i = 0; i < 5; i++) { for (int j = 0; j < 4; j++) array[i][j] = j + 1; } } //数组维度不同,必须要传列数,[]内又无法用变量,无法输出两个不同维度数组 void display(int array[][4] , int m ,int n) { for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) printf("%d ", array[i][j]); printf("n"); } printf("n"); } void translate(int ans[4][5], int array[5][4]) { for (int i = 0; i < 5; i++) { for (int j = 0; j < 4; j++) ans[j][i] = array[i][j]; } }
- 指针访问数组
#includeint main() { int a[5] = { 1,2,3,4,5 }; for (int i = 0; i < 5; i++) printf("%d ", *(a + i)); return 0; }
- 引用交换数值
#includevoid swap(int* m, int* n); int main() { int m = 4, n = 5; printf("交换前 %d %dn", m, n); swap(&m , &n); printf("交换后 %d %d", m, n); return 0; } void swap(int* m, int* n) { int temp; temp = *m; *m = *n; *n = temp; }
- 指针数组
#include#include int main() { int *p[5]={1,2,3,4,5}; for (int i = 0; i < 5; i++) { printf("%d ", *(p + i)); } printf("n"); int* num = (int*)calloc(5, 4); for (int i = 0; i < 5; i++) { printf("%d ", *(num + i)); } printf("n"); for (int i = 0; i < 5; i++) { *(num + i) = i + 1; } for (int i = 0; i < 5; i++) { printf("%d ", *(num + i)); } printf("n"); free(num); return 0; }
- 删除字符串中特殊字符
#define _CRT_SECURE_NO_WARNINGS #includeint main() { char num[20] , m; int k = 0; //可以直接scanf("%s",num);要另外算长度k,为理解缓冲区 while (scanf("%c", &m)) { if (m != 'n') { num[k] = m; k++; } else break; } for (int i = 0; i < k; ) { if (!(num[i] >= 'a' && num[i] <= 'z' || num[i] >= 'A' && num[i] <= 'Z')) { for (int j = i; j < k; j++) { num[j] = num[j + 1]; } num[k] = 'n'; k--; } else { i++; } } for (int i = 0; i < k; i++) { printf("%c ", num[i]); } return 0; }
- 字符在字符串中出现的次数
#define _CRT_SECURE_NO_WARNINGS #includeint main() { char num[20], m; int k = 0, count = 0;; //可以直接scanf("%s",num);要另外算长度k,为理解缓冲区 while (scanf("%c", &m)) { if (m != 'n') { num[k] = m; k++; } else break; } printf("输入要查找的字符n"); scanf("%c", &m); for (int i = 0; i < k; i++) { if (num[i] == m) { count++; } } printf("出现次数 %dn", count); return 0; }
- 字符串写入文件
#define _CRT_SECURE_NO_WARNINGS #include#include int main() { char sentence[1000]; FILE* fptr; fptr = fopen("m.txt", "w"); if (fptr == NULL) { printf("Error!"); exit(1); } printf("输入字符串:n"); fgets(sentence, (sizeof sentence / sizeof sentence[0]), stdin); fprintf(fptr, "%s", sentence); fclose(fptr); return 0; }
- 从文件中读取一行
#define _CRT_SECURE_NO_WARNINGS #include#include // exit() 函数 int main() { char c[1000]; FILE* fptr; if ((fptr = fopen("m.txt", "r")) == NULL) { printf("Error! opening file"); // 文件指针返回 NULL 则退出 exit(1); } // 读取文本,直到碰到新的一行开始 fscanf(fptr, "%[^n]", c); printf("读取内容:n%s", c); fclose(fptr); return 0; }
- 输出当前文件
#define _CRT_SECURE_NO_WARNINGS #includeint main() { FILE* fp; char c; fp = fopen(__FILE__, "r"); do { c = getc(fp); putchar(c); } while (c != EOF); fclose(fp); return 0; }



