破解C语言入门难题:30个经典例题解析,轻松提升编程技能

C语言作为一种历史悠久且应用广泛的编程语言,对于初学者来说,入门阶段会遇到不少难题。本篇文章将解析30个C语言入门经典例题,帮助读者轻松提升编程技能。
1. Hello World程序
解析
目标
:学习C语言基本结构,输出“Hello, World!”。
代码
:
“`c
#include
int main() {
printf(“Hello, World!\n”);
return 0;
}
## 2. 计算器程序

### 解析
– **目标**:学习基本的输入输出和算术运算。
– **代码**:
“`c
#include

int main() {
int num1, num2;
char operator;

printf(“Enter an operator (+, -, *, /): “);
scanf(” %c”, &operator);
printf(“Enter two operands: “);
scanf(“%d %d”, &num1, &num2);

switch (operator) {
case ‘+’:
printf(“%d + %d = %d”, num1, num2, num1 + num2);
break;
case ‘-‘:
printf(“%d – %d = %d”, num1, num2, num1 – num2);
break;
case ‘*’:
printf(“%d * %d = %d”, num1, num2, num1 * num2);
break;
case ‘/’:
printf(“%d / %d = %f”, num1, num2, (float)num1 / num2);
break;
default:
printf(“Error! operator is not correct”);
}
return 0;
}
3. 判断奇偶数
解析
目标
:学习条件语句和输入输出。
代码
:
“`c
#include
int main() {
int num;

printf(“Enter an integer: “);
scanf(“%d”, &num);

if (num % 2 == 0)
printf(“%d is even.\n”, num);
else
printf(“%d is odd.\n”, num);

return 0;
}
## 4. 温度转换程序

### 解析
– **目标**:学习类型转换和条件语句。
– **代码**:
“`c
#include

int main() {
float celsius, fahrenheit;

printf(“Enter temperature in Celsius: “);
scanf(“%f”, &celsius);

fahrenheit = (celsius * 9 / 5) + 32;
printf(“Temperature in Fahrenheit: %.2f\n”, fahrenheit);

return 0;
}
5. 求解阶乘
解析
目标
:学习循环结构和数值计算。
代码
:
“`c
#include
int main() {
int num, i, factorial = 1;

printf(“Enter a positive integer: “);
scanf(“%d”, &num);

if (num < 0) printf("Factorial of a negative number doesn't exist."); else { for (i = 1; i <= num; i++) factorial *= i; printf("Factorial of %d = %d\n", num, factorial); } return 0; } ## 6. 判断质数 ### 解析 - **目标**:学习循环、条件语句和数学概念。 - **代码**: ```c #include
#include

int main() {
int num, i;
bool isPrime = true;

printf(“Enter a positive integer: “);
scanf(“%d”, &num);

if (num <= 1) isPrime = false; for (i = 2; i * i <= num; i++) { if (num % i == 0) isPrime = false; } if (isPrime) printf("%d is a prime number.\n", num); else printf("%d is not a prime number.\n", num); return 0; } 7. 求最大公约数 解析 目标 :学习算法和循环控制。 代码 : “`c #include int gcd(int a, int b) { while (b != 0) { int temp = b; b = a % b; a = temp; } return a; } int main() { int num1, num2, result; printf("Enter two positive integers: "); scanf("%d %d", &num1, &num2); result = gcd(num1, num2); printf("GCD of %d and %d is %d\n", num1, num2, result); return 0; } ## 8. 字符串比较 ### 解析 - **目标**:学习字符串操作和比较。 - **代码**: ```c #include
#include

int main() {
char str1[100], str2[100];

printf(“Enter first string: “);
scanf(“%s”, str1);
printf(“Enter second string: “);
scanf(“%s”, str2);

if (strcmp(str1, str2) == 0)
printf(“Strings are equal.\n”);
else
printf(“Strings are not equal.\n”);

return 0;
}
9. 字符串长度
解析
目标
:学习字符串操作。
代码
:
“`c
#include
#include
int main() {
char str[100];

printf(“Enter a string: “);
scanf(“%s”, str);

printf(“Length of string is: %lu\n”, strlen(str));

return 0;
}
## 10. 反转字符串

### 解析
– **目标**:学习字符串操作和循环控制。
– **代码**:
“`c
#include
#include

void reverseString(char *str) {
int len = strlen(str);
for (int i = 0; i < len / 2; i++) { char temp = str[i]; str[i] = str[len - i - 1]; str[len - i - 1] = temp; } } int main() { char str[100]; printf("Enter a string: "); scanf("%s", str); reverseString(str); printf("Reversed string is: %s\n", str); return 0; } 11. 字符串查找 解析 目标 :学习字符串操作和循环控制。 代码 : “`c #include #include int main() { char str[100], substr[100]; printf("Enter a string: "); scanf("%s", str); printf("Enter substring to find: "); scanf("%s", substr); int index = strstr(str, substr) - str; if (index == -1) printf("Substring not found.\n"); else printf("Substring found at index: %d\n", index); return 0; } ## 12. 字符串替换 ### 解析 - **目标**:学习字符串操作和循环控制。 - **代码**: ```c #include
#include

void replaceSubstring(char *str, char *oldStr, char *newStr) {
char temp[1000];
char *pos;

strcpy(temp, str);

pos = strstr(temp, oldStr);
while (pos) {
strcpy(str, strUntil(str, pos));
strcat(str, newStr);
pos = strstr(temp, oldStr);
}
}

char *strUntil(char *str, char *end) {
int len = end – str;
char *temp = malloc(len + 1);
strncpy(temp, str, len);
temp[len] = ‘\0’;
return temp;
}

int main() {
char str[100], oldStr[100], newStr[100];

printf(“Enter a string: “);
scanf(“%s”, str);
printf(“Enter substring to replace: “);
scanf(“%s”, oldStr);
printf(“Enter new substring: “);
scanf(“%s”, newStr);

replaceSubstring(str, oldStr, newStr);
printf(“String after replacement: %s\n”, str);

return 0;
}
13. 字符串加密
解析
目标
:学习字符串操作和算法。
代码
:
“`c
#include
#include
void encryptString(char *str) {
int i;
for (i = 0; str[i] != ‘\0’; i++)
str[i] = str[i] + 1;
}
void decryptString(char *str) {
int i;
for (i = 0; str[i] != ‘\0’; i++)
str[i] = str[i] – 1;
}
int main() {
char str[100];

printf(“Enter a string: “);
scanf(“%s”, str);

encryptString(str);
printf(“Encrypted string: %s\n”, str);

decryptString(str);
printf(“Decrypted string: %s\n”, str);

return 0;
}
## 14. 字符串排序

### 解析
– **目标**:学习字符串操作和排序算法。
– **代码**:
“`c
#include
#include

void sortString(char *str) {
int len = strlen(str);
char temp;

for (int i = 0; i < len - 1; i++) { for (int j = i + 1; j < len; j++) { if (str[i] > str[j]) {
temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
}
}

int main() {
char str[100];

printf(“Enter a string: “);
scanf(“%s”, str);

sortString(str);
printf(“Sorted string: %s\n”, str);

return 0;
}
15. 字符串查找所有单词
解析
目标
:学习字符串操作和算法。
代码
:
“`c
#include
#include
#include
void findWords(char *str) {
char word[100];
int wordIndex = 0;
int inWord = 0;

for (int i = 0; str[i] != ‘\0’; i++) {
if (isalpha(str[i])) {
word[wordIndex++] = str[i];
inWord = 1;
} else if (inWord) {
word[wordIndex] = ‘\0’;
printf(“%s\n”, word);
wordIndex = 0;
inWord = 0;
}
}
}
int main() {
char str[1000];

printf(“Enter a string: “);
scanf(“%[^\n]%*c”, str);

findWords(str);

return 0;
}
## 16. 字符串查找特定字符

### 解析
– **目标**:学习字符串操作和算法。
– **代码**:
“`c
#include
#include
#include

int findChar(char *str, char ch) {
for (int i = 0; str[i] != ‘\0’; i++) {
if (tolower(str[i]) == tolower(ch))
return i;
}
return -1;
}

int main() {
char str[1000], ch;

printf(“Enter a string: “);
scanf(“%[^\n]%*c”, str);
printf(“Enter a character to find: “);
scanf(” %c”, &ch);

int index = findChar(str, ch);
if (index == -1)
printf(“Character not found.\n”);
else
printf(“Character found at index: %d\n”, index);

return 0;
}
17. 字符串删除特定字符
解析
目标
:学习字符串操作和算法。
代码
:
“`c
#include
#include
void deleteChar(char *str, char ch) {
int j = 0;

for (int i = 0; str[i] != ‘\0’; i++) {
if (str[i] != ch)
str[j++] = str[i];
}
str[j] = ‘\0’;
}
int main() {
char str[1000], ch;

printf(“Enter a string: “);
scanf(“%[^\n]%*c”, str);
printf(“Enter a character to delete: “);
scanf(” %c”, &ch);

deleteChar(str, ch);
printf(“String after deletion: %s\n”, str);

return 0;
}
## 18. 字符串删除重复字符

### 解析
– **目标**:学习字符串操作和算法。
– **代码**:
“`c
#include
#include
#include

void deleteDuplicates(char *str) {
int len = strlen(str);
int j = 0;

for (int i = 0; i < len - 1; i++) { if (tolower(str[i]) != tolower(str[i + 1])) { str[j++] = str[i]; } } str[j++] = str[len - 1]; str[j] = '\0'; } int main() { char str[1000]; printf("Enter a string: "); scanf("%[^\n]%*c", str); deleteDuplicates(str); printf("String after removing duplicates: %s\n", str); return 0; } 19. 字符串查找重复字符 解析 目标 :学习字符串操作和算法。 代码 : “`c #include #include #include void findDuplicates(char *str) { int len = strlen(str); int freq[256] = {0}; for (int i = 0; i < len; i++) { freq[tolower(str[i])]++; } for (int i = 0; i < 256; i++) { if (freq[i] > 1) {
printf(“Character ‘%c’ occurs %d times.\n”, i, freq[i]);
}
}
}
int main() {
char str[1000];

printf(“Enter a string: “);
scanf(“%[^\n]%*c”, str);

findDuplicates(str);

return 0;
}
## 20. 字符串查找最长单词

### 解析
– **目标**:学习字符串操作和算法。
– **代码**:
“`c
#include
#include
#include

void findLongestWord(char *str) {
int maxLen = 0;
int len = 0;
int index = 0;

for (int i = 0; str[i] != ‘\0’; i++) {
if (isalpha(str[i])) {
len++;
} else if (len > maxLen) {
maxLen = len;
index = i – len;
}
len = 0;
}

if (len > maxLen) {
maxLen = len;
index = strlen(str) – len;
}

printf(“Longest word is: %.*s\n”, maxLen, str + index);
}

int main() {
char str[1000];

printf(“Enter a string: “);
scanf(“%[^\n]%*c”, str);

findLongestWord(str);

return 0;
}
21. 字符串查找最短单词
解析
目标
:学习字符串操作和算法。
代码
:
“`c
#include
#include
#include
void findShortestWord(char *str) {
int minLen = 1000;
int len = 0;
int index = 0;

for (int i = 0; str[i] != ‘\0’; i++) {
if (isalpha(str[i])) {
len++;
} else if (len < minLen) { minLen = len; index = i - len; } len = 0; } if (len < minLen) { minLen = len; index = strlen(str) - len; } printf("Shortest word is: %.*s\n", minLen, str + index); } int main() { char str[1000]; printf("Enter a string: "); scanf("%[^\n]%*c", str); findShortestWord(str); return 0; } “` 22. 字符串查找所有单词的长度 解析 目标 :学习字符串操作和算法。 代码 : “`c #include #include #include void findWordLengths(char *str) { int len = 0; int index = 0; for (int i = 0; str[i] != '\0'; i++) { if (isalpha(str[i])) { len++; } else if (len > 0) {
printf(“Length of word at index %d is: %d\n”, index, len);
len = 0;
index = i;
}