嵌入式C语言笔试编程题

有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件C中。

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int compare(const void *a, const void *b) {
    return (*(char *)a - *(char *)b);
}

int main() {
    FILE *fileA, *fileB, *fileC;
    char contentA[100], contentB[100], mergedContent[200];

    // 打开文件A
    fileA = fopen("fileA.txt", "r");
    if (fileA == NULL) {
        perror("Error opening fileA.txt");
        return 1;
    }

    // 读取文件A的内容
    fgets(contentA, sizeof(contentA), fileA);
    fclose(fileA);

    // 打开文件B
    fileB = fopen("fileB.txt", "r");
    if (fileB == NULL) {
        perror("Error opening fileB.txt");
        return 1;
    }

    // 读取文件B的内容
    fgets(contentB, sizeof(contentB), fileB);
    fclose(fileB);

    // 合并两个文件的内容
    strcpy(mergedContent, contentA);
    strcat(mergedContent, contentB);

    // 对合并后的内容进行排序
    qsort(mergedContent, strlen(mergedContent), sizeof(char), compare);

    // 打开文件C
    fileC = fopen("fileC.txt", "w");
    if (fileC == NULL) {
        perror("Error opening fileC.txt");
        return 1;
    }

    // 将排序后的内容写入文件C
    fputs(mergedContent, fileC);

    fclose(fileC);

    printf("Merged and sorted content written to fileC.txt.\n");

    return 0;
}

 计算字符串中子串出现的次数。

#include <stdio.h>

int main() {
    char str1[20], str2[20], *p1, *p2;
    int sum = 0;

    // 输入两个字符串
    printf("please input two strings\n");
    scanf("%s%s", str1, str2);

    p1 = str1;
    p2 = str2;

    while (*p1 != '\0') {
        if (*p1 == *p2) {
            // 如果当前字符匹配,继续比较后续字符
            while (*p1 == *p2 && *p2 != '\0') {
                p1++;
                p2++;
            }
        } else {
            // 如果当前字符不匹配,继续比较下一个位置
            p1++;
        }

        // 如果p2指向了str2的末尾,说明str2在当前位置匹配
        // 增加匹配次数,并重新初始化p2为str2的起始位置
        if (*p2 == '\0') {
            sum++;
        }
        p2 = str2;
    }

    // 输出匹配次数
    printf("%d", sum);

    return 0;
}

 这个程序采用了双指针的方式,通过比较两个字符串的字符来统计子串在主串中的出现次数。程序首先输入两个字符串,然后使用两个指针p1p2进行比较。主要的逻辑是在主串中找到一个匹配的起始位置,然后逐个比较字符,直到子串结束,同时统计匹配的次数。循环结束后输出匹配次数。

 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。

#include <stdio.h>

int main() {
    int a, i, aa[4], t;

    // 输入一个四位整数
    printf("Enter a four-digit integer: ");
    scanf("%d", &a);

    // 将四位整数按位存储在数组中
    aa[0] = a % 10;
    aa[1] = a % 100 / 10;
    aa[2] = a % 1000 / 100;
    aa[3] = a / 1000;

    // 对每个数字进行加5操作,并对10取余,实现加密
    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;
}

 

写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。 

#include <stdio.h>

// 计算字符串长度的函数
int stringLength(const char *str) {
    int length = 0;

    // 遍历字符串,直到遇到 null 终止符
    while (*str != '\0') {
        length++;
        str++;
    }

    return length;
}

int main() {
    char inputString[100];

    // 输入字符串
    printf("Enter a string: ");
    scanf("%s", inputString);

    // 调用函数计算字符串长度
    int length = stringLength(inputString);

    // 输出字符串长度
    printf("Length of the string: %d\n", length);

    return 0;
}

 

实现strcmp函数。 

#include <stdio.h>

// 实现strcmp函数
int my_strcmp(const char *str1, const char *str2) {
    while (*str1 != '\0' && *str2 != '\0') {
        if (*str1 < *str2) {
            return -1;
        } else if (*str1 > *str2) {
            return 1;
        }

        str1++;
        str2++;
    }

    // 如果两个字符串的前缀相同,但有一个字符串较短,则较短的字符串被认为是较小的
    if (*str1 == '\0' && *str2 != '\0') {
        return -1;
    } else if (*str1 != '\0' && *str2 == '\0') {
        return 1;
    }

    // 两个字符串相等
    return 0;
}

int main() {
    // 测试strcmp函数实现
    const char *str1 = "Hello";
    const char *str2 = "World";

    int result = my_strcmp(str1, str2);

    if (result < 0) {
        printf("%s comes before %s\n", str1, str2);
    } else if (result > 0) {
        printf("%s comes after %s\n", str1, str2);
    } else {
        printf("%s is equal to %s\n", str1, str2);
    }

    return 0;
}

 strcmp 函数是C标准库中的一个字符串比较函数,用于比较两个字符串的大小。

上述代码中,my_strcmp 函数接受两个字符串指针作为参数,然后比较它们的字符。如果第一个字符串小于第二个字符串,函数返回负值;如果第一个字符串大于第二个字符串,函数返回正值;如果两个字符串相等,函数返回零。在 main 函数中,我们使用这个函数比较了两个字符串并输出结果。

取一个整数a从右端开始的4~7位。 

#include <stdio.h>

int main() {
    unsigned int a;

    // 从用户输入中读取一个整数
    printf("Enter an integer: ");
    scanf("%u", &a);

    // 取从右端开始的第4到第7位
    unsigned int mask = 0b1111;  // 二进制表示的低4位全为1的掩码
    unsigned int result = (a >> 3) & mask;  // 右移3位,然后按位与操作

    // 输出结果
    printf("Bits 4 to 7 from the right: %u\n", result);

    return 0;
}

在这个程序中:

  1. 从用户输入中读取一个无符号整数,存储在变量 a 中。
  2. 创建一个低4位全为1的二进制掩码 0b1111
  3. 将整数 a 右移3位,然后使用掩码进行按位与操作,得到从右端开始的第4到第7位的结果。
  4. 输出结果。

请注意,程序中使用了二进制表示法 0b 来表示二进制数。如果输入的整数有更多位,你可以根据需要调整右移的位数和掩码。

写一个内存拷贝函数,不用任何库函数. 

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值