C语言学习总结
一、C语言基础
- 特点:结构化、高效、可移植、面向过程
- 程序结构:
#include <stdio.h> // 预处理指令
int main() { // 主函数入口
printf("Hello, World!");
return 0; // 返回值
}
二、数据类型
类型 | 说明 | 示例 |
---|---|---|
int | 整型 | int a = 10; |
float | 单精度浮点型 | float b=3.14; |
double | 双精度浮点型 | double c=5.0; |
char | 字符型 | char d='A'; |
例题1:计算圆的面积(使用float
)
#include <stdio.h>
int main() {
float r = 5.0;
float area = 3.14159 * r * r;
printf("Area: %.2f", area);
return 0;
}
答案:Area: 78.54
三、运算符
- 算术运算符:
+
,-
,*
,/
,%
- 逻辑运算符:
&&
,||
,!
- 自增/自减:
i++
,++i
例题2:求整数各位和
#include <stdio.h>
int main() {
int num = 123, sum = 0;
while(num > 0) {
sum += num % 10;
num /= 10;
}
printf("Sum: %d", sum); // 输出6 (1+2+3)
return 0;
}
四、控制结构
- 条件语句
if (score >= 60) {
printf("Pass");
} else {
printf("Fail");
}
- 循环语句
for(int i=0; i<5; i++) {
printf("%d ", i); // 输出0 1 2 3 4
}
例题3:判断闰年
int year = 2024;
if ((year%4==0 && year%100!=0) || year%400==0) {
printf("Leap year");
} else {
printf("Not leap year");
}
答案:Leap year
五、函数
// 函数声明
int add(int a, int b);
int main() {
printf("%d", add(3,5)); // 输出8
return 0;
}
// 函数定义
int add(int a, int b) {
return a + b;
}
例题4:交换两个变量值(指针实现)
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int x=10, y=20;
swap(&x, &y);
printf("x=%d, y=%d", x, y); // x=20, y=10
return 0;
}
六、数组与指针
- 一维数组
int arr[5] = {1,2,3,4,5};
printf("%d", arr[2]); // 输出3
- 指针与数组
int *p = arr;
printf("%d", *(p+2)); // 输出3
例题5:反转数组
int arr[] = {1,2,3,4,5};
int n = sizeof(arr)/sizeof(arr[0]);
for(int i=0; i<n/2; i++) {
int temp = arr[i];
arr[i] = arr[n-1-i];
arr[n-1-i] = temp;
}
// 结果:5 4 3 2 1
七、结构体
struct Student {
char name[20];
int age;
};
int main() {
struct Student s1 = {"Alice", 20};
printf("%s: %d", s1.name, s1.age);
return 0;
}
八、文件操作
FILE *fp = fopen("test.txt", "w");
fprintf(fp, "Hello File!");
fclose(fp);
常见问题总结
- 未初始化指针:
int *p; *p=10;
(错误) - 数组越界:
int arr[3]; arr[3]=5;
(错误) - 内存泄漏:忘记使用
free()
释放动态内存
综合例题
题目:动态创建数组存储学生成绩,计算平均分
#include <stdio.h>
#include <stdlib.h>
int main() {
int n, *arr, sum=0;
printf("输入学生人数:");
scanf("%d", &n);
arr = (int*)malloc(n * sizeof(int));
for(int i=0; i<n; i++) {
printf("输入第%d个成绩:", i+1);
scanf("%d", &arr[i]);
sum += arr[i];
}
printf("平均分:%.2f", (float)sum/n);
free(arr);
return 0;
}