当前位置: 首页 > article >正文

C语言复习总结超详细版(1)小白转身即变 有实例超级详细

废话不多说直接开整

注:本博文超级详细但是还是适合有C语言基础的观看 

耗时很久,内容不会有问题但是  ⚠️字体晦涩望见谅

引子 第一个C语言程序

#include <stdio.h>

int main() {
    printf("Hello, LJY!\n");
    return 0;
}

 main函数

每个C语⾔程序不管有多少⾏代码,都是从 main 函数开始执⾏的, main 函数是程序的⼊⼝, main 函数也被叫做:主函数。

main 前⾯的 int 表⽰ main 函数执⾏结束的时候返回⼀个整型类 型的值。所以在 main 函数的最后写 return 0; 正好前后呼应。

 库函数与占位符

库函数

C语言的标准库提供了大量的库函数,用于各种操作,包括输入输出、字符串处理、数学运算、内存分配等。所以以常见为准,其他可看https://cplusplus.com/reference/clibrary/icon-default.png?t=O83Ahttps://cplusplus.com/reference/clibrary/

1. 输入输出函数stdio.h

  • printf:格式化输出到标准输出(如屏幕)
  • scanf:格式化输入
  • puts:输出字符串并换行
  • gets:输入字符串(不安全,建议避免使用)
  • fopen:打开文件
  • fclose:关闭文件
  • fread / fwrite:从文件读/写数据块
  • fprintf / fscanf:格式化输出/输入到文件
#include <stdio.h>

int main() {
    printf("Hello, World!\n");  // 输出到屏幕
    FILE *file = fopen("test.txt", "w");
    fprintf(file, "Hello, File!\n");  // 输出到文件
    fclose(file);
    return 0;
}


2. 字符串处理函数string.h

  • strlen:获取字符串长度
  • strcpy:复制字符串
  • strncpy:复制指定长度的字符串
  • strcat:连接字符串
  • strcmp:比较字符串
  • strstr:查找子字符串
  • strchr:查找字符首次出现的位置
    #include <stdio.h>
    #include <string.h>
    
    int main() {
        char str1[20] = "Hello";
        char str2[20] = "World";
        strcat(str1, str2);  // 连接字符串,str1变为"HelloWorld"
        printf("连接后字符串:%s\n", str1);
        return 0;
    }

    3. 数学函数math.h

  • pow:计算幂次
  • sqrt:计算平方根
  • sin / cos / tan:三角函数
  • fabs:取绝对值
  • ceil:向上取整
  • floor:向下取整
#include <stdio.h>
#include <math.h>

int main() {
    double x = 9.0;
    printf("平方根:%.2f\n", sqrt(x));  // 输出:3.00
    printf("2的3次方:%.2f\n", pow(2, 3));  // 输出:8.00
    return 0;
}


4. 内存管理函数stdlib.h

  • malloc:分配内存
  • calloc:分配并初始化内存
  • realloc:重新分配内存
  • free:释放内存
#include <stdio.h>
#include <stdlib.h>

int main() {
    int* arr = (int*)malloc(5 * sizeof(int));  // 分配内存
    if (arr == NULL) {
        printf("内存分配失败\n");
        return 1;
    }
    for (int i = 0; i < 5; i++) {
        arr[i] = i + 1;
    }
    free(arr);  // 释放内存
    return 0;
}

5. 时间和日期函数time.h

  • time:获取当前时间
  • clock:获取程序运行时间
  • difftime:计算两个时间的差值
  • localtime:将时间转换为本地时间
  • strftime:格式化时间
#include <stdio.h>
#include <time.h>

int main() {
    time_t now = time(NULL);  // 获取当前时间
    printf("当前时间:%s", ctime(&now));  // 输出时间
    return 0;
}

 


6. 字符处理函数ctype.h

  • isalpha:判断是否是字母
  • isdigit:判断是否是数字
  • isspace:判断是否是空白字符
  • toupper:转换为大写
  • tolower:转换为小写

其他应用类似

#include <stdio.h>
#include <ctype.h>

int main() {
    char ch = 'a';
    printf("大写:%c\n", toupper(ch));  // 输出:A
    return 0;
}

 


7. 标准库通用函数stdlib.h

atoi  :将字符串转换为整数
#include <stdio.h>
#include <stdlib.h>

int main() {
    const char *str = "12345";
    int num = atoi(str); // 字符串转换为整数
    printf("The integer value is: %d\n", num);
    return 0;
}


 atof:将字符串转换为浮点数
#include <stdio.h>
#include <stdlib.h>

int main() {
    const char *str = "3.14159";
    double num = atof(str); // 字符串转换为浮点数
    printf("The float value is: %lf\n", num);
    return 0;
}


rand:生成随机数
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    // 初始化随机数种子
    srand(time(NULL));

    // 生成并打印10个随机数
    for (int i = 0; i < 10; i++) {
        int randomNum = rand(); // 生成随机数
        printf("Random number %d: %d\n", i + 1, randomNum);
    }
    return 0;
}


srand:设置随机数种子
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {
    srand(42); // 设置固定的随机数种子

    // 生成并打印5个随机数
    for (int i = 0; i < 5; i++) {
        int randomNum = rand();
        printf("Random number %d: %d\n", i + 1, randomNum);
    }

    return 0;
}


abs:计算整数的绝对值
#include <stdio.h>
#include <stdlib.h>

int main() {
    int num = -42;
    int absValue = abs(num); // 计算绝对值
    printf("The absolute value of %d is: %d\n", num, absValue);
    return 0;
}

system:执行系统命令
#include <stdio.h>
#include <stdlib.h>

int main() {
    char str[] = "123";
    int num = atoi(str);  // 转换字符串到整数
    printf("转换后的整数:%d\n", num);  // 输出:123
    return 0;
}

 


占位符

在C语言中,占位符用于printfscanf等函数中格式化输入和输出。下列为常见的

1. 整数型

  • %d:十进制整数
  • %i:十进制整数(与%d类似)
  • %u:无符号十进制整数
  • %o:无符号八进制整数
  • %x:无符号十六进制整数(小写字母)
  • %X:无符号十六进制整数(大写字母)
#include <stdio.h>

int main() {
    int a = 123;
    unsigned int b = 456;
    printf("十进制整数:%d\n", a);    // 输出:123
    printf("无符号十进制整数:%u\n", b);  // 输出:456
    printf("八进制整数:%o\n", b);      // 输出:710
    printf("十六进制整数(小写):%x\n", b);  // 输出:1c8
    printf("十六进制整数(大写):%X\n", b);  // 输出:1C8
    return 0;
}


2. 字符型

  • %c:单个字符
#include <stdio.h>

int main() {
    char str[] = "Hello, C!";
    printf("字符串:%s\n", str);  // 输出:Hello, C!
    return 0;
}


3. 字符串型

  • %s:字符串

#include <stdio.h>

int main() {
    char str[] = "Hello, C!";
    printf("字符串:%s\n", str);  // 输出:Hello, C!
    return 0;
}

 


4. 浮点型

  • %f:浮点数(默认小数点后6位)
  • %e:以科学计数法表示的浮点数(小写e
  • %E:以科学计数法表示的浮点数(大写E
  • %g:自动选择%f%e的格式
  • %a:以十六进制表示的浮点数
#include <stdio.h>

int main() {
    float f = 3.14159;
    double d = 12345.6789;
    printf("浮点数:%f\n", f);       // 输出:3.141590
    printf("科学计数法(小写e):%e\n", d);  // 输出:1.234568e+04
    printf("科学计数法(大写E):%E\n", d);  // 输出:1.234568E+04
    printf("自动选择:%g\n", d);     // 输出:12345.7
    return 0;
}


5. 指针型

  • %p:指针地址
#include <stdio.h>

int main() {
    int num = 10;
    int *p = &num;
    printf("指针地址:%p\n", p);  // 输出类似:0x7ffeece3c6dc
    return 0;
}

 


6. 宽度和精度控制

  • %.nf:小数点后保留n
  • %m.nf:输出宽度为m,小数点后保留n

#include <stdio.h>

int main() {
    float pi = 3.14159;
    printf("保留2位小数:%.2f\n", pi);   // 输出:3.14
    printf("宽度8,保留3位小数:%8.3f\n", pi);  // 输出:   3.142
    return 0;
}


7. 特殊符号(不常用)

  • %%:输出百分号%

#include <stdio.h>

int main() {
    printf("显示百分号:%%\n");   // 输出:显示百分号:%
    return 0;
}

 


关键字介绍

C 关键词 - cppreference.com  这里写了全部详细看文档

关键字(Keyword)也叫保留字(Reserved Word),是指已被编程语言本身使用,不能作为其他用途使用的单词‌。

数据类型关键字

  • int:表示整型
  • float:表示单精度浮点型
  • double:表示双精度浮点型
  • char:表示字符型
  • void:表示空类型
#include <stdio.h>

int main() {
    int a = 10;
    float b = 3.14;
    double c = 5.6789;
    char d = 'A';
    void *p; // void类型指针
    p = &a;

    printf("int a = %d\n", a);
    printf("float b = %f\n", b);
    printf("double c = %lf\n", c);
    printf("char d = %c\n", d);

    return 0;
}


数据修饰符关键字

  • const:常量
  • volatile:易变变量,编译器不会优化
  • signedunsigned:指定数据的有符号或无符号

#include <stdio.h>

int main() {
    const int maxValue = 100; // 常量
    unsigned int positiveNum = 50; // 无符号整数
    signed int negativeNum = -25; // 有符号整数

    printf("maxValue = %d\n", maxValue);
    printf("positiveNum = %u\n", positiveNum);
    printf("negativeNum = %d\n", negativeNum);

    return 0;
}

 


其他关键字

  • sizeof:返回数据类型或变量的大小
  • typedef:定义数据类型的别名
  • struct:结构体
  • union:共用体
  • enum:枚举类型
#include <stdio.h>

typedef struct {
    int id;
    char name[20];
} Student;

enum Color { RED, GREEN, BLUE };

int main() {
    Student s1 = {1, "Alice"};
    enum Color c = GREEN;

    printf("Student ID = %d, Name = %s\n", s1.id, s1.name);
    printf("Color = %d\n", c);

    printf("Size of int: %lu bytes\n", sizeof(int));
    printf("Size of Student: %lu bytes\n", sizeof(Student));

    return 0;
}

 


控制语句关键字

  • ifelse:条件判断
  • switchcasedefault:多分支选择语句
  • forwhiledo:循环控制语句
  • break:跳出循环或switch语句
  • continue:跳过本次循环,继续下一次循环
  • return:函数返回
#include <stdio.h>

int main() {
    int a = 5;

    if (a > 0) {
        printf("a is positive\n");
    } else {
        printf("a is non-positive\n");
    }

    for (int i = 0; i < 3; i++) {
        if (i == 1) continue;
        printf("Loop index: %d\n", i);
    }

    return 0;
}

 


存储类关键字

  • auto:局部变量默认的存储类,可省略
  • static:静态存储方式
  • extern:声明外部变量
  • register:建议将变量存储在寄存器中
#include <stdio.h>

int globalVar = 10; // 声明一个全局变量

void test() {
    static int count = 0; // 静态局部变量
    count++;
    printf("Static count = %d\n", count);
}

int main() {
    extern int globalVar; // 使用外部变量
    printf("globalVar = %d\n", globalVar);

    for (int i = 0; i < 3; i++) {
        test();
    }

    return 0;
}

 


 字符和ASCII编码

在键盘上可以敲出各种字符,如:a,q,@,#等,这些符号都被称为字符,C语⾔中字符是⽤单引号 括起来的,如:'a','b','@'。

我们知道在计算机中所有的数据都是以⼆进制的形式存储(0与1组合)的,那这些字符在内存中分别以什么样的⼆ 进制存储的呢?如果我们每个⼈⾃⼰给这些字符中的每个字符编⼀个⼆进制序列,这个叫做编码,为 了⽅便⼤家相互通信,不造成混乱,后来美国国家标准学会(ANSI)出台了⼀个标准ASCII编码,C 语⾔中的字符就遵循了ASCII编码的⽅式。

ASCII 码表  ASCII 码表 - cppreference.com

我们不需要记住所有的ASCII码表中的数字,使⽤时查看就可以,不过我们最好能掌握⼏组特殊的数据

  •  字符A~Z的ASCII码值从65~90
  • 字符a~z的ASCII码值从97~122
  • 对应的⼤⼩写字符(a和A)的ASCII码值的差值是32
  •  数字字符0~9的ASCII码值从48~57
  •  换⾏ \n 的ASCII值是:10
  •  在这些字符中ASCII码值从0~31这32个字符是不可打印字符,⽆法打印在屏幕上观察

 字符

C语⾔中如何表⽰字符串呢?使⽤双引号括起来的⼀串字符就被称为字符串,如:"abcdef",就是⼀个 字符串。%s 来指定

 #include <stdio.h>
 int main()
 {
 char arr1[] = {'a', 'b', 'c'};//arr1
数组中存放
3
个字符
 
char arr2[] = "abc"; //arr2
数组中存放字符串
 
printf("%s\n", arr1);
 printf("%s\n", arr2);
 return 0;
 }

\0 是字符串的结束标志。所以我们在使⽤库函数 strlen() 计算字符串⻓度的时候,遇到 printf() 打印字符串或者 \0 的时候就⾃动停⽌了。

 转义字符

在C语言中,转义字符用于表示一些特殊的字符或操作,通常以反斜杠 \ 开头。常用的C语言转义字符及其含义如下:

⽐如:我们有字符 n ,在字符串中打印的时候⾃然能打印出这个字符,如下

 #include <stdio.h>
 int main()
 {
 printf("abc\ndef");
 return 0;
 }

 

 控制语句

1. 条件判断语句也叫分⽀语句:if语句、switch语句;

2. 循环执⾏语句:dowhile语句、while语句、for语句;

3. 转向语句:break语句、goto语句、continue语句、return语句。 

1. 表达式语句 

表达式语句是由一个表达式和一个分号组成,主要用来完成赋值、运算或调用函数等操作。

int a = 5;      // 赋值语句
a = a + 3;      // 算术表达式
printf("%d", a); // 函数调用语句

2. 复合语句

复合语句由一组语句组成,放在一对大括号 {} 中,可以作为一个单独的语句使用。通常用于控制结构中,以构成一个代码块。

{
    int a = 10;
    int b = 20;
    int sum = a + b;
    printf("Sum: %d\n", sum);
}

3. 条件语句(选择语句)

条件语句根据条件是否成立来决定执行哪段代码,主要有 if 语句和 switch 语句。

  • if 语句
int a = 5;
if (a > 3) {
    printf("a 大于 3\n");
} else {
    printf("a 小于或等于 3\n");
}
  •  switch 语句
int grade = 2;
switch (grade) {
    case 1:
        printf("Grade A\n");
        break;
    case 2:
        printf("Grade B\n");
        break;
    default:
        printf("Grade C\n");
        break;
}

4. 循环语句

循环语句用于多次执行某一块代码,直到满足某个条件,主要包括 forwhiledo...while 三种。

for 循环

for (int i = 0; i < 5; i++) {
    printf("%d ", i);
}

 while 循环

int i = 0;
while (i < 5) {
    printf("%d ", i);
    i++;
}

 do...while 循环

int i = 0;
do {
    printf("%d ", i);
    i++;
} while (i < 5);

5. 跳转语句

跳转语句用于改变程序的执行流程,包括 breakcontinuegotoreturn

  • break 语句:用于立即跳出循环或 switch 语句。
for (int i = 0; i < 5; i++) {
    if (i == 3) break;
    printf("%d ", i);
}
  • continue 语句:跳过本次循环的剩余部分,进入下一次循环。
for (int i = 0; i < 5; i++) {
    if (i == 2) continue;
    printf("%d ", i);
}
  •  goto 语句:跳转到程序中定义的标签位置。
int a = 5;
if (a == 5) {
    goto label;
}
printf("这行不会被执行\n");
label:
printf("跳转到这里\n");
  •  return 语句:用于函数返回值并结束函数执行。
int sum(int a, int b) {
    return a + b;
}

6. 空语句

 #include <stdio.h>
 int main()
 {
     ;//空语句
     return 0;
 }

共勉

多的也不说了,在一路向北虽迷惘但在自己认为没有错的道路上加油💪💪


http://www.kler.cn/a/369298.html

相关文章:

  • Hadoop-001-本地虚拟机环境搭建
  • 基础设施即代码(IaC):自动化基础设施管理的未来
  • android aild 传递多个参数, in ,out,inout
  • STM32L476芯片在KEIL环境下BOOT跳转APP注意事项
  • 卷积神经网络(CNNs)在处理光谱特征的序列属性时表现不佳
  • <<机器学习实战>>15-26节笔记:逻辑回归参数估计、梯度下降及优化、模型评价指标
  • 多态的体现
  • 【数据结构与算法】第5课—数据结构之双链表
  • 网络原理之 TCP解释超详细!!!
  • 面试域——面试系统工程
  • Allegro:强大的文本到视频模型
  • 685. 冗余连接 II
  • [LeetCode] 784. 字母大小写全排序
  • 聚合值和非聚合值比较【SQL】
  • 基于SpringBoot的高考志愿智能推荐系统的设计与实现
  • Stable diffusion inference 多卡并行
  • FAQ-为什么交换机发给服务器的日志显示的时间少8小时
  • 易考八股文之如何对数据库进行优化(优化不少于十条)
  • 【学术会议论文投稿】“从零到一:使用IntelliJ IDEA打造你的梦幻HTML项目“
  • Android 原生开发与Harmony原生开发浅析
  • 压缩传感革命——自动验证算法证明了神经网络的准确性
  • ETL、ELT和反向ETL都有什么不同?怎么选择?
  • 基于vue框架的的高校学生资助信息系统3b240(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。
  • Linux服务器自动化批量安装IB网卡驱动
  • Git - 如何删除 push 过一次的文件链路追踪?
  • autMan奥特曼机器人-实时翻译的用法