C语言总结day03

2023-05-16

day03

1、数据的输入输出

  • 数据的输出:从计算机向输出设备(如显示器、打印机等)输出数据称为输出。

  • 数据的输入:从输入设备(如键盘、磁盘、光盘、扫描仪等)向计算机输入数据称为输入。

    • C语言函数库中有一批"标准输入输出函数",它是以标准的输入输出设备(一般为终端设备)为输入输出对象的。主要有:putchar(输出字符)、getchar(输入字符)、printf(格式输出)、scanf(格式输入)、puts(输出字符串)、gets(输入字符串)
    • 注意:在使用系统库函数的时候,要在程序文件的开头用预处理指令#include把有关的头文件放在本程序中。(例如:#include<stdio.h>或#include “stdio.h”)。在程序进行编译预处理时,系统将stdio.h头文件的内容调用出来放在此位置,取代本行的include指令。
      • 两者的区别:用尖括号形式(如<stdion.h>)时,编译系统从存放C编译系统的子目录中去找所要包含的头文件(如stdio.h),这称为标准方式。如果用双撇号形式(如"stdio.h"),在编译时,编译系统先在用户的当前目录(一般是用户存放源程序文件的子目录)中寻找要包含的文件,若找不到,再按标准方式查找。若头文件不在用户存放源程序的目录中,则可以使用绝对路径(如#include"C:\temp\file1.h")。
      • 因此在使用系统库函数时用第一种,而使用用户自定义头文件的时候使用第二种。
  • printf的使用
    定义函数 int printf(const char * format,…);

    函数说明 printf()会根据参数format字符串来转换并格式化数据,然后将结果写出到标准输出设备,直到出现字符串结束(‘\n’)为止。

    参数format字符串可包含下列三种字符类型:

    (1)一般文本(即普通字符,如逗号、空格),伴随直接输出。

    (2)转义字符,如\t、\n等。

    (3)格式转换字符,格式转换为一个百分比符号(%)及其后的格式字符所组成。一般而言,每个%符号在其后都必需有一printf的参数与之相呼应(只有当%%转换字符出现时会直接输出%字符)

    格式转换字符详解 “%[符号][宽度][.精度]类型”

    [宽度]:表示输出的数据所占的列数,例若"%5d",表示输出数据占5列,输出的数据显示在此5列区域的右侧。

    [符号]:“-”表示对齐方式

    (1)%-8,左对齐,当显示字符不足8个时,右补空格

    (2)%08,右对齐,当显示字符不足8个时,左补0

    [.精度]对于浮点数表示小数点后的位数

    数值小数点后的位数大于显示精度,则只能显示[.精度]个小数位数(四舍五入),如果数值小数点后的位数小于显示精度,则补零。%.5 小数点后显示5位

    类型:

    (1)%d:用于显示十进制有符号数,char,short,int,long long(若输出long(长整型)数据,在格式符d前加字母l(代表long).即"%ld".若输出long long(双长整型)数据,在格式符d前加两个字母ll(代表long long).即"%lld")

    (2)%u:用于显示十进制无符号数,unsinged short,unsigned int,unsigned long long

    (3)%x: 用于显示十六进制整数,所有有符号及无符号整型

    (4)%f:用于显示十进制浮点数,float,double
    基本型,用%f;不指定输出数据的长度,由系统根据数据的实际情况决定数据所占的列数。系统处理的方法一般是:实数中的整数部分全部输出,小数部分输出6位。
    指定数据宽度和小数位数,用%m.nf;数值小数点后的位数大于显示精度,则只能显示[.精度]个小数位数(四舍五入),如果数值小数点后的位数小于显示精度,则补零。%.5 小数点后显示5位.例"%7.2"格式指定了输出的数据占7列,其中包括2位小数。如果把小数部分指定为0,则不仅不输出小数,而且小数点也不输出。例如"%7.0f"的话,之后输出整数部分。如果是1.0/3的,输出0;

    (5)%c:显示字符(一个整数,若在0~127范围中,也可以用"%c"使之按字符形式输出,在输出前,系统会将该整数作为ASCII码转换为对应的字符)

    (6)%s:显示字符串

    (7)%e:指定以指数形式输出实数。
    如果不指定输出数据所占的宽度和数字部分的小数位数,许多编译系统会自动给出数字部分的小数位数为6位,指数部分占5列(如e+002,其中"e"占1列,指数符号占1列,指数占3列),数值部分按标准化指数形式输出(即小数点前必须有而且只有1位非零数字):例如:printf(“%e”,123.456);输出为:1.234560 e+002(234560共6列,e+002共5列)共13列。
    也可以用"%m.ne"形式的格式说明:如printf(“%e”,123.456);输出为: 1.23e+002数的前面有4个空格。
    (8)i格式符:和d一样。
    (9)o格式符:以八进制整数形式输出。将内存单元中的各位的值(0或1)按八进制形式输出。因此输出的数值不带符号。例如(int i=-1;printf(“%o”,i);输出为37777777777)
    (10) g格式符:用来输出浮点数,系统自动选择f格式或e格式。选择其中长度较短的格式,不输出无意义的0.

    printf(“%s”,xxx)与puts(xxx)的区别:puts函数会自动添加换行,而printf(“%s”,……)不会。

  • scanf的使用
    定义函数 int scanf(const char * format,…);

    函数说明 scanf()会将输入的数据根据参数format字符串来转换并格式化数据。Scanf()格式转换的一般形式如下:
    
    “%[宽度][数据所占字节数]输入类型”
    
    [宽度]:最多输入的字符个数
    
    [数据类型]:
    
    h表示两字节,短整型数据,short 如"%hd"
    
    l表示八字节,用于long long和 double
    
    什么都没有表示四字节
    
    [数据类型]输入类型
    
    (1)%d:int
    
    (2)%f:float
    
    (3)%lf:double
    
    (4)%hd:short
    
    scanf(“%c”,&x) 等价于 x = getchar(),虽然getchar的返回值是int类型,但不影响使用
    
    (5)%s:字符串
    
    用scanf读取字符串时,忽略前导的空白符,再次遇到空白符会结束输入,并将再次遇到的空白符留在缓冲区内,自动添加字符串数组的结束标志'\n'。
    -注意:scanf("a=%f,b=%f,c=%f",&a,&b,c&);正确输入为:a=1,b=2,c=3 而如果只输入1 2 3就错了,因为系统会把它和scanf函数中的格式字符串逐个字符对照检查的,只是在%f的位置上代以一个浮点数。(在"a=1"的后面输入一个逗号,与scanf函数中的"格式控制"的逗号对应;scanf("a=%f b=%f c=%f",&a,&b,c&);正确输入为:a=1 b=2 c=3;scanf("a=%f:b=%f:c=%f",&a,&b,c&);正确输入为:a=1:b=2:c=3)
    (6)%c:字符
    用"%c"格式声明输入字符时,空格字符和"转义字符"中的字符都作为有效字符输入。例如:scanf("%c%c%c",&c1,&c2,&c3);输入时为abc(中间不能有空格)当输入a b c(会把第一个字符'a'送给c1,第二个字符时空格字符' ',送给c2,第三个字符b送给c3)
    注意:在输入数据时,如输入空格、回车Tab键或非法字符(不属于数值的字符),认为该数据结束。例如scanf("%d%c%f",&a,&b,&c)若输入1234a123o.26;则会将1234给a,a给b,123给c,后边的无效。
    
  • getchar、putchar
    putchar的作用主要是向输出缓冲区中写入一个字符。
    getchar的作用主要是向输入缓冲区中读取一个字符。如果碰到文件结尾,返回-1
    getchar源代码

  int getchar(void){ 
  static char buf[BUFSIZ]; 
  static char* bb = buf; 
  static int n = 0; 
  if (n == 0) { 
  n = read(0, buf, BUFSIZ); 
  bb = buf; 
  } 
  return(--n >= 0) ? (unsigned char)*bb++ : EOF; 
  }

EOF是一个宏,表示-1。getchar的返回值是int,对于文件来说-1表示了文件的结尾。我们可以在键盘上利用Ctrl+Z来实现类似的效果。

从getchar的源代码中可以看出,如果发现字符数组buf已空(n0),则调用read方法从键盘读取数据(该方法会导致阻塞),并让指针指向数组的首地址。如果缓冲区还有字符没有被读取(n 0),则读取它,同时n-1,指针(bb)向后移动一位。当缓冲区已空(n0),且read函数读取失败时(读取到了文件末尾),返回EOF。

从scanf的源代码中可以看出getchar可以读入任何字符,包括空白符(空白符包括:空格、换行符、制表符等)。

  • gets、puts
    puts函数主要向输出缓冲区写入一个字符串,并再字符串输出结束以后,再额外输出一个换行符 ‘\n’。例如:char str[] = {“China”}; puts[str];在终端打印China.

    gets用于从输入流的缓冲区中读取字符到指定的数组。读取过程中会忽略所有的前导空白符,读入的第一个字符为非空白符,直到遇到换行符才停止读入,结束的换行符('\n')被gets函数读从缓冲区读取走了,存于数组中,然后被替换成'\0'。
    
    注意:,puts和gets只能输出或输入一个字符串,不能写成puts(str1,str2);
    gets 源代码(只需要看for循环这部分代码,FLOCKFILE(stdin)表示对输入缓冲区加锁对;FUNLOCKFILE(stdin) 表示对输入缓冲区解锁)。
    
char* gets(char *buf){ 
int c; 
char *s; 
static int warned; 
static const char w[] = "warning: this program uses gets(), which is unsafe.\n";
FLOCKFILE(stdin); ORIENT(stdin, -1); 
if (!warned) { 
(void)_write(STDERR_FILENO, w, sizeof(w) - 1);
warned = 1; 
} 
for (s = buf; (c = __sgetc(stdin)) != '\n';) 
if (c == EOF) 
if (s == buf) {
 FUNLOCKFILE(stdin); return (NULL); 
} else
break; 
else
*s++ = c; *s = 0; 
FUNLOCKFILE(stdin); return (buf); 
}
	从源代码可以看出,如果读入了'\n'则停止,并替换成'\0'

2、关系运算符和关系表达式

  • 关系表达式:
    • 用关系运算符将两个数值或数值表达式连接起来的式子,称为关系表达式。关系表达式的值是一个逻辑值,即"真"或"假"。例如:关系表达式"5==3"的值为"假",“5>=0"的值为真。在C的逻辑运算中,以"1"代表"真”,以"0"代表"假";若a=3,b=2,c=1;则关系表达式"a>b"的值为"真",表达式的值为1.关系表达式"(a>b)==c"的值为"真"(因为a>b的值为1,等于c的值),表达式的值为1.

3、逻辑运算符和逻辑表达式

  • 逻辑表达式
    • C编译系统在表示逻辑运算结果时,以数值1代表"真",以0代表"假",但在判断一个量是否为"真"时,以0代表"假",以非0代表"真"。即将一个非零的数值认为"真"。
    • 例如:若a=4;则!a的值为0.若a=4,b=5;则a&&b的值为1.

4、for语句
for(表达式1;表达式2;表达式3) 语句 注意,表达式123都可以省略。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言总结day03 的相关文章

  • 基于大数据平台的毕业设计

    前言 2022年最新大数据毕设文章 xff1a 基于大数据平台的毕业设计01 xff1a 基于Docker的HDP集群搭建 最近有很多人问我 xff0c 大数据专业有什么好的毕设项目 xff0c 我就简单的回复了一下 也有直接问我要源码的
  • DM9000在TQ2440移植中的地址内容

    2 2 修改宏定义 三个地址相关宏定义是参考别的单板配置复制过来的 xff0c 肯定不能用 xff0c 查看S3C2440芯片手册和原理图 xff0c 确定这三个地址 首先是基地址CONFIG DM9000 BASE xff0c 在原理图中
  • node学习笔记

    阶段一 1 初始Node js javascript 运行环境 1 2 Node js中的javacript 运行环境 1 3 Node js环境安装 百度 1 4 node js 执行javaScript 代码 2 fs文件系统模块 2
  • SQL实验三 select语句查询操作

    SQL select查询实验 一 实验目的 了解查询的概念和方法掌握SQL Server集成管理器查询子窗口中执行select操作的方法掌握select语句在单表查询中的应用掌握select语句在多表查询中的应用掌握select语句在复杂查
  • [编程题]字母交换

    题目描述 xff1a 字符串S由小写字母构成 xff0c 长度为n 定义一种操作 xff0c 每次都可以挑选字符串中任意的两个相邻字母进行交换 询问在至多交换m次之后 xff0c 字符串中最多有多少个连续的位置上的字母相同 xff1f 输入
  • 阿里云域名备案问题 注销主体步骤

    阿里云域名备案问题 注销主体步骤 注意 xff1a 当主体下只有一个域名时 xff0c 若在阿里云备案平台按 注销网站 xff0c 主体会成为空壳主体 xff0c 阿里云备案平台不会再显示主体了 xff0c 接下来就按不了 注销主体 操作
  • jenkins安装和配置(一):ubuntu 20.04 jenkins安装

    参考 Installing Jenkins 参考 How to Install and Configure Jenkins on Ubuntu 20 04 LTS 一 安装前提 Java 8 or Java 11 are required

随机推荐

  • 泛型 知识点 总结

    为什么要有泛型 泛型实质上就是使程序员定义安全的类型 在没有出现泛型之前 java也提供了对Objct的引用 34 任意化 34 操作 这种 34 任意化 34 操作就是对Object引用进行向下转型及向上转型操作 但是某些强制类型转换的错
  • 手把手教你centos8/rhel8使用国内源安装virtualbox If your system is using EFI Secure Boot you may need to

    这两天装virtualbox的时候又遇到问题了 xff0c 它显示这个错误 xff1a If your system is using EFI Secure Boot you may need to sign the kernel modu
  • gitlab配置

    在Ubuntu下安装gitlab ce 首先全程使用root进行配置 更新apt源 apt update 安装依赖项 Postfix Configuration 选择 No configuration 就好 apt span class t
  • vs2019更新后的设置问题for(

    最近不小心把vs2019更新了一下 xff0c 虽然增加了很多新功能 xff0c 但是对于我来说最大的意义在于它的字体颜色好像更丰富了 xff0c 其他的也不太能用得到 但是更新之后 xff0c 写for循环的时候发现for i 61 0
  • 插入最少的字符,构造回文串

    题目 xff1a 题目链接 给一个字符串 xff0c 在任意的位置插入一些字符 xff0c 使得这个字符串成为回文串 xff0c 最少需要插入多少个字符 ps xff1a 有一个和这个题很像的题 xff0c 都是插入最少的字符构造回文串 x
  • Linux常用命令大全

    Linux常用命令大全 一 进程管理 xff08 1 xff09 Linux中Kill进程的方法 二 系统信息三 关机 系统的关机 重启以及登出 四 文件和目录五 文件搜索六 挂载一个文件系统七 磁盘空间八 系统负载 top九 用户和群组十
  • 字符的最少变换次数,并查集

    题意 xff1a 给两个字符串a xff0c b a合和b中的字符都是前20个字母 xff08 a t xff09 xff0c a需要进行一些变换 xff0c 使得a等于b 对于每一次变换 xff1a 选取a中相同的字符 xff0c 然后把
  • 并查集 判断无向图是否有环

    无向图中 xff0c 给定一些边 xff0c 然后判断这些边组成的图是否有环 注意这个方法必须保证没有输入重边 对于一条边用 a b 表示 xff0c 然后把a xff0c b加入到并查集中 如果又加入了一条边 b c xff0c 那么如果
  • 彻底地删除垃圾软件

    当不小心下载了垃圾软件 xff0c 想删除掉 xff0c 但是又删不掉 xff0c 或者是删不干净的一些办法 首先 xff0c 我们应该把软件关掉 xff0c 让它停止运行 然后找到软件所在的文件夹 xff0c 把一些能够删除的文件都删除掉
  • Aizu_GRL_1_c floyd算法,判断负环的题

    这题应该是很简单的 xff0c 但是我wa了好久 看了别人的博客 xff0c 还是想不明白哪有问题 xff0c 我发现别人的ac代码要判断一下 xff0c mp i k 和mp k jj 是不是等于inf xff0c 我觉得判不判断没啥区别
  • codeforces 1165D(求因子的问题)

    题意 xff1a 给出除了1和它本身之外的所有因子 xff0c 找出最小的这个数 xff0c 如果有冲突的数就输出 1 思路 xff1a 我是当时没做出来看了大佬的博客才知道 https www cnblogs com fengxunlin
  • cmd 复制文件语法不正确

    复制文件到另一个文件夹 xff1a 语法格式 xff1a copy 原文件的路径和名称 目标文件夹的路径 说语法不正确的时候可能是路径中有空格 比如C Program Files x86 CodeBlocks share CodeBlock
  • 关于斜率的计算

    codeforces 842A 从L到R中选取一个数作为分子 xff0c 从x到y中选取一个数作为分母 xff0c 给一个数k 问有没有可能这个分数等于k 这题也是有够坑的 xff0c 用二分精确的判断要超时 xff0c 但是只是看在不在范
  • c语言线性表实现电话簿(学生信息)

    c语言线性表实现电话簿 span class token macro property span class token directive keyword include span span class token string lt s
  • vsc code-runner插件运行python文件,解释器更改为ananconda

    code runner刚下载下来的默认解释器是系统自带的 xff0c 并不是anaconda的 选择文件 首选项 找到code runner executor map 找到python的命令 xff0c 改为自己的解释器位置即可
  • NT_STATUS_ACCESS_DENIED listing \*

    在centos8上配了个SAMBA与windows共享文件 访问共享目录出现 NT STATUS ACCESS DENIED listing xff0c smb gt span class token operator span span
  • RocketMQ发送普通消息的所有方法以及代码示例

    RocketMQ发送普通消息的所有方法以及代码示例 一 使用RocketMQTemplate发送消息 xff08 整合Springboot xff09 xff08 1 xff09 void send Message lt gt messag
  • C语言总结day01

    day01 1 C语言标识符 C语言标识符需满足以下条件 只能由英文字母 26个英文字母 xff0c 包括大小写即共52个 数字 0 9 和下划线组成长度为1 32必须以英文字母或下划线开头 2 C语言风格 C语言严格区分英文字母的大小写C
  • C语言总结day02

    day02 1 运算符 算术运算符 单目运算符 xff1a 43 正 xff1b 负 xff1b 双目运算符 xff1a 这三个同级 gt 43 这两个同级 注意 xff1a 前边三个的优先级大于后边的两个 xff1b 双目运算符两边运算数
  • C语言总结day03

    day03 1 数据的输入输出 数据的输出 xff1a 从计算机向输出设备 如显示器 打印机等 输出数据称为输出 数据的输入 xff1a 从输入设备 如键盘 磁盘 光盘 扫描仪等 向计算机输入数据称为输入 C语言函数库中有一批 34 标准输