C语言新手巩固进阶的十五道练习题

以下是十五道C语言的进阶练习题(答案在最下方):

1. 编写一个程序,要求用户输入一个字符串,然后输出该字符串的长度。
2. 编写一个程序,要求用户输入一个字符串,然后统计该字符串中大写字母、小写字母和数字的个数。
3. 编写一个程序,要求用户输入一个字符串,然后判断该字符串是否为回文字符串(正读和反读都一样)。
4. 编写一个程序,要求用户输入一个整数n,然后生成一个n行n列的乘法表。
5. 编写一个程序,要求用户输入一个整数n,然后计算并输出n的阶乘。
 6. 编写一个程序,要求用户输入一个整数n,然后判断n是否为素数。
7. 编写一个程序,要求用户输入一个字符串,然后将字符串中的所有大写字母转换为小写字母,并输出转换后的字符串。
8. 编写一个程序,要求用户输入一个字符串,然后输出该字符串中出现次数最多的字符以及出现的次数。
 9. 编写一个程序,要求用户输入一个字符串,然后判断该字符串是否为有效的手机号码(11位数字,以1开头)。
10. 编写一个程序,要求用户输入一个字符串,然后将字符串中的所有空格去除,并输出去除空格后的字符串。
11. 编写一个程序,要求用户输入一个字符串,然后判断该字符串是否为有效的邮箱地址(包含@符号和.符号)。
12. 编写一个程序,要求用户输入一个字符串,然后统计该字符串中每个字符出现的次数,并输出结果。
13. 编写一个程序,要求用户输入一个字符串,然后将字符串中的所有单词反转,并输出反转后的字符串。
14. 编写一个程序,要求用户输入一个整数n,然后计算并输出n的前n个斐波那契数列。
15. 编写一个程序,要求用户输入一个字符串,然后将字符串中的所有元音字母替换为指定的字符,并输出替换后的字符串。
这些练习题涵盖了字符串处理、循环、条件判断等多个方面的知识点,可以帮助巩固C语言的进阶知识。同学们可以根据自己的能力和兴趣进行挑选和完成。

以下是所有题示例程序,建议在自己敲了一遍之后再参考示例程序核对。
好的,以下是对以上练习题的代码题解,并加入了详细的注释。

1. 计算字符串长度

```c
#include <stdio.h>
#include <string.h>

int main() {
    char str[100];
    printf("请输入一个字符串:");
    gets(str); // 输入字符串
    int len = strlen(str); // 使用strlen函数计算字符串长度
    printf("字符串的长度为:%d\n", len);
    return 0;
}
  1. 统计字符串中的大写字母、小写字母和数字个数
#include <stdio.h>
#include <ctype.h>

int main() {
    char str[100];
    printf("请输入一个字符串:");
    gets(str); // 输入字符串
    int uppercase = 0, lowercase = 0, digits = 0;
    for (int i = 0; str[i] != '\0'; i++) {
        if (isupper(str[i])) {
            uppercase++; // 统计大写字母个数
        } else if (islower(str[i])) {
            lowercase++; // 统计小写字母个数
        } else if (isdigit(str[i])) {
            digits++; // 统计数字个数
        }
    }
    printf("大写字母个数:%d\n", uppercase);
    printf("小写字母个数:%d\n", lowercase);
    printf("数字个数:%d\n", digits);
    return 0;
}
  1. 判断回文字符串
#include <stdio.h>
#include <string.h>

int main() {
    char str[100];
    printf("请输入一个字符串:");
    gets(str); // 输入字符串
    int len = strlen(str);
    int isPalindrome = 1; // 假设为回文字符串
    for (int i = 0; i < len / 2; i++) {
        if (str[i] != str[len - i - 1]) {
            isPalindrome = 0; // 若不满足回文条件,则修改标志位
            break;
        }
    }
    if (isPalindrome) {
        printf("是回文字符串\n");
    } else {
        printf("不是回文字符串\n");
    }
    return 0;
}
  1. 生成乘法表
#include <stdio.h>

int main() {
    int n;
    printf("请输入一个整数:");
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= i; j++) {
            printf("%d * %d = %d\t", j, i, i * j);
        }
        printf("\n");
    }
    return 0;
}
  1. 计算阶乘
#include <stdio.h>

int main() {
    int n;
    printf("请输入一个整数:");
    scanf("%d", &n);
    int factorial = 1;
    for (int i = 1; i <= n; i++) {
        factorial *= i; // 计算阶乘
    }
    printf("%d的阶乘:%d\n", n, factorial);
    return 0;
}
  1. 判断素数
#include <stdio.h>

int main() {
    int n;
    printf("请输入一个整数:");
    scanf("%d", &n);
    int isPrime = 1; // 假设为素数
    for (int i = 2; i <= n / 2; i++) {
        if (n % i == 0) {
            isPrime = 0; // 若能被整除,则修改标志位
            break;
        }
    }
    if (isPrime) {
        printf("%d是素数\n", n);
    } else {
        printf("%d不是素数\n", n);
    }
    return 0;
}
  1. 大写字母转换为小写字母
#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main() {
    char str[100];
    printf("请输入一个字符串:");
    gets(str); // 输入字符串
    int len = strlen(str);
    for (int i = 0; i < len; i++) {
        if (isupper(str[i])) {
            str[i] = tolower(str[i]); // 转换为小写字母
        }
    }
    printf("转换后的字符串:%s\n", str);
    return 0;
}
  1. 统计字符串中出现次数最多的字符
#include <stdio.h>
#include <string.h>

int main() {
    char str[100];
    printf("请输入一个字符串:");
    gets(str); // 输入字符串
    int len = strlen(str);
    int freq[256] = {0}; // 用于统计字符出现次数的数组
    for (int i = 0; i < len; i++) {
        freq[str[i]]++; // 统计字符出现次数
    }
    int maxFreq = 0;
    char maxChar;
    for (int i = 0; i < 256; i++) {
        if (freq[i] > maxFreq) {
            maxFreq = freq[i];
            maxChar = i; // 记录出现次数最多的字符
        }
    }
    printf("出现次数最多的字符:%c,出现次数:%d\n", maxChar, maxFreq);
    return 0;
}
  1. 判断手机号码是否有效
#include <stdio.h>
#include <string.h>

int main() {
    char str[100];
    printf("请输入一个字符串:");
    gets(str); // 输入字符串
    int len = strlen(str);
    if (len != 11 || str[0] != '1') {
        printf("不是有效的手机号码\n");
    } else {
        printf("是有效的手机号码\n");
    }
    return 0;
}
  1. 去除字符串中的空格
#include <stdio.h>
#include <string.h>

int main() {
    char str[100];
    printf("请输入一个字符串:");
    gets(str); // 输入字符串
    int len = strlen(str);
    int count = 0;
    for (int i = 0; i < len; i++) {
        if (str[i] != ' ') {
            str[count++] = str[i]; // 将非空格字符移到前面
        }
    }
    str[count] = '\0'; // 添加字符串结束符
    printf("去除空格后的字符串:%s\n", str);
    return 0;
}
  1. 判断邮箱地址是否有效
#include <stdio.h>
#include <string.h>

int main() {
    char str[100];
    printf("请输入一个字符串:");
    gets(str); // 输入字符串
    int len = strlen(str);
    int atCount = 0, dotCount = 0;
    int atIndex = -1, dotIndex = -1;
    for (int i = 0; i < len; i++) {
        if (str[i] == '@') {
            atCount++;
            atIndex = i;
        } else if (str[i] == '.') {
            dotCount++;
            dotIndex = i;
        }
    }
    if (atCount == 1 && dotCount >= 1 && atIndex < dotIndex && dotIndex < len - 1) {
        printf("是有效的邮箱地址\n");
    } else {
        printf("不是有效的邮箱地址\n");
    }
    return 0;
}
  1. 统计字符串中每个字符出现的次数
#include <stdio.h>
#include <string.h>

int main() {
    char str[100];
    printf("请输入一个字符串:");
    gets(str); // 输入字符串
    int len = strlen(str);
    int freq[256] = {0}; // 用于统计字符出现次数的数组
    for (int i = 0; i < len; i++) {
        freq[str[i]]++; // 统计字符出现次数
    }
    for (int i = 0; i < 256; i++) {
        if (freq[i] > 0) {
            printf("%c出现的次数:%d\n", i, freq[i]);
        }
    }
    return 0;
}
  1. 反转字符串中的单词
#include <stdio.h>
#include <string.h>

void reverseWord(char str[], int start, int end) {
    while (start < end) {
        char temp = str[start];
        str[start] = str[end];
        str[end] = temp;
        start++;
        end--;
    }
}

int main() {
    char str[100];
    printf("请输入一个字符串:");
    gets(str); // 输入字符串
    int len = strlen(str);
    int start = 0;
    for (int i = 0; i < len; i++) {
        if (str[i] == ' ') {
            reverseWord(str, start, i - 1); // 反转单词
            start = i + 1;
        }
    }
    reverseWord(str, start, len - 1); // 反转最后一个单词
    printf("反转后的字符串:%s\n", str);
    return 0;
}
  1. 判断是否为回文字符串
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

bool isPalindrome(char str[]) {
    int len = strlen(str);
    for (int i = 0; i < len / 2; i++) {
        if (str[i] != str[len - i - 1]) {
            return false; // 不是回文字符串
        }
    }
    return true; // 是回文字符串
}

int main() {
    char str[100];
    printf("请输入一个字符串:");
    gets(str); // 输入字符串
    if (isPalindrome(str)) {
        printf("是回文字符串\n");
    } else {
        printf("不是回文字符串\n");
    }
    return 0;
}
  1. 判断两个字符串是否为变形词
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

bool isAnagram(char str1[], char str2[]) {
    int len1 = strlen(str1);
    int len2 = strlen(str2);
    if (len1 != len2) {
        return false; // 长度不相等,不是变形词
    }
    int freq[256] = {0};
    for (int i = 0; i < len1; i++) {
        freq[str1[i]]++;
        freq[str2[i]]--;
    }
    for (int i = 0; i < 256; i++) {
        if (freq[i] != 0) {
            return false; // 字符频次不相等,不是变形词
        }
    }
    return true; // 是变形词
}

int main() {
    char str1[100];
    char str2[100];
    printf("请输入第一个字符串:");
    gets(str1); // 输入第一个字符串
    printf("请输入第二个字符串:");
    gets(str2); // 输入第二个字符串
    if (isAnagram(str1, str2)) {
        printf("是变形词\n");
    } else {
        printf("不是变形词\n");
    }
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
嵌入式C语言进阶之道,可以涉及以下几个方面: 1. 熟悉硬件平台:嵌入式开发需要对目标硬件平台有深入了解,包括处理器架构、寄存器、外设等。学习并理解硬件的特性和工作原理,能够更好地进行底层编程和优化。 2. 掌握低级编程技巧:嵌入式开发常常需要进行底层编程,因此需要熟悉C语言的底层特性,如指针操作、位操作、内存管理等。掌握这些技巧可以提高代码的效率和可靠性。 3. 理解中断和定时器:在嵌入式系统中,中断和定时器是常用的机制,用于实时响应和时间触发的任务。学习如何使用中断和定时器,并了解其原理和应用场景,可以实现更加高效和可靠的嵌入式系统。 4. 学习RTOS:实际的嵌入式系统往往需要处理多个任务,并具有实时性要求。学习实时操作系统(RTOS)的使用和原理,可以帮助开发者更好地管理任务、调度和资源。 5. 进行性能优化:嵌入式系统通常资源有限,需要进行性能优化以提高系统的效率和响应速度。了解编译器优化、代码压缩、数据结构选择等技术,可以帮助优化嵌入式系统的性能。 总之,嵌入式C语言进阶之道包括对硬件平台的深入了解、掌握底层编程技巧、理解中断和定时器、学习RTOS以及进行性能优化。通过不断学习和实践,可以提升嵌入式开发的能力和水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值