C语言作为一种历史悠久且功能强大的编程语言,至今仍被广泛应用于系统编程、嵌入式开发等领域。对于初学者来说,掌握C语言编程需要大量的实践和积累。下面,我将通过50个实用实例,帮助大家轻松上手实战技巧,让编程之路更加顺畅。
实例1:打印“Hello, World!”
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
这是C语言编程的入门级实例,用于打印“Hello, World!”。
实例2:变量声明与赋值
#include <stdio.h>
int main() {
int a = 10;
float b = 3.14;
char c = 'A';
printf("a = %d, b = %f, c = %c\n", a, b, c);
return 0;
}
本实例展示了如何声明和赋值不同类型的变量。
实例3:运算符的使用
#include <stdio.h>
int main() {
int a = 5, b = 3;
printf("a + b = %d\n", a + b);
printf("a - b = %d\n", a - b);
printf("a * b = %d\n", a * b);
printf("a / b = %d\n", a / b);
printf("a % b = %d\n", a % b);
return 0;
}
本实例介绍了C语言中的基本运算符,包括加、减、乘、除和取余。
实例4:条件语句
#include <stdio.h>
int main() {
int a = 10;
if (a > 5) {
printf("a is greater than 5\n");
} else {
printf("a is less than or equal to 5\n");
}
return 0;
}
本实例展示了如何使用条件语句进行简单的判断。
实例5:循环语句
#include <stdio.h>
int main() {
int i;
for (i = 1; i <= 10; i++) {
printf("%d\n", i);
}
return 0;
}
本实例介绍了C语言中的for循环,用于打印1到10的数字。
实例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>
int main() {
int a = 10;
int *ptr = &a;
printf("a = %d, &a = %p, ptr = %p, *ptr = %d\n", a, &a, ptr, *ptr);
return 0;
}
本实例介绍了C语言中的指针,用于访问变量的内存地址。
实例8:函数的定义与调用
#include <stdio.h>
void printHello() {
printf("Hello, World!\n");
}
int main() {
printHello();
return 0;
}
本实例展示了如何定义和调用函数。
实例9:结构体的使用
#include <stdio.h>
struct Student {
char name[50];
int age;
float score;
};
int main() {
struct Student stu1 = {"Alice", 20, 90.5};
printf("Name: %s, Age: %d, Score: %.2f\n", stu1.name, stu1.age, stu1.score);
return 0;
}
本实例介绍了C语言中的结构体,用于组织相关联的数据。
实例10:文件操作
#include <stdio.h>
int main() {
FILE *fp = fopen("example.txt", "w");
if (fp == NULL) {
printf("File cannot be opened.\n");
return 1;
}
fprintf(fp, "Hello, World!\n");
fclose(fp);
return 0;
}
本实例展示了如何使用C语言进行文件操作,包括打开、写入和关闭文件。
实例11:动态内存分配
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr = (int *)malloc(5 * sizeof(int));
if (arr == NULL) {
printf("Memory allocation failed.\n");
return 1;
}
for (int i = 0; i < 5; i++) {
arr[i] = i;
}
for (int i = 0; i < 5; i++) {
printf("%d\n", arr[i]);
}
free(arr);
return 0;
}
本实例介绍了C语言中的动态内存分配,用于在运行时分配内存。
实例12:字符串处理
#include <stdio.h>
#include <string.h>
int main() {
char str1[50] = "Hello";
char str2[50] = "World";
printf("str1 = %s, str2 = %s\n", str1, str2);
printf("str1 + str2 = %s\n", strcat(str1, str2));
printf("str1 length = %d\n", strlen(str1));
return 0;
}
本实例展示了C语言中的字符串处理函数,包括连接、长度计算等。
实例13:输入输出函数
#include <stdio.h>
int main() {
int a;
printf("Enter an integer: ");
scanf("%d", &a);
printf("You entered: %d\n", a);
return 0;
}
本实例介绍了C语言中的输入输出函数,用于实现与用户的交互。
实例14:指针与数组的关系
#include <stdio.h>
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int *ptr = arr;
for (int i = 0; i < 5; i++) {
printf("%d\n", *(ptr + i));
}
return 0;
}
本实例展示了指针与数组之间的关系,以及如何通过指针访问数组元素。
实例15:函数参数传递
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int a = 10, b = 20;
printf("Before swap: a = %d, b = %d\n", a, b);
swap(&a, &b);
printf("After swap: a = %d, b = %d\n", a, b);
return 0;
}
本实例介绍了函数参数传递的两种方式:值传递和地址传递。
实例16:递归函数
#include <stdio.h>
int factorial(int n) {
if (n == 0) {
return 1;
} else {
return n * factorial(n - 1);
}
}
int main() {
int n = 5;
printf("Factorial of %d = %d\n", n, factorial(n));
return 0;
}
本实例展示了C语言中的递归函数,用于计算阶乘。
实例17:结构体数组
#include <stdio.h>
struct Student {
char name[50];
int age;
float score;
};
int main() {
struct Student stu1 = {"Alice", 20, 90.5};
struct Student stu2 = {"Bob", 21, 85.3};
struct Student stu3 = {"Charlie", 22, 92.1};
struct Student stu4[3] = {stu1, stu2, stu3};
for (int i = 0; i < 3; i++) {
printf("Name: %s, Age: %d, Score: %.2f\n", stu4[i].name, stu4[i].age, stu4[i].score);
}
return 0;
}
本实例展示了如何使用结构体数组存储多个结构体实例。
实例18:枚举类型
#include <stdio.h>
enum Weekday {
Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
};
int main() {
enum Weekday today = Wednesday;
printf("Today is %d\n", today);
return 0;
}
本实例介绍了C语言中的枚举类型,用于定义一组命名的整型常量。
实例19:位运算
#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); // 102
printf("a >> 1 = %d\n", a >> 1); // 010
return 0;
}
本实例介绍了C语言中的位运算,包括按位与、按位或、按位异或、左移和右移。
实例20:宏定义
#include <stdio.h>
#define PI 3.14159
int main() {
printf("PI = %.5f\n", PI);
return 0;
}
本实例展示了C语言中的宏定义,用于简化代码。
实例21:预处理指令
#include <stdio.h>
#define MAX_SIZE 10
int main() {
int arr[MAX_SIZE];
for (int i = 0; i < MAX_SIZE; i++) {
arr[i] = i;
}
for (int i = 0; i < MAX_SIZE; i++) {
printf("%d\n", arr[i]);
}
return 0;
}
本实例展示了C语言中的预处理指令,包括宏定义和条件编译。
实例22:字符串比较
#include <stdio.h>
#include <string.h>
int main() {
char str1[50] = "Hello";
char str2[50] = "World";
printf("str1 == str2: %d\n", strcmp(str1, str2));
return 0;
}
本实例介绍了C语言中的字符串比较函数,用于比较两个字符串是否相等。
实例23:动态字符串分配
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char *str = (char *)malloc(50 * sizeof(char));
if (str == NULL) {
printf("Memory allocation failed.\n");
return 1;
}
strcpy(str, "Hello, World!");
printf("str = %s\n", str);
free(str);
return 0;
}
本实例展示了如何使用动态内存分配来创建和操作字符串。
实例24:结构体指针
#include <stdio.h>
struct Student {
char name[50];
int age;
float score;
};
int main() {
struct Student stu1 = {"Alice", 20, 90.5};
struct Student *ptr = &stu1;
printf("Name: %s, Age: %d, Score: %.2f\n", ptr->name, ptr->age, ptr->score);
return 0;
}
本实例介绍了C语言中的结构体指针,用于访问结构体成员。
实例25:函数指针
#include <stdio.h>
void printHello() {
printf("Hello, World!\n");
}
int main() {
void (*funcPtr)(void) = printHello;
funcPtr();
return 0;
}
本实例介绍了C语言中的函数指针,用于指向函数。
实例26:指针数组
#include <stdio.h>
int main() {
int *arr[5];
for (int i = 0; i < 5; i++) {
arr[i] = (int *)malloc(sizeof(int));
*arr[i] = i;
}
for (int i = 0; i < 5; i++) {
printf("%d\n", *arr[i]);
}
for (int i = 0; i < 5; i++) {
free(arr[i]);
}
return 0;
}
本实例介绍了C语言中的指针数组,用于存储多个指针。
实例27:函数指针数组
#include <stdio.h>
void printHello() {
printf("Hello, World!\n");
}
void printGoodbye() {
printf("Goodbye, World!\n");
}
int main() {
void (*funcPtrArr[2])(void) = {printHello, printGoodbye};
funcPtrArr[0]();
funcPtrArr[1]();
return 0;
}
本实例介绍了C语言中的函数指针数组,用于存储多个函数指针。
实例28:结构体指针数组
#include <stdio.h>
struct Student {
char name[50];
int age;
float score;
};
int main() {
struct Student stu1 = {"Alice", 20, 90.5};
struct Student stu2 = {"Bob", 21, 85.3};
struct Student *stuPtrArr[2] = {&stu1, &stu2};
printf("Name: %s, Age: %d, Score: %.2f\n", stuPtrArr[0]->name, stuPtrArr[0]->age, stuPtrArr[0]->score);
printf("Name: %s, Age: %d, Score: %.2f\n", stuPtrArr[1]->name, stuPtrArr[1]->age, stuPtrArr[1]->score);
return 0;
}
本实例介绍了C语言中的结构体指针数组,用于存储多个结构体指针。
实例29:结构体指针与数组的关系
#include <stdio.h>
struct Student {
char name[50];
int age;
float score;
};
int main() {
struct Student stu1 = {"Alice", 20, 90.5};
struct Student stu2 = {"Bob", 21, 85.3};
struct Student stuArr[2] = {stu1, stu2};
struct Student *ptr = stuArr;
printf("Name: %s, Age: %d, Score: %.2f\n", ptr->name, ptr->age, ptr->score);
ptr++;
printf("Name: %s, Age: %d, Score: %.2f\n", ptr->name, ptr->age, ptr->score);
return 0;
}
本实例展示了结构体指针与数组之间的关系,以及如何通过指针访问数组元素。
实例30:链表的基本操作
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node *next;
};
void insertAtHead(struct Node **head, int data) {
struct Node *newNode = (struct Node *)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = *head;
*head = newNode;
}
void printList(struct Node *head) {
struct Node *current = head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
int main() {
struct Node *head = NULL;
insertAtHead(&head, 3);
insertAtHead(&head, 2);
insertAtHead(&head, 1);
printList(head);
return 0;
}
本实例介绍了C语言中的链表操作,包括插入、遍历等。
实例31:递归链表操作
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node *next;
};
void insertAtHead(struct Node **head, int data) {
struct Node *newNode = (struct Node *)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = *head;
*head = newNode;
}
void printList(struct Node *head) {
if (head == NULL) {
return;
}
printf("%d ", head->data);
printList(head->next);
}
int main() {
struct Node *head = NULL;
insertAtHead(&head, 3);
insertAtHead(&head, 2);
insertAtHead(&head, 1);
printList(head);
return 0;
}
本实例展示了如何使用递归函数进行链表操作。
实例32:二叉树的基本操作
”`c
#include
struct Node {
int data;
struct Node *left;
struct Node *right;
};
struct Node *createNode(int data) {
struct Node *newNode = (struct Node *)malloc(sizeof(struct Node));
newNode->data = data;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
void insert(struct Node **root, int data) {
if (*root == NULL) {
*root = createNode(data);
return;
}
if (data < (*root)->data) {
insert(&((*root)->left), data);
} else if (data > (*root)->data) {
insert(&((*root)->right), data);
}
}
void printInOrder(struct Node *root) {
if (root == NULL) {
return;
}
printInOrder(root->left);
printf("%d ", root->data);
printInOrder(root->right);
}
int main() {
struct Node *root = NULL;
insert(&root, 5);
insert(&root, 3);
insert(&root, 7);
insert(&root, 2);
insert(&root, 4);
insert(&root
