c 语言输入两行数据类型,C语言学习笔记二---数据类型运算符与表达式

一.C的基本语法单位

1.标识符:有效长度:31(DOS环境下)

2.关键字:main不是

3.分隔符:空格符,制表符,换行符,换页符

4.注释符:a./*.....*/   b.//

二.C的常用输入/输出函数

1.printf:

a.格式:

printf("输出格式",输出项序列)

例子:

printf("%d",5,6);  //输出结果为5,但格式错误,不建议这样写

类型

格式字符串

输出形式

整型

%d

%o

%x或%X

%u

带符号的十进制形式(正数不输出符号+)

无符号的八进制形式(不输出前导符号0)

无符号的十六进制形式(不输出前导符号0x或0X)

无符号的十进制形式

浮点型

%f

%e或%E

%g或%G

小数形式,默认小数位数为6位

指数形式,数字部分默认位6位

优化的小数或指数形式(去掉无意义的0后所占宽度较水的1种)

字符型

%c

%s

单个字符形式(不输出‘)

字符串(不输出“)

字符

功能

%md

......

%.nd

对实数:指定小数点后位数(四舍五入)

%-md

....

%+md

指定在有符号数的正数前显示+号

%0md

输出数值时指定左面的空位置自动填0

%#o

%#x

在八进制和十六进制数前显示前导0,0x

%ld

%lf.....

.....

2.scanf:

注:

1.scanf可以指定输入数据所占有的列数,系统自动按他截取所需数据

如:scanf(”%3d%3d",&a,&b);

输入123456      --->a=123,b=456

2.如果在%后面有一个*附加符,表示本输入项输入后不传给任何量

如:scanf("%2d %*3d %2d",&a,&b);

输入:12 345 67       -->a=12,b=67

3.输入数据时,不能规定精度

如:scanf("%7.2d",&a) ;        ×

4.输入字符时,每一个字符变量只能容纳一个字符

如 scan("%3c",&a);

输入:asc              -->a='a';

3.getchar:

c=getchar();

4.putchar

putchar(c);

三.数据类型

1.基本数据类型

a.整型常量:BC中int的值域为-32768~32767

unsigned int  : 0~65535

char: -128~127

unsigned char: 0~255

b.浮点型常量:

浮点数后缀:f/F,l/L.(浮点数总是有符号的,故无u或U后缀)

c.字符型常量:           分为转义字符和普通字符

d.字符串常量:

e.符号常量

#define PI 3.14159

注释:位,字节,字长,字

位(Bit):计算机数据的最小单位,表示一个二进制数码0或1.

字节(Byte):八个二进制位构成1个字节,一个字节可以存储一个英文字母或者半个汉字

字长:CPU在单位时间内能一次处理的二进制数的位数

字:8位CPU字长为8位,一个字=1个字节,一次只能处理1个字节,32位CPU字长为32位,一个字=4个字节,一次只能处理4个字节

四.运算符

1. 算术运算符:+,-,*,/,%

2.赋值运算符:=,复合赋值运算符:+=,-=,*=,/=,%=

3.关系运算符:,<=,!=,==,>=

4.逻辑运算符:&&,||,!

例子:

inta,b,c;

a=b=c=1;++a||++b&&++c;

printf("b=%d\n",b);

输出:b=1

++a||++b&&++c;  =======++a||(++b&&++c);    优先级:&&>||

后面的逻辑表达式本来是先算&&再算||

但是最终还是算||,||中当左边表达式为真时就不会计算右边表达式

所以只运算++a,所以结果是a=2,b=1,c=1

5.自增自减:++,--

例子:

double b=1.25;

b++;     ( √)

#define d 2

d++;    (×)

6.条件运算符:? :

7.逗号表达式: , , , ,

8.位运算:  &,|,^,<>,~

五.类型转换

1.自动类型转换:

a.三种自动类型转换的情况:

(1).当双目运算符的两个运算量结果的类型不相同且进行算术运算时

(2).当一个值赋予一个不同类型的变量时

赋值运算时的自动类型转换(隐式转换)

赋值转换将右值表达式的结果的类型转换成左值表达式的数据类型(强制性)

例子:

int a=8,b=5,c;

c=a/b+0.4;

结果:c=1

(3).调用函数实现数据类型转换

b.转化规则:

值域较窄的类型向值域较宽的转化

c.转换方向图:

short,char->int->unsigned->long->unsigned long->double->long double

float

注意:故意转换不安全

例子:1.5-7/2+4.3+5%2=1.5-3+4.3+1=3.8

2.强制类型转换(显式转换)

a.一般形式:  (类型名)表达式;

b.作用:将表达式转换为类型名所指定的类型

例子:

float x=6.5;

int y=(int)x;

3.运算符的优先级:

运算符的优先级决定了运算顺序,结合性决定了运算是从左到右还是从右到左。

优先级:()>++ =-- =! = ~ =单目+ =单目- = 强制类型转换 =sizeof >"*,/,%" >"+ , -">  "  >>,<  ">,>=,< ,<=" > "==,!=" >& >^ > | > && > || > ? : >赋值运算符 > ,

关于BC中长整型的讨论:

printf("%d\n",1*2*3*4*5*6*7*8);//输出: -25216 %d改为%u : 40320 √

//另一种选择 :

double j=1.0*2*3*4*5*6*7*8*9*10;

printf("%.0f",j);//printf("%ld\n",1*2*3*4*5*6*7*8); ×

原因:

2 bytes : %d  -32768~32767      %u    0~65535

40320<==>0x9d80<==> 1001 1101 1000 0000(-25216的补码)

-25216<==>  -110 0010 1000 0000

另一个错例:

long j=1*2*3*4*5*6*7*8;

printf("%ld",j);

改进:

j=1*2*3*4*5*6*7*8(L);

or  j=(long)1*2*3*4*5*6*7*8;    最实用

or  printf("%ld",1*2*3*4*5*6*7*8L);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值