C语言基础知识
C语言是一门通用的、过程化的计算机程序设计语言,由丹尼斯·里奇在1972年为了重写UNIX操作系统而开发。C语言具有高效、灵活、功能丰富、表达力强和较高的移植性等特点。
1. 基本语法结构
Hello World程序
1 2 3 4 5 6 7
| #include <stdio.h>
int main() { printf("Hello,World!\n"); return 0; }
|
程序结构说明
#include <stdio.h>: 预处理指令,包含标准输入输出库
int main(): 主函数,程序执行的入口点
printf(): 标准输出函数
return 0: 返回值,表示程序正常结束
2. 数据类型
基本数据类型
| 类型 |
关键字 |
字节数 |
取值范围 |
| 字符型 |
char |
1 |
-128 ~ 127 |
| 整型 |
int |
4 |
-2,147,483,648 ~ 2,147,483,647 |
| 短整型 |
short |
2 |
-32,768 ~ 32,767 |
| 长整型 |
long |
8 |
更大范围 |
| 单精度浮点 |
float |
4 |
约7位有效数字 |
| 双精度浮点 |
double |
8 |
约15位有效数字 |
变量声明和初始化
1 2 3 4
| int age=25; float height=175.5; char grade='A'; double pi=3.14159265359;
|
3. 输入输出
基本输入输出函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #include <stdio.h>
int main() { int number; char name[50];
printf("请输入您的姓名: ");
scanf("%s", name); printf("请输入一个数字: "); scanf("%d", &number);
printf("你好 %s,你输入的数字是 %d\n", name, number);
return 0; }
|
常用格式化符号
%d: 整数
%f: 浮点数
%c: 字符
%s: 字符串
%x: 十六进制
4. 运算符
算术运算符
1 2 3 4 5 6
| int a=10, b=3; int sum=a+b; int diff=a-b; int product=a*b; int quotient=a/b; int remainder=a%b;
|
比较运算符
1 2 3 4 5 6 7
| int x=5, y=10; printf("%d\n", x==y); printf("%d\n", x!=y); printf("%d\n", x<y); printf("%d\n", x>y); printf("%d\n", x<=y); printf("%d\n", x>=y);
|
逻辑运算符
1 2 3 4
| int a=1, b=0; printf("%d\n", a&&b); printf("%d\n", a||b); printf("%d\n", !a);
|
5. 控制结构
if-else语句
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| int score=85;
if (score>=90) { printf("优秀\n"); } else if (score>=80) { printf("良好\n"); } else if (score>=60) { printf("及格\n"); } else { printf("不及格\n"); }
|
switch语句
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| char grade='B';
switch (grade) { case 'A': printf("优秀\n"); break; case 'B': printf("良好\n"); break; case 'C': printf("及格\n"); break; default: printf("需要努力\n"); break; }
|
循环结构
for循环
1 2 3 4 5 6
| for (int i=1; i<=10; i++) { printf("%d ", i); } printf("\n");
|
while循环
1 2 3 4 5 6
| int count=1; while (count<=5) { printf("第%d次循环\n", count); count++; }
|
do-while循环
1 2 3 4 5 6 7 8 9 10
| int num; do { printf("请输入一个正数 (输入0退出): "); scanf("%d", &num); if (num>0) { printf("你输入了: %d\n", num); } } while (num!=0);
|
6. 数组
一维数组
1 2 3 4 5 6 7 8 9 10 11 12 13
| int numbers[5]={1, 2, 3, 4, 5}; int scores[]={95, 87, 92, 78, 88};
printf("第一个元素: %d\n", numbers[0]); numbers[2]=100;
for (int i=0; i<5; i++) { printf("numbers[%d] = %d\n", i, numbers[i]); }
|
字符数组(字符串)
1 2 3 4 5
| char name[20]="张三"; char greeting[]="Hello World";
printf("姓名: %s\n", name); printf("问候: %s\n", greeting);
|
7. 函数
函数定义和调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #include <stdio.h>
int add(int a, int b); void printInfo(char name[], int age);
int main() { int result=add(10, 20); printf("10 + 20 = %d\n", result);
printInfo("小明", 18);
return 0; }
int add(int a, int b) { return a+b; }
void printInfo(char name[], int age) { printf("姓名: %s, 年龄: %d\n", name, age); }
|
递归函数示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| int factorial(int n) { if (n<=1) { return 1; } return n*factorial(n-1); }
int main() { printf("5! = %d\n", factorial(5)); return 0; }
|
8. 指针基础
指针声明和使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include <stdio.h>
int main() { int num=42; int *ptr=#
printf("num的值: %d\n", num); printf("num的地址: %p\n", &num); printf("ptr的值(地址): %p\n", ptr); printf("ptr指向的值: %d\n", *ptr);
*ptr=100; printf("修改后num的值: %d\n", num);
return 0; }
|
9. 结构体
结构体定义和使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| #include <stdio.h> #include <string.h>
struct Student { char name[50]; int age; float score; };
int main() { struct Student student1;
strcpy(student1.name, "李四"); student1.age=20; student1.score=95.5;
printf("姓名: %s\n", student1.name); printf("年龄: %d\n", student1.age); printf("分数: %.1f\n", student1.score);
return 0; }
|
10. 实用示例
简单计算器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| #include <stdio.h>
int main() { char operator; double num1, num2, result;
printf("请输入运算符 (+, -, *, /): "); scanf("%c", &operator);
printf("请输入两个数字: "); scanf("%lf %lf", &num1, &num2);
switch (operator) { case '+': result=num1+num2; break; case '-': result=num1-num2; break; case '*': result=num1*num2; break; case '/': if (num2!=0) { result=num1/num2; } else { printf("错误: 除数不能为0\n"); return 1; } break; default: printf("错误: 无效的运算符\n"); return 1; }
printf("%.2lf %c %.2lf = %.2lf\n", num1, operator, num2, result);
return 0; }
|