C 程序设计教程(03)—— C 语言的数据类型(一):基本数据类型

news2024/11/8 4:34:02

C 程序设计教程(03)—— C 语言的数据类型(一):基本数据类型

一、数据类型简介

C 语言提供了丰富的数据类型,每一个常量和变量必须属于某一种数据类型。C 语言中的数据类型如下:

(1)基本类型:整型(int),字符型(char),实型(单精度型:float,双精度型:double)
(2)构造类型:数组类型,结构体类型,共用体类型
(3)指针类型
(4)空类型

C 语言有 4 种基本数据类型,分别是:整型,字符型,单精度型和双精度型。基本类型的前面可以使用修饰符,常用的修饰符如下:

signed(有符号的)
unsigned(无符号的)
long(长型)
short(短型)

二、常量和变量

1、常量

C 语言中的常量是不能被程序修改的固定值,常量可以是任意数据类型。如下表所示:

数据类型常量举例
char‘a’、‘\n’、‘8’
int21、123、-120、1258
long int35000、-125870
short int10、-25、32
unsigned int1000、888、52
float125.85、4.2e-4
double120.65、-12.58、2587.658

2、符号常量

C 语言允许将程序中的常量定义为一个标识符,称为符号常量。符号常量一般使用大写英文字母表示,符号常量在使用前必须先定义,定义的格式如下:

#define <符号常量名> <常量>

例如:

#define PAI 3.1415926
#define TRUE 1
#define FALSE 0

说明:#define 是 C 语言的预处理命令,表示定义的符号常量在程序运行前将由其对应的常量替换。

定义符号常量的目的是为了提高程序的可读性,便于程序的调试和修改。因此在定义符号常量名时,应使其尽可能表达它所代表的常量的含义。

此外,若要对一个程序中多次使用的符号常量的值进行修改,只需要对预处理命令中定义的常量值进行修改。

3、变量

其值可以被程序改变的量称为变量。一个变量应该有一个名字(标识符),表示内存中的某个存储单元,在该存储单元中存放变量的值。

所有的变量在使用之前必须定义。定义变量的格式如下:

type 变量列表;

type 必须是有效的数据类型,变量列表可以由一个或多个由逗号分隔的多个标识符构成。例如:

int i,j;
short int s,t;
unsigned int u;
double salary;

三、基本数据类型

1、整型

(1)整型常量

整型常量可以是十进制、八进制和十六进制。默认为十进制,八进制常量以 0 开头(比如:017),十六进制常量以 0x 开头(比如 0x1a)。

在一个常数的后面加上字母 l 或 L,则认为是长整型,比如:10L,79l,012L,0xAL,0x4fL 等。

(2)整型变量

C 语言要求所有用到的变量都必须在程序中指定其类型。输出一个整型数据需要使用 %d。例如:

#include <stdio.h>
int main()
{
	int a = 10;    //定义一个整形变量a,并0赋值为10
	short b = 10;   //定义一个短整型变量b,并赋值为10
    long c = 10;    //定义一个长整型变量c,并赋值为10
	printf("a的值为:%d\n", a);
    printf("b的值为:%d\n", b);
    printf("c的值为:%d\n", c);
	return 0;
}

运行结果如下:

在这里插入图片描述

短整型、长整型、整型都是表示整型的,输出结果也相同(都为10),它们的主要区别是所占内存空间的大小不同,C 语言规定 short int 类型所占内存空间小于或等于 int,Int 小于或等于 long。使用 sizeof 查看他们所占内存空间大小。

#include <stdio.h>
int main()
{
	printf("long:%d\n", sizeof(long));
	printf("short:%d\n", sizeof(short));
	printf("int:%d\n", sizeof(int));
	return 0;
}

运行结果如下:

在这里插入图片描述

2、字符型

(1)字符型常量

字符型常量是用一对单引号括起来的一个字符。在 C 语言中,字符是按照其对应的 ASCII 码来存储的,一个字符占一个字节。

C 语言中字符型常量按整型(int)存储,所以字符型常量可以像整数一样参与相关运算。例如:

'a'-32   //结果为:97-32=65
'A'+32   //结果为:65+32=97
'9'-9    //结果为:57-9=48

(2)转义字符

通常使用转义字符表示 ASCII 字符集中不可打印的控制字符和特定功能的字符。例如:单引号( ’ )、双引号( " )、反斜杠( \ )等。C 语言中常用的转义字符如下:

转义字符意义ASCII 码
\b退格(BS)008
\f换页(FF)012
\n换行(LF)010
\r回车(CR)013
\t水平制表(HT)009
\v垂直制表(VT)011
\反斜杠092
?问号字符063
\’单引号字符039
\"双引号字符034
\0空字符000

(3)字符型变量

字符型变量用来存放字符常量,一个字符型变量只能存放一个字符。字符型变量的定义格式如下:

char c1,c2;
c1='a';
c2='b';

要输出 char 类型变量,使用 %c,例如:

#include<stdio.h>
int main()
{
    char c1,c2;
    c1 = 97;
    c2 = 98;
    printf("输出字符型变量的值:%c,%c",c1,c2);
    printf("字符型变量占用的字节数:%d",sizeof(char));
    return 0;
}

以上程序的输出结果如下:

在这里插入图片描述

字符的大小写转换:

#include<stdio.h>
int main()
{
    char c1,c2;
    c1='A';
    c2='b';
    printf("大写字母转换为小写字母:%c\n", c1 + 32);
    printf("小写字母转换为大写字母:%c", c2 - 32);
    return 0;
}

以上程序的输出结果如下:

在这里插入图片描述

3、实型

(1)实型常量

实型常量又称浮点数,是一个用十进制表示的数。实数的值包含整数部分、尾数部分和指数部分。小数点之前是整数部分,小数点之后是尾数部分,指数部分用 E 或 e 开头,指数部分可以为负。所有的实型常量均为双精度类型。例如:

15.75
1.575E10
1575E-2
-0.0025
-2.5e-3
25E-4
//实型常量的整数部分为 0 时,可以省略整数部分,如:
.57
.0075e2
-.125
-.175E-2

字母 E 或 e 之前必须有数字,且 E 或 e 后面的指数必须为整数。下面的常量是错误的:

e3
2.1e3.5

(2)实型变量

实型变量分为单精度型(float)和双精度型(double)。float 型数据在内存中占用 4 个字节,double 型数据在内存中占用 8 个字节,单精度型实数具有 7 位有效数字,双精度型实数具有 15~16 位有效数字。

输出 float 类型的数据需要使用 %f ,输出 double 类型的数据需要使用 %lf,例如:

#include<stdio.h>
int main()
{
    float f1,f2,f3;
    double d1,d2,d3;
    f1 = 1.25; f2 = 1.23456789; f3 = 1.2e10;
    d1 = 1.25; d2 = 1.23456789; d3 = 1.2e10;
    printf("单精度型:f1=%f,f2=%f,f3=%f\n",f1,f2,f3);
    printf("双精度型:d1=%lf,d2=%lf,d3=%lf\n",d1,d2,d3);
    printf("单精度型占用的字节数:%d\n",sizeof(float));
    printf("双精度型占用的字节数:%d",sizeof(double));
    return 0;
}

以上程序的输出结果如下:

在这里插入图片描述

4、枚举类型

枚举就是把变量可能取到的值一一列举出来,变量的取值只局限于列举出来的值的范围。声明枚举类型使用 enum 保留字,例如:

//定义枚举类型
enum weekday{sun,mon,tus,wed,thu,fri,sat};
//定义枚举类型的变量
enum weekday workday,weekend;
//也可以直接定义枚举类型的变量
enum {sun,mon,tus,wed,thu,fri,sat} workday,weekend;
//为枚举类型的变量赋值
workday = mon;
weekend = sun;

说明:

(1)枚举元素按常量处理,称为枚举常量,不能给枚举元素赋值。例如以下赋值是错误的:

sun = 0;
mon = 1;

(2)枚举元素作为常量,C 语言按枚举元素定义的顺序将他们的值定义为0、1、2、…。在前面的定义中,sun 的值为 0,mon 的值为 1,…,sat 的值为 6。可以改变枚举元素的值,如:

#include<stdio.h>
int main()
{
    enum weekday{sun=7,mon=1,tus,wed,thu,fri,sat};
    enum weekday workday,weekend;
    workday = mon;
    weekend = sun;
    printf("monday:%d\nsunday:%d",workday,weekend);
    return 0;
}

以上程序的输出结果如下:

在这里插入图片描述

(3)枚举值可用于构造条件,例如:

if(workday == mon) {...}
if(workday > sun) {...}

(4)整数不能直接赋给枚举变量,因为他们属于不同的类型。需要进行强制类型转换才能赋值。例如:

workday = 2; //错误
workday = (enum weekday)2; //相当于将序号为2的枚举元素赋给workday,等价于下面的语句:
workday = tue;

(5)不能对枚举类型的变量直接读写,只能输出枚举变量的序号。

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

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

相关文章

基础数学(八)——期末考试复习

文章目录考试要求考试内容简单复习插值拟合和回归数值积分直接法迭代法非线性方程求根微分方程数值解去年考题第一题&#xff0c;插值&#xff08;12分&#xff09;第二题&#xff0c;回归和拟合第三题&#xff0c;数值积分第四题&#xff0c;线性方程组求解第五题&#xff0c;…

MGRE实验配置(华为)

华为ENSP的MGRE实验&#xff1a; 建立好拓扑图 之后就是对各个路由器的配置&#xff1a; R2配置&#xff1a; int s3/0/0 link-protocol hdlc 更改接口为hdlc认证 ip address 12.1.1.2 24 int lo0 ip add 2.2.2.2 24 int s3/0/1 [r2-Serial3/0/1]ip address 23.1.1.2 24 [r2-Se…

【ML】 基本概念

ML 基本概念1. different types of functions2. how to find the function - training data3. unseen during training4. Back to ML Framework4.1 Step1: function with unknown4.2 Step2: define loss from training data4.3 step3: optimization4.4 其他4.4.1 Sigmoid → Re…

基础算法(五)——双指针算法

双指针算法 介绍 双指针算法分为两大类&#xff1a; 两个指针指向两个不同序列&#xff0c;用两个指针维护某一种逻辑&#xff0c;例如归并排序 两个指针指向一个序列&#xff0c;即用两个指针维护一段区间&#xff0c;例如快排 核心思想&#xff1a; 若能证明出题目存在…

Linux工具学习之【vim】

✨个人主页&#xff1a; Yohifo &#x1f389;所属专栏&#xff1a; Linux学习之旅 &#x1f38a;每篇一句&#xff1a; 图片来源 &#x1f383;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 Whatever is worth doing is worth doing well. 任何值得去做的事情&#xff0…

springboot垃圾分类查询管理系统

1.介绍 垃圾分类查询管理系统&#xff0c;对不懂的垃圾进行查询进行分类并可以预约上门回收垃圾。 让用户自己分类垃圾&#xff0c; 按国家标准自己分类&#xff0c; 然后在网上提交订单&#xff0c; 专门有人负责回收&#xff0c; 统一回收到垃圾处理站&#xff0c; 然后工人…

Renesas 3 --烧写

1.烧录Boot程序 1.1&#xff0c;连接RESET_OUT, TOOL0, GND到板子。 1.2&#xff0c;上电后烧录器上指示灯亮&#xff08;假如不亮&#xff0c;重新上电烧录器&#xff09; 1.3&#xff0c;用Renesas flash programmer来烧写软件&#xff08;新建项目&#xff0c;然后保存项目…

RAW怎么转为JPG?这些转换技巧值得收藏

相信大多数的人&#xff0c;出去外面游玩时都喜欢使用相机来拍照&#xff0c;但是大多数相机拍出来的照片都是RAW格式&#xff0c;图片传到电脑时&#xff0c;会因为格式的不兼容而导致无法查看&#xff0c;这个时候我们就需要把图片的格式进行转换&#xff0c;例如我们将其转换…

Day850.GuardedSuspension模式 -Java 性能调优实战

GuardedSuspension模式 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于GuardedSuspension模式的内容。 小灰工作中遇到一个问题&#xff0c;开发了一个 Web 项目&#xff1a;Web 版的文件浏览器&#xff0c;通过它用户可以在浏览器里查看服务器上的目录和文件。 这…

(原创)Flow数据流的使用

前言 这篇文章主要介绍Flow的一些基础使用方法 同时介绍如何用Flow请求网络数据 下面开始&#xff01; 什么是Flow Flow翻译过来&#xff0c;是“流”的意思 举例说明&#xff0c;在大自然中&#xff0c;常见的如水流 是从高往低流动的 那么在计算机世界里&#xff0c;所谓的…

loss盘点: asl loss (Asymmetric Loss) 代码解析详细版

1. BCE公式部分 可以简单浏览下这篇博客的文章&#xff1a; https://blog.csdn.net/qq_14845119/article/details/114121003 这是多分类 经典 BCELossBCELossBCELoss 公式 L−yL−(1−y)L−L -y L_{} - (1-y) L_{-} L−yL​−(1−y)L−​ 其中&#xff0c;L/−L_{/-}L/−​…

Docker保姆级学习教程

文章目录1、什么是Docker1.1、容器技术1.2、容器与虚拟机比较1.3、Docker特点1、更高效的利用系统资源2、更快速的启动时间3、一致的运行环境4、持续支付和部署5、更轻松的迁移6、更轻松的维护和扩展2、Docker组件学习2.1、Docker客户端和服务器2.2、Docker镜像2.3、Registry&a…

奇怪的知识——Windows下怎么修改进程的名称?

&#x1f4e2;欢迎点赞 &#xff1a;&#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff0c;赐人玫瑰&#xff0c;手留余香&#xff01;&#x1f4e2;本文作者&#xff1a;由webmote 原创&#x1f4e2;作者格言&#xff1a;无尽的折腾后&#xff0c;终于又回到…

element-plus的form表单form-item的prop怎么写才能正确校验,实现逻辑是怎么样的?

不管是element-plus还是上一个版本的element-ui&#xff0c;都是一个使用很广泛的基于csshtmljs的ui组件库&#xff0c;它的form表单自带强大的校验功能&#xff0c;form-item的prop怎么写才正确&#xff0c;实现逻辑是怎么样的&#xff1f;element-plus的form表单的model、for…

聚观早报 | 苹果市值跌破2万亿美元大关;卢伟冰晋升小米集团总裁

今日要闻&#xff1a;苹果市值跌破2万亿美元大关&#xff1b;卢伟冰晋升小米集团总裁&#xff1b;京东方拿下iPhone 15订单&#xff1b;英伟达与富士康达成合作&#xff1b;哪吒汽车旗下车型价格调整苹果市值跌破2万亿美元大关 1 月 4 日消息&#xff0c;据国外媒体报道&#x…

C51单片机连接wifi模块,发送AT指令

一、AT指令AT 指令集是从终端设备&#xff08; Terminal Equipment &#xff0c; TE) 或 数据终端设备 &#xff08; Data TerminalEquipment &#xff0c; DTE) 向终端适配器 (Terminal Adapter &#xff0c; TA) 或 数据电路终端设备 (Data CircuitTerminal Equipment &#…

CDGA|企业数字化转型进展得越快就越好吗?

数据治理并不是一件简单的事情。即使是行业知名公司&#xff0c;在高度重视和确保投入的情况下&#xff0c;完成全公司“数据底座”/“数据中台”的所耗时间也往往以年计。并且&#xff0c;还需要注意到&#xff0c;数据规范只是数字化转型的一个维度而已&#xff1a; 在国标《…

SQL INSERT INTO 语句

INSERT INTO 语句用于向表中插入新记录。 SQL INSERT INTO 语句 INSERT INTO 语句用于向表中插入新记录。 SQL INSERT INTO 语法 INSERT INTO 语句可以有两种编写形式。 第一种形式无需指定要插入数据的列名&#xff0c;只需提供被插入的值即可&#xff1a; INSERT INTO t…

Python爬虫常用哪些库?

经常游弋在互联网爬虫行业的程序员来说&#xff0c;如何快速的实现程序自动化&#xff0c;高效化都是自身技术的一种沉淀的结果&#xff0c;那么使用Python爬虫都会需要那些数据库支持&#xff1f;下文就是有关于我经常使用的库的一些见解。 请求库&#xff1a; 1、urllib&a…

matlab复杂函数多元函数拟合

简介 本文介绍了基于matlab实现的复杂函数以及多元函数的拟合。在工程和研究中偶尔会遇到要用一个非常复杂的数学公式来拟合实验测量数据&#xff0c;对这些复杂的数学公式拟合时&#xff0c;采用常见的拟合方法往往会失败&#xff0c;或者得不到足够精确的结果。本文以笔者多…