引言C语言作为一种历史悠久且广泛使用的编程语言,以其高效、灵活和强大的功能在各个领域都占有重要地位。本文将带领读者从C语言的入门基础开始,逐步深入,通过20个实战案例的深度解析,帮助读者全面掌握C语言...
C语言作为一种历史悠久且广泛使用的编程语言,以其高效、灵活和强大的功能在各个领域都占有重要地位。本文将带领读者从C语言的入门基础开始,逐步深入,通过20个实战案例的深度解析,帮助读者全面掌握C语言编程。
C语言由Dennis Ritchie于1972年发明,最初用于编写操作系统。由于其简洁、高效的特点,C语言逐渐被广泛应用于系统软件、嵌入式系统、游戏开发等领域。
在开始学习C语言之前,需要搭建一个编程环境。以下是常见的C语言开发环境:
C语言的基础语法包括变量、数据类型、运算符、控制结构等。
int a = 10;
float b = 3.14;
char c = 'A';int a = 5, b = 3;
int sum = a + b;
int difference = a - b;if (a > b) { printf("a is greater than b");
} else { printf("b is greater than a");
}函数是C语言的核心组成部分,用于实现代码的模块化。
#include
void greet() { printf("Hello, World!\n");
}
int main() { greet(); return 0;
} 数组是一种用于存储多个相同类型数据的容器。
int arr[5] = {1, 2, 3, 4, 5};
printf("The first element of the array is: %d\n", arr[0]);指针是C语言中的一个重要概念,用于存储变量的地址。
int a = 10;
int *ptr = &a;
printf("The value of a is: %d\n", *ptr);#include
float average(int num1, int num2) { return (num1 + num2) / 2.0;
}
int main() { int num1 = 10, num2 = 20; float avg = average(num1, num2); printf("The average of %d and %d is: %.2f\n", num1, num2, avg); return 0;
} #include
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;
} #include
int fibonacci(int n) { if (n <= 1) return n; return fibonacci(n - 1) + fibonacci(n - 2);
}
int main() { int n = 10; printf("Fibonacci series up to %d terms:\n", n); for (int i = 0; i < n; i++) { printf("%d ", fibonacci(i)); } printf("\n"); return 0;
} #include
int main() { char operator; double firstNumber, secondNumber; printf("Enter an operator (+, -, *, /): "); scanf("%c", &operator); printf("Enter two operands: "); scanf("%lf %lf", &firstNumber, &secondNumber); switch (operator) { case '+': printf("%.1lf + %.1lf = %.1lf", firstNumber, secondNumber, firstNumber + secondNumber); break; case '-': printf("%.1lf - %.1lf = %.1lf", firstNumber, secondNumber, firstNumber - secondNumber); break; case '*': printf("%.1lf * %.1lf = %.1lf", firstNumber, secondNumber, firstNumber * secondNumber); break; case '/': if (secondNumber != 0.0) printf("%.1lf / %.1lf = %.1lf", firstNumber, secondNumber, firstNumber / secondNumber); else printf("Division by zero is not allowed."); break; default: printf("Error! operator is not correct"); } return 0;
} #include
#include
#include
#define MAX_LINE_LENGTH 1024
void printMenu() { printf("1. Open file\n"); printf("2. Save file\n"); printf("3. Exit\n");
}
int main() { char *filename = NULL; char line[MAX_LINE_LENGTH]; int choice; while (1) { printMenu(); printf("Enter your choice: "); scanf("%d", &choice); switch (choice) { case 1: printf("Enter the filename: "); scanf("%s", filename); FILE *file = fopen(filename, "r"); if (file == NULL) { printf("Error opening file.\n"); break; } while (fgets(line, MAX_LINE_LENGTH, file)) { printf("%s", line); } fclose(file); break; case 2: printf("Enter the filename: "); scanf("%s", filename); FILE *file2 = fopen(filename, "w"); if (file2 == NULL) { printf("Error opening file.\n"); break; } printf("Enter the text: "); while (fgets(line, MAX_LINE_LENGTH, stdin)) { fputs(line, file2); } fclose(file2); break; case 3: printf("Exiting program.\n"); free(filename); exit(0); default: printf("Invalid choice.\n"); } } return 0;
} #include
#include
#include
void help() { printf("Usage: mytool [options]\n"); printf("Options:\n"); printf(" -h, --help Display this help and exit\n"); printf(" -v, --version Display version information and exit\n");
}
int main(int argc, char *argv[]) { if (argc == 2) { if (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--help") == 0) { help(); return 0; } else if (strcmp(argv[1], "-v") == 0 || strcmp(argv[1], "--version") == 0) { printf("Version: 1.0\n"); return 0; } } help(); return 1;
} #include
#include
static size_t WriteCallback(void *contents, size_t size, size_t nmemb, void *userp) { ((char **)userp)[0] = (char *)malloc(size * nmemb + 1); strcpy(((char **)userp)[0], (char *)contents); return size * nmemb;
}
int main() { CURL *curl; CURLcode res; char *url = "http://example.com"; char *webpage = NULL; curl = curl_easy_init(); if (curl) { curl_easy_setopt(curl, CURLOPT_URL, url); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback); curl_easy_setopt(curl, CURLOPT_WRITEDATA, &webpage); res = curl_easy_perform(curl); curl_easy_cleanup(curl); if (res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); return 1; } printf("%s\n", webpage); free(webpage); } return 0;
} #include
#include
#include
void *threadFunction(void *arg) { printf("Thread ID: %ld\n", pthread_self()); return NULL;
}
int main() { pthread_t thread1, thread2; pthread_create(&thread1, NULL, threadFunction, NULL); pthread_create(&thread2, NULL, threadFunction, NULL); pthread_join(thread1, NULL); pthread_join(thread2, NULL); return 0;
} #include
#include
int main() { MYSQL *conn; MYSQL_RES *res; MYSQL_ROW row; conn = mysql_init(NULL); if (!mysql_real_connect(conn, "localhost", "user", "password", "database", 0, NULL, 0)) { fprintf(stderr, "%s\n", mysql_error(conn)); mysql_close(conn); return 1; } if (mysql_query(conn, "SELECT * FROM table_name")) { fprintf(stderr, "%s\n", mysql_error(conn)); mysql_close(conn); return 1; } res = mysql_use_result(conn); while ((row = mysql_fetch_row(res)) != NULL) { printf("%s\n", row[0]); } mysql_free_result(res); mysql_close(conn); return 0;
} #include
#include
#include
void encrypt(char *input, char *output, char *key) { int keyLength = strlen(key); int i, j; for (i = 0; i < strlen(input); i++) { for (j = 0; j < keyLength; j++) { output[i] = input[i] + key[j]; } }
}
int main() { char input[100]; char output[100]; char key[10]; printf("Enter the input string: "); scanf("%s", input); printf("Enter the key: "); scanf("%s", key); encrypt(input, output, key); printf("Encrypted string: %s\n", output); return 0;
} #include
#include
#include
#include
#include
#include
#define PORT 8080
void handleRequest(int clientSocket) { char buffer[1024]; read(clientSocket, buffer, sizeof(buffer)); if (strncmp(buffer, "GET / HTTP/1.1", 20) == 0) { send(clientSocket, "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\nHello, World!\r\n", 66, 0); } else { send(clientSocket, "HTTP/1.1 404 Not Found\r\nContent-Type: text/html\r\n\r\n", 56, 0); }
}
int main() { int serverSocket, clientSocket; struct sockaddr_in serverAddr, clientAddr; socklen_t clientAddrSize; serverSocket = socket(AF_INET, SOCK_STREAM, 0); if (serverSocket < 0) { perror("Error creating socket"); exit(1); } memset(&serverAddr, 0, sizeof(serverAddr)); serverAddr.sin_family = AF_INET; serverAddr.sin_addr.s_addr = INADDR_ANY; serverAddr.sin_port = htons(PORT); if (bind(serverSocket, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) < 0) { perror("Error binding socket"); exit(1); } listen(serverSocket, 5); while (1) { clientAddrSize = sizeof(clientAddr); clientSocket = accept(serverSocket, (struct sockaddr *)&clientAddr, &clientAddrSize); if (clientSocket < 0) { perror("Error accepting connection"); continue; } handleRequest(clientSocket); close(clientSocket); } close(serverSocket); return 0;
} #include
#include
#include
void compressFile(char *input, char *output) { FILE *inputFile = fopen(input, "rb"); FILE *outputFile = fopen(output, "wb"); unsigned char buffer[1024]; int bytesRead; while ((bytesRead = fread(buffer, 1, sizeof(buffer), inputFile)) > 0) { fwrite(buffer, 1, bytesRead, outputFile); } fclose(inputFile); fclose(outputFile);
}
int main() { char input[100]; char output[100]; printf("Enter the input file: "); scanf("%s", input); printf("Enter the output file: "); scanf("%s", output); compressFile(input, output); return 0;
} #include
#include
#include
void decompressFile(char *input, char *output) { FILE *inputFile = fopen(input, "rb"); FILE *outputFile = fopen(output, "wb"); unsigned char buffer[1024]; int bytesRead; while ((bytesRead = fread(buffer, 1, sizeof(buffer), inputFile)) > 0) { fwrite(buffer, 1, bytesRead, outputFile); } fclose(inputFile); fclose(outputFile);
}
int main() { char input[100]; char output[100]; printf("Enter the input file: "); scanf("%s", input); printf("Enter the output file: "); scanf("%s", output); decompressFile(input, output); return 0;
} #include
#include
#include
void encryptFile(char *input, char *output, char *key) { FILE *inputFile = fopen(input, "rb"); FILE *outputFile = fopen(output, "wb"); unsigned char buffer[1024]; int bytesRead; while ((bytesRead = fread(buffer, 1, sizeof(buffer), inputFile)) > 0) { for (int i = 0; i < bytesRead; i++) { buffer[i] += key[i % strlen(key)]; } fwrite(buffer, 1, bytesRead, outputFile); } fclose(inputFile); fclose(outputFile);
}
void decryptFile(char *input, char *output, char *key) { FILE *inputFile = fopen(input, "rb"); FILE *outputFile = fopen(output, "wb"); unsigned char buffer[1024]; int bytesRead; while ((bytesRead = fread(buffer, 1, sizeof(buffer), inputFile)) > 0) { for (int i = 0; i < bytesRead; i++) { buffer[i] -= key[i % strlen(key)]; } fwrite(buffer, 1, bytesRead, outputFile); } fclose(inputFile); fclose(outputFile);
}
int main() { char input[100]; char output[100]; char key[10]; printf("Enter the input file: "); scanf("%s", input); printf("Enter the output file: "); scanf("%s", output); printf("Enter the key: "); scanf("%s", key); encryptFile(input, output, key); decryptFile(output, "decrypted", key); return 0;
} 本文通过20个实战案例,从C语言的基础语法到高级应用,全面解析了C语言编程。通过学习这些案例,读者可以深入了解C语言的特点和应用场景,为今后的编程实践打下坚实的基础。