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

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

86,两个字符串连接程序

1.题目:两个字符串连接程序
2.程序源代码:

  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.题目:回答结果(结构体变量传递)
2.程序源代码:

  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个数,打印*

1.题目:读取7个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*。
2.程序源代码:

  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,公司加密数据

1.题目:某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。 例:1234每个数字加上5后为6789;6除以10的余数为6,7除以10的余数为7,8除以10的余数为8,9除以10的余数为9;之后数字为6789;交换顺序,数字为:9876;
2.程序源代码:

  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,读结果

1.题目:如下
2.程序源代码:

#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;
}

3.答案:54

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值