C语言必会100题(18)。两个字符串连接程序/回答结果/读取7个数,打印*/公司加密数据/读结果

特此鸣谢:鱼C_小甲鱼(B站up主)不二如是(鱼C论坛大佬)
题目来源:https://fishc.com.cn
注:这些题在网上都可以搜到,题下面的代码大多是流传下来的答案(我重新排了一下版,增加了可读性),部分是本人经过深思熟虑后编写的。

86,两个字符串连接程序

  • 题目:两个字符串连接程序
  • 程序源代码:
  1. 第一种解:
    #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;
    }
  1. 第二种解:
    // 漫天过海法
    #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;
    
    }
  1. 第三种解:
    #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,回答结果

  • 题目:回答结果(结构体变量传递)
  • 程序源代码:
  1. 第一个程序源代码:
    #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;
    }
  1. 第二个程序源代码:
    #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)的整数值,每读取一个值,程序打印出该值个数的*。
  • 程序源代码:
  1. 第一种解:
    #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();
    }
  1. 第二种解:
    #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;
  • 程序源代码:
  1. 第一种解:
    #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;
    }
  1. 第二种解:
    #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

 

posted @ 2022-03-20 21:59  炸天帮帮主  阅读(87)  评论(0编辑  收藏  举报