以下是十五道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;
}
- 统计字符串中的大写字母、小写字母和数字个数
#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;
}
- 判断回文字符串
#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;
}
- 生成乘法表
#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;
}
- 计算阶乘
#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;
}
- 判断素数
#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;
}
- 大写字母转换为小写字母
#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;
}
- 统计字符串中出现次数最多的字符
#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;
}
- 判断手机号码是否有效
#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;
}
- 去除字符串中的空格
#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;
}
- 判断邮箱地址是否有效
#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;
}
- 统计字符串中每个字符出现的次数
#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;
}
- 反转字符串中的单词
#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;
}
- 判断是否为回文字符串
#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;
}
- 判断两个字符串是否为变形词
#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;
}