C语言学习(三)

news2025/7/20 17:17:49

#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版》

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

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

相关文章

MySQL知识点全面总结2:Mysql语句的执行(DDL DML 完整性约束)

二.MySQL知识点全面总结2&#xff1a;mysql语句的执行&#xff08;DDL DML 完整性约束&#xff09; 1.对数据库的操作&#xff08;DDL&#xff09; 2.对数据表的操作&#xff08;DDL&#xff09; 3.对数据表字段的操作&#xff08;DDL&#xff09; 4.对数据表内容的增删改&…

Science Direct 高级检索、使用技巧、寻找目标期刊、E lsevi er 投稿指南

ScienceDirect使用教程&E ls evier投稿指南1. 高级检索功能1.1 布尔值运算符和短语搜索&#xff08;构建检索式&#xff09;1.2 搜索特殊字符和公式1.3 非搜索用词2. 如何使用搜索结果页面&#xff1f;3. 下载多个文档3.1 从搜索结果列表中下载多个文档3. 利用 JournalFind…

java高性能并发计数器之巅峰对决

并发计数器各个方案介绍方案概述1. jdk5提供的原子更新长整型类 AtomicLong2. synchronized3. jdk8提供的 LongAdder 【单机推荐】4. Redisson分布式累加器【分布式推荐】方案介绍jdk5提供的原子更新长整型类 AtomicLong在JDK1.5开始就新增了并发的Integer/Long的操作工具类Ato…

VS2022+qt5.14.2配置qcustomplot2.1.16(坑很多)

目录1. 前言2. 下载QCustomPlot的源码3. 将QCustomPlot添加到QT项目&#xff08;一些遇到的问题&#xff09;1. 前言 QCustomPlot 是一个超强超小巧的qt绘图类&#xff0c;非常漂亮&#xff0c;非常易用&#xff0c;只需要加入一个qcustomplot.h和qcustomplot.cpp文件即可使用…

Android 基础知识4-3.7 ProgressBar(进度条)详解

一、简介 ProgressBar&#xff08;进度条&#xff09;是UI界面中一种非常实用的组件&#xff0c;通常用于向用户像是某个耗时操作完成的百分比。进度条可动态地显示进度&#xff0c;因此避免长时间地执行某个操作时&#xff0c;让用户感觉程序失去了响应&#xff0c;从而更好地…

常用反弹 shell 方式总结

在对 Linux 系统进行渗透测试中&#xff0c;常常会用到反弹 shell 的操作&#xff0c;今天来总结一下常用反弹 shell 的方式。 什么是反弹shell&#xff1a; 反弹shell&#xff0c;就是攻击机监听在某个TCP/UDP端口为服务端&#xff0c;目标机主动发起请求到攻击机监听的端口…

Spark 配置项

Spark 配置项硬件资源类CPU内存堆外内User Memory/Spark 可用内存Execution/Storage Memory磁盘ShuffleSpark SQLJoin 策略调整自动分区合并自动倾斜处理配置项分为 3 类: 硬件资源类 : 与 CPU、内存、磁盘有关的配置项Shuffle 类 : Shuffle 计算过程的配置项Spark SQL : Spar…

MySQL 中的 distinct 和 group by 的性能比较

1 先说大致的结论&#xff08;完整结论在文末&#xff09;在语义相同&#xff0c;有索引的情况下&#xff1a;group by和 distinct 都能使用索引&#xff0c;效率相同。在语义相同&#xff0c;无索引的情况下&#xff1a;distinct 效率高于group by。原因是 distinct 和 group …

【软件开发】基于PyQt5开发的标注软件

这里是基于PyQt5写的面向目标检测的各类标注PC端软件系统。目前现有的labelme软件和labelImg开源软件无法满足特殊数据集的标注要求&#xff0c;而且没有标注顺序的报错提示。当然我设计的软件就会不具有适用性了&#xff08;毕竟从下面开发的软件可以明显看出来我做的基本上是…

spark-submit报错

spark-submit --class ${main_class} \ --master yarn \ --deploy-mode client \ --driver-memory 8g \ --executor-memory 6g \ --num-executors 1 \ --executor-cores 34 \ ${HOME_PATH}/obs_finance-1.0-SNAPSHOT-jar-with-dependencies.jar ${year_month} 注意这个34超过…

【教学典型案例】28.单表的11个Update接口--MyBatis

目录一&#xff1a;背景介绍二&#xff1a;前期准备引入pom依赖MyBatis配置文件数据库连接文件MyBatis配置类三&#xff1a;代码编写Mapper编写接口通用mapper实体pojojunit测试编写测试结果四&#xff1a;总结一&#xff1a;背景介绍 在进行项目开发编写更新接口时&#xff0…

顶级动漫IP加持之下,3A策略游戏Mechaverse如何改变GameFi

2021年是元宇宙发展的元年&#xff0c;元宇宙与GameFi创造了一波又一波市场热点。在经历第一波热潮之后&#xff0c;元宇宙的到来让不少人看到了加密市场的潜力&#xff0c;同时大家也意识到这将是未来的重要方向。如何将元宇宙推向更广阔的市场&#xff0c;让更多人能够轻松进…

项目管理工具DHTMLX Gantt灯箱元素配置教程:显示任务内容

DHTMLX Gantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的大部分开发需求&#xff0c;具备完善的甘特图图表库&#xff0c;功能强大&#xff0c;价格便宜&#xff0c;提供丰富而灵活的JavaScript API接口&#xff0c;与各种服务器端技术&am…

神经网络(容易被忽视的基础知识)

主要内容&#xff1a; 基本神经元作为线性分类器的单个神经元为什么要是深度神经网而不是”肥胖“神经网络&#xff1f;为什么在人工神经网络中的神经元需要激活函数&#xff1f;一些主要的激活函数神经网络中的偏置有什么意义&#xff1f;初始化神经网络的参数可以全为0吗&am…

【java】java基本类型和包装类型的区别

文章目录简介1.包装类型可以为 null&#xff0c;而基本类型不可以2.包装类型可用于泛型&#xff0c;而基本类型不可以3.基本类型比包装类型更高效4.自动装箱和自动拆箱简介 Java 的每个基本类型都对应了一个包装类型&#xff0c;比如说 int 的包装类型为 Integer&#xff0c;d…

ECOLOY直接更换流程表单后导致历史流程中数据为空白的解决方案

用户反馈流历史流程打开是空白了没有内容。 一、问题调查分析&#xff1a; 工作流“XX0204 员工培训协议审批流程”workflowId37166产生的7个具体流程中&#xff0c;创建日期为2021年的4个具体流程原先引用的数据库表单应该是“劳动合同签订审批表”(formtable_main_190)&…

JavaScript-缓存

参考资料彻底解决让用户清一下浏览器缓存浏览器缓存彻底理解浏览器的缓存机制彻底弄懂前端缓存浅解强缓存和协商缓存浏览器缓存策略(强缓存和协商缓存)一文搞定Http缓存-强制缓存与协商缓存前端浏览器缓存知识梳理ASP.NET Core 中使用缓存IIS中设置Cache-Control是什么当我们第…

[Gin]框架底层实现理解(一)

前言&#xff1a;路由原理———压缩字典 这边简单讲一下gin非常重要的一个基点&#xff0c;也就是他作为go web框架的一个亮点 也就是Trie树和压缩字典算法 gin 通过树来存储路由&#xff0c;讲路由的字符拆解为一个个的结点&#xff0c;在获取handler函数时&#xff0c;会…

项目管理系统软件有哪些?这10款最好用的项目管理软件值得推荐

项目管理系统软件有哪些&#xff1f;这10款好用的项目管理系统软件值得推荐 如今企业规模不断扩大&#xff0c;业务逐渐复杂化&#xff0c;项目管理系统已经成为现代企业管理中不可或缺的一环&#xff1b; 而项目管理系统软件不仅可以保证项目按时完成&#xff0c;提高团队的…

【Java基础 下】 029 -- 多线程

目录 一、为什么要有多线程&#xff1f; 1、线程与进程 2、多线程的应用场景 3、小结 二、多线程中的两个概念&#xff08;并发和并行&#xff09; 1、并发 2、并行 3、小结 三、多线程的三种实现方式 1、继承Thread类的方式进行实现 2、实现Runnable接口的方式进行实现 3、利用…