第一天:C语言基础入门1.1 C语言简介C语言是一种广泛使用的计算机编程语言,具有高性能、灵活性和跨平台性。它被认为是现代编程语言的基石,许多其他编程语言都受到C语言的影响。1.2 环境搭建安装编译器...
C语言是一种广泛使用的计算机编程语言,具有高性能、灵活性和跨平台性。它被认为是现代编程语言的基石,许多其他编程语言都受到C语言的影响。
.c扩展名。gcc -o program program.c
./program这里program.c是源代码文件,program是编译后的可执行文件。
int、float、double、char。int age = 25;
float pi = 3.14159;
char grade = 'A';if (condition) { // 条件为真时的代码块
} else { // 条件为假时的代码块
}for (初始化; 条件; 更新) { // 循环体
}switch (expression) { case constant1: // 当expression等于constant1时的代码块 break; case constant2: // 当expression等于constant2时的代码块 break; default: // 默认代码块 break;
}+、-、*、/、%。==、!=、>、<、>=、<=。&&、||、!。函数是C语言中的核心概念,用于组织代码并提高可重用性。
return_type function_name(parameter_list) { // 函数体
}function_name(parameter_list);数组是存储一系列具有相同数据类型的元素集合。
int numbers[10];int matrix[3][3];int arr[] = {1, 2, 3, 4, 5};指针是C语言中的一个特殊数据类型,它存储了另一个变量的地址。
int *ptr;ptr = &variable;*ptr; // 获取指针指向的值
ptr++; // 移动指针到下一个地址C语言提供了malloc、calloc、realloc和free等函数用于动态内存管理。
int *ptr = (int *)malloc(sizeof(int) * size);free(ptr);结构体是一种用户自定义的数据类型,用于将不同的数据项组合在一起。
struct Student { char name[50]; int age; float gpa;
};struct Student student1;联合体是一种特殊的数据类型,它允许存储不同类型的数据,但任何时候只能存储其中一个类型的数据。
union Data { int i; float f; char c;
};union Data data1;C语言提供了fopen、fclose、fread、fwrite等函数用于文件操作。
FILE *file = fopen("filename.txt", "r");char ch;
while ((ch = fgetc(file)) != EOF) { printf("%c", ch);
}fclose(file);文件指针是C语言中用于指向文件的一个特殊指针类型。
FILE *file;fseek(file, offset, whence);宏定义是C语言中的一种预处理指令,用于定义宏。
#define PI 3.14159printf("The value of PI is %f", PI);文件包含是C语言中的一种预处理指令,用于包含其他源文件。
#include "filename.h"字符串是C语言中一种特殊的数据类型,用于存储字符序列。
char str[] = "Hello, World!";C语言标准库提供了许多用于字符串处理的函数。
int len = strlen(str);char dest[50];
strcpy(dest, str);char dest[100];
strcat(dest, str);C语言提供了printf和scanf等函数用于标准输入输出。
printf("The value of x is %d", x);int x;
scanf("%d", &x);C语言提供了fopen、fclose、fread和fwrite等函数用于文件输入输出。
FILE *file = fopen("filename.txt", "w");
fprintf(file, "This is a line of text.\n");
fclose(file);FILE *file = fopen("filename.txt", "r");
char ch;
while ((ch = fgetc(file)) != EOF) { printf("%c", ch);
}
fclose(file);动态内存分配是指程序在运行时分配内存。
int *ptr = (int *)malloc(sizeof(int) * size);int *ptr = (int *)calloc(size, sizeof(int));int *ptr = (int *)realloc(ptr, sizeof(int) * new_size);动态分配的内存需要通过free函数进行释放。
free(ptr);结构体指针是指向结构体变量的指针。
struct Student *ptr;ptr->name;
ptr->age;
ptr->gpa;结构体数组是存储多个结构体实例的数组。
struct Student students[10];位运算符用于对变量的位进行操作。
int x = 10;
int y = 5;
int result = x & y;int result = x | y;int result = x ^ y;int result = ~x;int result = x << 1; // x左移1位
int result = x >> 1; // x右移1位位字段是C语言中用于存储单个位的数据类型。
struct BitField { unsigned int a : 3; unsigned int b : 4; unsigned int c : 5;
};C语言提供了fseek、ftell和rewind等函数用于文件随机访问。
fseek(file, offset, whence);long current_position = ftell(file);rewind(file);文件映射是指将文件的一部分映射到内存地址空间。
void *map = mmap(NULL, length, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, offset);线程是程序中的执行单元,是轻量级的进程。
pthread_create(&thread_id, NULL, thread_function, NULL);void *thread_function(void *arg) { // 线程执行的代码
}进程是计算机上正在运行的程序实例。
pid_t pid = fork();套接字是网络通信中用于数据传输的端点。
int sock = socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
bind(sock, (struct sockaddr *)&addr, sizeof(addr));套接字通信可以使用TCP或UDP协议。
int sock = socket(AF_INET, SOCK_STREAM, 0);
connect(sock, (struct sockaddr *)&addr, sizeof(addr));
send(sock, buffer, size, 0);
recv(sock, buffer, size, 0);
close(sock);int sock = socket(AF_INET, SOCK_DGRAM, 0);
sendto(sock, buffer, size, 0, (struct sockaddr *)&addr, sizeof(addr));
recvfrom(sock, buffer, size, 0, (struct sockaddr *)&addr, sizeof(addr));
close(sock);C语言中有许多图形库可供选择,如OpenGL、SDL等。
#include
void display() { // 显示图形的代码
}
int main(int argc, char **argv) { glutInit(&argc, argv); glutCreateWindow("OpenGL Window"); glutDisplayFunc(display); glutMainLoop(); return 0;
} 使用图形库可以绘制各种图形,如点、线、多边形等。
glBegin(GL_POINTS);
glVertex2f(x, y);
glEnd();glBegin(GL_LINES);
glVertex2f(x1, y1);
glVertex2f(x2, y2);
glEnd();C语言中有许多GUI库可供选择,如GTK+、Qt等。
#include
int main(int argc, char **argv) { GtkWidget *window; gtk_init(&argc, &argv); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), "GTK+ Window"); gtk_widget_show(window); gtk_main(); return 0;
} GUI库提供了许多组件,如按钮、文本框、标签等。
GtkWidget *button = gtk_button_new_with_label("Click Me");
gtk_container_add(GTK_CONTAINER(window), button);gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(on_button_clicked), NULL);数据库是用于存储、检索和管理数据的系统。
C语言提供了许多数据库接口,如ODBC、libmysqlclient等。
mysql_init(&conn);
mysql_real_connect(&conn, "host", "username", "password", "database", 0, NULL, 0);mysql_query(&conn, "SELECT * FROM table");result = mysql_use_result(&conn);
while ((row = mysql_fetch_row(result))) { // 处理结果行
}
mysql_free_result(result);多线程网络编程可以提高网络应用程序的性能和响应速度。
pthread_t thread_pool[THREAD_POOL_SIZE];void *thread_function(void *arg) { // 处理网络请求的代码
}网络加密可以保护数据传输的安全性。
SSL *ssl = SSL_new(ctx);
SSL_set_fd(ssl, sock);
SSL_connect(ssl);软件工程是一种系统化的、规范的、可度量的方法,用于开发、运行、维护和升级软件。
软件开发流程包括需求分析、设计、编码、测试和维护等阶段。
版本控制是软件工程中用于管理代码变更的一种技术。
git clone https://github.com/user/repo.git
git add .
git commit -m "commit message"
git push选择一个适合自己水平的C语言项目,如开发一个简单的计算器、文本编辑器或游戏。
制定项目计划,包括功能需求、开发时间表和资源分配。
按照项目计划进行开发,并进行充分的测试。
完成项目后,进行文档编写和项目交付。
通过以上21天的学习和实践,相信你已经掌握了C语言的基础知识和实战技能。不断学习和实践,你将能够解锁更多编程新技能!