整数的分解:
对一个整数做%10的操作,就得到它的个位数;
对一个整数做/10的操作,就去掉了它的个位数;
对一个整数做/10再%10,便可得到它的十位数;
依次类推
#include<stdio.h>
int main(){
int x;
scanf("%d",&x);
int b;
int c=0;
while(x>0){
b=x%10;//得到此时x的个位数
//printf("%d",b);
c=c*10+b;//让c开始加上b
x/=10;//让x减掉个位数
//printf("x=%d,b=%d,c=%d",a,b,c); //调试查看每一步
}
printf("%d",c);
return 0;
break和continue:
break是打破循环,退出循环。continue是结束本轮循环,不再继续这轮循环的剩余指令,开始下一轮循环。
C语言的数据类型:(蓝色的是C99类型)
- 整数:char,short,int,long,long long
- 浮点数:float,double,long double
- 逻辑:bool
- 指针
- 自定义类型
类型的不同之处:
- 类型名称:int,long,double
- 输入输出格式:%d,%ld,%lf
- 所表达数的范围:char<short<int<float<double
- 内存所占据的大小:1字节-16字节
- 内存中所表达形式:整数—二进制数(补码),浮点数—编码
C类型 | 32位 | 64位 |
char | 1 | 1 |
short int | 2 | 2 |
long | 4 | 8 |
long long | 8 | 8 |
int | 4 | 4 |
long int | 4 | 8 |
long long int | 8 | 8 |
char* | 4 | 8 |
float | 4 | 4 |
double | 8 | 8 |
sizeof——静态运算符,给出某个类型或变量在内存中所占据的字节数
- sizeof(int)
- sizeof(i)
#include<stdio.h>
int main()
{
int a;
a=6;
printf("sizeof(long double=%ld\n)",sizeof(long double));
printf("sizeof(a+1.0)=%ld\n",sizeof(a+1.0));//1.0使a+1.0变成double类型浮点数
//但是由于sizeof是静态运算符,所以并不运算a+1.0
printf("sizeof(a)=%ld\n",sizeof(a));
printf("a=%d\n",a);
}
sizeof(long double)=16
sizeof(a+1.0)=8
sizeof(a)=4
a=6//但是由于sizeof是静态运算符,所以并不运算a+1.0
int数据类型的数范围:
-2的31次方 到 2的31次方-1
char数据类型最大的数:
-128 到 127 (当127+1时,结果为-128)
,因为整数是以纯二进制方式进行计算的,若有unsigned,则为0 到255
整数的输入输出:
只有两种形式:int或long long
%d:int
%u:unsigned
%ld:long long
%lu:unsigned long long
#include<stdio.h>
int main()
{
char a=-1;
int b=-1;
int c=-1;
printf("a=%u,b=%u,c=%d",a,b,c);
}
a=4294967295,b=4294967295,c=-1
浮点类型:
类型 | 字长 | 范围 | 有效数字 | scanf | printf |
float | 32 | ±10的±38次方,0,正负inf,nan | 7 | % f | %f.%e |
double | 64 | ±10的±308次方,0,正负inf,nan | 15 | %lf | %f.%e |
注意:其中浮点的范围无法无限接近0
带小数点的字面量是double而非float(float需要用f或F后缀来表明身份)
printf用%f输出浮点数时,需注意输出值需是浮点数(带小数点)
%e即输出科学计数法.
浮点运算的精度f1==f2可能失败,应该fabs(f1-f2)<le-l2
若想输出精度小数点,此时会对数值四舍五入。如2位小数,可%.2f.
%x.xf,第一个x表示输出字符数,第二个x表示小数点后几位
#include<stdio.h>
int main()
{
printf("%.3f\n",0.0049);//此时对0.0049四舍五入
printf("%.30f\n",0.0049);
//计算机并不能准确表达一个数,无法表达0.0049,便寻找一个离0.0049最近的一个数
printf("%.3f\n",0.00049);
}
0.005
0.004899999999999999800000000000
0.000
字符类型:
char是一种整数,也是一种字符类型。
用单引号表示的字符字面量:'1','a'
''也是一个字符
printf和scanf里用%c来输入输出字符
字符可以运算,两个字符的减,得到它们在ASCII码表中的距离
#include<stdio.h>
int main()
{
char c=‘1’;//或char c;scanf("%c",&c);
printf("%d\n",c);//输出整数
printf("%c",c);//输出字符
}
49//'1'对应的整数是49,'空格'对应的整数是32
1
逃逸字符:
字符 | 意义 | 字符 | 意义 |
\b | 回退一格 | \" | 双引号 |
\t | 到下一个表格位 | \' | 单引号 |
\n | 换行 | \\ | 反斜杠本身 |
\r | 回车 |
逻辑运算:(结果为0或1)
运算符 | 描述 | 示例 | 结果 |
! | 非 | !a | a是对的则输出错,反之 |
&& | 与 | a&&b | a和b都是对的则对,反之 |
|| | 或 | a||b | 有一个真的则真,都是错的则错 |
优先级:!>&&>|| (仅仅略高于赋值运算符)
短路:逻辑运算符自左向右运算,若左边的数据已能决定结果则不会做右边的运算
如a==6&&b+=1,a==6||b==1 对于&&左边是错的则为错,||左边是对的则为对
条件运算符:
格式: a=(a>20)?a-10:a+10;
条件,条件满足时的值和条件不满足的值
优先级:高于赋值运算符,低于其他运算符
逗号运算符:
用来连接两个表达式,并以其右边的表达式的值作为它的结果。
优先级:最低,因此逗号两边的表达式都会进行计算,但最终以右边的值作为结果
应用情景:for中,for(i=0,j=10;i<j;i++,j--)