目录
C语言基础
C语言的起源和特点:
举例
变量和常量的定义和使用
举例
运算符和表达式
输入输出函数
示例
控制结构
条件语句
循环语句
常见的循环语句包括for循环、while循环和do-while循环:
跳转语句
总结
C语言起源于20世纪70年代初,由贝尔实验室的丹尼斯·里奇(Dennis Ritchie)和肯·汤普逊(Ken Thompson)共同开发。最初,C语言是为了在Unix操作系统上编写系统软件而设计的。
C语言的特点包括:
简洁高效:C语言的语法相对简单,能够以较少的代码完成复杂的任务。它提供了一些基本的数据类型和控制结构,使程序员能够更直观地表达算法和逻辑。
可移植性强:C语言的代码可以在不同的操作系统和硬件平台上进行移植。这是因为C语言的设计目标之一是提供一个中间层,能够与底层硬件和操作系统进行有效的交互。
高性能:C语言的代码经过优化后,可以获得很高的执行效率。C语言支持低级别的操作,例如位运算和指针操作,使程序员能够更好地控制内存和计算资源。
直接访问内存:C语言提供了指针的概念,允许程序直接访问内存地址。这使得C语言在处理底层系统和资源时非常灵活,例如动态内存分配和数据结构的实现。
丰富的库函数:C语言提供了丰富的标准库函数,涵盖了各种常见的操作,例如输入输出、字符串处理、数学运算等。这些库函数使得开发人员能够快速地实现各种功能。
应用广泛:由于C语言的高性能和可移植性,它被广泛应用于系统软件、嵌入式系统、游戏开发、科学计算、网络编程等领域。
C语言的数据类型(int, float, double, char等)
基本整数类型:
int
:用于表示整数,通常占用4个字节。short
:用于表示短整数,通常占用2个字节。long
:用于表示长整数,通常占用4或8个字节,取决于系统位数。char
:用于表示字符,通常占用1个字节。浮点数类型:
float
:用于表示单精度浮点数,通常占用4个字节。double
:用于表示双精度浮点数,通常占用8个字节。枚举类型(Enum):用于定义一组具名的常量值,例如定义颜色、状态等。
void类型:表示“无类型”,常用于函数返回类型、指针类型等。
指针类型(Pointer):用于存储内存地址,可以用来间接访问数据。
数组类型:用于存储一组具有相同数据类型的元素。
此外,C语言还提供了一些复合数据类型,包括结构体(struct)和联合体(union),用于存储不同类型的数据成员。
C语言还支持通过类型修饰符来扩展数据类型的含义:
signed
和unsigned
:用于修饰整数类型,指定是否允许负数。const
:用于修饰变量,表示其值不可修改。volatile
:用于修饰变量,表示其值可能被程序以外的因素修改。
- 整数类型:
int num = 10; short count = 5; long largeNum = 1000000L;
- 浮点数类型:
float average = 85.5f; double pi = 3.1415926;
- 字符类型:
char ch = 'A';
- 枚举类型:
enum Color { RED, GREEN, BLUE }; enum Color chosenColor = GREEN;
- 指针类型:
int* ptr; // 声明一个指向整数的指针变量 int num = 20; ptr = # // 将指针变量指向num的地址 printf("num的值为:%d\n", *ptr); // 输出:num的值为:20
- 数组类型:
int arr[5] = {1, 2, 3, 4, 5}; // 声明一个包含5个整数的数组 printf("arr[2]的值为:%d\n", arr[2]); // 输出:arr[2]的值为:3
- 结构体类型:
struct Person { char name[20]; int age; float height; }; struct Person p1; // 声明一个Person类型的结构体变量 strcpy(p1.name, "John"); // 对结构体成员进行赋值 p1.age = 25; p1.height = 175.5;
变量的定义和使用:
- 定义变量:在使用变量之前,需要先定义它们的数据类型和名称。定义变量的语法是:
数据类型 变量名;
例如:int num;
- 初始化变量:可以选择在定义变量的同时为其赋初值,也可以稍后在程序中进行赋值操作。例如:
int num = 10;
或者num = 20;
- 使用变量:在程序中可以通过变量名来访问和修改变量的值。例如:
printf("num的值为:%d\n", num);
或者num = num + 5;
常量的定义和使用:
- 定义常量:常量是指在程序中不可更改的固定值。在C语言中,可以使用
#define
预处理指令或const
关键字来定义常量。
#define
预处理指令:#define 常量名 常量值
。例如:#define PI 3.1415926
const
关键字:const 数据类型 常量名 = 常量值;
。例如:const int MAX_NUM = 100;
- 使用常量:在程序中可以直接使用常量名来代表其对应的值。例如:
int radius = 5;
int area = PI * radius * radius;
- 变量的定义和使用:
int num; // 定义一个整数类型的变量 num = 10; // 对变量进行赋值 printf("num的值为:%d\n", num); // 输出:num的值为:10 float salary = 1000.50f; // 定义并初始化一个浮点数类型的变量 salary = salary + 500.75f; // 修改变量的值 printf("当前的工资为:%.2f\n", salary); // 输出:当前的工资为:1501.25
- 常量的定义和使用:
#define PI 3.1415926 // 定义一个宏常量 const int MAX_NUM = 100; // 定义一个常量 float radius = 5.5; float circumference = 2 * PI * radius; // 使用宏常量计算圆的周长 printf("圆的周长为:%.2f\n", circumference); // 输出:圆的周长为:34.56 int score; scanf("%d", &score); if (score > MAX_NUM) { // 使用常量进行条件判断 printf("分数超过了最大值\n"); }
运算符是用于在表达式中执行各种操作的符号。表达式由运算符和操作数组成,通过运算符对操作数进行计算得到结果。
- 算术运算符:
int a = 10, b = 3; int sum = a + b; // 加法运算 int difference = a - b; // 减法运算 int product = a * b; // 乘法运算 int quotient = a / b; // 整除运算 int remainder = a % b; // 取余运算 float result = (float)a / b; // 强制类型转换后的除法运算
- 关系运算符:
int x = 5, y = 8; if (x == y) { // 相等判断 printf("x等于y\n"); } if (x != y) { // 不等判断 printf("x不等于y\n"); } if (x > y) { // 大于判断 printf("x大于y\n"); } if (x < y) { // 小于判断 printf("x小于y\n"); } if (x >= y) { // 大于等于判断 printf("x大于等于y\n"); } if (x <= y) { // 小于等于判断 printf("x小于等于y\n"); }
- 逻辑运算符:
int p = 1, q = 0; if (p && q) { // 逻辑与 printf("p和q都为真\n"); } if (p || q) { // 逻辑或 printf("p和q至少有一个为真\n"); } if (!p) { // 逻辑非 printf("p为假\n"); }
- 赋值运算符:
int num = 10; num += 5; // 等同于 num = num + 5; num -= 3; // 等同于 num = num - 3; num *= 2; // 等同于 num = num * 2; num /= 4; // 等同于 num = num / 4; num %= 3; // 等同于 num = num % 3;
- 自增和自减运算符:
int count = 5; count++; // 自增1,等同于 count = count + 1; count--; // 自减1,等同于 count = count - 1;
- 算术表达式:
int a = 5, b = 3, c = 2; int result1 = a + b - c * 2; // 算术运算表达式 float result2 = (float)(a + b) / c; // 强制类型转换和除法运算表达式
- 关系表达式:
int x = 10, y = 15, z = 10; int result1 = x > y; // 大于运算,结果为0(假) int result2 = x == z; // 等于运算,结果为1(真) int result3 = x >= z && y < z; // 大于等于和小于运算,结果为0(假)
- 逻辑表达式:
int p = 1, q = 0, r = 1; int result1 = p && q; // 逻辑与运算,结果为0(假) int result2 = p || q || r; // 逻辑或运算,结果为1(真) int result3 = !(p && r); // 逻辑非运算,结果为0(假)
- 条件表达式:
int score = 85; char grade = (score >= 90) ? 'A' : ((score >= 80) ? 'B' : 'C'); // 条件运算符表达式,根据分数确定等级
- 函数调用表达式:
int x = 5, y = 3; int max = (x > y) ? x : y; // 调用条件运算符,返回较大的数
示例
#include
int main() { int num; printf("请输入一个整数:"); scanf("%d", &num); // 从用户处获取输入 printf("您输入的整数是:%d\n", num); // 将结果输出给用户 return 0; }
if
语句:int num = 10; if (num > 0) { printf("num是正数\n"); }
if-else
语句:int num = -5; if (num > 0) { printf("num是正数\n"); } else { printf("num是负数\n"); }
if-else if-else
语句:int num = 0; if (num > 0) { printf("num是正数\n"); } else if (num < 0) { printf("num是负数\n"); } else { printf("num是零\n"); }
switch
语句:int choice = 2; switch (choice) { case 1: printf("选择了1\n"); break; case 2: printf("选择了2\n"); break; case 3: printf("选择了3\n"); break; default: printf("无效的选择\n"); break; }
常见的循环语句包括
for
循环、while
循环和do-while
循环:
for
循环:for (int i = 0; i < 5; i++) { printf("%d ", i); }
while
循环:int i = 0; while (i < 5) { printf("%d ", i); i++; }
do-while
循环:int i = 0; do { printf("%d ", i); i++; } while (i < 5);
在C语言中,跳转语句用于在程序执行过程中改变代码的正常执行顺序,从而实现跳过特定代码块或无条件地转移到程序的其他位置。常见的跳转语句包括
break
、continue
、goto
和return
语句。以下是这些跳转语句的示例:
break
语句:用于在循环或switch
语句中终止代码块的执行,并跳出循环或switch
语句。for (int i = 0; i < 5; i++) { if (i == 3) { break; } printf("%d ", i); }
continue
语句:用于跳过当前迭代中剩余的代码,并开始下一次迭代。for (int i = 0; i < 5; i++) { if (i == 3) { continue; } printf("%d ", i); }
goto
语句:通过指定标签名称,直接跳转到代码中的标签位置。尽量避免使用goto
语句,因为它可能导致代码的可读性和维护性降低。int num = 5; if (num > 0) { goto positive; } else { goto negative; } positive: printf("数字是正数\n"); goto end; negative: printf("数字是负数\n"); end: printf("程序结束\n");
return
语句:用于从函数中返回值,并提前终止函数的执行。int add(int a, int b) { return a + b; }
变量和数据类型:
- C语言中的变量用于存储数据,并且每个变量都有一个特定的数据类型,如整数(int)、浮点数(float)、字符(char)等。
- 变量必须在使用前进行声明,并且可以进行赋值、运算和操作。
输入和输出:
printf()
函数用于格式化输出到屏幕上。scanf()
函数用于从用户输入中读取数据。getchar()
函数用于读取单个字符。运算符:
- 常见的算术运算符有加法(+)、减法(-)、乘法(*)、除法(/)等。
- 比较运算符用于比较两个值的关系,如相等(==)、大于(>)、小于(<)等。
- 逻辑运算符用于组合条件,如与(&&)、或(||)和非(!)等。
控制结构:
if
语句用于根据条件执行不同的代码块。if-else
语句在条件为真时执行一个代码块,在条件为假时执行另一个代码块。switch
语句根据表达式的值选择执行不同的代码分支。for
循环用于重复执行一段代码,可以在循环中控制计数器和终止条件。while
循环用于在满足条件时重复执行代码块。do-while
循环先执行一次代码块,然后在满足条件时重复执行。break
语句用于终止循环或switch
语句的执行。continue
语句用于跳过当前迭代,继续下一次迭代。