C 语言学习之路:练习题实战记录(上)
C 语言学习之路:练习题实战记录
在 C 语言的学习过程中,练习是巩固知识、提升编程能力的关键。下面是我在学习 C 语言时完成的一些练习题,涵盖了数据定义、基本运算、流程控制、函数使用等多个重要知识点,每一道题都承载着我对 C 语言理解的深入和编程技巧的提升。
练习题 1:数据定义与输出
题目描述
使用全局#define
定义gender
为’男’。使用局部定义name
(长度为 12)为张三,age
为 22,height
为 1.78,并按格式name gender age height
输出完整结果。
代码实现
#include <stdio.h> #define gender "男" int main() { char name[12] = "张三"; int age = 22; float height = 1.78; printf("%s %s %d %.2f\n", name, gender, age, height); return 0; }
代码分析
#define
宏定义:通过#define gender "男"
,定义了一个全局的宏gender
,在后续代码中,所有出现gender
的地方都会被替换为"男"
。- 局部变量定义:在
main
函数中,定义了字符数组name
来存储姓名,整型变量age
存储年龄,浮点型变量height
存储身高。 - 输出函数:使用
printf
函数按照指定格式输出各个变量的值,%.2f
表示将浮点数height
保留两位小数输出。
练习题 2:计算圆的周长
题目描述
要求用户输入圆的半径,根据公式计算圆的周长并输出。
代码实现
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #define PI 3.14159 int main() { float radius; printf("请输入圆的半径: "); scanf("%f", &radius); float circumference = 2 * PI * radius; printf("圆的周长是: %.2f\n", circumference); return 0; }
代码分析
- 宏定义常量:
#define PI 3.14159
定义了圆周率PI
,方便在代码中使用,避免了硬编码带来的维护问题。 - 用户输入:使用
printf
提示用户输入半径,然后通过scanf("%f", &radius)
读取用户输入的浮点数并存储到radius
变量中。 - 计算与输出:根据圆的周长公式
2 * PI * radius
计算周长,并使用printf
函数输出结果,同样保留两位小数。
练习题 3:条件判断与分支结构
题目描述
- 使用
if - else
结构判断用户是否中奖,中奖号码随机生成。 - 使用
switch - case
结构根据用户输入对电脑进行操作(0 - 关机;1 - 重启;2 - 睡眠)。
代码实现
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <time.h> #include <stdlib.h> int main() { srand(time(0)); int luckyNumber = rand() % 10; int userInput; printf("请输入一个数字:"); scanf("%d", &userInput); if (userInput == luckyNumber) { printf("你中奖了!\n"); } else { printf("你未中奖!\n"); } // switch - 用户对电脑指令操作 int operation; printf("请输入操作指令 (0 - 关机; 1 - 重启; 2 - 睡眠):"); scanf("%d", &operation); switch (operation) { case 0: printf("正在关机...\n"); break; case 1: printf("正在重启...\n"); break; case 2: printf("正在睡眠...\n"); break; default: printf("无效操作!\n"); break; } return 0; }
代码分析
- 随机数生成与中奖判断: srand(time(0))用于初始化随机数种子,使每次程序运行时生成的随机数不同。rand() % 10生成一个 0 到 9 之间的随机数作为中奖号码。通过if - else结构判断用户输入的数字与中奖号码是否一致,给出相应提示。
switch - case
结构:根据用户输入的操作指令,使用switch - case
结构执行不同的操作,default
分支处理无效输入。
练习题 4:循环与条件判断
题目描述
使用for
循环打印【1 - 100】内的能被 3 和 7 整除的数,并输出满足条件的个数。
代码实现
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int count = 0; for (int i = 1; i <= 100; i++) { if (i % 3 == 0 && i % 7 == 0) { printf("%d\n", i); count++; } } printf("count=%d\n", count); return 0; }
代码分析
- 循环遍历:
for
循环从 1 到 100 遍历每个整数。 - 条件判断:使用
if
语句判断当前整数是否能同时被 3 和 7 整除,即i % 3 == 0 && i % 7 == 0
。 - 计数与输出:满足条件的数被打印出来,同时计数器
count
加 1,最后输出满足条件的数的个数。
练习题 5:嵌套循环应用 - 打印 99 乘法表
题目描述
打印 99 乘法表。
编辑
代码实现
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { for (int i = 1; i < 10; i++) { for (int j = 1; j <= i; j++) { printf("%d*%d=%d\t", i, j, i * j); } printf("\n"); } return 0; }
代码分析
- 嵌套循环:外层
for
循环控制行数i
,从 1 到 9;内层for
循环控制列数j
,从 1 到当前行号i
。 - 输出格式:使用
printf
函数输出乘法表达式,\t
用于控制输出格式,使表格对齐美观,内层循环结束后换行。
练习题 6:判断水仙花数
题目描述
判断【100,999】内的水仙花数(水仙花数是一个 3 位数,且每个位的立方和等于这个数本身),并打印出来。
代码实现
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { for (int i = 100; i <= 999; i++) { int a = i / 100; int b = i / 10 % 10; int c = i % 10; if (i == a * a * a + b * b * b + c * c * c) { printf("%d\n", i); } } return 0; }
代码分析
- 数字拆分:通过整除和取余运算,将三位数
i
拆分为百位a
、十位b
和个位c
。 - 条件判断:使用
if
语句判断当前数是否为水仙花数,即i == a * a * a + b * b * b + c * c * c
。 - 输出结果:满足条件的水仙花数被打印出来。
练习题 7:函数与数组操作
题目描述
利用调用函数的方法找出数组a = {12, 23, 56, 45, 64}
的最大值,并将数组降序排列输出为新的数组b
。
代码实现
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> // 找出数组的最大值 int findMax(int a[], int size) { int max = a[0]; for (int i = 1; i < size; i++) { if (a[i] > max) { max = a[i]; } } return max; } // 降序排序 void descendingSort(int a[], int size) { for (int i = 0; i < size - 1; i++) { for (int j = 0; j < size - i - 1; j++) { if (a[j] < a[j + 1]) { int temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } } } int main() { int a[] = { 12, 23, 56, 45, 64 }; int size = sizeof(a) / sizeof(a[0]); int max = findMax(a, size); printf("max = %d\n", max); // 降序排列 descendingSort(a, size); printf("降序排列数组:"); for (int i = 0; i < size; i++) { printf("%d ", a[i]); } return 0; }
代码分析
- 函数定义: findMax函数用于找出数组中的最大值,通过遍历数组比较每个元素得到最大值。descendingSort函数使用冒泡排序算法对数组进行降序排列。
- 主函数操作:在
main
函数中,定义数组a
,计算数组大小,调用findMax
函数找到最大值并输出,调用descendingSort
函数对数组进行降序排列后输出。
通过完成这些练习题,我对 C 语言的基本语法、控制结构、函数和数组的使用有了更深入的理解和掌握。每一道题都是一次成长的机会,让我在 C 语言的学习道路上不断前进,也期待在未来的学习中能够挑战更多复杂的编程任务,进一步提升自己的编程能力。
#C语言#C语言学习记录 文章被收录于专栏
C语言的初步学习