零、引用
期末考试临近,无论你是初学者还是"熬夜选手",C语言的学习都需要系统梳理和重点突破。本文将全面总结C语言的核心知识点,并针对考试中常见的题型提供复习建议,助你轻松拿下高分。
文末提供了一款免费的C语言刷题软件
一、C语言基础知识
- 数据类型和变量
C语言的核心在于数据类型及其使用:
- 基本数据类型:int,float,double,char
- 修饰符:short,long,unsigned,signed
- 定义变量的规则:
- 必须先声明后使用。
命名遵循标识符规则(字母开头,不包含特殊符号)。
- 常量与变量
- 常量:用#define定义或const修饰。
- 变量:使用=赋值,可多次更改值。
- 运算符与表达式
- 算术运算符:+,-,*,/,%
- 关系运算符:>,<,>=,<=,==,!=
- 逻辑运算符:&&,||,!
- 位运算符:&,|,^,~,<<,>>
- 赋值运算符:=及复合赋值(如+=,-=)。
二、控制语句与流程控制
- 条件分支
if语句:
c
if (condition) {
// code
} else {
// code
}
switch语句:适用于多条件判断。
c
switch (variable) {
case value1:
// code
break;
case value2:
// code
break;
default:
// code
}
- 循环语句
for循环:
c
for (int i = 0; i < n; i++) {
// code
}
while循环:
c
while (condition) {
// code
}
do-while循环:至少执行一次。
c
do {
// code
} while (condition);
三、数组与字符串
- 数组
- 一维数组:int arr[10];
- 多维数组:int matrix[3][3];
- 常见操作:遍历、求和、排序(冒泡、选择、快速排序)。
- 字符串
- 定义:char str[] = "Hello";
- 常用函数(需引入<string.h>):
- strlen():计算长度
- strcpy():复制字符串
- strcmp():比较字符串
- strcat():拼接字符串
四、函数
- 函数定义与调用
语法:
c
returnType functionName(parameters) {
// code
return value;
}
- 函数的参数传递
值传递:传递的是变量值。
指针传递:可以直接修改变量值。 - 递归
函数调用自身,需有终止条件。
c
int factorial(int n) {
if (n == 0) return 1;
return n * factorial(n - 1);
}
五、指针
- 指针的定义与使用
定义:int ptr;
指针运算:(解引用),&(取地址)。 - 指针与数组
数组名是指向首元素的指针。
遍历数组:*(arr + i) 等价于 arr[i]。 - 常见指针问题
空指针:NULL。
悬空指针:释放的内存仍被指向。
六、结构体与文件操作
- 结构体
定义:
c
struct Student {
char name[50];
int age;
};
使用:struct Student s1;
- 文件操作
- 常用函数(需引入<stdio.h>):
- fopen():打开文件
- fclose():关闭文件
- fread()/fwrite():读写文件
- fprintf()/fscanf():格式化读写
七、常见题目示例
- 数组反转
题目描述:编写一个程序,反转一个整数数组并输出反转后的数组。
c
#include <stdio.h>
void reverseArray(int arr[], int n) {
int start = 0, end = n - 1;
while (start < end) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
reverseArray(arr, n);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
- 查找最大值与最小值
题目描述:编写一个程序,找出数组中的最大值和最小值。
答案:
c
#include <stdio.h>
void findMaxMin(int arr[], int n) {
int max = arr[0], min = arr[0];
for (int i = 1; i < n; i++) {
if (arr[i] > max) max = arr[i];
if (arr[i] < min) min = arr[i];
}
printf("最大值: %d, 最小值: %d\n", max, min);
}
int main() {
int arr[] = {3, 5, 1, 9, 7};
int n = sizeof(arr) / sizeof(arr[0]);
findMaxMin(arr, n);
return 0;
}
- 斐波那契数列
题目描述:编写一个程序,计算斐波那契数列的前n项。
答案:
c
#include <stdio.h>
void fibonacci(int n) {
int a = 0, b = 1, c;
printf("%d %d ", a, b);
for (int i = 2; i < n; i++) {
c = a + b;
printf("%d ", c);
a = b;
b = c;
}
printf("\n");
}
int main() {
int n = 5;
fibonacci(n);
return 0;
}
- 质数判断
题目描述:编写一个程序,判断一个整数是否为质数(只能被1和自身整除)。
答案:
c
#include <stdio.h>
#include <stdbool.h>
#include <math.h>
bool isPrime(int n) {
if (n <= 1) return false;
for (int i = 2; i <= sqrt(n); i++) {
if (n % i == 0) return false;
}
return true;
}
int main() {
int n = 7;
if (isPrime(n)) {
printf("Yes\n");
} else {
printf("No\n");
}
return 0;
}
- 字符串反转
题目描述:编写一个程序,反转一个字符串。
答案:
c
#include <stdio.h>
#include <string.h>
void reverseString(char str[]) {
int start = 0, end = strlen(str) - 1;
while (start < end) {
char temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end--;
}
}
int main() {
char str[] = "hello";
reverseString(str);
printf("%s\n", str);
return 0;
}
- 求数组的平均值
题目描述:编写一个程序,计算整数数组的平均值。
答案:
c
#include <stdio.h>
float calculateAverage(int arr[], int n) {
int sum = 0;
for (int i = 0; i < n; i++) {
sum += arr[i];
}
return (float)sum / n;
}
int main() {
int arr[] = {2, 4, 6, 8};
int n = sizeof(arr) / sizeof(arr[0]);
printf("%.2f\n", calculateAverage(arr, n));
return 0;
}
- 冒泡排序
题目描述:编写一个程序,实现冒泡排序算法,对一个整数数组进行升序排序。
答案:
c
#include <stdio.h>
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main() {
int arr[] = {5, 2, 9, 1, 5, 6};
int n = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, n);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
- 计算阶乘
题目描述:编写一个程序,计算n的阶乘(n!)。
答案:
c
#include <stdio.h>
int factorial(int n) {
if (n == 0) return 1;
return n * factorial(n - 1);
}
int main() {
int n = 5;
printf("%d\n", factorial(n));
return 0;
}
- 合并两个有序数组
题目描述:编写一个程序,合并两个已排序的数组,输出合并后的数组。
答案:
c
#include <stdio.h>
void mergeArrays(int arr1[], int n1, int arr2[], int n2) {
int i = 0, j = 0, k = 0;
int merged[n1 + n2];
while (i < n1 && j < n2) {
if (arr1[i] < arr2[j]) {
merged[k++] = arr1[i++];
} else {
merged[k++] = arr2[j++];
}
}
while (i < n1) merged[k++] = arr1[i++];
while (j < n2) merged[k++] = arr2[j++];
for (int i = 0; i < n1 + n2; i++) {
printf("%d ", merged[i]);
}
printf("\n");
}
int main() {
int arr1[] = {1, 3, 5};
int arr2[] = {2, 4, 6};
mergeArrays(arr1, 3, arr2, 3);
return 0;
}
- 判断回文字符串
题目描述:编写一个程序,判断一个字符串是否为回文字符串(正着读和反着读都相同)。
答案:
c
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
bool isPalindrome(char str[]) {
int start = 0, end = strlen(str) - 1;
while (start < end) {
if (str[start] != str[end]) return false;
start++;
end--;
}
return true;
}
int main() {
char str[] = "madam";
if (isPalindrome(str)) {
printf("Yes\n");
} else {
printf("No\n");
}
return 0;
}
八、结语
在本文中,我们深入探讨了一些常见的C语言编程题目,这些题目不仅帮助我们巩固了基础知识,还锻炼了我们的编程思维。从数组操作到字符串处理,再到经典算法的实现,每一道题目都涉及到C语言中的核心概念。无论你是刚刚接触C语言的新手,还是准备迎接期末考试的同学,通过这些练习,你将更加熟练地掌握语言的基本语法与常用技巧。
编程不仅仅是解题,更是解决问题的思维过程。希望通过这些题目的练习,你能够提高自己的逻辑思维能力,增强解决实际问题的信心。如果你在实践中遇到困难,记住:编程是一项需要耐心与持续学习的技能。不断探索、反复练习,最终你一定会在编程的道路上走得更远。
祝大家在学习C语言的过程中,收获更多的乐趣与成就!
通过网盘分享的文件:全国计算机等级考试题库(持续更新)
链接: https://pan.baidu.com/s/1DvTlSGqytE7iT2292DFmSQ?pwd=6spn 提取码: 6spn
链接失效请私信,谢谢