C语言必会100题(18)。两个字符串连接程序/回答结果/读取7个数,打印*/公司加密数据/读结果
特此鸣谢:鱼C_小甲鱼(B站up主)不二如是(鱼C论坛大佬)
题目来源:https://fishc.com.cn
注:这些题在网上都可以搜到,题下面的代码大多是流传下来的答案(我重新排了一下版,增加了可读性),部分是本人经过深思熟虑后编写的。
86,两个字符串连接程序
- 题目:两个字符串连接程序
- 程序源代码:
- 第一种解:
#include <stdio.h> #include <string.h> int main(void) { char a[]="abc";//同char a[]={"abc"},用字符串常量来使字符数组初始化 char b[]="def"; char c[80], *p; int i = 0, j = 0, k = 0; while(a[i] != '\0' && b[j] != '\0') { if(a[i]) { c[k] = a[i]; i++; } else c[k] = b[j++]; k++; } c[k] = '\0'; if(a[i] == '\0') p = b + j; else p = a + i; strcat(c,p); puts(c); return 0; }
- 第二种解:
// 漫天过海法 #include <stdio.h> int main(void) { char a[10], b[10]; char ch; int i = 0; printf("请输入一个字符串:\n"); while ((ch = getchar()) != '\n') { a[i] = ch; i++; } int count_1 = i; printf("请再输入一个字符串:\n"); i = 0; while ((ch = getchar()) != '\n') { b[i] = ch; i++; } int count_2 = i; for (i = 0; i < count_1; i++) { printf("%c", a[i]); } for (i = 0; i < count_2; i++) { printf("%c", b[i]); } return 0; }
- 第三种解:
#include <stdio.h> int main(void) { char a[20], b[10]; char ch; int i = 0; printf("请输入一个字符串:\n"); while ((ch = getchar()) != '\n') { a[i] = ch; i++; } int count_1 = i; printf("请再输入一个字符串:\n"); i = 0; while ((ch = getchar()) != '\n') { b[i] = ch; i++; } int count_2 = i; int j = 0; for (i = count_1; i < count_1 + count_2; i++) { a[i] = b[j]; j++; } for (i = 0; i < count_1 + count_2; i++) { printf("%c", a[i]); } return 0; }
87,回答结果
- 题目:回答结果(结构体变量传递)
- 程序源代码:
- 第一个程序源代码:
#include <stdio.h> struct student { int x; char c; }a; struct student assignment(struct student b); int main(void) { a.x = 3; a.c = 'a'; a = assignment(a); printf("%d,%c", a.x, a.c); } struct student assignment(struct student b) { b.x = 20; b.c = 'y'; return b; }
- 第二个程序源代码:
#include <stdio.h> struct student { int x; char c; }a; void assignment(struct student b); int main(void) { a.x = 3; a.c = 'a'; assignment(a); printf("%d,%c", a.x, a.c); } void assignment(struct student b) { b.x = 20; b.c = 'y'; }
88,读取7个数,打印*
- 题目:读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。
- 程序源代码:
- 第一种解:
#include <stdio.h> int main() { int i, a, n = 1; while(n <= 7) { do { scanf("%d", &a); } while(a < 1 || a > 50); for(i = 1; i <= a; i++) { printf("*"); } printf("\n"); n++; } getch(); }
- 第二种解:
#include <stdio.h> int main(void) { int num, count = 0; printf("输入1到50的7个数字:\n"); while (count != 7 &&) { scanf("%d", &num); for (int i = 0; i < num; i++) { printf("*"); } printf("\n"); count++; } return 0; }
89,公司加密数据
- 题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。 例:1234每个数字加上5后为6789;6除以10的余数为6,7除以10的余数为7,8除以10的余数为8,9除以10的余数为9;之后数字为6789;交换顺序,数字为:9876;
- 程序源代码:
- 第一种解:
#include <stdio.h> int main() { int a, i, aa[4], t; scanf("%d", &a); aa[0] = a % 10; aa[1] = a % 100 / 10; aa[2] = a % 1000 / 100; aa[3] = a / 1000; for (i = 0; i <= 3; i++) { aa[i] += 5; aa[i] %= 10; } for (i = 0; i <= 3 / 2; i++) { t = aa[i]; aa[i] = aa[3 - i]; aa[3 - i] = t; } for(i = 3; i >= 0; i--) { printf("%d", aa[i]); } return 0; }
- 第二种解:
#include <stdio.h> int* break_up(int num); int main(void) { int num; int a[4]; printf("输入四位整数,加密\n"); scanf("%d", &num); // 输入错误,让用户重新输入 while (num >= 10000 || num <= 999) { printf("输入错误,请重新输入:"); scanf("%d", &num); } // 调用函数,将四位整数拆分 int *p = break_up(num); // 将拆分的整数逆序放入数组,并且算出每个数字加上之后的和 // 例:1234拆分后,逆序放入数组,a[0]放4, a[1]放3, a[2]放2, a[3]放1 for (int i = 0; i < 4; i++) { a[i] = *(p + i); a[i] += 5; if (a[i] >= 10) { a[i] %= 10; } } // 所谓第一位和第四位交换,第二位和第三位交换其实可以直接逆序输出 for (int i = 0; i < 4; i++) { printf("%d", a[i]); } return 0; } // 将四位整数拆分 int* break_up(int num) { static int b[4]; int i = 0; while (num) { b[i] = num % 10; num /= 10; i++; } return b; }
90,读结果
- 题目:如下
- 程序源代码:
#include <stdio.h> #define M 5 int main() { int a[M]= {1, 2, 3, 4, 5}; int i, j, t; i = 0; j = M - 1; while(i != j) { t = *(a + i); *(a + i) = *(a + j); *(a + j) = t; i++; j--; } for(i = 0; i < j; i++ ) { printf("%d", *(a+i)); } return 0; }
- 答案:54