(1)自动转换(5+5.000000=?结果是10还是10.000000):发生在不同类型的数据混合运算时,由编译系统自动完成。
不同的数据类型,要转换成精度较高的。
A、转换按数据长度增加的方向进行,确保精度不降低,比如:int型和long型运算时,先把int量转成long型后再进行运算
C、在赋值运算中,赋值号两边的数据类型不同时,赋值号右边的类型将转换为左边的类型,如果右边的数据类型长度比左边长,将丢失一部分,丢失的部分按四舍五入向前舍入。
(10和5为整型,5.000000 为双精度实型)
所以它的最终结果为精度最高的double型。
比如:我们来看两个程序实例
为什么是一串很大的整数呢?而不是-14呢?问题就在自动转换上,我们观察上述讲过的转换规则,unsigned和int同时出现运算时,int需要转换成unsigned,即:有符号需要转换成无符号类型。程序中的-20需要转换成无符号整型。
将int型修改为char类型之后,结果竟然是-14,这又是为什么呢?还是自动转换规则。看规则,int以下类型(short,char不管有无unsigned)计算会转为int,也就是说不管有没有符号,char类型都要转换成int型,所以a+b遵循了有符号整型的运算。
区别与自动转换,强制转换很明显是强制的。格式为:(类型说明符)表达式
强制转换为了实型。(int)(x+y)的意思是将x+y的值转换为整型。
(3)需要注意的是:无论是自动转换或者是强制转换,都只是为本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。
圆括号下标运算符指向结构体成员运算符结构体成员运算符 |
逻辑非运算符按位取反运算符前缀增量运算符前缀减量运算符正号运算符负号运算符 |
乘法运算符除法运算符取余运算符 |
等于运算符不等于运算符 |
(1)乘除取余的优先级要高于加减;
(2)“/”除运算,参加除运算的变量均为整数,结果也为整数(舍去小数),多数机器上采取“向零取整”的原则。比如:7/4=1(而不是1.75),-7/4=-1。
(3)“%”,参与模运算的变量必须都为整型,其结果为两数相除的余数,并且余数与被除数的符号相同。比如:7%4=3,
(2)当赋值运算符两边的数据类型不同时,系统将自动进行类型转换,赋值运算符右边的数据类型转换成左边的变量类型,在上一篇中已经说过了。
(3)复合赋值运算:比如:n+=1等价于n=n+1;
如果n=3 ,则n的值和m的值如下表所示
|
关于自增自减是一个重要的概念,在之后的指针学习中还会重点学习。
(1)表达式1,表达式2,....表达式n。自左向右结合。
(2)表达式n的值为整个逗号表达式的值。比如:a=(1,2,3,4,5,6),则a的值等于6。也就是最后一个的值。
(3)逗号运算符在所有运算符中的优先级别最低,它往往起到了把若干个表达式串联起来的作用。比如:a=3*4,a*5,a+10。 从左向右 先去3*4,然后将12的值赋给a,然后计算a*5。将60的值赋给a,然后计算a+10的值。
关系运算无非就是大于(>)小于(<),逻辑运算有非(!)与(&&)或(||)
逻辑表达式的值只有真(1)和假(0)两个值。
对于关系运算来说,a>b>c并不代表着a的值比b大,b的值比a大。关系运算与逻辑运算需要密切合作。我们来举一个例子:看两个程序。
我们看到的结果竟然是ERROR,而不是我们预想的OK,这是为什么呢?原因就在判断上。在数学上,a>b>c一点都没有错,但是在我们的C程序中,计算机判断条件的依据只有两种结果,那就是1(真)或者是0(假)。比如:a>b是真,所以a>b的值为1,然后1>c吗?很显然1=c,所以if()条件中的条件并不成立,所以结果为ERROR。那这样怎么改呢?很简单,用逻辑运算符
(1)取反能对一个二进制的每一位都取反。
看一个程序实例:
分析一下:char类型默认分配一个字节,即8位。26的二进制为:
对26的二进制取反(~a)得:,我们在中讲解过,无符号的二进制最高位为数据位,所以的十进制为229。
(2)为了便于区分有符号和无符号的区别,我们再来做一个程序实例:
26的二进制:,取反:,char类型默认有符号(我的是有符号,有些课本中说无符号),所以最高位为符号位,所以是负数,对减一取反是:,转换成二进制为-27。
对于这一块不理解的同学可以参考:
左移是将一个数的各个二进制位全部向左平移若干位,左边移出的部分忽略,右边空出的位置补0,比如:
一个数据,每左移一位相当于乘以2,左移2位相当于乘以4。比如:4左移2位=4*4=16。
右移是将一个数的各个二进制位全部向右平移若干位,右边移出的部分忽略,左边空出的位置对于无符号数补0,对于有符号数,若原符号位为0,则全补0,若原符号位为1,则全补1。比如:
A被定义为char (默认有符号)
异或运算的作用是判断两个相应位的值是否相异。相异为1,反之则为0。
中等职业学校计算机应用专业 C 语言编程基础
一、填空(共 35 分) 1、Unix 系统诞生于
实验室的 KT和DMR用汇编语言开发成功的。 2、在 C 语言中,标识符主要为 , , 及 的名字使用。
3、C 语言中中的基本数据类型包括
4、数组是有序是的并且有 的数据的集合。
5、C 语言中,二维数组元素在内存中的存储顺序是
6、C 语言函数的实参、形参二者类型 ,一般个
数 。 7、在 C 语言中,变量的存储类别有四种,它们是 ,
8、根据函数能否被其他源文件调用,函数分为 函
9、文件是存储在外部存储设备上的
10、定义文件指针变量的格式为 。 11、feof( )函数是 检测函数,当文件位置指针 处于 时,它返回一个
13、结构化程序设计方法,采用 的设计原则和
14、程序结构一般采用 、
结构。 15、第三代高级语言是
之间的关系是从属性的层层调用关系。 二、单项选择题(共15分) 1、C 语言程序由
2、源程序要正确地运行,必须要有什么函数? A. printf 函数 B. 自定义的函数 C. main 函数 D. 不需要函数 3、若 a 为整型变量,且有以下语句 a=-017L;
则下面___说法是正确的?
5、在 C 语言的 if 语句中,用作判断的表达式为___。 A. 关系表达式 B. 逻辑表达式 C. 算术表达式 D. 任意表达式
6、下面哪一项是不正确的字符串赋值或赋初值的方式。A. char *str; str=\
8、C 语言可执行程序从什么地方开始执行?
A. 程序中第一条可执行语句 B. 程序中第一个函 数
C. 程序中的 main 函数 D. 包含文件中的第一个函 数
则该函数的返回类型为___。
A. void B. double C. int D. float 10、在 C 语言程序中,下面哪一个是正确的? A. 函数的定义可以嵌套,但函数的调用不可以嵌套 B. 函数的定义不可以嵌套,但函数的调用可以嵌套 C. 函数的定义可以嵌套,函数的调用也可以嵌套 D. 函数的定义和函数的调用都不可以嵌套
12、若有以下说明和语句,且 0
D. 只有二进制文件一种 三、多选题(共 20 分) 1、下面 是定义局部变量储存类别的保留字。 A. int
B.循环结构 C.程序结构 D.选择结构
4、C 语言的主要特点有
A.简洁、紧凑,使用方便、灵活,易于学习和应用。 B.C语言是面向结构化程序设计的语言。 C.C语言允许直接对位、字节和地址进行操作。 D.数据类型丰富。 E.C 语言生成的目标代码质量
5、指出下面合法的标识符: A. 3ab
7、C 语言的基本类型有 A. 整型
8、C 语言中整形常量按进制划分,有以下几种:
A. 十六进制常量 B. 十进制常量 C. 八进制常量
9、如果要把常量 327 存入变量 a 中,a 可以定义成 类型。
1. 在 C 语言中,函数的参数传递有两种方式:传
递值和传递地址。( )
2. 一般来说,使用指针能使目标程序占用存储空
间大,运行速度快。()
3. 指针变量可以定义为指向字符型、实型以及其
4. 内存区的每一个字节都有一个编号,这个编号
5. 条件编译的好处是可以增加被编译的语句,从
面增加目标代码的长度。
6. 写带有参数的宏定义时,宏与带括号的参数间
7. fscanf()函数从文件中读取字符串,只当遇到
空格符时才结束字符的读取。()
8. 形式参数是指定义函数时跟在函数名后的小括
号内的变量名。实际参数则是指调用函数时,跟在函数名后的小括号内的表达式。()
9. 在定义字符数组的同时初始化数组外,可以用
赋值的形式把字符串存入一个字符的数组中。()
10. 用逻辑运算符将关系表达式或变量连接起来就
11. 在关系运算中,若规定的关系成立,则其结果
12. 格式字符前面的数字,指定输入数据所占宽度,
13. c 格式符,用为输出一个字符。对于整数,只
要它的值在 0―256 范围内。()
14. 参数 ch 通常为字符型变量、字符码或字符本身。
15. C 语言提供了整型、实型、字符型三种基本类
16. 逗号运算符在所有运算符中优先级虽最低,逗
号运算符的结合方向是“从左至右”。()
17. C 语言提供了一个惟一的两目运算符(?:),
18. 递增、递减运算符的优先级与“取正负”的优先
19. 当赋值号两边的数据类型不同时,一般由系统
自动进行类型转换。()
20. 自动转换的规则是按照低类型转换到高类型或
赋值号的右边类型转换到赋值号左边的类型来进行 的。()
五、A、写出下列程序的运行结果。(共5X4分) 1、void main()
B,补充程序 (共 20 分)
1,下面这个程序的作用是统计公元 1 年到公元 2000 年的闰年个数。判断闰年的方法是:能被 400 整除的年是闰年;除能被 400 整除的年以外,凡是能被 4 整除, 但不能被 100 整除的年是闰年。其余年份是平年。 #include void main() {int year; int count=0;
2、以下程序从读入的整数数据中,统计大于零的整数 个数和小于零的整数个数.用输入零来结束输入,程序 中用变量 i 统计大于零的整数个数,用变量 j 统计小于零的整数个数.请填空. #include main()
3、下面这个程序打印出以下这个三角形.请填空。
4, 有 5 个学生的成绩需要保存在文件 score.dat 文件中。保存格式如下: 学生姓名,年龄,成绩 学生姓名,年龄,成绩 ...
} 5, 除 1 外,只能被 1 和自己本身整除的自然数叫素数。下面这个程序就是求 2 到 100 之间的素数。其中判断 某数为素数的方法为用 2 到该数平方根之间的自然数
去试整除该数。如果没有哪个数能够整除该数,那么 该数为素数;如果有,那么时合数。请填空。 (函数 sqrt(a)求 a 的平方根) #include #include void main()
2、输入在个数,要求设三个指针变量 P1,P2,P3, 使 P1 指向三个数的最小数,P2 指向中间数,P3 指向 最大数,然后按由小到大的顺序输出。(用指针的方 法编写)(7分)
3、一循环程序编写下面图形。(6分)
0
这条内容存在什么问题?
为帮助审核人员更加快速处理,请补充违规内容出现位置等详细信息。(选填)
当您发现懂得网上存在涉嫌侵犯您合法权益的内容时,您可以通过以下方式向懂得网提出诉求。
您需要提供的举证材料包括:
(1)若您的身份是个人,请提供当事人姓名,手机号,身份证正反面证明,其他辅助证明(包括但不限于商标 注册证书、侵权说明相关证明材料)
(2)若您的身份是企业,请提供企业/机构名称,企业/机构代码统一信用码,联系手机号,营业执照或组织 机构代码证原件的彩色扫描件,身份证正反面证明,其他辅助证明(包括但不限于商标注册证书、侵权说明相关证明材料)
(3)请您提供要举报的内容链接,选择侵权类型(泄露隐私/人身攻击/冒用抄袭)进行三选一,描述您认为涉及隐私的内容。
请将侵权链接、举证材料及说明,发送至邮箱:。我们将在收到邮件的7个工作日处理您的请求。