引言
C语言作为一种历史悠久且功能强大的编程语言,在系统编程、嵌入式开发等领域有着广泛的应用。对于初学者来说,通过实例学习是快速掌握C语言的有效途径。本文将为你提供50个实用的C语言编程实例,帮助你从基础到进阶,逐步掌握C语言的精髓。
实例1:Hello World
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
这是一个经典的入门实例,用于打印“Hello, World!”。
实例2:变量与数据类型
#include <stdio.h>
int main() {
int age = 18;
float salary = 5000.0;
char grade = 'A';
printf("Age: %d\n", age);
printf("Salary: %.2f\n", salary);
printf("Grade: %c\n", grade);
return 0;
}
这个实例展示了C语言中的基本数据类型和变量声明。
实例3:运算符
#include <stdio.h>
int main() {
int a = 10, b = 5;
printf("Addition: %d\n", a + b);
printf("Subtraction: %d\n", a - b);
printf("Multiplication: %d\n", a * b);
printf("Division: %d\n", a / b);
printf("Modulus: %d\n", a % b);
return 0;
}
本实例介绍了C语言中的基本运算符。
实例4:条件语句
#include <stdio.h>
int main() {
int number = 10;
if (number > 0) {
printf("Number is positive\n");
} else if (number < 0) {
printf("Number is negative\n");
} else {
printf("Number is zero\n");
}
return 0;
}
这个实例展示了如何使用if语句进行条件判断。
实例5:循环语句
#include <stdio.h>
int main() {
int i;
for (i = 1; i <= 10; i++) {
printf("%d\n", i);
}
return 0;
}
本实例展示了如何使用for循环打印1到10的数字。
实例6:函数
#include <stdio.h>
void greet() {
printf("Hello, function!\n");
}
int main() {
greet();
return 0;
}
这个实例介绍了C语言中的函数定义和调用。
实例7:指针
#include <stdio.h>
int main() {
int a = 10;
int *ptr = &a;
printf("Value of a: %d\n", a);
printf("Address of a: %p\n", (void *)&a);
printf("Value of ptr: %p\n", (void *)ptr);
printf("Value of *ptr: %d\n", *ptr);
return 0;
}
本实例展示了C语言中的指针及其应用。
实例8:数组
#include <stdio.h>
int main() {
int numbers[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
printf("numbers[%d] = %d\n", i, numbers[i]);
}
return 0;
}
这个实例介绍了C语言中的数组及其使用方法。
实例9:字符串
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "Hello";
char str2[] = "World";
printf("Length of str1: %lu\n", strlen(str1));
strcat(str1, str2);
printf("Concatenated string: %s\n", str1);
return 0;
}
本实例展示了C语言中的字符串操作。
实例10:结构体
#include <stdio.h>
typedef struct {
int id;
char name[50];
float salary;
} Employee;
int main() {
Employee emp = {1, "John Doe", 5000.0};
printf("Employee ID: %d\n", emp.id);
printf("Employee Name: %s\n", emp.name);
printf("Employee Salary: %.2f\n", emp.salary);
return 0;
}
这个实例介绍了C语言中的结构体及其应用。
实例11:位运算
#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: %d\n", ~a);
return 0;
}
本实例展示了C语言中的位运算。
实例12:文件操作
#include <stdio.h>
int main() {
FILE *fp;
char filename[] = "example.txt";
fp = fopen(filename, "w");
if (fp == NULL) {
printf("Error opening file!\n");
return 1;
}
fprintf(fp, "Hello, file!\n");
fclose(fp);
return 0;
}
这个实例展示了C语言中的文件操作。
实例13:动态内存分配
#include <stdio.h>
#include <stdlib.h>
int main() {
int *numbers = (int *)malloc(5 * sizeof(int));
if (numbers == NULL) {
printf("Memory allocation failed!\n");
return 1;
}
for (int i = 0; i < 5; i++) {
numbers[i] = i;
}
for (int i = 0; i < 5; i++) {
printf("numbers[%d] = %d\n", i, numbers[i]);
}
free(numbers);
return 0;
}
本实例展示了C语言中的动态内存分配。
实例14:函数指针
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main() {
int (*func)(int, int) = add;
printf("Result: %d\n", func(3, 4));
return 0;
}
这个实例介绍了C语言中的函数指针。
实例15:结构体指针
#include <stdio.h>
typedef struct {
int id;
char name[50];
} Employee;
int main() {
Employee emp = {1, "John Doe"};
Employee *ptr = &emp;
printf("Employee ID: %d\n", ptr->id);
printf("Employee Name: %s\n", ptr->name);
return 0;
}
本实例展示了C语言中的结构体指针。
实例16:链表
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
Node *createNode(int data) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
void insertNode(Node **head, int data) {
Node *newNode = createNode(data);
newNode->next = *head;
*head = newNode;
}
void printList(Node *head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
Node *head = NULL;
insertNode(&head, 3);
insertNode(&head, 2);
insertNode(&head, 1);
printList(head);
return 0;
}
这个实例介绍了C语言中的链表操作。
实例17:递归
#include <stdio.h>
int factorial(int n) {
if (n == 0) {
return 1;
}
return n * factorial(n - 1);
}
int main() {
int number = 5;
printf("Factorial of %d: %d\n", number, factorial(number));
return 0;
}
本实例展示了C语言中的递归函数。
实例18:排序算法
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void selectionSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
int min_idx = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[min_idx]) {
min_idx = j;
}
}
swap(&arr[min_idx], &arr[i]);
}
}
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
selectionSort(arr, n);
printf("Sorted array: \n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
这个实例展示了C语言中的选择排序算法。
实例19:查找算法
#include <stdio.h>
int linearSearch(int arr[], int n, int x) {
for (int i = 0; i < n; i++) {
if (arr[i] == x) {
return i;
}
}
return -1;
}
int main() {
int arr[] = {2, 3, 4, 10, 40};
int n = sizeof(arr) / sizeof(arr[0]);
int x = 10;
int result = linearSearch(arr, n, x);
if (result == -1) {
printf("Element is not present in array");
} else {
printf("Element is present at index %d", result);
}
return 0;
}
本实例展示了C语言中的线性查找算法。
实例20:队列
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 5
typedef struct {
int items[MAX_SIZE];
int front;
int rear;
int size;
} Queue;
void initializeQueue(Queue *q) {
q->front = -1;
q->rear = -1;
q->size = 0;
}
int isEmpty(Queue *q) {
return q->size == 0;
}
int isFull(Queue *q) {
return q->size == MAX_SIZE;
}
void enqueue(Queue *q, int value) {
if (isFull(q)) {
printf("Queue is full\n");
return;
}
if (isEmpty(q)) {
q->front = 0;
}
q->rear = (q->rear + 1) % MAX_SIZE;
q->items[q->rear] = value;
q->size++;
}
int dequeue(Queue *q) {
if (isEmpty(q)) {
printf("Queue is empty\n");
return -1;
}
int value = q->items[q->front];
q->front = (q->front + 1) % MAX_SIZE;
q->size--;
return value;
}
int main() {
Queue q;
initializeQueue(&q);
enqueue(&q, 1);
enqueue(&q, 2);
enqueue(&q, 3);
printf("Dequeued: %d\n", dequeue(&q));
printf("Dequeued: %d\n", dequeue(&q));
printf("Dequeued: %d\n", dequeue(&q));
return 0;
}
这个实例展示了C语言中的队列操作。
实例21:栈
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 5
typedef struct {
int items[MAX_SIZE];
int top;
int size;
} Stack;
void initializeStack(Stack *s) {
s->top = -1;
s->size = 0;
}
int isEmpty(Stack *s) {
return s->size == 0;
}
int isFull(Stack *s) {
return s->size == MAX_SIZE;
}
void push(Stack *s, int value) {
if (isFull(s)) {
printf("Stack is full\n");
return;
}
s->items[++s->top] = value;
s->size++;
}
int pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty\n");
return -1;
}
return s->items[s->top--];
}
int main() {
Stack s;
initializeStack(&s);
push(&s, 1);
push(&s, 2);
push(&s, 3);
printf("Popped: %d\n", pop(&s));
printf("Popped: %d\n", pop(&s));
printf("Popped: %d\n", pop(&s));
return 0;
}
本实例展示了C语言中的栈操作。
实例22:动态链表
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int data;
struct Node *next;
} Node;
Node *createNode(int data) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
void insertAtBeginning(Node **head, int data) {
Node *newNode = createNode(data);
newNode->next = *head;
*head = newNode;
}
void insertAtEnd(Node **head, int data) {
Node *newNode = createNode(data);
if (*head == NULL) {
*head = newNode;
return;
}
Node *temp = *head;
while (temp->next != NULL) {
temp = temp->next;
}
temp->next = newNode;
}
void deleteNode(Node **head, int data) {
Node *temp = *head, *prev = NULL;
if (temp != NULL && temp->data == data) {
*head = temp->next;
free(temp);
return;
}
while (temp != NULL && temp->data != data) {
prev = temp;
temp = temp->next;
}
if (temp == NULL) {
return;
}
prev->next = temp->next;
free(temp);
}
void printList(Node *head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
Node *head = NULL;
insertAtBeginning(&head, 3);
insertAtEnd(&head, 2);
insertAtEnd(&head, 1);
printf("List: ");
printList(head);
deleteNode(&head, 2);
printf("List after deleting 2: ");
printList(head);
return 0;
}
这个实例展示了C语言中的动态链表操作。
实例23:递归查找
#include <stdio.h>
int recursiveSearch(int arr[], int n, int x) {
if (n == 0) {
return -1;
}
if (arr[n - 1] == x) {
return n - 1;
}
return recursiveSearch(arr, n - 1, x);
}
int main() {
int arr[] = {2, 3, 4, 10, 40};
int n = sizeof(arr) / sizeof(arr[0]);
int x = 10;
int result = recursiveSearch(arr, n, x);
if (result == -1) {
printf("Element is not present in array");
} else {
printf("Element is present at index %d", result);
}
return 0;
}
本实例展示了C语言中的递归查找算法。
实例24:冒泡排序
#include <stdio.h>
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]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, n);
printf("Sorted array: \n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
这个实例展示了C语言中的冒泡排序算法。
实例25:插入排序
#include <stdio.h>
void insertionSort(int arr[], int n) {
int i, key, j;
for (i = 1; i < n; i++) {
key = arr[i];
j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
}
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
insertionSort(arr, n);
printf("Sorted array: \n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
本实例展示了C语言中的插入排序算法。
实例26:选择排序
”`c
#include
void selectionSort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
int min_idx = i;
for (int j = i
