实例1:计算阶乘
阶乘是一个数学中的基础概念,用于表示一个正整数的阶乘。在C语言中,我们可以通过循环来计算阶乘。
#include <stdio.h>
unsigned long long factorial(int n) {
unsigned long long fact = 1;
for (int i = 2; i <= n; i++) {
fact *= i;
}
return fact;
}
int main() {
int number;
printf("Enter a number: ");
scanf("%d", &number);
printf("Factorial of %d is %llu\n", number, factorial(number));
return 0;
}
实例2:计算最大公约数
最大公约数(GCD)是数学中一个非常重要的概念。下面是一个用C语言实现的GCD算法。
#include <stdio.h>
int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
int main() {
int num1, num2;
printf("Enter two numbers: ");
scanf("%d %d", &num1, &num2);
printf("GCD of %d and %d is %d\n", num1, num2, gcd(num1, num2));
return 0;
}
实例3:冒泡排序
冒泡排序是一种简单的排序算法,下面是使用C语言实现的冒泡排序。
#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;
}
实例4:递归函数
递归函数是一种编程技巧,允许函数在执行过程中调用自身。以下是一个用C语言实现的递归函数,用于计算阶乘。
#include <stdio.h>
int factorial(int n) {
if (n == 0) {
return 1;
}
return n * factorial(n - 1);
}
int main() {
int number;
printf("Enter a number: ");
scanf("%d", &number);
printf("Factorial of %d is %d\n", number, factorial(number));
return 0;
}
实例5:字符串处理
字符串处理是C语言中的一个重要领域。以下是一个简单的示例,演示了如何使用C语言字符串函数。
#include <stdio.h>
#include <string.h>
int main() {
char str1[] = "Hello, World!";
char str2[100];
printf("String 1: %s\n", str1);
printf("Length of String 1: %ld\n", strlen(str1));
strcpy(str2, str1);
printf("String 2: %s\n", str2);
return 0;
}
实例6:文件操作
C语言中的文件操作功能强大,可以处理文本文件和二进制文件。以下是一个简单的示例,演示了如何使用C语言读写文件。
#include <stdio.h>
int main() {
FILE *fp;
char filename[] = "example.txt";
char buffer[100];
fp = fopen(filename, "w");
fprintf(fp, "This is a sample text file.\n");
fclose(fp);
fp = fopen(filename, "r");
while (fgets(buffer, sizeof(buffer), fp)) {
printf("%s", buffer);
}
fclose(fp);
return 0;
}
实例7:指针和数组
指针和数组是C语言中最核心的概念之一。以下是一个使用指针和数组的示例,演示了如何访问和修改数组元素。
#include <stdio.h>
int main() {
int arr[] = {1, 2, 3, 4, 5};
int *ptr = arr;
int size = sizeof(arr) / sizeof(arr[0]);
printf("Array elements:\n");
for (int i = 0; i < size; i++) {
printf("%d ", *(ptr + i));
}
printf("\n");
// Modify array element using pointer
*(ptr + 2) = 10;
printf("Modified array elements:\n");
for (int i = 0; i < size; i++) {
printf("%d ", *(ptr + i));
}
printf("\n");
return 0;
}
实例8:结构体
结构体(struct)是C语言中用于组织数据的一种方式。以下是一个简单的示例,演示了如何定义和使用结构体。
#include <stdio.h>
struct student {
char name[50];
int age;
float gpa;
};
int main() {
struct student stu1, stu2;
strcpy(stu1.name, "John");
stu1.age = 20;
stu1.gpa = 3.8;
strcpy(stu2.name, "Jane");
stu2.age = 21;
stu2.gpa = 3.5;
printf("Student 1: %s, %d, %.2f\n", stu1.name, stu1.age, stu1.gpa);
printf("Student 2: %s, %d, %.2f\n", stu2.name, stu2.age, stu2.gpa);
return 0;
}
实例9:动态内存分配
动态内存分配是C语言中的一个重要概念,它允许程序在运行时分配内存。以下是一个简单的示例,演示了如何使用malloc和free函数进行动态内存分配。
#include <stdio.h>
#include <stdlib.h>
int main() {
int *arr;
int n, i;
printf("Enter the size of the array: ");
scanf("%d", &n);
arr = (int *)malloc(n * sizeof(int));
if (arr == NULL) {
printf("Memory allocation failed\n");
return 1;
}
printf("Enter the elements of the array:\n");
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
printf("Array elements:\n");
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
free(arr);
return 0;
}
实例10:结构体指针和数组
结构体指针和数组在C语言中非常实用,可以用来存储和管理复杂的数据。以下是一个简单的示例,演示了如何使用结构体指针和数组。
#include <stdio.h>
struct student {
char name[50];
int age;
float gpa;
};
int main() {
struct student students[3];
struct student *ptr;
strcpy(students[0].name, "John");
students[0].age = 20;
students[0].gpa = 3.8;
strcpy(students[1].name, "Jane");
students[1].age = 21;
students[1].gpa = 3.5;
strcpy(students[2].name, "Bob");
students[2].age = 22;
students[2].gpa = 3.9;
ptr = students;
for (int i = 0; i < 3; i++) {
printf("Name: %s, Age: %d, GPA: %.2f\n", ptr[i].name, ptr[i].age, ptr[i].gpa);
}
return 0;
}
实例11:链表操作
链表是一种重要的数据结构,在C语言中可以用来实现动态数据结构。以下是一个简单的示例,演示了如何使用C语言实现单向链表的基本操作。
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node *next;
};
void insert(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) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
struct node *head = NULL;
insert(&head, 5);
insert(&head, 3);
insert(&head, 8);
printf("Linked list: ");
printList(head);
return 0;
}
实例12:队列操作
队列是一种先进先出(FIFO)的数据结构。以下是一个简单的示例,演示了如何使用C语言实现队列的基本操作。
#include <stdio.h>
#include <stdlib.h>
#define QUEUE_SIZE 5
int queue[QUEUE_SIZE];
int front = 0;
int rear = -1;
void enqueue(int data) {
if ((rear + 1) % QUEUE_SIZE == front) {
printf("Queue is full\n");
} else {
rear = (rear + 1) % QUEUE_SIZE;
queue[rear] = data;
}
}
int dequeue() {
if (front == rear) {
printf("Queue is empty\n");
return -1;
} else {
int data = queue[front];
front = (front + 1) % QUEUE_SIZE;
return data;
}
}
void printQueue() {
printf("Queue elements: ");
for (int i = front; i != rear; i = (i + 1) % QUEUE_SIZE) {
printf("%d ", queue[i]);
}
printf("\n");
}
int main() {
enqueue(10);
enqueue(20);
enqueue(30);
printQueue();
dequeue();
printQueue();
dequeue();
dequeue();
enqueue(40);
enqueue(50);
enqueue(60);
printQueue();
return 0;
}
实例13:栈操作
栈是一种后进先出(LIFO)的数据结构。以下是一个简单的示例,演示了如何使用C语言实现栈的基本操作。
#include <stdio.h>
#include <stdlib.h>
#define STACK_SIZE 5
int stack[STACK_SIZE];
int top = -1;
void push(int data) {
if (top == STACK_SIZE - 1) {
printf("Stack is full\n");
} else {
top++;
stack[top] = data;
}
}
int pop() {
if (top == -1) {
printf("Stack is empty\n");
return -1;
} else {
int data = stack[top];
top--;
return data;
}
}
void printStack() {
printf("Stack elements: ");
for (int i = top; i >= 0; i--) {
printf("%d ", stack[i]);
}
printf("\n");
}
int main() {
push(10);
push(20);
push(30);
printStack();
pop();
printStack();
pop();
pop();
push(40);
push(50);
push(60);
printStack();
return 0;
}
实例14:排序算法(快速排序)
快速排序是一种高效的排序算法,以下是一个使用C语言实现的快速排序示例。
#include <stdio.h>
void swap(int *a, int *b) {
int t = *a;
*a = *b;
*b = t;
}
int partition(int arr[], int low, int high) {
int pivot = arr[high];
int i = low - 1;
for (int j = low; j <= high - 1; j++) {
if (arr[j] < pivot) {
i++;
swap(&arr[i], &arr[j]);
}
}
swap(&arr[i + 1], &arr[high]);
return (i + 1);
}
void quickSort(int arr[], int low, int high) {
if (low < high) {
int pi = partition(arr, low, high);
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
}
int main() {
int arr[] = {64, 34, 25, 12, 22, 11, 90};
int n = sizeof(arr) / sizeof(arr[0]);
quickSort(arr, 0, n - 1);
printf("Sorted array: \n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
实例15:排序算法(归并排序)
归并排序是一种分治排序算法,以下是一个使用C语言实现的归并排序示例。
#include <stdio.h>
void merge(int arr[], int l, int m, int r) {
int i, j, k;
int n1 = m - l + 1;
int n2 = r - m;
int L[n1], R[n2];
for (i = 0; i < n1; i++)
L[i] = arr[l + i];
for (j = 0; j < n2; j++)
R[j] = arr[m + 1 + j];
i = 0;
j = 0;
k = l;
while (i < n1 && j < n2) {
if (L[i] <= R[j]) {
arr[k] = L[i];
i++;
} else {
arr[k] = R[j];
j++;
}
k++;
}
while (i < n1) {
arr[k] = L[i];
i++;
k++;
}
while (j < n2) {
arr[k] = R[j];
j++;
k++;
}
}
void mergeSort(int arr[], int l, int r) {
if (l < r) {
int m = l + (r - l) / 2;
mergeSort(arr, l, m);
mergeSort(arr, m + 1, r);
merge(arr, l, m, r);
}
}
int main() {
int arr[] = {12, 11, 13, 5, 6, 7};
int arr_size = sizeof(arr) / sizeof(arr[0]);
mergeSort(arr, 0, arr_size - 1);
printf("\nSorted array is:\n");
for (int i = 0; i < arr_size; i++)
printf("%d ", arr[i]);
printf("\n");
return 0;
}
实例16:排序算法(选择排序)
选择排序是一种简单但效率较低的排序算法。以下是一个使用C语言实现的选择排序示例。
#include <stdio.h>
void selectionSort(int arr[], int n) {
int i, j, min_idx;
for (i = 0; i < n - 1; i++) {
min_idx = i;
for (j = i + 1; j < n; j++) {
if (arr[j] < arr[min_idx]) {
min_idx = j;
}
}
int temp = arr[min_idx];
arr[min_idx] = arr[i];
arr[i] = temp;
}
}
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;
}
实例17:排序算法(插入排序)
插入排序是一种简单的排序算法,适用于小数据集。以下是一个使用C语言实现的插入排序示例。
#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[] = {12, 11, 13, 5, 6, 7};
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;
}
实例18:排序算法(冒泡排序)
冒泡排序是一种简单的排序算法,但效率较低。以下是一个使用C语言实现的冒泡排序示例。
”`c
#include
void bubbleSort(int arr[], int n) {
int i, j, temp;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
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: \
