开发者社区> 华章计算机> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

《C语言程序设计与实践(第2版)》——3.5 各类数值型数据间的混合运算

简介: 例如int型与double型数据进行运算时,应先将int型的数据转换成double型,然后在两个同类型(double型)数据间进行运算,结果为double型。注意:箭头方向只表示数据类型级别的高低,由低向高转换,不要理解为int型先转换成unsigned型,再转换成long型,再转换成double型。
+关注继续查看

本节书摘来自华章出版社《C语言程序设计与实践(第2版)》一书中的第3章,第3.5节,作者:凌云等著,更多章节内容可以访问云栖社区“华章计算机”公众号查看

3.5 各类数值型数据间的混合运算

在C语言中,允许不同类型的数据之间进行某些混合运算。前面提到,字符型数据可以和整型通用。不仅如此,C语言还允许整型、单精度型、双精度型、字符型的数据之间进行混合运算。例如,
screenshot

是合法的。在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。转换的规则如图3-2所示。
图3-2中横向向左的箭头表示必定的转换,如字符型(char)参加运算时,不论另一个操作数是什么类型,必定先转换为整型(int);short型转换为int型,单精度(float)型数据在运算时一律先转换成双精度(double)型,以提高运算精度(即使是两个float型数据相加,也要先转换成double型,然后再相加)。
screenshot

图3-2中纵向向上的箭头表示当运算对象为不同类型时的转换方向。例如int型与double型数据进行运算时,应先将int型的数据转换成double型,然后在两个同类型(double型)数据间进行运算,结果为double型。注意:箭头方向只表示数据类型级别的高低,由低向高转换,不要理解为int型先转换成unsigned型,再转换成long型,再转换成double型。也就是说,如果一个int型数据与一个double型数据进行运算,那么应直接将int型转换成double型。同样,如果一个int型数据与一个long型数据进行运算,那么应直接将int型转换成long型。
假设i 为int型,f为float型变量。运算表达式:screenshot,运算次序依次为:
1)进行10 + 'a'的运算,'a'自动转换成整型97,然后执行相加,结果为整型值107。
2)进行screenshot的运算,首先f自动转换成double型,然后把int型的i转换成double型,两个double型数据进行算术乘,结果是double型。
3)整型值107与screenshot的积相加。由于screenshot的值是double型,先将整型数107转换成double型,然后再相加,由此最终结果为double型。
习题
3.1 写出下面赋值表达式运算后a的值,设原来的a = 10, n = 5。
screenshot

3.2 设x = 3, y = 1,下列语句执行后,m, x, y的值是多少?(各小题相互独立)
1)m = ++x - y++;
2)m = ++x - ++y;
3)m = ++x, x++;
4)m = x++, ++x;
5)m = (++x, x++);
6)m = (x++, ++x);
7)m = ++x / ++y;
8)m = x++ / y++;
9)m = x++ / ++y;
3.3 计算出下面各逻辑表达式的值,设 int a = 3, b = 4, c = 5, x;
screenshot

3.4 请编写程序,将"China"译成密码。加密方法是:把原来字母用其字典顺序后面的第4个字母替换。例如,原来'a'用'e'替换,原来'A'用'E'替换。故"China"译成密码应为"Glmre"。试编写一个程序,用赋值的方法使变量c1、c2、c3、c4、c5的值分别为'C'、'h'、'i'、'n'、'a',经过运算,使c1、c2、c3 、c4、c5的值分别为'G'、'l'、'm'、'r'、'e',并在屏幕上显示。
3.5 若有定义:int a = 10, b = 9, c = 8;顺序执行下列两条语句后,变量c中的值是多少?
c = (a - = (b - 5));
c = (a % 11) + (b = 3);
3.6 设x和y均为int型变量,且x = 1, y = 2,则表达式1.0 + x / y的值为多少?
3.7 设y是int型变量,请写出判断y为偶数的关系表达式。
3.8 表示整型变量a的绝对值大于5的C语言表达式是什么?
3.9 表示整型变量a不能被5或7整除的C语言表达式是什么?
3.10 表示整型变量a不能同时被5和7整除的C语言表达式是什么?

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《C语言及程序设计》实践项目——数值型数据的存储原理
返回:贺老师课程教学链接  C语言及程序设计初步   【程序阅读题】1. 运行下面的程序,并解释产生结果的过程(或原因) #include <stdio.h> int main() { int a, b; a= 2147483642; printf("a=%d\n",a); b = a + 10; printf("b=%d\n",b); return 0; } 2.
898 0
理解C语言——从小菜到大神的晋级之路(8)——数组、指针和字符串
       本期视频点击这里        在前面几次我们接触的数据类型都是简单数据类型,使用一个数据个体表示一个元素。C语言中还提供了多种复杂数据类型,其中最简单的一种就是数组。
1183 0
C语言及程序设计进阶例程-16 当结构体成员为指针
贺老师教学链接  C语言及程序设计进阶 本课讲解 有问题吗? #include <stdio.h> #include <string.h> struct Test { int x; char *str; }; int main() { struct Test a; a.x=100; char s[]="Hello"; s
991 0
C语言及程序设计提高例程-25 指针作函数参数
贺老师教学链接  C语言及程序设计提高 本课讲解 例:冒泡排序函数的新写法 #include <stdio.h> void bubblesort(int*, int); int main( ) { int i,a[10]= {3,5,9,1,3,6,-9,-7,10,12}; bubblesort(a,10); for(i=0; i<10; i++) p
973 0
C语言及程序设计提高例程-35 使用指针操作二维数组
贺老师教学链接  C语言及程序设计提高 本课讲解 使用指向二维数组元素的指针 #include <stdio.h> int main( ) { int a[3][4]= {1,3,5,7,9,11,13,15,17,19,21,23}; int *p; for(p=a[0]; p<a[0]+12; p++) { printf(
925 0
C语言及程序设计提高例程-23 指针的运算
贺老师教学链接  C语言及程序设计提高 本课讲解 指针的比较 //本例无实用价值 #include &lt;stdio.h&gt; int main( ) { int a=2, b=3; double c=3.14; int *p1=&amp;a, *p2=&amp;b; double *p3=&amp;c; printf("%x %x\n", p1,
712 0
C语言及程序设计提高例程-22 用指针法访问数组元素
贺老师教学链接  C语言及程序设计提高 本课讲解 你将发现一个内幕! #include &lt;stdio.h&gt; #define n 5 int main( ) { int a[n]= {123,5,9,11,33}; printf("%d\n", a); printf("%x\n", a); printf("%x\n", &amp;a[0]);
953 0
C语言及程序设计提高例程-7 返回指针的函数
贺老师教学链接  C语言及程序设计提高 本课讲解 返回指针的函数 #include <stdio.h> int *max(int *x, int *y) { int *t; if(*x > *y) t = x; else t = y; return t; } int main() { int a, b
826 0
10057
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载