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

C语言学习(三)

#include <stdio.h>
int main(void){int a;
scanf("%d",&a);
printf("%d",a);
return 0;}
正在上传…重新上传取消正在上传…重新上传取消

&符号作用是把键盘中输入的值给变量a,使用scanf()时输入数值,需要按一下enter键,主要是为了告诉程序我已经输入完了

如果运行程序时是一闪而过的情况,就需要使用两次getchar(),getchar()作用是让程序暂停,等待输入,第一次是输入了数字,第二次是等待输入,打印的结果就会出来,如果没有scanf()只有printf(),使用一次即可

使用scan()可能会出现以下错误:

解决方法:

1.把scanf()换成scanf_s() 

2.在代码第一行添加 #define _CRT_SECURE_NO_WARNINGS

 %.2f代表只输出小数点后两位

变量是随时会发生变化的量,如成绩

常量是不会发生变化的量,如圆周率

int 基本整数类型,long short unsigned和c90新增的signed用于提供基本整数类型的变式

如long long int。char用于指定字母和其他字符(*,#),char也可以代表较小的整数。float,dobule,long dobule表示带小数点的数。_Bool代表布尔值(True,False),_Complex和_Imaginary代表复数和虚数。

两大基本数据类型,整数类型和小数类型。

字(word)是设计计算机之初给定的自然存储单位。现在的32位,64位计算机,计算机的字长越大,数据转移越快,允许访问的内存也越多。1 bytes 字节=8bit(比特)

 C语言基本数据类型:

整型数据

int 有符号的整型数据

早期是16位计算机,int 范围(-2^15,2^15-1)即(-32768,32767),是ISO C规定的int最小取值范围,ISO是国际标准化组织,现在不管是32位还是64位的计算机,都用一个32位储存一个int值,int 范围(-2^31,2^31-1)即(-2147483648~2147483647),用一位特殊位的值来表示符号,也就是正负。

1.声明多个int 变量:

第一种

int a;

int b;

第二种 

int a,b;

2.给变量值:

(1).直接赋值

int a;

a=10;

(2).scanf()获取输入的值

int a;

scanf("%d",&a);

(3). 初始化变量

int a=10;

 不要把未初始化的变量和初始化的变量放在同一条声明中,如下面

int a,b=10;   //a没有值,b的值为10

 注意有小数点和指数表示的数均不是整型,如 1.0,1E

%d指明了在一行中整数打印的位置,也是转换说明,指定printf()用什么格式显示一个值。格式化字符串%d 对应int。使用printf()时注意说明的数量要与打印的数量相同,编译器不会捕获这种错误,会输出内存中的一个值

#include <stdio.h>
int main(void) {int a = 1;printf("%d is %d", a);return 0;
}
正在上传…重新上传取消正在上传…重新上传取消

 3.8进制和16进制

在c语言中int 大多为16进制数,0x,0X代表十六进制的数, 0代表八进制数,%o显示八进制数,%x显示16进制数,要显示数的前缀需要使用%#o,%#x,%#X

#include <stdio.h>
int main(void) {int a = 133;printf("shi is %d,ba is %o,hex is %x\n", a, a, a);printf("shi is %d,ba is %#o,hex is %#x\n",a,a,a);return 0;
}

4. 其他整数类型  

short int 或short ,可能比int 占用的储存空间小,较小数值,有符号类型

long int 或long ,可能比int 占用的储存空间大,较大数值,有符号类型

longl long int或long long ,可能比long占用的储存空间大,有符号类型,c99标准添加

unsigned int 或unsigned,用于非负值,16位取值范围(0,2^32-1)0-65535,无符号类型可以表示更大的整数,unsigned long int 或unsigned short int 和unsigned short int 或unsigned short,c90标准添加,c99标准用添加了unsigned long long int 或unsigned long long ,无符号类型

在任何有符号类型前面添加关键字signed,可以强调有符号类型的意图。如short ,short int,signed short int ,signed short都是同一种类型。

现在个人计算机常见的设置是,long long占64位,long占32位,short占16位,int 占16位或32位,在使用的过程中,有一部分数值是重叠的

#include <stdio.h>
int main(void) {int a;short b;long c;long long d;printf("占用空间大小为%d\n",sizeof(a));printf("占用空间大小为%d\n", sizeof(b));printf("占用空间大小为%d\n", sizeof(c));printf("占用空间大小为%d\n", sizeof(d));return 0;
}

这里大小为字节,1字节=8比特,int 占32位,short占16位,long 占32位,long long占64位

 在有些情况下需要用long储存小的数,一些C语言标准函数要求使用long类型的值,把一个较小的值当作long 类型,可以在值末尾加小写的l或L后缀,在一台int为16,long为32位的机器上,把6当做16位储存,6L当作32位储存。

在支持long long 类型的机器上,ll或LL表示long long 类型的值,如4LL,u或U表示unsigned long long ,如4llu,4ull,4LLU,4ULL

5. 整数溢出

#include <stdio.h>
int main(void) {int a = 2147483647;unsigned int b= 4294967295;printf("%d %d %d\n",a,a+1,a+2);printf("%u %u %u\n",b,b+1,b+2);return 0;
}

%u表示打印unsigned int的值,当无符号溢出时超过最大值时会从0开始,有符号则从最小值开始

c语言未定义有符号类型的溢出规则,可能会出现其他情况。

%ld表示打印long类型的值,如果int 和long类型的大小相同,用%d也可以,但当int 和long大小不同,就会出现错误,%lx表示打印16进制的long类型值,%lo表示打印8进制的long类型值

%hd表示打印short类型的值,%ho表示打印8进制的short类型值,%lu表示打印unsigned long的值

支持long long 系统的系统,%llu表示打印unsigned long long 的值,%lld 表示打印long long的值

 使用错误的转换说明(占位符)会得到意想不到的结果

如果待打印的值大于有符号的最大值时会发生下面的情况,如果告诉printf()该数是无符号数,打印一个值,如果告诉是有符号值,将打印另一个值,,对于较小数,无符号还是有符号类型的储存和显示都相同

#include <stdio.h>
int main(void) {
unsigned int a = 10;unsigned int b = 3000000000;printf("%u %d\n", a, a);printf("%u %d\n", b, b);return 0;
}

 在int和short大小不同的计算机中,short类型会自动转成int类型,int类型处理数据更高效,传递速度快,用%hd和%d打印出的数值相同,%hd可以显示较大数据被截断成short类型的情况,使用%hd的printf()只会查看32位二进制的后16位,使用%ld的printf()只会查看64位二进制的后32位

使用printf()保证待打印的值和转换说明类型相匹配,还要保证转换说明个数和参数个数相同

char类型数据(字符型数据)

char类型表示字母或标点符号

char类型在计算机储存的是数字,从技术层面上来看,char是整型数据。

计算机采用数字编码来处理字符,即特定的数字表示特定的字符。常用的编码是ASCII码,

ASCII码范围0-127,用7位二进制数表示就可以了。通常char是8位来储存数据,即1 byte(字节),其他系统提供扩展ASCII码(0-255)。其他国家字母超过255,就有了其他编码,如unicode,占用2个字节,2^16可以表示世界上所有的字符。为了节省空间,出现了可变长unicode,如utf-8,utf-32。

1.字符常量和初始化:

char字符常量指的是下方正确表示的值,char类型变量指的是下方a,b,c,d

char a='a';    √

char c=d;     ×    表示的是变量

char e="f";   ×    表示的是字符串

char b=65;  √   此种方法不好,如果系统不支持ASCII码,就会出问题

2. C语言中把字符常量视为int类型而非char类型。

在32位系统中,int占32位,char占8位。

定义一个char常量为fate,把4个8位的ASCII码储存到一个32位的储存单元中,如果把该值赋值给变量a,会出现只有最后8位有效,也就是a的值位e。%c打印char类型的值

#include <stdio.h>
int main(void) {
char a = 'fate';printf("%c",a);return 0;
}

3.单引号只能打印字母、数字、标点,有些ASCII字符打印不出来。如,一些代表行为的字符,退格,换行

打印方法:

(1)使用ASCII码值,前提系统支持ASCII码

char a=7;

(2)使用转义序列,使用特殊的符号来表示特殊的字符

char a='\n';

\0oo  8进制

\xhh 16进制

'\007','\7','\07'都可以

(3)使用16进制数来表示

char a='\x0a';

char a='\xa';

4.有符号还是没符号

有些编译器把char定为有符号类型,char取值范围-128-127。而有些编译器把char视为无符号类型,char取值范围0-255。在C90标准中允许在char前面加上siged和unsigned表示有符号和无符号 

 _Bool类型

_bool,true和false,代表0和1,实际上也是一种整数类型

可移植类型:stdint.h和inttypes.h

C预言为实现现有类型提供了更多类名,C99。这些新的类型定义在stdint.h中,int32_t表示32位有符号整数类型。在int为32位的系统中,头文件会把int32_t作为int的别名。不同系统也可以定义相同的别名。例如,在int为16位,long为32位的系统中会把int32_t作为long的别名。使用int32_t编写程序,并包含stdint.h头文件时,编译器会把int或long替换成与当前系统匹配的类型。此种类型别名叫做精确宽度整数类型。

int32_t表示的整数类型宽度刚好是32位,但如果系统不支持精确宽度整数类型(不支持C99),还有另一中类型,能保证指示的类型一定是至少有指定宽度的最小整数类型。这类被称作最小宽度类型,int_least8_t表示可容纳8位有符号整数值类型中最小的类型的一个别名。如果系统int为16位,可能不会使用int8_t,但是能可以使用,但可能把int_least8_t当作16位来处理。

还有一种类型是计算速度达到最快的类型集合叫做最小最快宽度类型。int_fast8_t示可容纳8位有符号整数值类型中运算最快的类型的一个别名

C99定义了最大的有符号类型intmax_t,可以储存任何有效的有符号整数值。uintmax_t表示无符号整数类型,可能比long long 和unsinged long更大。

打印int32_t时,有些%d,有些%ld,解决这种方法,提供了字符串宏来显示可移植类型。在inttypes.h提供了PRId32.

#include <stdio.h>
#include <inttypes.h>
int main(void) {int32_t a = 555;printf("a=%d\n",a);printf("a=""%d""\n", a);printf("a=%"PRId32"\n",a);return 0;
}

在C语言中可以把多个连续的字符串合成一个字符串。

printf("a=%d\n",a); 等价于 printf("a=""%d""\n", a);

float、dobule、long dobule类型

C语言标准规定,float类型至少能表示6位有效数字。float占32位,8位表示指数的值和符号,剩下的24位用于表示非指数(尾数和有效数)即其符号。

C语言标准规定,doubule,双精度,最小取值范围相同,但至少能表示10位的有效数字。一般情况下,double占64位,无论哪种方法,dobule至少有13位有效数字,超出了标准的最低位数

long dobule,类型精度至少和double类型相同

浮点型常量表示时可以省略小数点或指数部分,但不能同时省略,如2e5,1.1;可以省略小数部分或整数部分,但不能同时省略,如3.e16,.45e-6,不能在浮点数常量中间加空格,如1.3 e16

默认情况下,编译器假定浮点数是dobule类型,在浮点数加上f或F,就会看作是float类型。可以使用l或L,看作是long double类型,C99添加了一种新的浮点常量 用16进制表示浮点型常量,p10是2的10次方,在16进制数加上前缀0x,用p和P代替e和E,用2的幂代替10的幂

打印时%f表示打印float和dobule类型的浮点数,%e打印指数类型的数,系统支持16进制,用a和A代替e和E。打印long dobule 使用%Lf,%Le或%La的转换说明

浮点数上溢和下溢

超出浮点数表示的最大范围时,打印结果显示inf或infinity,表示无穷大

下溢,在计算过程中损失了原末尾有效位数的数字

复数和虚数

参考书籍:

《C Primer Plus 中文第6版》

相关文章:

C语言学习(三)

#include <stdio.h> int main(void){int a; scanf("%d",&a); printf("%d",a); return 0&#xff1b;} 正在上传…重新上传取消正在上传…重新上传取消&符号作用是把键盘中输入的值给变量a,使用scanf()时输入数值&#xff0c;需要按一下enter…...

TOUGH系列软件建模及在地下水、CO2地质封存、水文地球化学、地热等多相多组分系统多过程耦合

TOUGH2系列软件传统地下水模拟软件Feflow和Modflow不同&#xff0c;TOUGH2系列软件采用模块化设计和有限积分差网格剖分方法&#xff0c;通过配合不同EOS模块&#xff0c;软件可以处理各种复杂地质条件下&#xff0c;诸如地热能开发&#xff0c;非饱和带水气运移、油气运移&…...

k8s学习之路 | k8s 工作负载 ReplicaSet

文章目录1. ReplicaSet 基础概念1.1 RS 是什么&#xff1f;1.2 RS 工作原理1.3 什么时候使用 RS1.4 RS 示例1.5 非模板 Pod 的获得1.6 编写 RS1.7 使用 RS1.8 RS 替代方案2. ReplicaSet 与 ReplicationController2.1 关于 RS、RC2.2 两者的选择器区别2.3 总结1. ReplicaSet 基础…...

python实现半色调技术图像转换

半色调技术 半色调技术是一种将灰度图像转换为黑白图像的技术。它是通过将灰度图像的像素值映射到黑白像素值上来实现的。 比如说&#xff0c;在一块只能显示纯黑或纯白的屏幕上&#xff0c;如何将一张灰度图显示出灰度的效果&#xff0c;这时就可以用半色调技术实现。 如下…...

c++面试技巧-基础篇

1.面试官&#xff1a;简述C语言的优缺点。 应聘者&#xff1a;C语言的优缺点如下。 • C语言的优点&#xff1a;C语言既保留了C语言的有效性、灵活性、便于移植等全部精华和特点&#xff0c;又添加了面向对象编程的支持&#xff0c;具有强大的编程功能&#xff0c;可方便地构…...

三八妇女节即将到来,跨境电商如何玩转节日营销?

随着国际妇女节的到来&#xff0c;跨境电商商家们都开始了为自己的店铺进行节日营销的准备。商家做节日营销的目的都是一样的&#xff0c;无非都是增加曝光率&#xff0c;拉动客流&#xff0c;增加营业额。但是每一个节日营销的形式是可以不一样的。今年有什么营销玩法呢&#…...

【Java学习笔记】10.条件语句 - if...else及switch case 语句

前言 本章介绍Java的条件语句 - if…else和switch case 语句。 Java 条件语句 - if…else Java 中的条件语句允许程序根据条件的不同执行不同的代码块。 一个 if 语句包含一个布尔表达式和一条或多条语句。 语法 if 语句的语法如下&#xff1a; if(布尔表达式) {//如果布…...

解析STM32启动过程

相对于ARM上一代的主流ARM7/ARM9内核架构&#xff0c;新一代Cortex内核架构的启动方式有了比较大的变化。ARM7/ARM9内核的控制器在复位后&#xff0c;CPU会从存储空间的绝对地址0x000000取出第一条指令执行复位中断服务程序的方式启动&#xff0c;即固定了复位后的起始地址为0x…...

微信小程序开发自学笔记 —— 八、小程序基础库的更新迭代

小程序基础库的更新迭代 小程序基础库 小程序的运行环境是分成渲染层和逻辑层的&#xff0c;在渲染层可以用各类组件组建界面的元素&#xff0c;在逻辑层可以用各类API来处理各种逻辑&#xff0c;组件、API其实都是小程序基础库进行包装提供的&#xff0c;基础库的职责还要处…...

Mysql迁移Postgresql

目录原理环境准备操作系统(Centos7)Mysql客户端安装Psql客户端安装数据库用户空字符串处理成null导表脚本dbmysql2pgmysqlcopy测试在mysql中建表导表测试查看pg中的表原理 Mysql抽取&#xff1a;mysql命令重定向到操作系统文件&#xff0c;处理成csv文件&#xff1b; PG装载&a…...

关于信息安全认证CISP、PTE对比分析

CISP 注册信息安全专业人员 CISP-PTE 注册渗透测试工程师&#xff08;以下简称PTE&#xff09; 1 、发证机构 CISP与PTE的发证机构都是中国信息安全测评中心&#xff0c;政府背景给认证做背书&#xff0c;学员信息都在中国政府可控的机构手中&#xff1b; 如果想在政府、国…...

游戏场景编辑器和骨骼动画相关软件

游戏场景编辑器 一.Tiled(2D) Tiled 是帮助你开发游戏内容的 2D 地图编辑器。它的主要功能是可以编辑各种形式的瓦片地图&#xff0c;还支持通过用空图片这种强大的方式来标记额外信息给游戏使用。Tiled 关注的是总体灵活性&#xff0c;同时尽量保持直观性。 Tiled Map 不但…...

vue3常用的API

目录 1.ref函数 2.reactive函数 3.reactive对比ref 4.computed函数 5.watch函数 6.toRef 7..provide && inject 1.ref函数 作用: 定义一个响应式的数据 语法: const xxx ref(initValue) 创建一个包含响应式数据的引用对象&#xff08;reference对象&#xff…...

Qt中使用

LIB库路径&#xff0c;include 头文件&#xff0c;运行的时候记得吧dll库带上&#xff0c;这基本就完成了。准备工作&#xff1a;Qt可以是傻瓜式的安装就行&#xff0c;GE的驱动里面有exe&#xff0c;直接点击安装即可&#xff0c;完了记得到安装路径把“.h”“.liib”和“.dll…...

controller-runtime搭建operator开发环境

目录 基本结构 注入CRD 基本结构 首先下载相应的go pkg go get -u sigs.k8s.io/controller-runtime 接下来需要创建控制器和Manager Operator的本质是一个可重入的队列编程模式&#xff0c;而Manager可以用来管理Controller、Admission Webhook&#xff0c;包括访问资源对…...

FPGA使用GTX实现SFP光纤收发SDI视频 全网首创略显高端 提供工程源码和技术支持

目录1、前言2、设计思路和框架3、vivado工程详解4、上板调试验证并演示5、福利&#xff1a;工程代码的获取1、前言 FPGA实现SDI视频编解码目前有两种方案&#xff1a; 一是使用专用编解码芯片&#xff0c;比如典型的接收器GS2971&#xff0c;发送器GS2972&#xff0c;优点是简…...

Django 之 CharField 和 TextField

CharField test_char models.CharField(max_length288)设置长度为 288 并不会报错&#xff0c;这取决于你的数据库后端&#xff0c;mysql char 类型长度为 255&#xff0c;django 里面设置超过 255 并不会有提示&#xff0c;个人感觉有点误导人&#xff0c;起码给个警告也行&…...

recyclerview 使用的坑

1.有不同的布局 12_GridLayoutManager setSpanSizeLookup()方法 - 简书 setSpanSizeLookup 这个方法要会 spanCount和 getSpanSize spanCount/getSpanSize() 才是这一项所占的宽度 2.均分 item布局要设置宽度为match_paraent 3.设置完了。发现高度不一样&#xff0c;…...

DBeaver连接mysql、oracle数据库

1. DBeaver连接mysql 1&#xff09; 下载DBeaver https://dbeaver.io/download/&#xff0c;并安装 2) 新建数据库连接 3&#xff09;选择mysql驱动程序 4&#xff09;填写连接设置内容 5&#xff09;点击 “编辑驱动设置”&#xff0c;并填写相关信息 6&#xff09;选择本地…...

Kivy GridLayout 布局

Kivy GridLayout 是一种用于构建用户界面的布局类型&#xff0c;可以帮助我们快速创建具有固定列和行的网格布局。GridLayout 布局是可以适用于任意数量的行和列的布局&#xff0c;然后在这些行和列中放置 UI 元素。 Kivy 的 GridLayout 使用起来类似于 HTML 的表格&#xff0c…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...