首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C语言一文速成 | 期末保命夺分神器!

C语言一文速成 | 期末保命夺分神器!

作者头像
钮祜禄.爱因斯晨
发布2025-07-20 09:24:49
发布2025-07-20 09:24:49
14700
代码可运行
举报
运行总次数:0
代码可运行

个人主页-爱因斯晨

文章专栏-C语言

旧文新发,朝花夕拾。老友相聚,感触颇多。有那么一瞬间,什么都不想要,就想陪在好友身边,就想呆在小县城。计算机这条路,注定孤独!

一、常见概念速讲

1.标识符:

定义:

用户编程时使用的名字

命名规则:

由字母(A-Z,a-z)、数字(0-9)、下划线组成

首字母不能是数字,可以是字母或下划线

严格区分大小写

不能与关键字相同

2.第一个C语言程序

C语言的基本单位是函数

代码语言:javascript
代码运行次数:0
运行
复制
#include<stdio.h>
int main ()
{
    //代码块
    return 0;
}

main函数是程序的入口

一个C语言程序有且仅有一个main函数

C语言代码变成可执行文件的四个步骤

预处理-编译-汇编-链接

3.进制

二进制:由0和1组成,0b开头。如0b101

八进制:由0-7组成,0开头,如:062。八进制遇8进1,081这个数值就是非法的。因为在8进制中没有8这个数。

十进制:由0-9组成

十六进制:由0-9,A-F组成,0x开头

4.数据类型

32位操作系统下

实型数据的合法形式

实型有两种表示形式:

十进制小数形式:由数字和小数点组成。如:123.456、0.345、-56.79、0.0、12.0等

注意:12.和.48都是合法形式

指数形式:如:12.34e3(代表12.34*10**3)

e前e后必有数,e后必是整数

5.字符类型

  1. 字符是由单引号引起来的,如‘a’、‘0’
  2. 字符‘0’对应的ASCII值是48,字符‘A’对应的ASCII值是65、字符‘a’对应的ASCII值是97
  3. 字符和字符之间是可以进行算术计算的,计算的依据是字符对应的ASCII值 大写字母和小写字母,ASCII值的差值是32. 小写字母-32=对应的大写字母 大写字母+32=对应的小写字母

6.字符串

  1. 使用双引号括起来的一串字符就被称为字符串
  2. 字符串的末尾。默认会有一个字符’\0’,这是字符串的结束标识
  3. 字符串长度的计算,使用strlen函数。计算的是‘\0’之前的字符个数
  4. 字符串的打印格式可以使用%s来指定

二、输出函数

printf()的作用是将文本按格式输出到屏幕

使用之前需要先引入stdio.h头文件

printf函数在使用的时候,至少要有一个参数

printf的基本结构

printf(“第一部分,第二部分”); 把第二部分的值放到第一部分里,输出到控制台

printf(“%d键%d联”,1,3); 将第二部分的1和3,直接放到第一部分里,然后输出到控制台。

代码语言:javascript
代码运行次数:0
运行
复制
1键3联

printf(“%d\n%d联”,1,3);

这里的’\n’是转义字符,是换行的意思

代码语言:javascript
代码运行次数:0
运行
复制
#include<stdio.h>
int main()
{
    printf("一键三连,逢考必过");
    return 0;
}

printf(“%d键%d联”,1,3);

这里的%d是C语言中的占位符,用于表示将来会被替换为其他值的位置

%2d,是表示这个占位符的宽度至少是两位,不满2位前面补空格

三、输入函数

scanf()函数用于读取用户的键盘输入

scanf()函数的基本形式:scanf(“参数列表1”,参数列表2);

代码语言:javascript
代码运行次数:0
运行
复制
int a;

scanf("%d",&a);

从键盘输入一个数,scanf函数会将输入的数放到i按量a所在的位置

控制台输入的时候,要按照参数列表1的格式在控制台输入数据

代码语言:javascript
代码运行次数:0
运行
复制
int a;
scanf("a=%d,&a");

正确输入方式:a=10

控制台输入的内容必须和参数列表1中的内容一致。

scanf中参数列表二中,必须放地址。&a表示的是变量a的地址

scanf和指针使用

代码语言:javascript
代码运行次数:0
运行
复制
int main ()
{
    int a=0;
    int*pa=&a;
    scanf("%d",pa);
    return 0;
}

这里的指针pa拿到的就是变量a的地址。不足要再次取地址了。

scanf(“%d”,&pa); 这样写就是错误的。

scanf()限制输入的长度

输入数:12345678910

scanf(“%2d%3d%4d”,&a,&b,&c);

a的值12 b的值345 c的值6789

四、运算符和表达式

1,算数运算符:+、-、*、/、%

  • 除法运算符(/)的两侧操作数都为整数,最后得到的结果也会是整数。15/4=3
  • 除法运算符(/)的两侧操作数都为浮点数,最后得到的结果也会是浮点数。15/4.0=3.75
  • 取模运算符(%)用于求两个操作数的余数。两个操作数必须是整数。15%4=3

2,单目运算符:++、–

++是一种自增的运算符,分为前置++和后置++。前置++(–),是先(–),再使用。

–是一种自减的运算符,分为前置–和后置–。后置++(–),是先使用,再++(–)。

代码语言:javascript
代码运行次数:0
运行
复制
int x=10;
int y=++x;//y的值是11,x的值是11
int z=x--;//z的值是11,x的值是10

int x=10;
int y=--x;//y的值是9,x的值是9
int z=x--;//z的值是9,x的值是8

3,赋值运算符:=和复合赋值

=:简单的赋值运算符, 把右边操作数的值赋给左边操作数

a+=3

相当于

a=a+3

a-=3

相当于

a=a-3

a*=3

相当于

a=a*3

a/=3

相当于

a=a/3

a%=3

相当于

a=a%3

4,强制类型转换

  1. 强制类型转换,括号括住的是类型 int a=int (1.23);非法 int a=(int)1.23;合法
  2. 会将小数部分直接舍去而不是四舍五入 int a=(int)(12/3+0.3);

5,关系运算符(>、<、>=、<=、!=、==)

  1. 关系运算符的返回结果通常是1或0,表示真和假
  2. 相等运算符==与赋值运算符=是两个不一样的运算符
  3. 多个关系运算符不宜连用。 x>y>z不等于x>y&&y>z

6,条件运算符

条件运算符也叫三目运算符,需要接收三个操作数的,形式如:表达式1?表达式2:表达式3

条件操作符的计算逻辑是:

若表达式1的值为真,则将表达式2的值作为整个条件表达式的取值。

若表达式2的值为假,则将表达式3的值作为整个条件表达式的取值。

7,逻辑运算符和表达式

逻辑非(!):若表达式为真,则逻辑非运算符使其为假;

​ 若表达式为假,则逻辑非运算符使其为真。

逻辑与(&&):只有所有表达式都为真,整个逻辑表达式才为真

逻辑或(||): 只要有一个表达式为真,整个逻辑表达式为真

8,逗号表达式

逗号表达式,就是用逗号隔开的多个表达式

逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果

五、控制语句-分支

结构化程序有三种:顺序结构,选择结构,循环结构

if语句的基本形式:

单独的if语句
代码语言:javascript
代码运行次数:0
运行
复制
if(x>0)
{
    printf("x是一个正数。);
}
标准的if语句:
代码语言:javascript
代码运行次数:0
运行
复制
if(x>0)
{
    printf("x是一个正数。");
}
else
{
    printf("x不是一个正数。");
}
嵌套的if语句:
代码语言:javascript
代码运行次数:0
运行
复制
if(x>0)
{
    if(x%2==0)
    {
        printf("x是一个正偶数。");
    }
    else
    {
        printf("x是一个正奇数");
    }
}
else
{
    printf("x不是一个正数。");
}
并列的if语句:
代码语言:javascript
代码运行次数:0
运行
复制
if(x>0)
{
    printf("x是一个正数。");
}
else if (x<0)
{
    printf("x是一个负数。");
}
else
{
    printf("x的值为0");
}

switch分支结构

基本形式:

代码语言:javascript
代码运行次数:0
运行
复制
switch(变量表达形式)
{
    case 常量1:
        语句;
        break;
    case 常量2:
        语句;
        break;
    ...
    default:
        语句;
        break;
}
  1. switch语句的表达式必须是整型或枚举类型,或者是可以转换为整型的类型
  2. case常量必须是整型常量表达式
  3. 每个case分支通常应该以break语句结束
  4. default子句用于处理case未匹配的情况

六、控制语句-循环

while循环

代码语言:javascript
代码运行次数:0
运行
复制
while(条件)
{
    //循环体
}

特点:当条件为真时,循环体会一直执行

当条件为假时,循环停止

注意:

  • 如果初始条件为假,循环体一次都不会执行
  • 在循环体内要确保有控制条件变化的代码,避免死循环

do-while循环

代码语言:javascript
代码运行次数:0
运行
复制
do
{
    //循环体
}while (条件);

特点:

循环体至少执行一次(先执行,后判断条件)

注意点:

  • 适用于需要至少执行一次循环体的场景
  • 最后的分号,注意不能省略

for循环

代码语言:javascript
代码运行次数:0
运行
复制
for (条件1;条件2;条件3)
{
    //循环体
}

特点:for循环将初始化、条件判断和递增/递减操作集中再一行,非常适合计数型循环。

注意点:

每个条件都可以省略但分号不能省略,但循环条件为空时要小心死循环

break和continue

break语句:立刻退出循环,不再执行后续循环体

代码语言:javascript
代码运行次数:0
运行
复制
for(int i=0;i<10;i++)//预计执行10次循环
{
    if(i==3)
    {
        break;//实际只执行三次循环
    }
}

continue语句:跳过本次循环的剩余部分,直接开始下一次循环

代码语言:javascript
代码运行次数:0
运行
复制
for (int i=0;i<10;i++)
{
    if(i==3)
    {
        continue;
    }
    printf("%d",i);//这次循环不再执行
}

七、函数

1,函数的基本概念

函数是一种用来完成特定任务的代码块,可以被多次调用

函数的作用:提高代码的复用性,简化复杂程序,增强可读性

函数的语法结构:

代码语言:javascript
代码运行次数:0
运行
复制
返回值 函数名(参数列表)
{
    //函数体
}
代码语言:javascript
代码运行次数:0
运行
复制
int add(int a,int b)
{
    int c=a+b;
    return c;
}

2,函数的声明和定义

函数声明:在使用函数前,需要声明他的返回类型和参数列表

代码语言:javascript
代码运行次数:0
运行
复制
//返回值 函数名(参数列表);
int add (int a,int b);

函数定义:完整的函数实现,包括函数体。

代码语言:javascript
代码运行次数:0
运行
复制
int add (int a,int b)
{
    return a+b;
}

3, 函数的参数和返回值

代码语言:javascript
代码运行次数:0
运行
复制
int main()
{
    int a= 10;
    int b= 20;
    int sum=add(a,b)
    printf("%d",sum);
    return 0;
}
代码语言:javascript
代码运行次数:0
运行
复制
int add(int a,int b)
{
    int c= a+b;
    return c;
}

4, 传值调用与传址调用

  • 传值调用:将参数的值传递给函数,函数内部对参数的修改不会影响外部变量
  • 传址调用:将参数的地址传递给函数,函数内部可以修改实际的变量值(通过指针)

传值调用

传址调用:

5,数组与函数

  • 数组作为函数参数时,传递的是数组的首地址,因此数组作为参数时,函数内的修改会影响原数组

main()函数的位置可以任意放置

练习:编写一个程序,其中自定义一个函数,用来判断一个整数是否为素数,主函数输入一个数,输出是否为素数

代码语言:javascript
代码运行次数:0
运行
复制
//如果是素数就返回1,如果不是就返回0
int Isp(int number)
{
    if(number <=1)
    {
        return 0;
    }
    for (int i=2; i<number;i++)
    {
        if((number%i)==0)
        {
            return 0;
        }
    }
    return 1;
}
int main()
{
    int number;
    printf("请输入一个整数:"/n);
    scanf("%d",&number);
    int ret=Isp(number);
    if(ret==0)
    {
        printf("%d不是一个素数",number);
    }
    else
    {
        printf("%d是一个素数",number);
    }
    return 0;
}

八、数组

1.数组的概念和定义

数组是一种数据结构,用于存储一组相同类型的数据

数组中的元素在内存中是连续存放的

数组通过下标来访问元素,下标从0开始

2.数组的声明与初始化

数组的声明

  • 数组声明格式:数组类型 数组名 [数组的大小]
  • 数组的大小必须是一个正整数
  • 数组大小不能为负数,且数组一旦声明,大小就不能改变

数组的初始化

  • 全部初始化:int arr[5]= {1,2,3,4,5};
  • 部分初始化:int arr[5]={1,2,3};
  • 没有初始化时,数组的默认值(通常为未定义)

3.数组元素访问

使用下标访问数组中的元素:array[下标]

下标是从0开始,并且下标是一个整数

下标越界将导致未定义行为

4.二维数组

二维数组可以看作是”数组的数组“,即一个包含多个一维数组的数组。它用来表示矩阵或表格等二维数据

二维数组的声明格式:数据类型 数组名 [行数] [列数];

九、指针

1.指针是什么

指针是一个变量,用来村发那个内存地址的变量

指针的声明形式为:

代码语言:javascript
代码运行次数:0
运行
复制
int *p;
  • p是指针变量的名字
  • int*是一个类型,表示指向整数的指针类型
代码语言:javascript
代码运行次数:0
运行
复制
int a=10;
int *p=&a;
printf("%d",*p);
//p存储的是a的地址
//*p表示对指针p进行解引用
//*p实际上就是变量a的值

2.一级指针和二级指针

一级指针:存储的是变量的地址,通过解引用(*p)可以获得该变量的值

二级指针:

3.指针和数组的关系

数组名作为指针:在c语言中,数组名通常被看作是指向数组第一个元素的指针常量

数组索引和指针算术的等价性:数组索引操作实际上是一种指针算数

4.指针的算术运算

指针+整数:当我们对指针进行加法运算时,实际上是在移动指针所指向的内存位置。移动的距离取决于指针的类型

p是int*类型,每次+1,移动的距离是sizeof(int),也就是4个字节

十、结构体、字符串和预处理

1.结构体

结构体的定义和声明

结构体成员的访问

2.字符串

3.预处理

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-07-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 个人主页-爱因斯晨
  • 文章专栏-C语言
  • 一、常见概念速讲
    • 1.标识符:
      • 定义:
      • 命名规则:
    • 2.第一个C语言程序
    • 3.进制
    • 4.数据类型
    • 5.字符类型
    • 6.字符串
  • 二、输出函数
  • 三、输入函数
  • 四、运算符和表达式
    • 1,算数运算符:+、-、*、/、%
    • 2,单目运算符:++、–
    • 3,赋值运算符:=和复合赋值
    • 4,强制类型转换
    • 5,关系运算符(>、<、>=、<=、!=、==)
    • 6,条件运算符
    • 7,逻辑运算符和表达式
    • 8,逗号表达式
  • 五、控制语句-分支
    • if语句的基本形式:
      • 单独的if语句
      • 标准的if语句:
      • 嵌套的if语句:
      • 并列的if语句:
    • switch分支结构
  • 六、控制语句-循环
    • while循环
    • do-while循环
    • for循环
    • break和continue
  • 七、函数
    • 1,函数的基本概念
    • 2,函数的声明和定义
    • 3, 函数的参数和返回值
    • 4, 传值调用与传址调用
    • 5,数组与函数
  • 八、数组
    • 1.数组的概念和定义
    • 2.数组的声明与初始化
    • 3.数组元素访问
    • 4.二维数组
  • 九、指针
    • 1.指针是什么
    • 2.一级指针和二级指针
    • 3.指针和数组的关系
    • 4.指针的算术运算
  • 十、结构体、字符串和预处理
    • 1.结构体
    • 2.字符串
    • 3.预处理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档