#include <stdio.h>
int main(void)
{
int a=123;
int b=052;//十进制42
int c=0xa2;//十进制162
printf("a=%d b=%o c=%x \n",a,b,c);//分别是十进制 八进制 十六进制
printf("a=%d b=%d c=%d \n",a,b,c);
printf("Hello 凌迟老头\n");
return 0;
}
//结论:变量在内存存储的数值是固定的 可以以多种形式(八进制 二进制 十进制 十六进制等)输出
运行结果:
float能保证有7位有效数字
double能保证有15位有效数字
volatile是防止编译器优化代码
比如:volatile int a=100;
register 建议将变量定义在寄存器(经常使用到的变量)(属于建议 不是命令)
当CPU内部有空闲的寄存器就生效,如果没有空闲寄存器就无效(就继续放内存)
字符串长度=字符串+结束符\0
结束符代表结束标志
所以字符常量的长度是1字节(单引号),但是字符串的常量就是2字节(双引号)
因为字符所对应的最大ASCII值是127,所以使用char类型就可以存下所有的字符
int main()
{
char ch1;
scanf("%c",&ch1);
printf("ch1=%c\n",ch1);
}
switch()括号里面的判断条件必须是整数
switch()里面的break是跳出switch语句(没有跳出就依次执行)
switch()里面的default(可有可无)是跳过一条语句
if语句里面的判断条件就可以是任意值
算数运算符是加减乘除
二个数相除,如果要得到小数,必须有一个是double或者float类型
或者手动的将2个数中的某一个数改成单精度实数
eg: int f=3.0/2;
另外:除数不能为0,除数为0的话,会报错
int main()
{
int num=8627;
int a=num % 10;//个位
int b=num/10%10;
int c=num/100%10;
int d=num/1000%10;
printf("%d\n",a);
printf("%d\n",b);
printf("%d\n",c);
printf("%d\n",d);
}
自加自减都是进行单独的加1或者减1
数字在前,先使用,再自加
加减号在前,先自加,再使用
赋值运算符=
比较运算符就是> < >= <= != == 结果只有2种分别是0和1
逻辑运算符 &&乘 ||加 !取反
逗号运算符。最终的结果是最后一个表达式的结果
int main()
{
int a=3;
double b=(double)a;//隐式转换
//类型的准换 所需要的类型和所给的类型不匹配
//强制转换 (需要转换的类型)原来的数据类型
printf("%d\n",a);
printf("%lf\n",b);
printf("%d\n",(int)(19.1415926));
}
强制转换的好处是数据不丢失
但是注意转的顺序和大小
需要注意的是最好从低精度往高精度转(int--->float---->double)
因为高精度往低精度转会损失部分数据,降低了数据的精度
if()语句后面不用加;(因为;是一个空语句)
if后面的语句如果是复合语句建议在后面加花括号形成一个复合语句
if else语句的结构有2种,但是结果互斥
if 语句1 else 语句2 //只有2种结果
if else if //有很多种结果,只是不确定是哪一种结果
if else if 和switch语句等同,只是判断的条件不同
在switch里面加break和default的作用
三目运算符
判断 表达式,如果为真,结果为表达式2的值,如果为假则为表达式3的值
int main()
{
int a=1;
int sum=0;
while(a<=100)//后面无分号
//如果加了分号,程序也没错,但是一直在执行空语句,很消耗内存
{
sum=sum+a;
a++;
}
printf("%d\n",sum);
}
while是先判断再决定是否执行,最坏的结果就是一次都不执行,需要注意的是while后面不加分号
do while是先执行,再判断,最坏的结果就是至少执行一次,需要注意的是while后面要加分号
int main()
{
int a=1;
int sum=0;
do
{
sum=sum+a;
a++;
}
while(a<=100);//需要加分号
printf("%d\n",sum);
}
视情况来决定选用哪一种判断