实例1:简单的“Hello, World!”程序
首先,让我们从最经典的“Hello, World!”程序开始。这是一个非常基础的C语言程序,旨在向屏幕打印“Hello, World!”消息。
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
这个例子展示了如何包含头文件stdio.h,它提供了printf函数,用于输出文本到屏幕。main函数是程序的入口点,而return 0;表示程序成功执行。
实例2:变量和数据类型
接下来,我们将学习如何声明和使用变量。这里,我们将创建一个整数变量,并打印它的值。
#include <stdio.h>
int main() {
int number = 10;
printf("The value of number is: %d\n", number);
return 0;
}
在这个例子中,我们声明了一个名为number的整数变量,并初始化为10。使用%d格式化输出,我们可以将变量的值打印到屏幕上。
实例3:控制流:if语句
控制流是编程的核心。这里,我们将使用if语句来检查一个条件。
#include <stdio.h>
int main() {
int number = 5;
if (number > 0) {
printf("The number is positive.\n");
} else {
printf("The number is not positive.\n");
}
return 0;
}
这个例子展示了如何使用if语句来检查number是否大于0。如果是,打印一条消息表示它是正数;否则,打印一条消息表示它不是正数。
实例4:循环:for循环
循环是重复执行代码的一种方式。这里,我们将使用for循环来打印从1到5的数字。
#include <stdio.h>
int main() {
for (int i = 1; i <= 5; i++) {
printf("%d\n", i);
}
return 0;
}
在这个例子中,for循环初始化一个名为i的变量,然后检查它是否小于或等于5。如果是,它将打印i的值,并递增i。这个过程会重复,直到i的值大于5。
实例5:循环:while循环
另一种循环是while循环,它将继续执行,直到指定的条件不再满足。
#include <stdio.h>
int main() {
int i = 1;
while (i <= 5) {
printf("%d\n", i);
i++;
}
return 0;
}
在这个例子中,我们使用while循环来打印从1到5的数字。循环会继续,直到i的值大于5。
实例6:数组和指针
数组是存储一系列相同类型数据的集合。指针是存储变量地址的变量。这里,我们将创建一个整数数组,并通过指针访问它的元素。
#include <stdio.h>
int main() {
int numbers[5] = {1, 2, 3, 4, 5};
int *ptr = numbers;
for (int i = 0; i < 5; i++) {
printf("numbers[%d] = %d, Address = %p\n", i, *(ptr + i), (ptr + i));
}
return 0;
}
在这个例子中,我们创建了一个包含5个整数的数组numbers,并使用指针ptr来访问它的元素。*(ptr + i)是访问数组元素的一种方式。
实例7:函数
函数是代码的模块,可以重复使用。这里,我们将创建一个函数来计算两个数的和。
#include <stdio.h>
int sum(int a, int b) {
return a + b;
}
int main() {
int result = sum(3, 4);
printf("The sum is: %d\n", result);
return 0;
}
在这个例子中,我们定义了一个名为sum的函数,它接受两个整数参数并返回它们的和。在main函数中,我们调用sum函数并打印结果。
实例8:结构体
结构体允许我们创建复杂的数据类型,将多个数据项组合在一起。这里,我们将创建一个简单的结构体来存储个人信息。
#include <stdio.h>
typedef struct {
char name[50];
int age;
float salary;
} Employee;
int main() {
Employee emp = {"John Doe", 30, 50000.0};
printf("Name: %s\n", emp.name);
printf("Age: %d\n", emp.age);
printf("Salary: %.2f\n", emp.salary);
return 0;
}
在这个例子中,我们定义了一个名为Employee的结构体,它包含姓名、年龄和薪水。我们创建了一个Employee类型的变量emp并初始化它,然后打印出相关信息。
实例9:指针和函数
指针和函数结合使用时非常强大。这里,我们将修改一个通过指针传递的变量的值。
#include <stdio.h>
void modifyValue(int *ptr) {
*ptr = 20;
}
int main() {
int number = 10;
modifyValue(&number);
printf("The modified value is: %d\n", number);
return 0;
}
在这个例子中,我们定义了一个名为modifyValue的函数,它接受一个指向整数的指针。函数将指针指向的值修改为20。在main函数中,我们传递number变量的地址到modifyValue函数,并打印修改后的值。
实例10:动态内存分配
动态内存分配允许我们在程序运行时分配和释放内存。这里,我们将使用malloc和free函数。
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr = (int *)malloc(sizeof(int));
if (ptr != NULL) {
*ptr = 30;
printf("The value is: %d\n", *ptr);
free(ptr);
}
return 0;
}
在这个例子中,我们使用malloc函数分配了足够存储一个整数的内存,并将其转换为指向整数的指针。我们初始化并打印了值,然后使用free函数释放了内存。
实例11:字符串处理
C语言提供了对字符串处理的支持。这里,我们将使用strlen函数来获取字符串的长度。
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World!";
printf("The length of the string is: %lu\n", strlen(str));
return 0;
}
在这个例子中,我们使用strlen函数来获取字符串str的长度,并打印它。
实例12:文件操作
C语言允许我们读写文件。这里,我们将创建一个新文件并写入一些内容。
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "w");
if (file == NULL) {
printf("Error opening file!\n");
return 1;
}
fprintf(file, "Hello, World!\n");
fclose(file);
return 0;
}
在这个例子中,我们使用fopen函数以写入模式打开一个名为example.txt的文件。使用fprintf函数写入一些内容,然后使用fclose函数关闭文件。
实例13:输入输出重定向
在C语言中,我们可以将标准输入和输出重定向到文件。
./program < input.txt > output.txt
这个命令将input.txt的内容作为标准输入传递给程序,并将程序的输出写入到output.txt文件中。
实例14:宏定义
宏定义是一种预处理技术,可以用于创建可重用的代码片段。
#define PI 3.14159
int main() {
printf("The value of PI is: %f\n", PI);
return 0;
}
在这个例子中,我们定义了一个名为PI的宏,它代表了圆周率的值。
实例15:条件编译
条件编译允许我们在编译时根据条件包含或排除代码。
#include <stdio.h>
#if defined(DEBUG)
printf("Debugging is enabled.\n");
#endif
int main() {
return 0;
}
在这个例子中,如果编译时定义了DEBUG宏,它将打印一条调试消息。
实例16:预处理指令
预处理指令是C语言的一部分,用于在编译之前执行某些操作。
#include <stdio.h>
#define MAX_SIZE 10
int main() {
int array[MAX_SIZE];
printf("The size of the array is: %d\n", MAX_SIZE);
return 0;
}
在这个例子中,我们使用#define指令创建了一个名为MAX_SIZE的宏,它定义了数组的大小。
实例17:预处理器宏和宏展开
预处理器宏可以在编译时替换文本。这里,我们使用一个简单的宏来计算两个数的和。
#include <stdio.h>
#define ADD(a, b) ((a) + (b))
int main() {
int result = ADD(5, 10);
printf("The result is: %d\n", result);
return 0;
}
在这个例子中,我们定义了一个名为ADD的宏,它接受两个参数并返回它们的和。
实例18:预处理器条件编译
预处理器条件编译允许我们在编译时根据条件包含或排除代码。
#include <stdio.h>
#if defined(VERSION)
#if VERSION == 1
printf("Version 1 features.\n");
#elif VERSION == 2
printf("Version 2 features.\n");
#else
printf("Unknown version.\n");
#endif
#else
printf("Version not defined.\n");
#endif
int main() {
return 0;
}
在这个例子中,我们根据VERSION宏的值打印不同的消息。
实例19:预处理器文件包含
预处理器文件包含允许我们包含其他源代码文件。
// header.h
#define MAX_SIZE 10
// main.c
#include "header.h"
int main() {
int array[MAX_SIZE];
printf("The size of the array is: %d\n", MAX_SIZE);
return 0;
}
在这个例子中,我们创建了一个名为header.h的头文件,它包含了宏定义。在main.c文件中,我们包含了这个头文件。
实例20:预处理器行控制
预处理器行控制允许我们控制源代码的行号。
#include <stdio.h>
int main() {
printf("This is line %d.\n", __LINE__);
return 0;
}
在这个例子中,我们使用__LINE__宏来获取当前行的行号。
实例21:预处理器宏定义和宏展开
预处理器宏定义和宏展开是一种预处理技术,用于创建可重用的代码片段。
#include <stdio.h>
#define SQUARE(x) (x * x)
int main() {
int result = SQUARE(5);
printf("The square of 5 is: %d\n", result);
return 0;
}
在这个例子中,我们定义了一个名为SQUARE的宏,它接受一个参数并返回它的平方。
实例22:预处理器宏参数
预处理器宏参数允许我们传递参数到宏中。
#include <stdio.h>
#define MAX(a, b) ((a) > (b) ? (a) : (b))
int main() {
int max_value = MAX(5, 10);
printf("The maximum value is: %d\n", max_value);
return 0;
}
在这个例子中,我们定义了一个名为MAX的宏,它接受两个参数并返回较大的值。
实例23:预处理器条件编译和宏定义
预处理器条件编译和宏定义允许我们在编译时根据条件包含或排除代码。
#include <stdio.h>
#if defined(ENABLE_DEBUG)
#define DEBUG_PRINT(x) printf("Debug: %s\n", x)
#else
#define DEBUG_PRINT(x)
#endif
int main() {
DEBUG_PRINT("This is a debug message.");
return 0;
}
在这个例子中,我们定义了一个名为DEBUG_PRINT的宏,它根据ENABLE_DEBUG宏的存在打印或忽略调试消息。
实例24:预处理器文件包含和宏定义
预处理器文件包含和宏定义允许我们包含其他源代码文件并定义宏。
// header.h
#define MAX_SIZE 10
// main.c
#include "header.h"
int main() {
int array[MAX_SIZE];
printf("The size of the array is: %d\n", MAX_SIZE);
return 0;
}
在这个例子中,我们创建了一个名为header.h的头文件,它包含了宏定义。在main.c文件中,我们包含了这个头文件。
实例25:预处理器行控制和宏定义
预处理器行控制和宏定义允许我们控制源代码的行号并定义宏。
#include <stdio.h>
#define DEBUG_LINE printf("Debug: Line %d\n", __LINE__)
int main() {
DEBUG_LINE;
return 0;
}
在这个例子中,我们使用__LINE__宏来获取当前行的行号,并将其打印出来。
实例26:预处理器宏展开和宏参数
预处理器宏展开和宏参数允许我们传递参数到宏中并展开它们。
#include <stdio.h>
#define REPEAT(x, n) for (int i = 0; i < n; i++) printf(x)
int main() {
REPEAT("%d ", 5);
return 0;
}
在这个例子中,我们定义了一个名为REPEAT的宏,它接受一个字符串和重复次数,并在循环中打印这个字符串。
实例27:预处理器条件编译和宏参数
预处理器条件编译和宏参数允许我们在编译时根据条件包含或排除代码,并传递参数到宏中。
#include <stdio.h>
#if defined(ENABLE_LOG)
#define LOG(x) printf("Log: %s\n", x)
#else
#define LOG(x)
#endif
int main() {
LOG("This is a log message.");
return 0;
}
在这个例子中,我们定义了一个名为LOG的宏,它根据ENABLE_LOG宏的存在打印或忽略日志消息。
实例28:预处理器文件包含和宏参数
预处理器文件包含和宏参数允许我们包含其他源代码文件并定义宏。
// header.h
#define MAX_SIZE 10
// main.c
#include "header.h"
int main() {
int array[MAX_SIZE];
printf("The size of the array is: %d\n", MAX_SIZE);
return 0;
}
在这个例子中,我们创建了一个名为header.h的头文件,它包含了宏定义。在main.c文件中,我们包含了这个头文件。
实例29:预处理器行控制和宏参数
预处理器行控制和宏参数允许我们控制源代码的行号并定义宏。
#include <stdio.h>
#define DEBUG_LINE printf("Debug: Line %d\n", __LINE__)
int main() {
DEBUG_LINE;
return 0;
}
在这个例子中,我们使用__LINE__宏来获取当前行的行号,并将其打印出来。
实例30:预处理器宏展开和宏参数
预处理器宏展开和宏参数允许我们传递参数到宏中并展开它们。
#include <stdio.h>
#define REPEAT(x, n) for (int i = 0; i < n; i++) printf(x)
int main() {
REPEAT("%d ", 5);
return 0;
}
在这个例子中,我们定义了一个名为REPEAT的宏,它接受一个字符串和重复次数,并在循环中打印这个字符串。
实例31:预处理器条件编译和宏参数
预处理器条件编译和宏参数允许我们在编译时根据条件包含或排除代码,并传递参数到宏中。
#include <stdio.h>
#if defined(ENABLE_LOG)
#define LOG(x) printf("Log: %s\n", x)
#else
#define LOG(x)
#endif
int main() {
LOG("This is a log message.");
return 0;
}
在这个例子中,我们定义了一个名为LOG的宏,它根据ENABLE_LOG宏的存在打印或忽略日志消息。
实例32:预处理器文件包含和宏参数
预处理器文件包含和宏参数允许我们包含其他源代码文件并定义宏。
// header.h
#define MAX_SIZE 10
// main.c
#include "header.h"
int main() {
int array[MAX_SIZE];
printf("The size of the array is: %d\n", MAX_SIZE);
return 0;
}
在这个例子中,我们创建了一个名为header.h的头文件,它包含了宏定义。在main.c文件中,我们包含了这个头文件。
实例33:预处理器行控制和宏参数
预处理器行控制和宏参数允许我们控制源代码的行号并定义宏。
#include <stdio.h>
#define DEBUG_LINE printf("Debug: Line %d\n", __LINE__)
int main() {
DEBUG_LINE;
return 0;
}
在这个例子中,我们使用__LINE__宏来获取当前行的行号,并将其打印出来。
实例34:预处理器宏展开和宏参数
预处理器宏展开和宏参数允许我们传递参数到宏中并展开它们。
#include <stdio.h>
#define REPEAT(x, n) for (int i = 0; i < n; i++) printf(x)
int main() {
REPEAT("%d ", 5);
return 0;
}
在这个例子中,我们定义了一个名为REPEAT的宏,它接受一个字符串和重复次数,并在循环中打印这个字符串。
实例35:预处理器条件编译和宏参数
预处理器条件编译和宏参数允许我们在编译时根据条件包含或排除代码,并传递参数到宏中。
”`c
#include
#if defined(ENABLE
