hello,大家好,我是程序员黎明 ,本期我将带领大家学习C语言基础知识,并在最后写一个简单的项目带大家巩固基础知识
一、C语言是什么
C语言是一种通用的编程语言,由丹尼斯·里奇(Dennis Ritchie)在1972年开发。它最初是为编写操作系统(特别是UNIX)而设计的。C语言具有以下几个特点:
-
结构化:C语言支持过程化编程,可以通过函数对代码进行模块化,增强了程序的可读性和维护性。
-
高效性:C语言可以直接操作内存,并且提供了丰富的低级处理能力,这使得它在执行速度和资源管理方面非常高效。
-
可移植性:由于C语言与具体的硬件架构无关,使用C语言编写的程序可以很容易地移植到不同的计算机系统上。
-
广泛使用:C语言被广泛应用于系统编程、嵌入式系统开发、应用程序开发等领域。许多现代编程语言(如C++、C#、Java等)都直接或间接地从C语言发展而来。
-
强大的库支持:C语言有丰富的标准库和第三方库支持,能够方便地进行各种类型的开发工作。
总之,C语言因其简洁、灵活、高效而成为编程领域的基础语言之一,尤其适用于系统软件、驱动程序和嵌入式系统的开发。
二、用什么运行C语言
我们要运行C语言程序,通常需要一个C语言编译器。以下是常见的C语言编译器以及它们的安装和运行方法:
1. GCC(GNU Compiler Collection)
GCC是一个开源的编译器,广泛用于Linux和其他Unix系统上,但也可以在Windows上使用。
在Linux上安装GCC
大多数Linux发行版已经预装了GCC。如果没有,可以使用以下命令安装:
sudo apt update
sudo apt install gcc
在Windows上安装GCC
在Windows上,可以通过MinGW或Cygwin安装GCC。
-
MinGW安装步骤:
-
下载MinGW安装程序。 -
运行安装程序,选择“mingw32-gcc-g++”包,并安装。 -
安装完成后,将 MinGW/bin目录添加到系统的环境变量PATH中,以便在命令行中使用GCC。 -
Cygwin安装步骤:
-
下载并运行Cygwin安装程序。 -
在安装过程中,选择“Devel”类别下的“gcc-core”和“make”包。 -
完成安装后,打开Cygwin终端,您就可以使用GCC编译C程序。
在macOS上安装GCC
macOS自带了Clang编译器(类似于GCC)。要安装GCC,可以使用Homebrew:
brew install gcc
2. Visual Studio
Visual Studio是微软提供的集成开发环境(IDE),支持C语言开发。
安装步骤:
-
下载并安装Visual Studio。 -
在安装时选择“Desktop development with C++”工作负载,这会安装C++编译器(它也支持C语言)。 -
安装完成后,可以使用Visual Studio创建C语言项目并编写、调试和运行代码。
3. Code::Blocks
Code::Blocks是一个开源的C/C++集成开发环境(IDE),适合初学者。
安装步骤:
-
下载Code::Blocks。 -
选择带有Mingw编译器的版本(通常叫做“codeblocks-XX.XX-mingw-setup.exe”)。 -
安装完成后,打开Code::Blocks,您可以直接创建C语言项目并运行代码。
4. Dev-C++
Dev-C++是另一个流行的开源C/C++集成开发环境。
安装步骤:
-
下载并安装Dev-C++。 -
安装完成后,打开Dev-C++,创建一个新的C项目或源文件,编写代码后可以直接编译和运行。
编写和运行C程序的基本步骤:
-
打开您的开发环境或文本编辑器,创建一个
.c文件(例如hello.c)。 -
编写C代码,例如:
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
} -
保存文件并使用编译器编译。
-
如果使用GCC,可以在终端或命令提示符中运行: gcc hello.c -o hello -
这会生成一个可执行文件 hello,可以通过运行./hello(Linux和macOS)或hello.exe(Windows)来执行程序。 -
运行编译后的程序,查看输出。
通过这些步骤,您可以安装并运行C语言程序。如果您需要进一步的帮助或有其他问题,随时问我!
三、C语言的基础知识
接下来我将详细介绍C语言中的基础知识。
1. 变量和数据类型
定义和使用变量
变量是用于存储数据的命名存储单元。每个变量都有一个特定的数据类型,表示它可以存储的数据类型。
-
基本数据类型: -
int:用于存储整数。例如,int a = 10;定义了一个整数变量a,值为10。 -
float:用于存储单精度浮点数(小数)。例如,float b = 5.25;定义了一个浮点型变量b。 -
double:用于存储双精度浮点数,精度比float高。 -
char:用于存储单个字符。例如,char c = 'A';定义了一个字符变量c。
使用变量
#include <stdio.h>
int main() {
int a = 10; // 定义一个整数变量a
float b = 5.25; // 定义一个浮点型变量b
char c = 'A'; // 定义一个字符变量c
printf("a = %d\n", a); // 使用%d输出整数
printf("b = %.2f\n", b); // 使用%.2f输出浮点数,保留两位小数
printf("c = %c\n", c); // 使用%c输出字符
return 0;
}
运行这个程序将输出:
a = 10
b = 5.25
c = A
2. 常量
常量是值不可改变的量。C语言提供了两种定义常量的方式:使用#define宏定义和使用const关键字。
-
使用
#define宏定义常量:#define PI 3.14在代码中,所有的
PI都会被替换为3.14。 -
使用
const关键字定义常量:const int MAX = 100;
3. 运算符
运算符用于执行操作,C语言中的运算符可以分为以下几类:
-
算术运算符:
+(加)、-(减)、*(乘)、/(除)、%(取余)。int sum = 10 + 5; // 结果是15
int remainder = 10 % 3; // 结果是1 -
关系运算符:
==(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)。int a = 10, b = 5;
if (a > b) {
printf("a is greater than b\n");
} -
逻辑运算符:
&&(与)、||(或)、!(非)。int x = 1, y = 0;
if (x && !y) {
printf("x is true and y is false\n");
}
4. 控制结构
条件语句
条件语句用于根据条件的真假执行不同的代码段。
-
if语句:int a = 10;
if (a > 5) {
printf("a is greater than 5\n");
} else {
printf("a is not greater than 5\n");
}运行上面的代码,将输出:
a is greater than 5 -
switch语句:int day = 3;
switch (day) {
case 1:
printf("Monday\n");
break;
case 2:
printf("Tuesday\n");
break;
case 3:
printf("Wednesday\n");
break;
default:
printf("Other day\n");
}输出结果为:
Wednesday
循环语句
循环语句用于多次重复执行一段代码。
-
for循环:for (int i = 0; i < 5; i++) {
printf("i = %d\n", i);
}该循环将从
i = 0开始,一直到i < 5为假之前,每次循环i增加1。输出结果为:i = 0
i = 1
i = 2
i = 3
i = 4 -
while循环:int i = 0;
while (i < 5) {
printf("i = %d\n", i);
i++;
} -
do-while循环:do-while保证循环体至少执行一次。int i = 0;
do {
printf("i = %d\n", i);
i++;
} while (i < 5);
5. 函数
函数是C语言中实现代码重用的基本单元。函数可以接收参数并返回一个值。
定义和调用函数
-
定义函数:
int add(int x, int y) {
return x + y;
} -
调用函数:
int result = add(5, 3);
printf("Result: %d\n", result);
6. 数组和指针
数组
数组是存储相同类型数据的集合。
int arr[5] = {1, 2, 3, 4, 5};
for (int i = 0; i < 5; i++) {
printf("%d ", arr[i]);
}
输出结果为:
1 2 3 4 5
指针
指针是用于存储变量地址的变量。在C语言中,指针非常重要,可以用于数组操作、动态内存分配和函数参数传递。
int n = 10;
int *p = &n; // p是一个指针,存储n的地址
printf("Value of n: %d\n", *p); // *p表示指向地址的值,即n的值
7. 结构体
结构体是C语言中用于存储不同类型数据的集合体。
struct Point {
int x;
int y;
};
int main() {
struct Point p1;
p1.x = 10;
p1.y = 20;
printf("Point: (%d, %d)\n", p1.x, p1.y);
return 0;
}
输出结果为:
Point: (10, 20)
8. 文件操作
C语言可以读写文件,通过标准库函数如fopen、fclose、fprintf、fscanf等实现。
FILE *fp = fopen("test.txt", "w");
if (fp != NULL) {
fprintf(fp, "Hello, File!\n");
fclose(fp);
}
9. 动态内存管理
在C语言中,可以使用malloc、calloc、realloc进行动态内存分配,使用free释放内存。
int *p = (int *)malloc(5 * sizeof(int));
if (p != NULL) {
for (int i = 0; i < 5; i++) {
p[i] = i * 10;
}
free(p);
}
10. 预处理器指令
预处理器指令在编译前处理代码。常见的指令包括#define、#include、#ifdef、#ifndef等。
#define MAX 100
int main() {
#ifdef MAX
printf("MAX is defined\n");
#endif
return 0;
}
运行上面的代码,将输出:
MAX is defined
综合示例
看到这里,有的小伙伴可能理解了前面的基础知识,那现在让我们写一个简单的项目来加深对C语言的理解吧!
项目概述
这个项目将综合使用C语言的基本概念,包括变量、数据类型、常量、运算符、控制结构、函数、数组、指针、结构体、文件操作、动态内存管理、预处理器指令等。项目将模拟一个简单的学生管理系统,具备以下功能:
-
添加学生信息。 -
显示所有学生信息。 -
保存学生信息到文件。 -
从文件中加载学生信息。
项目结构
-
**文件1: main.c**:程序的入口,处理主逻辑和菜单选择。 -
**文件2: student.c**:包含与学生信息相关的函数实现。 -
**文件3: student.h**:声明student.c中使用的函数和结构体。 -
**文件4: Makefile**:用于编译和链接程序。
代码实现
文件1:main.c
#include <stdio.h>
#include <stdlib.h>
#include "student.h"
#define MAX_STUDENTS 100
int main() {
struct Student students[MAX_STUDENTS];
int count = 0;
int choice;
while (1) {
printf("\nStudent Management System\n");
printf("1. Add Student\n");
printf("2. Display Students\n");
printf("3. Save Students to File\n");
printf("4. Load Students from File\n");
printf("5. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
if (count < MAX_STUDENTS) {
students[count] = addStudent();
count++;
} else {
printf("Student list is full!\n");
}
break;
case 2:
displayStudents(students, count);
break;
case 3:
saveStudentsToFile(students, count, "students.txt");
break;
case 4:
count = loadStudentsFromFile(students, "students.txt");
break;
case 5:
printf("Exiting program...\n");
return 0;
default:
printf("Invalid choice! Please try again.\n");
}
}
return 0;
}
文件2:student.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "student.h"
struct Student addStudent() {
struct Student s;
printf("Enter Student ID: ");
scanf("%d", &s.id);
printf("Enter Student Name: ");
scanf("%s", s.name);
printf("Enter Student Grade: ");
scanf("%f", &s.grade);
return s;
}
void displayStudents(struct Student students[], int count) {
for (int i = 0; i < count; i++) {
printStudent(students[i]);
}
}
void printStudent(struct Student s) {
printf("ID: %d, Name: %s, Grade: %.2f\n", s.id, s.name, s.grade);
}
void saveStudentsToFile(struct Student students[], int count, const char *filename) {
FILE *fp = fopen(filename, "w");
if (fp == NULL) {
printf("Error opening file!\n");
return;
}
for (int i = 0; i < count; i++) {
fprintf(fp, "%d %s %.2f\n", students[i].id, students[i].name, students[i].grade);
}
fclose(fp);
printf("Students saved to %s\n", filename);
}
int loadStudentsFromFile(struct Student students[], const char *filename) {
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("Error opening file!\n");
return 0;
}
int count = 0;
while (fscanf(fp, "%d %s %f", &students[count].id, students[count].name, &students[count].grade) != EOF) {
count++;
}
fclose(fp);
printf("Loaded %d students from %s\n", count, filename);
return count;
}
文件3:student.h
#ifndef STUDENT_H
#define STUDENT_H
struct Student {
int id;
char name[20];
float grade;
};
struct Student addStudent();
void displayStudents(struct Student students[], int count);
void printStudent(struct Student s);
void saveStudentsToFile(struct Student students[], int count, const char *filename);
int loadStudentsFromFile(struct Student students[], const char *filename);
#endif
文件4:Makefile
CC = gcc
CFLAGS = -Wall
OBJ = main.o student.o
all: student_management
student_management: $(OBJ)
$(CC) $(CFLAGS) -o student_management $(OBJ)
main.o: main.c student.h
$(CC) $(CFLAGS) -c main.c
student.o: student.c student.h
$(CC) $(CFLAGS) -c student.c
clean:
rm -f student_management $(OBJ)
使用方法
-
编译程序:在项目目录下,运行 make命令。 -
运行程序:编译完成后,执行 ./student_management启动程序。 -
添加学生:选择菜单中的 1,输入学生信息。 -
显示学生信息:选择菜单中的 2,查看所有学生信息。 -
保存学生信息:选择菜单中的 3,将学生信息保存到students.txt文件中。 -
加载学生信息:选择菜单中的 4,从students.txt文件中加载学生信息。 -
退出程序:选择菜单中的 5,退出程序。
这个项目展示了C语言中的核心概念和如何将它们结合起来构建一个功能完整的应用程序。
好了,本期我们就学到这里啦,我们下期不见不散呀!


