2.2混合运算与printf、输入输出

文章介绍了C语言中混合运算时的强制类型转换,如(int)a/b并不改变a的类型,只是表达式变为浮点型。printf函数用于输出不同类型的变量,通过格式规范控制对齐和精度。进制转换方面,讲解了二进制、八进制、十六进制之间的转换。此外,文章还讨论了scanf函数的输入机制,以及如何处理输入缓冲区的问题。最后提到了多种数据类型混合输入的情况。
摘要由CSDN通过智能技术生成
  1. 混合运算

强制类型转换场景

整数型进行除法运算时,如果遇到结果为小数,那么存储浮点类型是,一定要进行强制类型转换。如下:

 int a=10;
    int b=4;
    float result1=a/b;
    printf("%f\n",result1);//打印结果为2.000000  因为这里做的是整形运算,因为左右操作数(指a和b)都是整型
    float result2=(float )a/b;//强制类型转换  但实际上并没有把a的类型变成浮点型  只是因为表达式(float)a 是浮点型
    printf("%.2f\n",result2);//打印结果正确2.50

注意:强制类型转换 并不会把变量的实际类型转换,只是把他变成了一种另外的表达式。

  1. printf函数介绍

printf输出函数可以输出各种类型的数据,包括浮点型、字符型、整型、字符串型等,实际原理printf是将这些类型的数据格式转化为字符串后,放入标准暑促和缓存区,然后将结果显示到屏幕上。

printf函数的具体代码格式

%c

字符

%d

带符号整数

%f

浮点数

%s

一串字符

%u

无符号整数

%x

无符号十六进制数,用小写字母

%X

无符号十六进制数,用大写字母

%p

一个指针

%%

一个‘%’符号

printf格式规范

int main() {
    int i=10;
    float f=66.66;
    printf("student num=%-3d, score=%5.2f\n", i,f);
    //%3d代表占三个字符位置  5.2f表示占五个位置,小数点后保留两位  默认是右对齐,-代表左对齐
    return 0;
}
  1. 进制转换

计算机中,1字节(byte)为8位(bit),1位即二进制的1位,他储存0或1.int型常量的大小位4字节,所以是32位。

十进制 0-9

八进制 0-7

十六进制 0-9 a-f

例如:123 (十进制)

二进制000 0000 000 000 0000 0000 0111 1011 (除2取余逆序读)

十六进制 7b 7*16+11=123 b代表11

二进制转换八进制(实际上是每三位放在一起)

000 0000 000 000 0000 000 001 111 011 (173) 1* 8^2+7*8^1+3*8^0=64+56+3=123

代码表示如下:

int main() {
    int i=123;
    printf("%d\n",i);//十进制输出
    printf("%o\n",i);//八进制输出
    printf("%x\n",i);//十六进制输出
    return 0;
}

图示为八进制内存视图 7b 00 00 00

注意:7b在前 是由于英特尔的CPU采用了小端方式进行存储数据,因此低位在前,高位在后

  1. scanf输入函数

scanf函数原理:C语言未提供输入\输出关键字,其输入和输出是通过标准函数据来实现的。C语言通过scanf函数读取键盘输入,键盘输入又被称为标准输入。当scanf函数读取标准输入时,如果还没有输入任何内容,会被卡住,(阻塞)。

int main() {
    int i;
    char c;
    scanf("%d",&i);
    printf("i=%d\n",i);
    scanf("%c",&c);//第二个scanf不会卡住 会读取上一个回车键
    printf("c=%c",c);
    return 0;
}

//第二个scanf不会卡住 会读取上一个回车键‘\n’ 所以会直接打印 不会卡住

解决方法(写在第一个输出语句后)

 fflush(stdin);//清空标准输入缓冲区

但是注意:如果scanf在读取函数时,读取的是整型数、浮点数、字符串、会自动忽略‘\n' ,空格符等字符。(忽略是指scanf函数执行时,会首先删除这些字符,然后再进行阻塞)。而scanf在读取%c,匹配一个字符时,不会忽略任何一个字符,所以scanf("%c",&c)读取了还在缓冲区中残留的'\n'。

  1. 多种数据类型混合输入

int main() {
    int i,ret;
    float f;
    char c;
    ret = scanf("%d %c %f",&i,&c,&f);//ret是scanf匹配的个数,帮助调试
    printf("i=%d,c=%c,f=%5.2f",i,c,f);
    return 0;
}

注意代码格式,加空格或用逗号隔开。

相关练习:输入输出

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只考研-er

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值