文章目录
基础部分:
最简单的c语言程序:
int main()
{
printf("this is a test");
return 0;
}
void main() {
printf("this is a test");
}
int 和 void的区别。
int : 需要一个返回值。也就是 return 0;
void : 不需要返回值,直接省略 return 0;这条语句
重点: 要注意括号之后的“ ;”一定是英文的。建议初学的小伙伴一定要注意这个地方
c语言的数据类型
c语言基本类型所占用的字节数
在c语言中基本类型所占用的字节数跟编译环境有关,不同的编译环境所得到的字节数不同。比如:16位编译环境跟32位编译环境中他们所占用的字节数略有不同。
(这里只列出一部分)
常量和变量
常量:程序运行中其值不改变的量
变量:用于在内存中存放程序数据的地址。
变量名是一个标识符,区分大小写
int _Myclass;
int _myclass;
// 变量名要见名知意。
常用的命名法有
- 驼峰命名法
- 帕斯卡(Pascal)命名法
- 下划线命名法
命名规则
- 严格区分大小写
- 不能使用c关键字
- 可以使用 _ (下划线) 开头
- 不能使用数字开头
- 只能以下划线和字母开头
进制数的显示
十六进制数:以0x开头的数是十六进制
int main()
{
0x123; 0x12;
abc = 0x12;
printf("0x12的十进制数是%d",abc);
return 0;
}
八进制数字,以0开头的数字。
012; // 八进制的12
int main()
{
int abc;
abc = 012; //赋值语句,把=右边的值赋给左边的变量
printf("012的十进制是:%d",abc);
return 0;
}
基础部分的补充
标识符:字母,数字,下划线组成。
保留字:不可作为变量的标识符。
赋值: 将=右边的值赋给=左边。
无符号型(unsigned) 只能保存不带符号的数字,不能存放负数。
整型变量的分类
基本型: int
短整型: short int(short)
长整型: long int(long)
无符号型: unsigned int , unsigned short , unsigned long 。只能保存不带符号的数字,不能存放负数。
函数:
sizeof( ) : 看某种类型变量在计算机内存中占用多少字节。
所有的特殊字符都是以 \ 开始的
- c语言中的默认输出方式: 以十进制输出
- 八进制: 在数值的前面加0
- 十六进制: 在数值的前面加 0x
%d: 以十进制形式输出一个数字
%o: 以八进制形式输出一个数字
%x: 以十六进制输出一个数字
%u: 以十进制的形式输出一个unsigned 型的数字
%c: 输出一个字符
%s: 输出一个字符串
%f: 输出实数,(单双精度的数字)
c语言数据类型探讨
在探讨之前我们来看一下 c语言的运算符和类型
算数运算符: + - * / %
关系运算符: > < <= >= ! =
逻辑运算符: ! && ||
printf("5/3的结果是%d\n",5/3);
printf("7%%4的结果是%d\n", 7%4);
//同级运算符按照从左往右的顺序依次运算。
实型数据
double . float
在精度上: 如果赋给变量的值大于其数据类型的话会出现损失精度的情况。其表示方法为科学计数法显示,且舍弃一部分有效数字。
注意:
在实型数据作除法运算时会损失精度。
——————————————————————————————
字符型数据
例如:
char a = ‘c’;
’ ’ 和 “ “ 的区别是: 单引号只能是一个字符。而双引号它本身带了一个结束符( \0 )
- 在char类型中此处的c在系统中实际存储的是c所对应的ASCII码。
- \0 是一个结束标志
几种变量赋初值的要点
int a=10; //变量直接赋初值
int a;
a=10; //先定义后赋值
int a,b,c=1,2,3; //多个变量赋初值
int a,b,c=6; //定义了int a, int b, int c = 6;
数值类型数据之间的混合运算
double ← float
double ← long ← unsigned ← int ← char,short
char、short也可以和其他数据类型进行运算
注意:
当多个类型同时运算时,系统会先去找最大的一个类型,然后将比它小的类型转化为最大的类型,最后在继续进行计算得出结果。
也就是说: 将低类型自动全部转化为那个最高的类型,在进行运算。
例如:
int main(){
int a=5;
float b=6.5;
float c;
printf("a+b=%f\n",c);
在这个程序当中, 程序会将int型的数据直接转换成float再进行运算。
类型转换和自增自减
1.类型转换
强制类型转换
int a;
a = 19;
double bf;
bf = a;
bf = (double)a;
bf = (double)(3+5);
bf = (double)(3+5);
bf = (double)3 + 5; ==> bf = ((double)3) + 5;
short int sa = 15; //占两个字节
int si = 1; //占用4个字节
sa = (short int)si;
※
取余的话都需要整形。
如果遇到取余的两数非整数的话,可以将其转换类型变成整数。
2.自增自减
++ 自增
– – 自减
int a = 5;
a--; // 4
a++; //6 ==> a = a + 1;
--a; //4
++a; //6
单独一行语句出现的话,其值一致。
int a = 5;
a++; //先用后加,先用a的值,然后给a本身加1.
++a; //先加a的值,再使用a。
int i,j;
i = 3;
j = 4;
int k ;
k = (i++)+j; //先运算就是整体运算,此处默认是k=i+j;等程序此处运行完后再给i+1
printf("%d\n",k);
赋值运算符和赋值表达式
对比取值范围图理解
赋值运算符:
int a; // 定义
a = 3; //赋初值
float bf; // float是单精度浮点型
bf = a;
//bf 的值为: 3.000...
char a = 90; // int占用4 byte , char 占用 1 byte ,其取值范围是-128~127
a = 900; // 数值溢出,不可预料
**// 赋值原则: 类型相同是最理想的。 如果类型不同,建议使用强制类型转化。当强制类型转换时,开发者必须自己明确知道溢出问题**
int a = 9, b = 10;
a = b;
short a;
b = 30000;
a = (short)b; // 强制类型转换的目标是确保编译器不出现警告。
int a;
int b,c;
b = 10000000;
c = 1000000;
a = b * c; //int型是保存不了这么多的,会溢出。
复合型赋值运算符:
包括 += , *= , %= , -= .
例如:
int a = 30;
a += 3; // a = a + 3;
int y = 8, x = 5;
x *= y + 8; // --> x *(y+8) = x
x = 7;
x %= 3 ; // x = x % 3
printf("%d",x);
int a,b,c;
a = 3;
a += (a -= (a*a));
// a += (a -= 9);
// a += (a= a - 9);
// a += (-6);
// a = a + (-6);
// a = -3;
逗号运算符和逗号表达式
逗号运算符格式:
样例:
表达式1, 表达式2
// 计算过程: 先求解表达式1的值,再求解表达式2的值,整个表达式的值是表达式2的值。
int a;
a = (4,5); //此处括号括住了两个常量
a = (3+5,6+8);
// , 比 = 优先级低
a = 3*5,a*4; // a = (a = 3 * 5) , a*4;
// 结果a = 15;
//跟a*4 没关系, a*4没有输出
//逗号表达式(逗号运算符)
扩展形式:
表达式1,表达式2,表达式3,表达式4 .. .. .. ..
例如:
int x;
int a;
printf("%d,%d,%d",3,4,5);
五类语句:
在c语言中:
末尾加;构成一条语句
int x ; // 是语句
语句: ;之前的是语句
(1)控制语句: 9种控制语句
(2)函数调用语句:
sizeof(x); //系统函数
(3) 表达式语句:
3+5; //表达式语句, 符合语法规则
int a = 3; // 赋值语句
int i = i + 1; //赋值表达式后边跟分号结尾构成赋值语句。
(4) 空语句:
;
只有一个分号,语法上没有问题。但是没有实际意义。
(5)复合语句
用 [ ] 括起来的语句。
c语言允许一行写多个语句。
例如:
int a =1; int b = 3; int c =3 ; short m = 1;
可以把一个语句拆开成几行写: (注意是需要 \ 才可以)
printf("......., \
这里是第二行内容, \
这是第三行, \
这是第四行 " );
// 要换行必须要使用 \ 才行
程序的三种基本结构
- 顺序结构、
- 选择结构、
- 循环结构、
下面看看这几种结构的特点
顺序结构
printf("1");
printf("2");
选择结构:
if(3>1)
{ printf("3>1");
}
else
{ printf("3<1");
}
循环结构:
当型循环结构:
(先判断条件是否成立,如果不成立则操作一次也不会执行)
int i = 5;
while(i >=0)
{
printf("i = %d",i);
i -= 1;
}
直到型循环结构:
(a条件至少被执行一次,再判断P条件是否为真)
int i = 5;
do
{
printf("i = %d",i);
i -= 1;
} while(i >=0);
派生结构
int k =1 ;
switch(k)
{
case 1:
{
printf("this is a test");
}
break;
case 2;
{
printf("you are so clever");
}
break;
}
赋值语句的特殊写法:
int a ;
a = 5;
printf("a的值是%d",a = 8); // 注意这个地方 a=8;
// a = 8 是再赋值。
printf("a的值是%d",a);
// a = 8 变量值被改变了。
int a = 5; // 除非有特殊需要,不然不好理解。
if((a = 6) > 0)
{
...
...
}