C语言 - 基础

C 语言

1. Hello World

#include <stdio.h>

int main(int argc, const char *argv[])
{
	printf("hello world\n");
    
	return 0;
}

注意:

  1. 所有的标点符号必须在英文状态下输入
  2. 单词不要写错
  3. 注意空格

创建 C语言 程序步骤:

1、创建一个文档,以 .c 作为后缀名
2、在该文档中编写以下代码

3、使用gcc编译器编译该程序
4、执行编译生成的可执行文件

编译顺序:

编译时
	代码从文件头开始检查
运行时
    程序在运行时会寻找main函数
    在main函数中从上向下依次执行

2. 注释

作用:解释说明

特点:不会影响代码的运行

语法:

单行注释
	//注释的内容
块注释
    /*
    注释的内容
    多行
    */
	注意:不能嵌套

3. 输出

作用:给控制台输出内容

语法:

printf("输出的内容", 位置1, 位置2,..);

占位符:

%d, 	十进制有符号整数 
%u, 	十进制无符号整数
%x, 	以十六进制表示的整数 
%o, 	以八进制表示的整数
%f, 	float 型浮点数
%.2f, 	小数点后保留2位
%lf, 	double 型浮点数
%e, 	指数形式的浮点数
%s, 	字符串
%c, 	单个字符
%p, 	指针的值

例:

要求:输出xxx今年xx岁,身高xxm

#include <stdio.h>

int main(){
    printf("%s今年%d岁,身高%fm","张三",18,1.76);
    return 0;
}

4. 标识符

概念:标记的符号,名称

变量名,函数名,数组名,枚举名,结构体名,...

命名规则(强制要求) :

不能使用数字开头
不能使用特殊符号,_与$除外
不能使用关键字
不能使用中文

命名风格(建议) :

驼峰命名法
	大驼峰
		写法:每个单词首字母大写
		一般用于:枚举名,结构体名
	小驼峰
        写法:第一个单词首字母小写,其他单词首字母大写
        一般用于:变量名,数字名,函数名等
	全大写
        写法:全大写
        一般用于:常量名
	全小写
        写法:全小写
        一般用于:文件夹名

Liunx风格命名法
    多个单词之间使用下划线连接
    比如: hello_world

5. 关键字

5.1 数据类型相关

short 			短整形
int 			整形
long 			长整形
float 			单精度浮点数
double 			双精度浮点数
char 			字符

struct 			结构体
union 			共用体
enum 			枚举
signed 			有符号
unsigned 		无符号
void 			空的返回值类型

5.2 存储相关

register 		寄存器存储
static 			静态的
const 			不可修改的
auto 			自动
extern 			声明

5.3 控制语句相关

if
else
break
continue
for
while
do
switch
case
goto
default

5.4 其他关键字

sizeof 		测量数据或数据类型的大小,单位是字节
typedef 	给已知数类型起别名
volatile 	用 volatile 定义的变量,是易改变的,即告诉 cpu 每次用volatile 变量的时候,
			重新去内存中取保证用的是最新的值,而不是寄存器中的备份。

6. 数据类型

char 		字符 			1字节 			8位
    注意:
        字符需要单引号包裹,一对单引号只能包裹一个字符
        'a'
        '中'
        'ab' 错
    特殊的字符
        转意字符
            \" 双引号
            \' 单引号
            \\ \
            \n 换行
            \t 制表
            \r 回到行首符号
            \a 发出警报
            \0 字符串结束符
short 			短正型 			2字节 						16位			-2^15~2^15-1
int 			整形 				 4字节 			 			 32位		-2^31~2^31-1
long 			长整形 			4字节(32位)或8字节(64位) 		 32位或64位
float 			单精度浮点型 		  4字节
double 			双精度浮点型 		  8字节       	(小数默认是double)
signed 			有符号
unsigned 		无符号
null 			空

注意:

  • 当值后加 l 表示为long型的数据,其他情况下整数默认为int
  • 当值后加 f 表为float型的数据,小数默认为double
signed char 			char
sigend int 				int
sigend short 			int short
unsigned int

typedef int myint;
volatile
register 建议寄存器存储

7. 变量

7.1 作用

临时记录一个值,可以被改变的数据

例:

需求:

使用变量分别记录人的姓名,性别,年龄,并在控制台打印,打印格式如
xxx 性别为xx,年龄为xx岁
记录的人有
t m 29
b w 27

#include <stdio.h>

int main()
{
    char name = 't';
    char sex = 'm';
    int age = 29;
    printf("%c 性别为 %c,年龄为%d岁!\n", name, sex, age);

    name = 'b';
    sex = 'w';
    age = 27;
    printf("%c 性别为 %c,年龄为%d岁!\n", name, sex, age);

    return 0;
}

7.2 使用

  • 声明(在某些特殊情况下才需进行)

  • 定义(重点)

    语法:
        数据类型 变量名;
        数据类型 变量名 = 值;
    名词:
    	变量的第一次赋值称为变量的初始化
    

    注意:

    • 函数中定义的变量为局部变量,局部变量默认使用auto修改,此时默认值为一个随机数
    • 函数外定义的变量为成员变量,默认值为0

    例:

    #include <stdio.h>
    //函数外
    int main()
    {
    	//函数中
    } 
    //函数外
    
  • 使用

    语法:
    	取值
    		变量名
    	改值
    		变量名 = 值;
    
  • 练习:

    #include <stdio.h>
    
    int main()
    {
        int age = 18;
        char sex = 'm';
        printf("%s今年%d岁,性别为%c\n","张三",age,sex);
        age = 19;
        sex = 'w';
        printf("%s今年%d岁,性别为%c\n","张三",age,sex);
        return 0;
    }
    

    注意:

    1、局部变量可以与成员变量重名
    2、当局部变量与成员变量重名时,优先使用局部变量
    3、同一作用域下变量名不能相同

7.3 变量的声明

#include <stdio.h>
/*
此处就是变量的声明
变量声明只是告知编译器有该变量,此时并不会为其开辟内存空间
*/
extern int num;

int main()
    {
    printf("num=%d\n",num);
    return 0;
    } 
/* 
变量的定义,编译器编译时会为其开辟内存空间
*/
int num = 10;

相关关键字:

#include <stdio.h>

int main()
{
    //for(int i = 0; i < 1000; i++){
        //当变量为局部变量时
        //变量默认就是有符号的
        //signed int == int
        //当变量为局部变量时等价
        //sigened auto int == int
        //auto int == int
        unsigned int num = 10;
        //建议将n02存储在寄存器中
        register int n02 = 1;
        //volatile强制要求从内存中取值
        volatile int n03 = 2;
        //typedef 给已经知道的数据类型起别名
        typedef int myInt;
        myInt n04 = 10;
        printf("num=%d\n",n04);
	//}
	return 0;
}

7.4 类型转换

7.4.1 自动转换

小类型转换为大类型,无需特殊处理

//'a' 的数据类型为 char 占1字节
//int 占4字节
int num = 'a';
printf("num=%d\n",num);

注意:每一个字符都有对应的数字

ASCII码对照表:

  • a~z:97-122
  • A~Z:64-90
7.4.2 强制转换

大类型转换为小类型,需强转,有风险

语法:

小类型变量名 = (小类型)大类型数值或变量

例:

int num = 'a';
char c = (char)num;
printf("c=%c\n",c);

在这里插入图片描述

8. 进制

8.1 计算机的进制

二进制
    0b二进制数
    取值:
    	0 1
八进程
	0八进制数
	取值:
		0~7
十六进制
	0x十六进制数
	取值:
		0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f

**注意:计算机在存储 8进制16进制 数时按无符号数存储 **

8.2 进制转换

8.2.1 十进制转其他
  • 十进制转换为二进制

    口诀:十进制数除2,取余,直到商为0,余数倒读

如:
int num = 12;

    12
    2
    -------
    6 			0
    2 
    -------
    3 			0
    2 
    -------
    1 			1
    2 
    -------
    0 			1
    12对应的2进制为:0000 0000 0000 0000 0000 0000 0000 1100
  • 十进制转换为八进制

    口诀:十进制数除8,取余,直到商为0,余数倒读

  • 十进制转换为十六进制

    口诀:十进制数除16,取余,直到商为0,余数倒读

8.2.2 其他转十进制
  • 二进制转换为十进制
如:
    int num = 0b111010

    111010
    1 * 2^5 + 1 * 2^4 + 1 * 2^3 + 0 * 2^2 + 1*2^1 + 0*2^0
    32 + 16 + 8 + 0 + 2 + 0
    58  
  • 八进制转换为十进制
如:
    int num = 0123;
    
    1 * 8^2 + 2*8^1 + 3*8^0
    64 + 16 + 3
    83
  • 十六进制转换为十进制
如:
    int num = 0x123;
    
    1 * 16^2 + 2*16^1 + 3*16^0
    256 + 32 + 3
    291  

9. 原码、反码、补码

9.1 原码

数值对应的二进制数,最高位为符号位,整数为0,负数为1

int num = 1;
0000 0000 0000 0000 0000 0000 0000 0001

int n01 = -1;
1000 0000 0000 0000 0000 0000 0000 0001

9.2 反码

正数三码合一,与原码相同

负数的反码等于原码符号位不动其他位取反

int num = 1;
原码: 0000 0000 0000 0000 0000 0000 0000 0001
反码: 0000 0000 0000 0000 0000 0000 0000 0001

int n01 = -1;
原码: 1000 0000 0000 0000 0000 0000 0000 0001
反码: 1111 1111 1111 1111 1111 1111 1111 1110

9.3 补码

正数三码合一,与原码相同

负数的补码等于反码+1

int num = 1;
原码: 0000 0000 0000 0000 0000 0000 0000 0001
反码: 0000 0000 0000 0000 0000 0000 0000 0001
补码: 0000 0000 0000 0000 0000 0000 0000 0001

int n01 = -1;
原码: 1000 0000 0000 0000 0000 0000 0000 0001
反码: 1111 1111 1111 1111 1111 1111 1111 1110
补码: 1111 1111 1111 1111 1111 1111 1111 1111

注意:**计算机底层以补码形式存储数据 **

补码的意义:

1、统一了正0与负0的编码
0

原码:0000 0000 0000 0000 0000 0000 0000 0000
反码:0000 0000 0000 0000 0000 0000 0000 0000
补码:0000 0000 0000 0000 0000 0000 0000 0000

-0
原码:1000 0000 0000 0000 0000 0000 0000 0000
反码:1111 1111 1111 1111 1111 1111 1111 1111
补码:0000 0000 0000 0000 0000 0000 0000 0000

2、此时减法就是+负数

9.4 扩展:

1111 1111 被当做纯二进制看待时,是255,被当做补码看时是 -1
#include <stdio.h>
int main(int argc, char const *argv[])
{
    char c = 255; //1111 1111
    int i = 255; //0000 0000 0000 0000 0000 0000 1111 1111
    printf("c=%d, i=%d\n", c, i);
    
    return 0;
}
//输出:c=-1, i=255

整数越界:

整数的存储是一个圈,越过了最大范围的值,会到最小范围那头。

整数是以纯二进制的方式进行计算的,所以:
	1111 1111 + 1 ——> (1)0000 0000 ——> 0
	0111 1111 + 1 ——> 1000 0000 ——> -128
	1000 0000 - 1 ——> 0111 1111 ——> 127

在这里插入图片描述

#include <stdio.h>
int main(int argc, char const *argv[])
{
    char c = 127; //1111 1111
    int i = 255; //0000 0000 0000 0000 0000 0000 1111 1111
    c = c + 1;
    printf("c=%d, i=%d\n", c, i);
    
    return 0;
}
//输出:c=-128, i=255

10. 数据的存取

**计算机存储的是补码,计算机取值是先将补码转换为源码,在将源码转换为10进制数 **

例1:

int num = 0xf1 11 11 11;

计算机存储的num是:
	1111 0001 0001 0001 0001 0001 0001 0001
	
计算机取出的num是:
    补码:
    1111 0001 0001 0001 0001 0001 0001 0001
    反码:
    1111 0001 0001 0001 0001 0001 0001 0000
    原码:
    1000 1110 1110 1110 1110 1110 1110 1111

例2:

char c = 0xf0;

补码: 1111 0000
反码: 1110 1111
原码: 1001 0000

- 1 * 2^4
- 16

11. 运算符

11.1 算数运算符

+, -, *, /, %

++

注意:

++
++在前:
先自增,再参与运算
++在后:
先参与运算,再自增

例:

int a = 10;
	int b = ++a + 1;   // 12

	int b = a++ + 1;   // 11

​ --在前:
​ 先递减,再参与运算
​ --在后:
​ 先参与运算,再递减

11.2 赋值运算符

将等号右边的值赋值给左边的变量

=

如:
	int a = 10;
	int b = a;
	int c = a + b;

11.3 复合运算符

+=
    int a = 1;
    int b = 2;
    //a = a + b;
    a += b;
    
-=
    int a = 1;
    int b = 2;
    //a = a - b;
    a -= b;
    
*=
    int a = 1;
    int b = 2;
    //a = a * b;
    a *= b;
    
/=
%=

11.4 关系运算符

<
    1 < 10
    int a = 1;
    int b = 10;
    a < b;
> 
<=
>=
==
!

11.5 逻辑运算符

|| 		短路或
	有真为真,同假为假
	
    int a = 1;
    int b = 2;
    int c = 3;
    a < b || c < b;
&& 		短路与

    有假为假,同真的真
    int a = 1;
    int b = 2;
    int c = 3;
    a < b && c > b;
    
! 		非
    非真为假,非假为真
    ! a < b
    ! a > b

11.6 位运算符

& 			按位与
	同1为1,有0为0
	如:
        int a = 8;
        int b = 9;
        int c = a & b;
        
        1000
        1001
        ------
        1000
        
| 			按位或
	有1为1,同0为0
    如:
        int a = 8;
        int b = 9;
        int c = a | b;
        
        1000
        1001
        ------
        1001	
        
~ 			取反
	1为0,0为1
	
^ 			按位异或
	不同得1,相同得0
	
>> 			右移
    int num = 4;
    int a = num >> 2;
    
    100
    001
    
<< 			左移
    int num = 4;
    int a = num << 2;
    
    100
    10000

11.7 三目运算符

语法:
条件表达式1 ? 值1 : 值2;

逻辑:
如果条件表达式1为真,取值1,反之取值2

例:

//获取a,b之间的最大值
int a = 10;
int b = 1;
int max = a > b ? a : b;

//获取a,b,c之间的最大值
int a = 10;
int b = 1;
int c = 3;
int max = (a > b ? a : b) > c ? (a > b ? a : b) : c;

11.8 其他

运算符优先级:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/187583.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MYSQL 及 SQL 注入

文章目录 前言什么是sql注入防止SQL注入Like语句中的注入后言 前言 hello world欢迎来到前端的新世界 &#x1f61c;当前文章系列专栏&#xff1a;Mysql &#x1f431;‍&#x1f453;博主在前端领域还有很多知识和技术需要掌握&#xff0c;正在不断努力填补技术短板。(如果出现…

「最优化基础知识2」一维搜索,以及python代码

最优化基础知识&#xff08;2&#xff09; 无约束优化问题&#xff0c;一维搜索 一、一维搜索 一维搜索的意思是在一个方向上找到最小点。 用数学语言描述&#xff0c;X*Xk tPk&#xff0c;从Xk沿着Pk方向行走t到达最小点X*。 1、收敛速度&#xff1a; 线性收敛&#xff1…

mac测试远程端口是否可连接

打开命令行工具&#xff0c;使用命令nc -z ip port即可 &#xff0c;如果成功&#xff0c;则会返回如下信息&#xff1a; 。

FANUC机器人系统配置相关--系统变量介绍

FANUC机器人系统配置相关–系统变量介绍 系统配置页相关变量 1- 停电处理$SEMIPOWERFL = TRUE(有效)/FALSE(无效) 2- 停电处理中的I/O $PWF_IO = 1(不恢复)/2(仿真恢复)/3(解除仿真)/4(恢复所有) 3- 停电处理无效时自动执行的程序 $PWR_NORMAL = ‘’ 4- 停电处理有效时自动…

【21年扬大真题】编写程序,通过指针p的改变,实现一维数组的输入及逆序输出

【21年扬大真题】编写程序&#xff0c;通过指针p的改变&#xff0c;实现一维数组的输入及逆序输出 例如&#xff0c;输入为1,2,3,4,5,6,7&#xff1b; 输出为7,6,5,4,3,2,1 法一&#xff1a;不改变原数组&#xff0c;仅逆序打印输出 #define _CRT_SECURE_NO_WARNINGS #includ…

Linux下安装python3步骤:

1.下载Python3源码 你需要从Python官网下载Python3的源码包。本文以Python 3.9.9为例。你可以使用wget命令来下载源码包到你的Linux主目录中: wget https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tgz2.编译和安装Python3 下载好源码包后&#xff0c;你需要解压它&…

【外贸干货】领英客户开发与营销的六个策略方向

领英(LinkedIn)已经成为外贸营销人员&#xff0c;尤其是B2B外贸营销人员&#xff0c;一个重要且有效的社交媒体平台。 相比于其他社交媒体平台&#xff0c;领英(LinkedIn)在增加流量、产生高质量的潜在客户和建立思想领导力方面有着独有的优势。 因为领英(LinkedIn)不仅仅是获…

idea自动切换输入法Smart Input

idea搜索后下载 红色表示中文输入法 再ideavim场景下会自动切换成英文非常好用强烈推荐下载一个

英特尔和 ARM 将合作开发移动芯片技术,如何看待双方合作?

英特尔和 ARM 将合作开发移动芯片技术&#xff0c;如何看待双方合作&#xff1f; 最近市场传出Arm要自产芯片&#xff0c;供智能手机与笔电等使用后&#xff0c;外媒指Arm自产芯片将由英特尔晶圆代工部门打造&#xff0c;变成英特尔晶圆代工客户。将采用英特尔18A工艺&#xff…

电子学会C/C++编程等级考试2022年03月(二级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:温度统计 现有一段时间的温度数据,请统计指定温度出现的次数。 时间限制:1000 内存限制:65536输入 第一行一个整数n,表示温度数据的个数。(0 < n ≤ 200) 第二行n个整数,以空格分隔,每个整数表示一个温度,温度的范围大…

我好像发现了车载测试面试成功的秘籍

在汽车行业中&#xff0c;车载测试工程师扮演着至关重要的角色。他们负责确保汽车的各种系统和功能在各种条件下都能正常运行&#xff0c;以确保车辆的安全性、可靠性和性能。如果你梦想成为一名车载测试工程师&#xff0c;那么你可能需要准备好回答一些关键的面试问题。在本文…

华大基因基因检测产品发布,助力早发冠心病风险评估

冠状动脉性心脏病&#xff0c;简称冠心病。冠心病作为导致猝死的常见原因之一&#xff0c;近年来备受关注。早发冠心病是指冠心病发病年龄男性≤55岁&#xff0c;女性≤60岁。早发冠心病是一种发病时心肌损伤严重的冠心病&#xff0c;由于心肌缺血&#xff0c;还有可能会导致急…

使用 PyODPS 采集神策事件数据

文章目录 一、前言二、数据采集、处理和入库2.1 获取神策 token2.2 请求神策数据2.3 数据处理-面向数组2.4 测试阿里云 DataFrame 入库2.5 调度设计与配置2.6 项目代码整合 三、小结四、花絮-避坑指南第一坑&#xff1a;阿里云仅深圳节点支持神策数据第二坑&#xff1a;神策 To…

Vue与UserEcharts、DataV的协同

文章目录 引言一、Vue.js简介二、ECharts和UserEcharts1.ECharts简介2.UserEcharts&#xff1a;Vue和ECharts的结合 三、DataV简介四、Vue与DataV的结合1.DataV的Vue插件2.Vue和DataV的数据交互 结论我是将军&#xff0c;我一直都在&#xff0c;。&#xff01; 引言 接着上一篇…

代码随想录算法训练营第五十八天|739. 每日温度、496. 下一个更大元素 I

第十章 单调栈part01 739. 每日温度 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用…

LLM之Agent(一):使用GPT-4开启AutoGPT Agent自动化任务完整指南

在ChatGPT引领的大模型时代&#xff0c;要想让大模型按照用户的指令执行&#xff0c;Prompt设计是一门艺术&#xff0c;由此还催生了一个职业”Prompt工程师“。其实&#xff0c;并不是所有人都可以设计出好的Prompt&#xff0c;甚至同样的Prompt应用在不同的大模型上表现的结果…

小程序中的大道理--综述

前言 以下将用一个小程序来探讨一些大道理, 这些大道理包括可扩展性, 抽象与封装, 可维护性, 健壮性, 团队合作, 工具的利用, 可测试性, 自顶向下, 分而治之, 分层, 可读性, 模块化, 松耦合, MVC, 领域模型, 甚至对称性, 香农的信息论等等. 为什么不用大程序来说大道理呢? …

flink源码分析之功能组件(二)-kubeclient

简介 本系列是flink源码分析的第二个系列,上一个《flink源码分析之集群与资源》分析集群与资源,本系列分析功能组件,kubeclient,rpc,心跳,高可用,slotpool,rest,metrics,future。其中kubeclient上一个系列介绍过,为了系列完整性,这里“copy”一下。 kubeclient组件…

EI期刊完整程序:MEA-BP思维进化法优化BP神经网络的回归预测算法,可作为对比预测模型,丰富内容,直接运行,免费

适用平台&#xff1a;Matlab 2020及以上 本程序参考中文EI期刊《基于MEA⁃BP神经网络的建筑能耗预测模型》&#xff0c;程序注释清晰&#xff0c;干货满满&#xff0c;下面对文章和程序做简要介绍。 适用领域&#xff1a;风速预测、光伏功率预测、发电功率预测、碳价预测等多…

【部署运维】docker:入门到进阶

0 前言 部署运维博客系列一共有三篇&#xff1a; 拥抱开源&#xff0c;将工作中的经验分享出来&#xff0c;尽量避免新手踩坑。 【部署运维】docker&#xff1a;入门到进阶 【部署运维】kubernetes&#xff1a;容器集群管理掌握这些就够了 【部署运维】pythonredisceleryd…