在 C 语言的学习过程中,练习是巩固知识、提升编程能力的关键。下面是我在学习 C 语言时完成的一些练习题,涵盖了数据定义、基本运算、流程控制、函数使用等多个重要知识点,每一道题都承载着我对 C 语言理解的深入和编程技巧的提升。
使用全局#define
定义gender
为’男’。使用局部定义name
(长度为 12)为张三,age
为 22,height
为 1.78,并按格式name gender age height
输出完整结果。
#include
#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
保留两位小数输出。要求用户输入圆的半径,根据公式计算圆的周长并输出。
#define _CRT_SECURE_NO_WARNINGS
#include
#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
函数输出结果,同样保留两位小数。if - else
结构判断用户是否中奖,中奖号码随机生成。switch - case
结构根据用户输入对电脑进行操作(0 - 关机;1 - 重启;2 - 睡眠)。#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
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
分支处理无效输入。使用for
循环打印【1 - 100】内的能被 3 和 7 整除的数,并输出满足条件的个数。
#define _CRT_SECURE_NO_WARNINGS
#include
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,最后输出满足条件的数的个数。打印 99 乘法表。
#define _CRT_SECURE_NO_WARNINGS
#include
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
用于控制输出格式,使表格对齐美观,内层循环结束后换行。判断【100,999】内的水仙花数(水仙花数是一个 3 位数,且每个位的立方和等于这个数本身),并打印出来。
#define _CRT_SECURE_NO_WARNINGS
#include
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
。利用调用函数的方法找出数组a = {12, 23, 56, 45, 64}
的最大值,并将数组降序排列输出为新的数组b
。
#define _CRT_SECURE_NO_WARNINGS
#include
// 找出数组的最大值
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 语言的学习道路上不断前进,也期待在未来的学习中能够挑战更多复杂的编程任务,进一步提升自己的编程能力。