C语言学习笔记<1>

发布于:2024-04-28 ⋅ 阅读:(27) ⋅ 点赞:(0)

1.

EOF(End of File)是文件结束标志,用于表示文件已经读取完毕。在C语言中,可以通过判断是否读取到EOF来判断文件是否读取完毕。

以下是一个简单的C语言代码示例,用于读取一个文本文件并输出其内容:

// 使用fopen函数打开一个名为example.txt的文件
// 然后使用fgetc函数逐个字符地读取文件内容
// 当fgetc函数返回EOF时,表示文件已经读取完毕,此时退出循环
// 最后,使用fclose函数关闭文件
#include <stdio.h>

int main() {
    FILE *file;
    char ch;

    file = fopen("example.txt", "r"); // 打开文件
    if (file == NULL) {
        printf("无法打开文件");
        return 1;
    }

    while ((ch = fgetc(file)) != EOF) { // 逐个字符读取文件内容
        putchar(ch); // 输出字符
    }

    fclose(file); // 关闭文件
    return 0;
}

2.单步执行

#include <Windows.h>

Sleep(1000);

#include <Windows.h> 是C/C++中引入Windows API头文件的语句,它包含了许多用于操作Windows操作系统的函数和数据类型。

Sleep(1000); 是一个Windows API函数,用于让程序暂停执行一段时间。在这个例子中,Sleep(1000) 表示程序将暂停执行1秒钟(1000毫秒)。这个函数通常用于控制程序的执行速度或者在需要等待某个操作完成时让程序暂停。

3.system执行系统操作
<1>清空屏幕
#include <stdlib.h>
system("cls");(system是一个库函数,可以执行系统命令)
<2>关机操作
#include <stdlib.h>
system("shutdown -s -t 60");

4.比较两个字符串是否相等

strcmp() 是C语言中的一个字符串比较函数,用于比较两个字符串的大小。头文件为<string.h>。它的原型为:

int strcmp(const char *str1, const char *str2);

参数 str1 和 str2 分别表示要比较的两个字符串。函数返回值为整数,如果 str1 小于 str2,则返回负数;如果 str1 等于 str2,则返回0;如果 str1 大于 str2,则返回正数。

简单示例:

#include <stdio.h>
#include <string.h>
int main() {
    char str1[] = "Hello";
    char str2[] = "World";
    char str3[] = "Hello";
    if (strcmp(str1, str2) == 0) {
        printf("str1 and str2 are equal");
    }
    else {
        printf("str1 and str2 are not equal");
    }
    if (strcmp(str1, str3) == 0) {
        printf("str1 and str3 are equal");
    }
    else {
        printf("str1 and str3 are not equal");
    }
    return 0;
}

5.生成随机数

#include <stdlib.h> //srand的头文件
#include <time.h> //time的头文件

srand((unsigned int)time(NULL)); //NULL是空指针
int num = rand();//num是生成的随机数

6.cmd关机

shutdown -s -t 60六十秒后关机
shutdown -a取消关机

7.

在C语言中,static关键字有三个主要的用途:

  1. 修饰局部变量:当一个局部变量被声明为static时,它的生命周期会在整个程序运行期间持续存在,而不是在函数调用结束后销毁。这意味着即使函数返回,该变量的值也会保留下来,下次调用该函数时,它将保持上次的值。

  2. 修饰全局变量:当一个全局变量被声明为static时,它的作用域将被限制在声明它的源文件中。这意味着其他源文件不能访问这个变量。这可以防止命名冲突。

  3. 修饰函数:当一个函数被声明为static时,它的作用域也将被限制在声明它的源文件中。这也有助于防止命名冲突。

代码示例:

#include <stdio.h>

// 使用static修饰全局变量
static int global_var = 0;

void func() {
    // 使用static修饰局部变量
    static int local_var = 0;
    local_var++;
    global_var++;
    printf("local_var: %d, global_var: %d\n", local_var, global_var);
}

int main() {
    func();
    func();
    return 0;
}

8.

extern关键字用于声明一个变量或函数,表示它的定义在其他地方。这样,多个源文件可以共享同一个变量或函数。

当一个变量或函数被声明为extern时,编译器会在链接阶段查找其定义。如果找不到定义,就会报错。

下面是一个简单的示例:

file1.c:

#include <stdio.h>

int global_var = 10; // 全局变量

void print_global_var() {
    printf("global_var: %d
", global_var);
}

file2.c:

#include <stdio.h>

extern int global_var; // 声明全局变量
extern void print_global_var(); // 声明函数

int main() {
    printf("global_var: %d
", global_var);
    print_global_var();
    return 0;
}

编译和链接:

gcc file1.c file2.c -o program // 编译和链接这两个源文件,得到了一个可执行程序

输出:

global_var: 10
global_var: 10

9.

结构体是一种复合数据类型,它可以包含不同类型的数据成员。结构体可以用来表示现实世界中的对象,例如学生、员工等。

定义结构体的语法如下:

struct 结构体名 {
    数据类型1 成员名1;
    数据类型2 成员名2;
    ...
};
// 例如,我们可以定义一个表示学生信息的结构体:
struct Student {
    char name[20]; // 姓名
    int age;       // 年龄
    float score;   // 成绩
};


// 使用结构体时,需要先声明一个结构体变量,然后可以通过点运算符访问其成员。例如:
struct Student stu;
stu.name = "张三";
stu.age = 18;
stu.score = 90.5;


// 结构体指针可以用来指向结构体变量的地址。通过结构体指针可以访问结构体变量的成员。例如:
struct Student *p = &stu;
strcpy(p->name, "李四");
p->age = 20;
p->score = 80.5;


// 结构体作为函数参数和返回值也是常见的用法。例如,我们可以定义一个函数来计算学生的平均成绩:
float average_score(struct Student *students, int num) {
    float sum = 0;
    for (int i = 0; i < num; i++) {
        sum += students[i].score;
    }
    return sum / num;
}


网站公告

今日签到

点亮在社区的每一天
去签到