C 语言核心概念练习工作表
第一部分:基础语法与数据类型
目标: 掌握变量、常量、基本数据类型、运算符和输入输出。

(图片来源网络,侵删)
练习 1: 变量与数据类型
-
编写一个 C 程序,声明以下变量,并为它们赋值,然后打印出来。
- 一个
int类型的整数,值为42。 - 一个
float类型的单精度浮点数,值为14。 - 一个
double类型的双精度浮点数,值为87654321。 - 一个
char类型的字符,值为'A'。 - 一个
char类型的字符串(使用字符数组),值为"Hello, World!"。
- 一个
-
解释
int和char的区别。
练习 2: 常量与修饰符

(图片来源网络,侵删)
- 使用
#define预处理指令定义一个名为PI的浮点常量,值为14159。 - 使用
const关键字定义一个整型常量MAX_STUDENTS,值为30。 - 声明一个
long long类型的变量来存储一个很大的整数(12345678901234),并打印它。
练习 3: 运算符
-
算术运算符:
- 编写程序,计算
10 + 5,20 - 8,7 * 3,15 / 4(注意结果类型),15 % 4。 - 使用复合赋值运算符(, , , )将一个变量的值增加 10。
- 编写程序,计算
-
关系与逻辑运算符:
- 编写程序,判断一个整数是否在 10 到 20 之间(包含 10 和 20)。
- 使用逻辑运算符
&&(与) 和 (或) 判断两个条件是否同时成立或至少一个成立。
-
自增/自减运算符:
(图片来源网络,侵删)- 解释
int a = 5; printf("%d, %d", a++, ++a);的输出结果,并说明原因。
- 解释
练习 4: 输入与输出
-
使用
printf函数,以以下格式打印一个学生的信息:Name: Alice Age: 20 GPA: 3.85(提示:使用
%s,%d,%f格式化符号)。 -
使用
scanf函数从用户那里获取一个整数和一个浮点数,然后将它们打印出来。
第二部分:流程控制
目标: 掌握条件判断和循环结构。
练习 5: 条件语句 (if-else, switch)
if-else:编写一个程序,获取用户输入的一个整数,判断它是正数、负数还是零,并打印相应的信息。switch:编写一个程序,获取用户输入的一个数字(1-7),然后打印对应的星期几(1 是 "Monday"),如果输入的数字不在 1-7 范围内,打印 "Invalid input"。
练习 6: 循环 (for, while, do-while)
-
for循环:- 使用
for循环打印 1 到 100 之间所有 3 的倍数。 - 使用
for循环打印 10 到 1 的倒计时。
- 使用
-
while循环:- 使用
while循环计算 1 到 100 的累加和。 - 使用
while循环让用户不断输入数字,直到输入0为止,并统计输入了多少个非零数字。
- 使用
-
do-while循环:- 使用
do-while循环实现一个简单的菜单系统,让用户可以选择 "1. Add", "2. Subtract", "3. Exit",当用户输入 3 时,程序退出。
- 使用
第三部分:函数
目标: 理解函数的定义、声明、调用和参数传递。
练习 7: 函数基础
- 编写一个名为
isEven的函数,它接收一个整数作为参数,如果该数是偶数则返回1(真),否则返回0(假),在main函数中调用它并测试。 - 编写一个名为
printGreeting的函数,它没有参数,也没有返回值(void),功能是打印 "Hello, C Programmer!"。 - 编写一个名为
add的函数,它接收两个整数参数,返回它们的和,在main函数中调用它并打印结果。
练习 8: 递归
- 编写一个递归函数
factorial来计算一个非负整数的阶乘。n! = n * (n-1) * ... * 1。 - 编写一个递归函数
fibonacci来计算斐波那契数列的第 n 项。fib(n) = fib(n-1) + fib(n-2),fib(0)=0,fib(1)=1。
第四部分:数组与字符串
目标: 掌握一维数组、多维数组和字符串的处理。
练习 9: 一维数组
- 声明一个包含 5 个整数的数组,并初始化它。
- 使用
for循环遍历数组,找出其中的最大值和最小值。 - 将数组中的所有元素反转(
[1, 2, 3, 4]变成[4, 3, 2, 1])。
练习 10: 字符串
- 使用字符数组声明一个字符串
"C Programming",并打印它。 - 编写一个程序,使用
strlen(来自<string.h>) 计算用户输入的字符串的长度。 - 编写一个函数
myStrcpy,实现字符串的复制功能(不使用strcpy)。
练习 11: 多维数组
- 声明一个 3x3 的二维整型数组,并按行初始化。
- 使用嵌套的
for循环打印这个二维数组(矩阵)。 - 计算这个 3x3 矩阵对角线元素的和。
第五部分:指针
目标: 深入理解指针的概念、指针运算和指针与数组的关系。
练习 12: 指针基础
- 声明一个整型变量
x和一个指向整型的指针ptr,将x的地址赋给ptr,通过指针ptr修改x的值,然后打印x的值。 - 解释
*ptr和ptr的区别。 - 编写一个函数
swap,它接收两个整型指针作为参数,交换这两个指针所指向的变量的值,在main函数中调用它来交换两个变量的值。
练习 13: 指针与数组
- 声明一个整型数组
arr[5],声明一个指针p并让它指向数组的第一个元素,使用指针p来遍历并打印数组的所有元素。 - 解释
arr[i]和*(arr + i)为什么是等价的。
第六部分:结构体与文件 I/O
目标: 掌握自定义数据类型和基本的文件操作。
练习 14: 结构体
- 定义一个名为
Student的结构体,包含以下成员:char name[50]int idfloat gpa
- 在
main函数中声明一个Student类型的变量,为其赋值,然后打印其内容。
练习 15: 文件 I/O
- 编写一个程序,将 "This is a test line." 写入到一个名为
output.txt的文件中。 - 编写另一个程序,从
output.txt文件中读取内容,并将其打印到控制台。
综合挑战题
目标: 综合运用所学知识解决一个实际问题。
挑战:学生成绩管理系统
- 使用
struct定义一个Student结构体,包含学号、姓名和三门课程的成绩。 - 在程序中创建一个
Student类型的数组,用于存储多个学生的信息。 - 实现一个简单的菜单:
- Add Student: 允许用户输入一个学生的信息并添加到数组中。
- Display All Students: 遍历数组并打印所有学生的信息,同时计算并显示每个学生的平均分。
- Exit: 退出程序。
- 将所有学生的信息(包括平均分)保存到一个名为
students.dat的文件中。
答案提示
- 练习 1: 声明变量时指定类型,如
int num = 42;,字符串使用char str[] = "Hello";。 - 练习 3: 是除法, 是取模(求余数)。
a++是先用后加,++a是先加后用。 - 练习 5:
if-else用于范围判断,switch用于固定选项判断,别忘了break;。 - 练习 6:
for循环次数确定,while循环次数不确定,do-while至少执行一次。 - 练习 7: 函数声明:
int isEven(int num);,函数定义:int isEven(int num) { return num % 2 == 0; }。 - 练习 12:
int *ptr = &x;。*ptr解引用,ptr是地址。 - 练习 14:
struct Student { ... };,声明变量:struct Student s1;。 - 挑战题: 使用
switch语句实现菜单,文件操作使用fopen,fprintf,fscanf,fclose,注意处理文件打开失败的情况。
祝你练习顺利!如果对某个练习有疑问,可以随时提问。
