学习C语言笔记:数据和C

news2024/10/6 22:27:55

C Primer Plus (第6版)中文版第3章

学习内容:

1.关键字——int、short、long、unsigned、char、float、double、_Bool、_Complex、_Imaginary;

2.运算符——sizeof();

3.函数——scanf();

4.整数类型和浮点数类型的区别;

5.如何书写整型和浮点型常数,如何声明这些类型的变量;

6.如何使用printf()和scanf()函数读写不同类型的值。

程序离不开数据。把数字、字母和文字输入计算机,就是希望它利用这些数据完成某些任务。例如,需要计算一份利息或显示一份葡萄酒商的排序列表。这就需要学习如何读取数据,还要学习如何操控数据。

C语言提供两大系列的多种数据类型。这里先学习两大数据类型:整数类型和浮点数类型。

从一个简单的C程序示例开始

platinum.c程序

#include <stdio.h>
int main()
{
    float weight;  //你的体重
    float value;  //相等重量的白金价值

    printf("Are you worth your weight in platinum?\n");
    printf("Let's check it out.\n");
    printf("Please enter your weight in pounds: ");

    //获取用户的输入
    scanf("%f",&weight);
    /*
    假设白金的价格是每盎司$1700
    14.5833 用于把英磅常衡盎司转换为金衡盎司
    */
   value = 1700.0 * weight * 14.5833;
   printf("Your weight in platinum is worth $%.2f.\n",value);
   printf("You are easily worth that! If platinum prices drop,\n");
   printf("eat more to maintain your value.\n");
   return 0;
}

代码中使用了浮点数类型(float)的变量,以便处理更大范围的数据。float类型可以存储带小数的数字。

为了打印浮点数类型的变量,在printf()中使用%f来处理浮点值。%.2f中的.2用于精确控制输出,指定输出的浮点数只显示小数点后面两位。

scanf()函数用于读取键盘的输入。%f说明scanf()要读取用户从键盘输入的浮点数,&weight告诉scanf()把输入的值赋给名为weight的变量。scanf()函数使用&符号表明找到weight变量的地点。

常量:有些数据类型在程序使用之前已经预先设定好了,在整个程序的运行过程中没有变化。

变量:有些数据类型在程序运行期间可能会改变或被赋值。

C语言的基本类型关键字

见下表:

在C语言中,用int关键字来表示基本的整数类型。long、short、unsigned及signed用于提供基本整数类型的变式,例如 unsigned short int 和 long long int。char关键字用于指定字母和其他字符(如,#、$、%和*)。另外,char类型也可以表示较小的整数。float、double和long double表示带小数点的数。_Bool类型表示布尔值(turtle或false),_Complex和_Imaginary分别表示复数和虚数。

通过这些关键字创建的类型,按计算机的存储方式可分为两大基本类型:整数类型和浮点数类型。

位、字节和字

位、字节和字是描述计算机数据单元或存储单元的术语。这里主要指存储单元。

最小的存储单元是(bit),可以存储0或1(或者说,位用于设置“开”或“关”)。虽然1位存储的信息有限,但是计算机中位的数量十分庞大。位是计算机内存的基本构建块。

字节(byte)是常用的计算机存储单位。对于几乎所有的机器,1字节均为8位。这时字节的标准定义,至少在衡量存储单位时是这样的。既然1位可以表示0或1,那么8位字节就有256(2的8次方)种可能的0、1的组合。通过二进制编码(仅用0和1便可表示数字),便可表示0~255的整数或一组字符。

(word)是设计计算机时给定的自然存储单位。对于8位的微型计算机,1个字只有8位。从那以后,个人计算机字长增至16位,32位,直到目前的64位。计算机的字长越长,其数据转移越快,允许的内存访问也更多。

整数和浮点数

整数

“整数”和咱们之前理解的整数概念是一样的,整数是没有小数部分的数。计算机以二进制数字存储整数,例如,整数7以二进制写是111.因此,要在8位字节中存储该数字,需要把前5位都设置成0,后3位设置成1.

浮点数

浮点数与数学中的实数概念差不多。2.75、3.16E7、7.00和2e-8都是浮点数。注意,在一个值后面加上一个小数点,该值就成为一个浮点值。所以,7是整数,7.00是浮点数。显然,书写浮点数有多种形式。

e记数法:3.16E7表示3.16\times 10^{7}.7被称为10的指数。

浮点数与整数的存储方案不同,计算机把浮点数分成小数部分和指数部分来表示,而且分开存储这两部分。因此,虽然7.00和7在数值上相同,但是它们的存储方式不同。在十进制下,可以把7.0写成0.7E1,这里,0.7是小数,1是指数。当然,计算机在内部使用二进制和2的幂进行存储,而不是10的幂。

这两种类型的不同:

· 整数没有小数部分,浮点数有小数部分。

· 浮点数可以表示的范围比整数大。

· 对于一些算术运算(如,两个很大的数相减),浮点数损失的精度更多。

· 因为在任何区间内都存在着无穷多个实数,所以计算机的浮点数不能表示区间内所有的值。浮点数通常只有实际值的近似值。例如,7.0可能被存储位浮点值6.99999.

· 过去,浮点运算比整数运算慢。不过,现在许多CPU都包含浮点处理器,缩小了速度上的差距。

C语言基本数据类型

int型

C语言中的整数类型可表示不同的取值范围和正负值。一般情况使用int类型即可,但是为满足特定任务和机器的要求,还可以选择其他类型。

int类型是有符号整型,即int类型的值必须是整数,可以是正整数、负整数或零。其取值范围依计算机系统而异。一般而言,存储一个int要占用一个机器字长。

声明int变量时要先写上int,然后写上变量名,最后加上一个分号。如果要声明多个变量,可以单独声明每个变量,也可在int后面列出多个变量名,变量名之间用逗号分隔。

int erns;
int dogs, cows, goats;

初始化变量就是为变量赋一个初始值。在C语言中,初始化可以直接在声明中完成。只需在变量名后面加上赋值运算符(=)和待赋给变量的值即可。如下所示:

int hogs = 21;
int cows = 32, goats = 12;

 简而言之,声明为变量创建和标记存储空间,并为其指定初始值。

打印int值:可以使用printf()函数打印int类型的值,%d可以指明在一行中打印整数的位置。%d称为转换说明,它指定了printf()应使用什么格式来显示一个值。格式化字符串中的每个%d都与待打印变量列表中相应的int值匹配。这个值可以是int类型的变量、int类型的常量或其他任何值为int类型的表达式。

使用字符:char类型

char类型用于存储字符,但是从技术层面看,char是整数类型。因为,char类型实际上存储的是整数而不是字符。计算机使用数字编码来处理字符,即用特定的整数表示特定的字符。标准ASCII码的范围是0~127,只需7位二进制数即可表示。通常, char类型被定义为8位的存储单元,因此容纳标准ASCII码绰绰有余。一般而言,C语言会保证char类型足够大,以存储系统(实现C语言的系统)的基本字符集。

C语言把1字节定义为char类型占用的位(bit)数,因此无论是16位还是32位系统,都可以使用char类型。

1.声明char类型变量

char类型变量的声明方式与其他类型变量的声明方式相同。例如,

char res;
char itable, latan;

以上声明创建了3个char类型的变量:res、itable和latan。

2.字符常量和初始化

如果要把一个字符常量初始化位字母A,不必背下ASCII码,用计算机语言很容易做到。通过初始化把字母A赋值给grade即可:

char grade = 'A';

在C语言中,用单引号括起来的单个字符被称为字符常量。编译器一旦发现'A',就会将其转换成相应的代码值。单引号必不可少。不可是双引号!

实际上,字符是以数值形式存储的,所以也可使用数字代码值来赋值。

3.非打印字符

单引号只适应于字符、数字和标点符号。

一些转义序列如下表

4.打印字符

printf()函数用%c指明待打印的字符。一个字符变量实际上被存储为1字节的整数值。因此,如果用%d转换说明打印char类型变量的值,打印的是一个整数。而%c转换说明告诉printf()打印该整数值对应的字符。

charcode.c程序

#include <stdio.h>
int main(void)
{
    char ch;

    printf("Please enter a character:\n");
    scanf("%c",&ch);
    printf("The code for %c is %d.\n",ch, ch);

    return 0;
}

 输出结果:

scanf()函数会读取用户输入的字符,&字符表示把输入的字符赋给变量ch。接着,printf()函数打印ch的值两次,第1次打印一个字符(%c),第2次打印一个十进制整数值(%d)。注意,printf()函数中的转换说明决定了数据的显示方式,而不是数据的存储方式。

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

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

相关文章

STL简介

目录 什么是STL STL的版本 STL的六大组件 如何学习STL STL的缺陷 结束语 什么是STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架 STL的版本…

公司来了个卷王,我愿称之为王中王,让人崩溃

前几天我们公司一下子也来了几个新人&#xff0c;这些年前人是真能熬啊&#xff0c;本来我们几个老油子都是每天稍微加会班就打算走了&#xff0c;这几个新人一直不走&#xff0c;搞得我们也不好走。 2023年春招就要开始了&#xff0c;最近内卷严重&#xff0c;各种跳槽裁员&a…

从TikTok功能优化,抓住直播带货机遇

从今年流出的各类消息总结&#xff0c;TikTok的发展势头愈发迅猛&#xff0c;无论是布局东南亚各个站点&#xff0c;还是在其下载量的激增&#xff0c;都迸发出了前所未有的劲头&#xff0c;其对本身的优化也一直在进行。那么今年&#xff0c;TikTok都进行了哪些功能优化呢&…

p5.js 使用npm安装p5.js后如何使用?

本文简介 点赞 关注 收藏 学会了 在 《p5.js 光速入门》 中都是使用 CDN 的方式去使用 p5.js 的&#xff0c;不太符合当下的开发习惯。 不管是使用 Vue 还是 React&#xff0c;我们日常项目大部分应该都是使用脚手架的方式进行开发了&#xff0c;按照 《p5.js 光速入门》 …

互联网营销的基础方法

推广目的 1.让目标消费群在最短的时间内认知新产品的功能、效果,缩短新产品推广期的时间长度,尽快进入成长期,创造效益。 2.使目标消费群产生试用的欲 望,并逐步将其培育成品牌忠诚者。 3.提高品牌知名度和美誉度。 4.提高现场售点的产品的销量。 5.巩固通路经销商的客…

ARM64内存虚拟化分析(1)基础知识

1 两级转换 1.1 什么是stage2转换 Stage2转换允许hypervisor控制虚拟机VM中内存视图。它允许hypervisor控制一个虚拟机可以访问哪块内存映射的系统资源&#xff0c;以及这些资源应该出现在虚拟机地址空间的哪个位置。 这种控制内存访问的能力对于隔离是非常重要的。Stage2转换…

【C语言 全局 整形变量 布尔变量 数组变量 指针变量 结构体位域变量 枚举变量被其他.C文件相互访问】

【C语言 全局-> 整形变量 布尔变量 数组变量 指针变量 结构体位域变量 枚举变量被其他.C文件相互访问】【0】UI设计【1】项目概述【2】mainwindow.h头文件解析【3】头文件源码【4】mianwindow.c源文件解析【5】源文件源码【6】main文件解析源码【7】编译-链接-运行结果学完这…

对Java中String类的解释

文章目录一、String 的常用方法1.字符串的构造以及字符串常量池2.String 类中对象的比较3.字符串查找4.转化5.字符串替换6.字符串拆分7.字符串截取二、StringBuilder 和 StringBuffer1.引入两者的原因2.相关修改操作的介绍一、String 的常用方法 首先&#xff0c;在介绍 Strin…

[年终总结] 2023,希望一切都能够好起来

0. 引言 2022年&#xff0c;依旧是一个特殊的年份&#xff0c;从前年开始&#xff0c;我就开始撰写年终总结&#xff0c;感兴趣的大家可以看一看2020年终总结和2021年年终总结。 一年比一年过的快速&#xff0c;我也感觉到一年比一年过的更加珍惜。曾经以为自己尚且年轻&…

linux /dev/mapper/rhel-root分区扩容

命令查看linux内存占用情况 /dev/mapper/rhel-root分区已满&#xff0c;主要是东西太多&#xff0c;改善了也删了&#xff0c;但是还是不够用。在扩容之前在首先针对虚拟机硬盘进行扩展 接下来就是在linux上操作了 1、输入fdisk -l 这里显示我已经有了三个分区&#xff0c;sd…

ArcGIS基础实验操作100例--实验9线要素的延伸与裁剪

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验9 线要素的延伸与裁剪 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;…

qinglong-青龙面板部署

背景 之前服务器部署过 jd自动签到、刷豆的脚本&#xff0c;感觉还可以&#xff0c;薅羊毛每天1-2米左右&#xff0c;能把服务器成本薅回来&#xff0c;不过缺点不好管理&#xff0c;后面很久没人维护就凉了。最近了解到青龙面板能够很方便的维护这种脚本。所以部署了一下。 …

SQL学习笔记-聚合函数部分

鉴于自己最近在做后端开发的工作时&#xff0c;发现自己的SQL能力实在太差&#xff0c;开始学习SQL语句基础&#xff0c;学习过程中在本博客进行笔记记录&#xff0c;课程参考&#xff1a;SQL课程 聚合函数是一系列SQL内置的方法&#xff0c;能够完成一些非常使用的功能&#…

java输入语句怎么写

壹哥在前面给大家讲过&#xff0c;Java中给咱们提供了有三个标准的“流”&#xff0c;他们被统称为standard streams。除了负责输出的流之外&#xff0c;还有一个负责输入的标准流&#xff0c;Java中对应的API是System.in。 与标准输出相比&#xff0c;标准输入则复杂的多。尤…

OpenHarmony#深入浅出学习eTs/ArkUI#(一)模拟器/真机环境搭建

本项目的Gitee仓地址&#xff1a;深入浅出eTs学习: 带大家深入浅出学习eTs (gitee.com) &#xff08;之前有些意外&#xff0c;数据丢失了&#xff0c;现在重新发&#xff0c;且不参与任何活动&#xff0c;在第一篇说明一下&#xff0c;之后就不再说明了&#xff09; 一、下载…

2022 年 11 种最佳移动自动化测试工具

移动应用程序开发正在以前所未有的速度增长&#xff0c;并且相应地需要使用正确的移动测试策略执行彻底的测试。这些策略主要涉及使用各种移动自动化测试工具。 移动测试工具可帮助企业自动化其应用程序测试&#xff0c;并减少额外的成本、时间和人为错误的机会。我们生活在一个…

用QT实现一个模型交互的网络请求

最近&#xff0c;我接收到了一个项目需求&#xff0c;具体内容如下&#xff1a; 具体要求&#xff1a; 1.交付给我程序的源代码即可&#xff0c;因为我要集成到我的大软件中&#xff0c;要求采用C和QT开发&#xff1b; 2.程序首先检测当前用户环境有没有联网&#xff0c;如果没…

linux的权限

前言 学习权限我们先理解一下xshell 我们使用Xshell的存在的意义 帮助进行命令行传递和返回结构保护操作系统 linux的权限 (1)权限的概念 限制人的&#xff0c;访问的对象可能没有这种“属性” 权限&#xff1a;一件事情是否运行被谁“做” 权限 人 事物属性 (2)linux的上…

【vector的各个begin迭代器详解】

前言 本文是熊猫练习stl一段时间之后&#xff0c;对vector容器的各种迭代器产生了很大的好奇心&#xff0c;于是对它们进行了以下探究。 从图中我们可以知道&#xff0c;vector一个有四组不同的迭代器&#xff0c; 其中&#xff0c;字符 ‘c’ 是 const 常量的意思&#xff0c…

严蔚敏 《数据结构C语言版》读书笔记

目录 第一章 线性表 顺序表 Sequence Table 带头双向循环链表 Linked List 第二章 栈和队列 栈 Stack &#xff08;顺序存储&#xff09; 检查括号是否匹配 队列 Queue &#xff08;链式存储&#xff09; 循环队列 Circle Queue 第三章 串 模拟实现string.h库函数 第…