C语言(一)数据类型与基本语句

一.数据类型

1.分类类型在这里插入图片描述
2.数据类型的长度

#include<stdio.h>
int main ()
{
	int a=1;
	printf("int %d\n",sizeof(a));    //sizeof是关键字,求数据类型的长度
	printf("int %d\n",sizeof(int));
	printf("char %d\n",sizeof(char));
	printf(“short %d\n”,sizeof(short));
	printf("long %d\n",sizeof(long));
	printf("float %d\n",sizeof(float));
	printf("double" %d\n, sizeof(double));
return 0;
}

运行结果:在这里插入图片描述
内存是以字节为单位,一个字节是八位。 1byte=8bite
以上结果输出的是字节。
eg: int
unsigned int 0~2的32次方(范围) 无符号 32=4*8
signed int -2的31次方~2的31次方-1 有符号
同理 :
unsigned char 0~2的8次方-1 (255)
signed char -128 ~ 127 1000 0000 至 0111 1111
1000 0000 :-128 有符号数的二进制 开头第一位为0 ,则为正数,反之,1为负数。
1111 1111 :-127
0111 1111: 127
1111 1111
+1000 0001 (-1)
11000 0000 第九位为溢出位,所以规定1000 0000 (-0)为最小值 -128;

3.混合运算
在进行赋值操作时,会发生类型转换
将取值范围小的类型转为取值范围大的类型是安全的
反之是不安全的
如果大类型的值在小类型能容纳的范围之内,则平安无事
但是,浮点数转为整数,会丢失小数部分,非四舍五入
反之,转换后的结果必然是错误的,具体结果与机器和实现方式有关。避免如此使用,好的编译器会发出警告
.类型强制转换运算符“(类型)”

eg:int i = -20;
unsigned int j=10;
i+j=?

#include<stdio.h>
int main()
{
	int i=-20;
	unsigned int j=10;
	printf("%u\n",i+j);  //因为%d是输出整形,%u才能输出无符号十进制数。
	if(i+j>0)
	{
		printf(">0\n");
	}
	else
	{
		printf("<0\n");
	}
return 0;
}

运行结果:429496…
为啥呢?因为混合运算,一般是化为同一进制计算,范围小的转换为范围大的,有符号的范围比无符号的大,所以转成有符号。
通过二进制转 通过补码进行运算,结果再转化为原码运算。
4.基本知识
整型常量
十进制:18、-31
long int型常量 123l、123L、123456l、123456L
unsigned int型常量 123u、 123U
根据实际数据大小确定int型还是long型
以数字“0”开始的整型常量是八进制数
022、-037
010和10大小不一样
因为八进制并不常用,所以此种表示法比较少见
以“0x”或者“0X”开始的整型常量是十六进制
AF和af用来表示十进制的10~15
十六进制的形式比较常用:0x12、-0x1F, -0x1f
实型常量
十进制小数形式 :123.45、456.78
指数形式 :1e-2、4.5e3
float型常量 123.45f、 456.78F、1e-2f、4.5e3F
long double型常量 123.45l、 456.78L、4.5e3L
缺省为double

在这里插入图片描述
5.字符串注意事项

在这里插入图片描述
eg:在这里插入图片描述
运行结果:255
在这里插入图片描述
因为char类型只有1个字节,8bite,范围只有-128到127,a[i]=-1-i ,当它减到-128时,在减一,通过补码运算,在化为结果为127,相当于是一个循环。
strlen是一个关键字,计算数组的长度。

二.基本语句

1.C的运算符有以下几类:
(1)算术运算符 (+ - * / %)
(2)关系运算符 (> < == >= <= !=)
(3)逻辑运算符 (! && ||)
(4)位运算符 (<< >> ~ | ∧ &)
(5)赋值运算符 (=及其扩展赋值运算符)
(6)条件运算符 (?:)
(7)逗号运算符 (,)
逗号运算符:将两个表达式连接起来,又称为“顺序求
值运算符“,如:
3+5,6+8;
逗号表达式 的值为14
一般形式: 表达式1,表达式2
求解过程:
先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。
8)指针运算符 (和&)
(9)求字节数运算符(sizeof)
(10)强制类型转换运算符( (类型) )
(11)分量运算符(. ->)
(12)下标运算符([])
(13)其他 (如函数调用运算符())

2
*.基本算术运算符: + - * / %
结合方向:从左向右
优先级: - ---->
/ % -----> + -
说明:
“-”可为单目运算符时,右结合性
两整数相除,结果为整数;有一实数相除,结果为实数
%要求两侧均为整型数据
***
用括号来控制运算顺序更直观、方便,并减少出错的概率
函数符号() 数组下标[]
3.输入输出
%d或%i按十进制有符号整数输出,正数的符号省略
%u按十进制无符号整数输出
%o按八进制无符号整数输出(不输出前导0)
%x或X按十六进制无符号整数输出(不输出前导符0x)
%c按字符型数据输出
%s按字符串数据输出
%f按小数形式输出(6位小数)
%e或E按指数形式输出实数
%%输出%本身
%g或G选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0

m 表示数据占用的宽度,正整数
n 对实数,指定小数位数(四舍五入)
对字符串,指定实际输出位数
l 加在d、o、x、u前:输出长整型
加在f、e 、g前:输出双精度型
h 加在d、o、x 前:输入短整型
-号 输出数据在域内左对齐(默认右对齐)
+号 指定在有符号数的正数前显示正号(+)
在这里插入图片描述
在这里插入图片描述

4.构成:在这里插入图片描述
5.基本运算
请编写一个c函数,该函数给出一个字节中被置为1的位的个数

#include<stdio.h>
int main()
{
	char ch;
	scanf("%c",&ch)
	int i,count=0;
	for(i=0;i<8;i++)
	{
		if(ch & 1 == 1)
		{
			count++;
		}
		ch = ch >>  1  ;
	}
		printf("count=%d\n",count);
			
		return 0;
}

6.自增或自减
自增、自减运算符
作用是使变量的值增1或减1
如:
++i,–i(在使用i之前,先使i的值加(减)1)
i++,i- - (在使用i之后,使i的值加(减)1)
i++与++i的区别:
++i是先执行i=i+1后,再使用i的值;
i++是先使用i的值后,再执行i=i+1。
例如:
①j=++i; i的值先变成4, 再赋给j,j的值均为4
②j=i++; 先将 i的值3赋给j,j的值为3,然后i变为4

在这里插入图片描述
7.控制结构
if(表达式1)语句1
else if(表达式2)语句2
else if(表达式3)语句3
……
else if(表达式m)语句m
else 语句n
匹配规则:
else总是与它上面的,最近的,统一复合语句中的,未配对的if语句配对;
当if和else数目不同时,可以加花括号来确定配对关系
switch语句的格式:
switch (表达式)

case 常量表达式1:语句1; break;
case 常量表达式2:语句2; break;

case 常量表达式n:语句n; break;
default :语句n+1; break;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
8.循环语句
while (表达式) 语句
当表达式为非0值时,执行while语句中的内嵌语句。其特点是:先判断表达式,后执行语句
do
循环体语句
while (表达式);
do-while语句的特点:先执行循环体,然后判断循环条件是否成立
一般形式:
for(表达式1;表达式2;表达式3) 语句
continue语句
作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定.
一般形式: continue;
break语句
break语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句
一般形式: break;
注意:break语句不能用于循环语句和switch语句之外的任何其他语句中。

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值