C语言基础第04天:数据的输出和输出

C语言基础:04天笔记

内容提要

  • 回顾
  • C语言
  • 数据的输入输出

回顾

运算符

算术运算符

结果:数值

+ - * / % +(正) -(负) ++ --

i++和++i

相同点:i自身都会增1

不同点:他们运算的最终结果是不同的. i++先使用 ,后加1; ++i先计算,后使用

赋值运算符

结果:赋值后的变量的值

赋值顺序:由右到左

= += -= *= /= %=

关系运算符

表达式 = 运算符 + 运算数

关系表达式 = 关系运算符 + 运算数

结果: 布尔类型(默认结果:0代表假,非0代表真,引入stdbool.h文件,false代表假,true代表真)

> < >= <= == !=

注意:

1. 两个浮点型数据比较的时候,不能使用==,因为比较出来的结果是不确定的,解决方案: 参与比较的两个操作数相减然后和0比较

逻辑运算符

结果:布尔类型

&& || !

&&

运算符左右两侧表达式都成立,则结果为真,有一个不成立,则结果为假

||

运算符左右两侧表达式都不成立,则结果为假,有一个成立,则结果为真

!

对原操作数或者表达式结果取反,如果原操作数或者表达式结果为真,最终结果为假;反之结果为真

惰性运算

惰性运算的目的减少运算的次数,从而提供运算效率

短路与:如果&&左侧表达式返回假,就不再执行右侧表达式,最终结果就是与左侧表达式相同的结果

短路或:如果||左侧表达式为真,就不再执行右侧表达式,最终返回的结果就是左侧表达式的结果

逗号运算符

结果:最后一个表达式的结果

语法:表达式1,表达式2,表达式3.....

位运算

所谓的位运算,就是计算机底层直接针对二进制位进行操作

~ & | ^ << >>

~:按位取反,单目运算,针对二进制位,每一位进行取反,如果二进制0变1,1变0

&:按位与,双目运算,两个数相同二进制位,如果都为1结果为1,否则结果为0

|: 按位或,双目运算,两个数相同二进制位,有一个为1,结果为1,否则结果为0

^:按位异或:双目运算,两个数相同二进制位,结果为0,否则结果为1

<<:左移:分为无符号左移和有符号左移,所有二进制位从低位到高位依次左移,超出部分舍弃,缺失部分使用0补齐

>>:右移:分为无符号左移和有符号右移,所有二进制位从低位到高位依次左移,超出部分舍弃

无符号右移:直接补0

有符号右移:算术右移,默认补1. 逻辑右移,补0由计算机系统决定

流程控制

C语句

定义
  • C程序是以函数为基础单位的
  • 一个函数的执行部分是若干条语句
  • C语句都是用来完成一定的操作任务
  • C语句必须依赖于函数存在
C程序结构

在这里插入图片描述

C语句分类
控制语句

用于完成一定的控制功能

  1. if…else…
  2. for…
  3. while…
  4. do…while…
  5. continue…
  6. break
  7. switch
  8. return
  9. goto
函数调用语句

由一个函数调用加一个分号组成,例如:

printf ("这是一个C程序 \n");
test();
表达式语句

由一个表达式加一个分号构成,最典型的表达式语句就是赋值语句,例如:

a = 3          //是一个表达式
score > 90     //是一个表达式
score = 90;   //是一个表达式语句
空语句

只有一个分号,什么都不做,例如

;

复合语句

用"(…)"括起来的若干个语句,例如

{
	z = x + y
	t = z / 100
	printf("%f\n",t);
}

一般形式为:{语句部分;}

数据的输入输出

数据的输入与输出是相对而言,其中:

  • 从计算机向外部设备输送数据称之为输出(output).通常的输出设备包括:显示器,打印机等
  • 从外部设备向计算机输送数据称之为输入(input).通常的输出设备包括:键盘.鼠标.扫描仪等

在C语言中,输入与输出需要使用标准的输入输出库(stdio)中的输入函数(scanf), 输出函数(printf)实现

库函数已经被编译成了目标文件,在链接时与编译源程序得到的目标文件(.obj)相链接,生成可执行程序.

注意:在使用系统库函数时,要用预处理指令# include将有关的头文件包含到用于源文件中(要放在程序的开头位置)头文件中包含了调用函数时需要的有关信息,具体的函数在编译时再去链接对应的系统库

简单的输入输出
用简单的printf函数输出数据

语法:

printf("格式控制",输出列表);

注意:格式控制中的格式化符号(如%d)要和输出的数据一一对应

举例:

printf("i=%d,x=%d,y=%d\n",i,32.i+1)

格式控制:用哪个一对英文双引号括起来,包括两种信息

  1. 格式说明:由%d和特定字符组成,如:%d %f %u等,用于说明输出项目所采用的格式

  2. 普通字符:作为说明性文字.符号等,照原样显示出来.

    输出列表:输出列表中的各项目指出了所要输出的内容,可以是常量,变量,表达式
    基本的格式字符

%d 按有符号十进制整型(int)数据的实际长度输出。(十进制(0)、八进制(00)、十六进

制(0x00))

%u 按无符号十进制整型(int)数据的实际长度输出。

%c 仅输出一个字符(char)

%s 输出结果是字符串,举例:printf(“%s\n”,“CHINA”);,输出结果:CHINA

%f 以小数形式输出一个实数(涵单双精度)。整数部分全部输出,小数部分输出6位。

%e 也可以写作%E,以指数形式输出一个实数(涵单双精度)。小数点前1位非0数字,并输出6

位小数。

%hd 短整型(short int/short)

%hhd 字符型的ASCII码,char数据对应的ASCII码的值,举例:char a = ‘A’;printf(“%hhd\n”,a);,输

出结果:65

%lf 双精度浮点型(double)

%ld 长整型(long int/long)

%lld 长长整型(long long int/long long)

%x 十六进制,但是十六进制的前缀0x不会打印出来,举例:printf(“%x,%#x\n”,198,198);,输

出结果:c6,0xc6

%#x 十六进制,并且十六进制的前缀0x也会打印出来,举例:0x05

%#o 八进制,并且八进制的前缀0也会打印出来,举例:05

%p 打印内存的地址

用简单的scanf函数输入数据

语法:

scanf("格式控制",地址列表);

注意: 不能传变量, 常量, 表达式, 只能传与之对应的内存地址(首地址)

举例

int a = 10; //定义了一个变量a
scanf("%d",&a);//&被称作取地址符,&a意思是获取a变量对应的内存地址(首地址)
printf("%p\n",a);//打印输出a的内存地址(首地址)

作用:将从键盘输出的值所占的存储单元中,存储单元有地址标识.

说明:

  • 格式控制: 含义等同于printf函数的格式控制, 说明输入的数据应该使用的格式, 但是格式控制中不能添加格式化外的字符

    • 地址列表: 是若干个地址组成的,可以是变量的地址或者字符串的首地址,&是取地址运算符,用于去除变量的地址.与格式化输出一样,在格式控制中,用于说明数据格式的格式说明符以%开头,后面紧跟具体的格式
      案例:

    • 需求: 从键盘输入整数给变量abc

    • 代码:

    • #include <stdio.h>
      
      int main()
      {a
          //定义三个变量abc,用来接受控制台的输入
          int a,b,c;
          // 加一个信息,这样效果好一点
          printf("请输入三个整数:\n");
          scanf("%d%d%d",&a,&b,&c);
          printf("a=%d,b=%d,c=%d\n",a,b,c);
      }
          
      

      在这里插入图片描述

  • 说明:

    • scanf函数中的"格式控制"后面应当是变量的地址.由取地址运算符&和变量名共同组成,

      不能仅是变量名:scanf(“%f%d”,&a,&b);

    • 如果"格式控制"中除了格式说明以外还有其他字符,则在输入数据是必须在对应位置输入与之相同的字符:

      scanf(“%d,%d”,&a,&b)

      从键盘录入的时候必须输入逗号:3,4

      scanf(“%d年%d月%d日”,&a,&b,&c)

      必须输入2025年2月10日

    • 用%c格式输入字符时,空格和转义字符(\n)都作为有效字符输入,应注意:

    scanf(“%c%c%c”,&a,&b&c);

    只有输入xyz

    也能得到a=x,b=y.c=z

    • 在输入数值型数据(整型)

复杂的输入与输出

按指定格式输出数据的宽度,小数位数,上下行数据按小数点对齐,用八进制,十六进制输出等

输出数据格式的控制
整型格式说明符
  • 十进制形式(0~9)
    在这里插入图片描述

  • 八进制形式(0~7)

    在这里插入图片描述

  • 十六进制形式(0~F)
    在这里插入图片描述

m表示输出整型数据所占总宽度(即列数),其中

  1. 当实际数据的位数不到m位时,数据前面将用空格填满

  2. 若实际数据的位数大于等于m位时,则以数据的实际位数为准进行输出

    一个int整型也可以用%u输出,反之一个unsigned整数也可以用%d,%o,%x格式输出,按相互复制的规则处理

在这里插入图片描述

字符型格式说明符
  • 字符型
    在这里插入图片描述

  • 字符串型

    在C语言中,是支持字符串常量的,但是不支持字符串变量.
    在这里插入图片描述

    注意:因笔记中♦代替空格

    一个整数,只要其值在0~255范围内,也可以用%c格式按其字符形式输出.这里0-127对应ASCII码

    在输出前,系统会自动将整数作为ascii码转为相应的字符,反之也成立

​ 案例:

  • 要求:字符串输出

  • 代码

    #include <stdio.h>
    
    int main ()
    {
        printf("%3s,%7.2s,%-5.3s,%.4s\n","CHINA","CHINA","CHINA","CHINA")
    }
    
    • 运行结果

      CHINA,-----CH,CHI--,CHIN

    浮点型格式说明符
  • 浮点型格式分为三种形式

    • 十进制形式:%m.nf或者%-m.nf
    • 指数形式:%m.ne或者%-m.ne
    • %g或者%G形式,根据数值的大小 自动选择%f或者%e中宽度较短的一种格式,不输出无意义的0

​ 解释:

​ 在输出浮点型数据时,格式说明符中的m表示整个数据所占的列宽,n表示小数点后面所占的位数(保留的小数位)

​ 如果在小数点后取n位后,所规定的数据宽m不够输出数据前面的整数部分(包括小数点),则按实际 的位数进行输出

​ 在C语言中,用于输出单精度浮点型与双精度浮点型数据格式说明符是一样的

案例:

代码

#include <stdio.h>

int main()
{
	float f = 123.456
	printf("%8.2f,%-8.2f,%8.6f,%8.2e,%g\n",f,f,f,f,f")
}

结果:

_ _123.46, 123.46- - , 123.45601, 1.2e+02, 123.456

案例:

在这里插入图片描述

浮点型格式说明符
  • 单精度浮点型: %f或者%e

  • 双 精度浮点型: %lf

    可见:

    ① 与输出不同,输入时无论是单精度还是双精度浮点型,都不能用m.n来指定输出的宽度和小数点后的位数

    ②可以指定输入数据所占的列数,系统自动按他截取所需数据,如scanf(“%3d%3d”,&a,&b);当输入1234567时,a得到123,b得到456,多余的7无用

    ③若在%后有一个*和一个数字,表示跳过他指定的列数,如:

    scanf("%2d%*3d%3d,&a,&b")当输入12345678时,a得到12,%*3d表示跳过3列,b得到678

案例:

#include <stdio.h>
 
 int main()
 {
 int a,b;
 scanf("%3d%3d",&a,&b);//
 }

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值