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 inttypedef 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 == intunsigned 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;122-------6 			02 -------3 			02 -------1 			12 -------0 			112对应的2进制为:0000 0000 0000 0000 0000 0000 0000 1100
  • 十进制转换为八进制

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

  • 十进制转换为十六进制

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

8.2.2 其他转十进制
  • 二进制转换为十进制
如:int num = 0b1110101110101 * 2^5 + 1 * 2^4 + 1 * 2^3 + 0 * 2^2 + 1*2^1 + 0*2^032 + 16 + 8 + 0 + 2 + 058  
  • 八进制转换为十进制
如:int num = 0123;1 * 8^2 + 2*8^1 + 3*8^064 + 16 + 383
  • 十六进制转换为十进制
如:int num = 0x123;1 * 16^2 + 2*16^1 + 3*16^0256 + 32 + 3291  

9. 原码、反码、补码

9.1 原码

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

int num = 1;
0000 0000 0000 0000 0000 0000 0000 0001int 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 0001int 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 0001int 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 1111int i = 255; //0000 0000 0000 0000 0000 0000 1111 1111printf("c=%d, i=%d\n", c, i);return 0;
}
//输出:c=-1, i=255

整数越界:

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

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

在这里插入图片描述

#include <stdio.h>
int main(int argc, char const *argv[])
{char c = 127; //1111 1111int i = 255; //0000 0000 0000 0000 0000 0000 1111 1111c = 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;   // 12int 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 < 10int 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;10001001------1000| 			按位或有1为1,同0为0如:int a = 8;int b = 9;int c = a | b;10001001------1001	~ 			取反1为0,0为1^ 			按位异或不同得1,相同得0>> 			右移int num = 4;int a = num >> 2;100001<< 			左移int num = 4;int a = num << 2;10010000

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 其他

运算符优先级:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Springboot 南阳旅游平台-计算机毕设 附源码 31829

Springboot 南阳旅游平台 目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3 论文结构与章节安排 2 南阳旅游平台系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 法律可行性分析 2.2 系统功能分析 2.2.1 功能性分析 2.2.2 非功能性分析…

芙蓉花 欣赏

芙蓉&#xff08;Hibiscus mutabilis Linn&#xff09;是一种锦葵科、木槿属植物原名&#xff1a;木芙蓉&#xff0c;别名&#xff1a;芙蓉花、拒霜花、木莲、地芙蓉、华木、酒醉芙蓉。其花或白或粉或赤&#xff0c;皎若芙蓉出水&#xff0c;艳似菡萏展瓣&#xff0c;故有“芙蓉…

Ubuntu服务器/工作站常见故障修复记录

日常写代码写方案文档&#xff0c;偶尔遇上服务器出现问题的时候&#xff0c;也需要充当一把运维工程师&#xff0c;此帖用来记录服务器报错的一些解决方案&#xff0c;仅供参考&#xff01; 文章目录 一、服务器简介二、机箱拆解三、基本操作3.1 F2进入BIOS3.2 F12进入Boot Me…

教你IDEA解决GIT冲突

前言 GIT基本上贯穿我们的开发生涯&#xff0c;之所以要使用git也是有很多优点的 &#x1f339;&#x1f339;&#x1f339;&#x1f339;&#x1f339;&#x1f339;&#x1f339;&#x1f339; 1.通俗易懂点&#xff0c;保存代码不丢失&#xff1a;防止因内存&#xff0c;操…

字符串函数

读取字符串的函数 1.gets()函数 说明&#xff1a;gets函数简单易用&#xff0c;它读取整行输入&#xff0c;直至遇到换行符&#xff0c;然后丢掉换行符&#xff0c;储存其余字符&#xff0c;并在末尾添加一个空字符使其成为一个C字符串。它经常和puts&#xff08;&#xff09;…

从零开始的RISC-V模拟器开发(一)环境搭建

前言 博主这系列文章是跟随中科院吴伟老师的b站公开课&#xff1a;[完结]从零开始的RISC-V模拟器开发第一季2021春季_哔哩哔哩_bilibili 记录的笔记。仅供学习使用&#xff0c;侵删&#xff01; 苦逼的博主现在自己毕设也是要设计类似的东西。哎。我需要做的是给一个现成的 R…

STM32 MAP文件

文章目录 1 生成Map2 map中概念3 文件分析流程3.1 Section Cross References3.2 Removing Unused input sections from the image&#xff08;移除未使用的段&#xff09;3.3 Memory Map of the image&#xff08;映像的内存分布&#xff09;3.3.1 加载域3.3.2 运行域 4 代码运…

机器学习探索计划——KNN算法流程的简易了解

文章目录 数据准备阶段KNN预测的过程1.计算新样本与已知样本点的距离2.按照举例排序3.确定k值4.距离最近的k个点投票 scikit-learn中的KNN算法 数据准备阶段 import matplotlib.pyplot as plt import numpy as np# 样本特征 data_X [[0.5, 2],[1.8, 3],[3.9, 1],[4.7, 4],[6.…

软件测试:超详细的Jmeter基础教程

JMeter 介绍&#xff1a; 一个非常优秀的开源的性能测试工具。 优点&#xff1a;你用着用着就会发现它的重多优点&#xff0c;当然不足点也会呈现出来。 从性能工具的原理划分 Jmeter工具和其他性能工具在原理上完全一致&#xff0c;工具包含4个部分&#xff1a; &#xff…

基于springboot实现高校食堂移动预约点餐系统【项目源码】

基于springboot实现高校食堂移动预约点餐系统演示 Java语言简介 Java是由SUN公司推出&#xff0c;该公司于2010年被oracle公司收购。Java本是印度尼西亚的一个叫做爪洼岛的英文名称&#xff0c;也因此得来java是一杯正冒着热气咖啡的标识。Java语言在移动互联网的大背景下具备…

rancher2.6 docker版本部署

1. 拉取镜像 docker pull rancher/rancher:v2.6.5 注&#xff1a; 上面命令中rancher的版本v2.6.5&#xff0c;仅仅是我因为我们环境中使用的k8s都是 1.20.1 到1.23.6 之间的版本。rancher支持的k8s版本&#xff0c;在github上查看&#xff1a;Release Release v2.6.5 ranche…

2023 年 认证杯 小美赛 国际大学生数学建模挑战赛 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 cs数模团队在认证杯 小美赛前为大家提供了许多资料的内容呀&am…

基于springboot实现乒乓球预约管理系统项目【项目源码】

基于springboot实现乒乓球预约管理系统演示 系统的开发环境 浏览器&#xff1a;IE 8.1&#xff08;推荐6.0以上&#xff09; 开发使用语言&#xff1a;JAVA JDK版本&#xff1a;JDK_8 数据库管理系统软件&#xff1a;Mysql 运行平台&#xff1a;Windows 7 运行环境&#…

破案现场:Docker容器资源限制导致的oom问题

破案现场&#xff1a;Docker容器资源限制导致的oom问题 01 事故现场02 问题定位03 对症下药04 后记 原文来自于微信公众号“运维之美” https://mp.weixin.qq.com/s?__bizMzA5NDY1MTM3MA&mid2247484902&idx1&sn8394aefd884ee09ea546fcd400dd233c&chksm904a136…

是否有无限提取的代理IP?作为技术你需要知道这些

最近有互联网行业的技术小伙伴问到&#xff0c;有没有可以无限提取的代理IP&#xff1f;就是比如我一秒钟提取几万、几十万次&#xff0c;或者很多台机器同时调用API提取链接&#xff0c;这样可以吗&#xff1f;看到这个问题&#xff0c;不禁沉思起来&#xff0c;其实理论上是存…

python基础教程:动态参数

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片领取源码 Python的动态参数有两种&#xff0c;分别是*args和**kwargs&#xff0c; 这里面的关键是一个和两个星号的区别&#xff0c;而不是args和kwargs在名字上的区别&#…

js粒子效果(二)

效果: 代码: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Particle Animation</title><…

一篇文章让你入门python集合和字典

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 一、集合: 增加 add 删除 del 删除集合 discard(常用)删除集合中的元素 &#xff0c;删除一个不存在的元素不会报错 remove 删除一个不存在的元素会报错 pop随…

【点云surface】Poisson表面重建

1 介绍 Poisson表面重建算法是一种用于从点云数据生成平滑曲面模型的算法。它基于Michael Kazhdan等人在2006年发表的论文《Poisson surface reconstruction》。该算法通过将点云数据转换为体素表示&#xff0c;并利用Poisson方程来重建曲面。 该算法的基本原理是将点云数据转…

训练日志——wandb

目录 安装与登录基础使用与可视化常用函数wandb.init()wandb.config()wandb.log()wandb.finish()wandb.watch() 参考 安装与登录 安装 pip install wandb注册并登录 https://wandb.ai/site客户端登陆 在终端中输入wandb login 然后出现You can find you API key的一串网站&am…