引言
C语言作为一种历史悠久且应用广泛的编程语言,因其简洁、高效和强大的功能,成为了学习编程的绝佳起点。本篇文章将为你提供30个实用的C语言编程实例,帮助你快速掌握C语言的核心技巧,让你在编程的道路上迈出坚实的步伐。
实例1:Hello World程序
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
这是一个简单的“Hello World”程序,用于输出“Hello, World!”到控制台。
实例2:变量与赋值
#include <stdio.h>
int main() {
int a = 10;
printf("变量a的值为:%d\n", a);
return 0;
}
本例展示了变量的声明与赋值,以及如何输出变量的值。
实例3:数据类型转换
#include <stdio.h>
int main() {
int a = 10;
float b = 5.5;
printf("a + b = %f\n", a + b);
return 0;
}
本例展示了不同数据类型之间的转换,以及如何进行加法运算。
实例4:条件语句
#include <stdio.h>
int main() {
int a = 5;
if (a > 0) {
printf("a是正数\n");
} else {
printf("a是非正数\n");
}
return 0;
}
本例展示了条件语句的使用,根据条件输出不同的信息。
实例5:循环语句
#include <stdio.h>
int main() {
int i;
for (i = 1; i <= 5; i++) {
printf("i的值为:%d\n", i);
}
return 0;
}
本例展示了循环语句的使用,用于输出1到5的数字。
实例6:数组操作
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int i;
for (i = 0; i < 5; i++) {
printf("arr[%d]的值为:%d\n", i, arr[i]);
}
return 0;
}
本例展示了数组的使用,包括数组的声明、初始化和遍历。
实例7:函数定义与调用
#include <stdio.h>
void printHello() {
printf("Hello!\n");
}
int main() {
printHello();
return 0;
}
本例展示了函数的定义与调用,用于输出“Hello!”。
实例8:指针与地址操作
#include <stdio.h>
int main() {
int a = 10;
int *ptr = &a;
printf("变量a的地址:%p\n", (void *)ptr);
printf("变量a的值:%d\n", *ptr);
return 0;
}
本例展示了指针的使用,包括指针的声明、地址获取和值获取。
实例9:结构体
#include <stdio.h>
struct Person {
char name[50];
int age;
};
int main() {
struct Person p1;
strcpy(p1.name, "张三");
p1.age = 20;
printf("姓名:%s\n", p1.name);
printf("年龄:%d\n", p1.age);
return 0;
}
本例展示了结构体的使用,包括结构体的声明、定义和访问。
实例10:文件操作
#include <stdio.h>
int main() {
FILE *fp;
char filename[] = "example.txt";
char ch;
fp = fopen(filename, "r");
if (fp == NULL) {
printf("文件打开失败\n");
return 1;
}
while ((ch = fgetc(fp)) != EOF) {
printf("%c", ch);
}
fclose(fp);
return 0;
}
本例展示了文件操作的基本方法,包括文件的打开、读取和关闭。
实例11:动态内存分配
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr;
ptr = (int *)malloc(5 * sizeof(int));
if (ptr == NULL) {
printf("内存分配失败\n");
return 1;
}
for (int i = 0; i < 5; i++) {
ptr[i] = i + 1;
}
for (int i = 0; i < 5; i++) {
printf("%d ", ptr[i]);
}
free(ptr);
return 0;
}
本例展示了动态内存分配的方法,包括malloc和free函数的使用。
实例12:指针数组
#include <stdio.h>
#include <stdlib.h>
int main() {
char *strs[] = {"Hello", "World", "C"};
int i;
for (i = 0; i < 3; i++) {
printf("%s\n", strs[i]);
}
return 0;
}
本例展示了指针数组的使用,用于存储和输出字符串。
实例13:函数指针
#include <stdio.h>
void printHello() {
printf("Hello!\n");
}
int main() {
void (*funcPtr)(void) = printHello;
funcPtr();
return 0;
}
本例展示了函数指针的使用,用于调用函数。
实例14:结构体指针
#include <stdio.h>
struct Person {
char name[50];
int age;
};
void printPerson(struct Person *p) {
printf("姓名:%s\n", p->name);
printf("年龄:%d\n", p->age);
}
int main() {
struct Person p1;
strcpy(p1.name, "李四");
p1.age = 25;
printPerson(&p1);
return 0;
}
本例展示了结构体指针的使用,以及如何通过指针访问结构体成员。
实例15:函数指针数组
#include <stdio.h>
void printHello() {
printf("Hello!\n");
}
void printWorld() {
printf("World!\n");
}
int main() {
void (*funcPtrs[2])(void) = {printHello, printWorld};
int i;
for (i = 0; i < 2; i++) {
funcPtrs[i]();
}
return 0;
}
本例展示了函数指针数组的使用,用于调用多个函数。
实例16:链表操作
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
Node *createList(int arr[], int n) {
Node *head = NULL, *tail = NULL, *temp;
for (int i = 0; i < n; i++) {
temp = (Node *)malloc(sizeof(Node));
temp->data = arr[i];
temp->next = NULL;
if (head == NULL) {
head = temp;
tail = temp;
} else {
tail->next = temp;
tail = temp;
}
}
return head;
}
void printList(Node *head) {
Node *temp = head;
while (temp != NULL) {
printf("%d ", temp->data);
temp = temp->next;
}
printf("\n");
}
void freeList(Node *head) {
Node *temp;
while (head != NULL) {
temp = head;
head = head->next;
free(temp);
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
Node *head = createList(arr, n);
printList(head);
freeList(head);
return 0;
}
本例展示了链表的基本操作,包括创建、打印和释放链表。
实例17:排序算法
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
swap(&arr[j], &arr[j + 1]);
}
}
}
}
int main() {
int arr[] = {5, 2, 8, 12, 1};
int n = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, n);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
本例展示了冒泡排序算法的实现,用于对数组进行排序。
实例18:递归函数
#include <stdio.h>
int factorial(int n) {
if (n <= 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
int main() {
int n = 5;
printf("5的阶乘:%d\n", factorial(n));
return 0;
}
本例展示了递归函数的实现,用于计算阶乘。
实例19:字符串处理
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "Hello";
char str2[] = "World";
char str3[100];
strcpy(str3, str1);
strcat(str3, str2);
printf("合并后的字符串:%s\n", str3);
printf("字符串长度:%lu\n", strlen(str3));
return 0;
}
本例展示了字符串处理函数的使用,包括复制、连接和长度计算。
实例20:输入输出
#include <stdio.h>
int main() {
int a, b;
printf("请输入两个整数:\n");
scanf("%d %d", &a, &b);
printf("a + b = %d\n", a + b);
return 0;
}
本例展示了输入输出函数的使用,包括scanf和printf。
实例21:位运算
#include <stdio.h>
int main() {
int a = 5; // 101
int b = 3; // 011
printf("a & b = %d\n", a & b); // 001
printf("a | b = %d\n", a | b); // 111
printf("a ^ b = %d\n", a ^ b); // 110
printf("a << 1 = %d\n", a << 1); // 1010
printf("a >> 1 = %d\n", a >> 1); // 10
return 0;
}
本例展示了位运算符的使用,包括与、或、异或、左移和右移。
实例22:枚举类型
#include <stdio.h>
enum Weekday {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
};
int main() {
enum Weekday today = TUESDAY;
printf("今天是:%d\n", today);
return 0;
}
本例展示了枚举类型的使用,用于定义一组命名的常量。
实例23:结构体数组
#include <stdio.h>
struct Person {
char name[50];
int age;
};
int main() {
struct Person persons[] = {
{"张三", 20},
{"李四", 25},
{"王五", 30}
};
int i;
for (i = 0; i < sizeof(persons) / sizeof(persons[0]); i++) {
printf("姓名:%s,年龄:%d\n", persons[i].name, persons[i].age);
}
return 0;
}
本例展示了结构体数组的使用,用于存储和访问多个结构体元素。
实例24:结构体指针数组
#include <stdio.h>
struct Person {
char name[50];
int age;
};
void printPerson(struct Person *p) {
printf("姓名:%s,年龄:%d\n", p->name, p->age);
}
int main() {
struct Person persons[] = {
{"张三", 20},
{"李四", 25},
{"王五", 30}
};
struct Person *ptrs[3];
int i;
for (i = 0; i < 3; i++) {
ptrs[i] = &persons[i];
printPerson(ptrs[i]);
}
return 0;
}
本例展示了结构体指针数组的使用,以及如何通过指针访问结构体成员。
实例25:共用体
#include <stdio.h>
union Data {
int i;
float f;
char c;
};
int main() {
union Data u;
u.i = 10;
printf("u.i的值为:%d\n", u.i);
u.f = 5.5;
printf("u.f的值为:%f\n", u.f);
u.c = 'A';
printf("u.c的值为:%c\n", u.c);
return 0;
}
本例展示了共用体的使用,用于存储不同类型的数据。
实例26:宏定义
#include <stdio.h>
#define PI 3.14159
int main() {
printf("PI的值为:%f\n", PI);
return 0;
}
本例展示了宏定义的使用,用于定义一个常量。
实例27:预处理指令
#include <stdio.h>
#define MAX_SIZE 5
int main() {
int arr[MAX_SIZE];
for (int i = 0; i < MAX_SIZE; i++) {
arr[i] = i + 1;
}
for (int i = 0; i < MAX_SIZE; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
本例展示了预处理指令的使用,包括宏定义和条件编译。
实例28:标准库函数
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "Hello";
char str2[] = "World";
printf("str1和str2是否相等:%d\n", strcmp(str1, str2));
return 0;
}
本例展示了标准库函数的使用,包括字符串比较函数strcmp。
实例29:文件操作
#include <stdio.h>
int main() {
FILE *fp;
char filename[] = "example.txt";
char ch;
fp = fopen(filename, "r");
if (fp == NULL) {
printf("文件打开失败\n");
return 1;
}
while ((ch = fgetc(fp)) != EOF) {
printf("%c", ch);
}
fclose(fp);
return 0;
}
本例展示了文件操作的基本方法,包括文件的打开、读取和关闭。
实例30:动态内存分配
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr;
ptr = (int *)malloc(5 * sizeof(int));
if (ptr == NULL) {
printf("内存分配失败\n");
return 1;
}
for (int i = 0; i < 5; i++) {
ptr[i] = i + 1;
}
for (int i = 0; i < 5; i++) {
printf("%d ", ptr[i]);
}
free(ptr);
return 0;
}
本例展示了动态内存分配的方法,包括malloc和free函数的使用。
结语
通过以上30个实例,相信你已经对C语言编程有了更深入的了解。在学习过程中,请务必多加练习,不断巩固所学知识。祝你学习愉快!
