C语言中的switch结构是一种强大的控制语句,它允许根据不同的条件值执行不同的代码块。相比于if-else结构,switch在某些情况下可以提供更清晰和简洁的代码。以下,我们将通过20个实战例题来详解和练习C语言中的switch结构。
实战例题1:判断星期
#include <stdio.h>
int main() {
int day;
printf("请输入一个数字(1-7):");
scanf("%d", &day);
switch(day) {
case 1: printf("星期一\n"); break;
case 2: printf("星期二\n"); break;
case 3: printf("星期三\n"); break;
case 4: printf("星期四\n"); break;
case 5: printf("星期五\n"); break;
case 6: printf("星期六\n"); break;
case 7: printf("星期日\n"); break;
default: printf("输入的数字不在1-7之间\n");
}
return 0;
}
实战例题2:判断月份
#include <stdio.h>
int main() {
int month;
printf("请输入一个数字(1-12):");
scanf("%d", &month);
switch(month) {
case 1: printf("一月\n"); break;
case 2: printf("二月\n"); break;
case 3: printf("三月\n"); break;
case 4: printf("四月\n"); break;
case 5: printf("五月\n"); break;
case 6: printf("六月\n"); break;
case 7: printf("七月\n"); break;
case 8: printf("八月\n"); break;
case 9: printf("九月\n"); break;
case 10: printf("十月\n"); break;
case 11: printf("十一月\n"); break;
case 12: printf("十二月\n"); break;
default: printf("输入的数字不在1-12之间\n");
}
return 0;
}
实战例题3:判断分数等级
#include <stdio.h>
int main() {
int score;
printf("请输入一个分数(0-100):");
scanf("%d", &score);
switch(score / 10) {
case 10: case 9: printf("优秀\n"); break;
case 8: printf("良好\n"); break;
case 7: printf("中等\n"); break;
case 6: printf("及格\n"); break;
case 5: case 4: case 3: case 2: case 1: case 0: printf("不及格\n"); break;
}
return 0;
}
实战例题4:判断性别
#include <stdio.h>
int main() {
char gender;
printf("请输入性别(M/F):");
scanf(" %c", &gender); // 注意在%c前面加一个空格,用于跳过前一个输入的回车
switch(gender) {
case 'M': printf("男性\n"); break;
case 'F': printf("女性\n"); break;
default: printf("输入的性别不正确\n");
}
return 0;
}
实战例题5:判断成绩等级
#include <stdio.h>
int main() {
float score;
printf("请输入一个分数(0-100):");
scanf("%f", &score);
switch((int)(score / 10)) {
case 10: case 9: printf("优秀\n"); break;
case 8: printf("良好\n"); break;
case 7: printf("中等\n"); break;
case 6: printf("及格\n"); break;
case 5: case 4: case 3: case 2: case 1: case 0: printf("不及格\n"); break;
}
return 0;
}
实战例题6:判断季节
#include <stdio.h>
int main() {
int month;
printf("请输入一个数字(1-12):");
scanf("%d", &month);
switch(month) {
case 3: case 4: case 5: printf("春季\n"); break;
case 6: case 7: case 8: printf("夏季\n"); break;
case 9: case 10: case 11: printf("秋季\n"); break;
case 12: case 1: case 2: printf("冬季\n"); break;
default: printf("输入的月份不正确\n");
}
return 0;
}
实战例题7:判断闰年
#include <stdio.h>
int main() {
int year;
printf("请输入一个年份:");
scanf("%d", &year);
switch(year % 4) {
case 0:
if(year % 100 == 0) {
if(year % 400 == 0) {
printf("%d是闰年\n", year);
} else {
printf("%d不是闰年\n", year);
}
} else {
printf("%d是闰年\n", year);
}
break;
default: printf("%d不是闰年\n", year);
}
return 0;
}
实战例题8:判断数字的奇偶性
#include <stdio.h>
int main() {
int num;
printf("请输入一个数字:");
scanf("%d", &num);
switch(num % 2) {
case 0: printf("%d是偶数\n", num); break;
case 1: printf("%d是奇数\n", num); break;
}
return 0;
}
实战例题9:判断字母的大小写
#include <stdio.h>
int main() {
char ch;
printf("请输入一个字母:");
scanf(" %c", &ch);
switch(ch) {
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j':
case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't':
case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': printf("%c是小写字母\n", ch); break;
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J':
case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T':
case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': printf("%c是大写字母\n", ch); break;
default: printf("%c既不是大写字母也不是小写字母\n", ch);
}
return 0;
}
实战例题10:判断数字的位数
#include <stdio.h>
int main() {
int num;
printf("请输入一个数字:");
scanf("%d", &num);
switch(num) {
case 0: printf("数字是一位数\n"); break;
case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: printf("数字是一位数\n"); break;
default: printf("数字是两位数以上\n");
}
return 0;
}
实战例题11:判断年份是否为世纪年
#include <stdio.h>
int main() {
int year;
printf("请输入一个年份:");
scanf("%d", &year);
switch(year % 100) {
case 0:
if(year % 400 == 0) {
printf("%d是世纪年\n", year);
} else {
printf("%d不是世纪年\n", year);
}
break;
default: printf("%d不是世纪年\n", year);
}
return 0;
}
实战例题12:判断数字是否为素数
#include <stdio.h>
int main() {
int num, i, isPrime = 1;
printf("请输入一个数字:");
scanf("%d", &num);
if(num <= 1) {
printf("%d不是素数\n", num);
} else {
for(i = 2; i <= num / 2; i++) {
if(num % i == 0) {
isPrime = 0;
break;
}
}
switch(isPrime) {
case 1: printf("%d是素数\n", num); break;
case 0: printf("%d不是素数\n", num); break;
}
}
return 0;
}
实战例题13:判断日期是否有效
#include <stdio.h>
int main() {
int day, month, year;
printf("请输入日期(格式:日 月 年):");
scanf("%d %d %d", &day, &month, &year);
switch(month) {
case 1: case 3: case 5: case 7: case 8: case 10: case 12:
if(day >= 1 && day <= 31) {
printf("日期有效\n");
} else {
printf("日期无效\n");
}
break;
case 4: case 6: case 9: case 11:
if(day >= 1 && day <= 30) {
printf("日期有效\n");
} else {
printf("日期无效\n");
}
break;
case 2:
if((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
if(day >= 1 && day <= 29) {
printf("日期有效\n");
} else {
printf("日期无效\n");
}
} else {
if(day >= 1 && day <= 28) {
printf("日期有效\n");
} else {
printf("日期无效\n");
}
}
break;
default: printf("月份无效\n");
}
return 0;
}
实战例题14:判断时间是否有效
#include <stdio.h>
int main() {
int hour, minute, second;
printf("请输入时间(格式:时 分 秒):");
scanf("%d %d %d", &hour, &minute, &second);
switch(hour) {
case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11:
if(hour < 24) {
switch(minute) {
case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11:
case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23:
if(minute < 60) {
switch(second) {
case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11:
case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23:
if(second < 60) {
printf("时间有效\n");
} else {
printf("时间无效\n");
}
break;
default: printf("时间无效\n");
}
} else {
printf("时间无效\n");
}
break;
default: printf("时间无效\n");
}
} else {
printf("时间无效\n");
}
break;
default: printf("时间无效\n");
}
return 0;
}
实战例题15:判断一个数是否为完全平方数
#include <stdio.h>
int main() {
int num, i, isPerfectSquare = 0;
printf("请输入一个数字:");
scanf("%d", &num);
for(i = 1; i <= num; i++) {
if(i * i == num) {
isPerfectSquare = 1;
break;
}
}
switch(isPerfectSquare) {
case 1: printf("%d是完全平方数\n", num); break;
case 0: printf("%d不是完全平方数\n", num); break;
}
return 0;
}
实战例题16:判断一个数是否为质数
#include <stdio.h>
int main() {
int num, i, isPrime = 1;
printf("请输入一个数字:");
scanf("%d", &num);
if(num <= 1) {
printf("%d不是质数\n", num);
} else {
for(i = 2; i <= num / 2; i++) {
if(num % i == 0) {
isPrime = 0;
break;
}
}
switch(isPrime) {
case 1: printf("%d是质数\n", num); break;
case 0: printf("%d不是质数\n", num); break;
}
}
return 0;
}
实战例题17:判断一个数是否为回文数
#include <stdio.h>
int main() {
int num, originalNum, reversedNum = 0, remainder;
printf("请输入一个数字:");
scanf("%d", &num);
originalNum = num;
while(num != 0) {
remainder = num % 10;
reversedNum = reversedNum * 10 + remainder;
num /= 10;
}
switch(originalNum == reversedNum) {
case 1: printf("%d是回文数\n", originalNum); break;
case 0: printf("%d不是回文数\n", originalNum); break;
}
return 0;
}
实战例题18:判断一个数是否为阿姆斯特朗数
#include <stdio.h>
int main() {
int num, originalNum, remainder, n = 0;
printf("请输入一个数字:");
scanf("%d", &num);
originalNum = num;
while(num != 0) {
remainder = num % 10;
n++;
num /= 10;
}
num = originalNum;
int sum = 0;
while(num != 0) {
remainder = num % 10;
sum += remainder * remainder;
num /= 10;
}
switch(sum == originalNum) {
case 1: printf("%d是阿姆斯特朗数\n", originalNum); break;
case 0: printf("%d不是阿姆斯特朗数\n", originalNum); break;
}
return 0;
}
实战例题19:判断一个数是否为斐波那契数
#include <stdio.h>
int main() {
int num, a = 0, b = 1, c;
printf("请输入一个数字:");
scanf("%d", &num);
if(num == 0 || num == 1) {
printf("%d是斐波那契数\n", num);
} else {
c = a + b;
while(c <= num) {
if(c == num) {
printf("%d是斐波那契数\n", num);
break;
}
a = b;
b = c;
c = a + b;
}
if(c > num) {
printf("%d不是斐波那契数\n", num);
}
}
return 0;
}
实战例题20:判断一个数是否为水仙花数
#include <stdio.h>
int main() {
int num, originalNum, remainder, n = 0, sum = 0;
printf("请输入一个数字:");
scanf("%d", &num);
originalNum = num;
while(num != 0) {
remainder = num % 10;
n++;
num /= 10;
}
num = originalNum;
while(num != 0) {
remainder = num % 10;
sum += remainder * remainder * remainder;
num /= 10;
}
switch(sum == originalNum) {
case 1: printf("%d是水仙花数\n", originalNum); break;
case 0: printf("%d不是水仙花数\n", originalNum); break;
}
return 0;
}
通过以上20个实战例题,你可以更加深入地理解和掌握C语言中的switch结构。在实际编程过程中,灵活运用switch结构可以帮助你编写出更加高效和易于理解的代码。
