C语言笔记一.docx
- 文档编号:27725121
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:18
- 大小:21.02KB
C语言笔记一.docx
《C语言笔记一.docx》由会员分享,可在线阅读,更多相关《C语言笔记一.docx(18页珍藏版)》请在冰豆网上搜索。
C语言笔记一
8月9日
一.基础回顾
#include
voidmain()
{
printf("helloworld!
\n");
}
/*
c语言的注释:
1.块注释:
关键符号:
/*斜杠+*,
符号成对出现,不能嵌套
2.行注释:
关键符号//
只能注释掉一行代码
*/
//这是行注释
/*
1.c语言程序的基本组成单位:
函数
2.一个c语言程序中必须有,而且只能有1个main函数
main函数是程序执行的入口地址,当程序开始运行的时候,首先从main开始
3.c语言的函数定义的基本格式:
返回值类型函数名(参数列表)
{
函数体(c语言的代码)
}
4.c语言的语句:
必须由分号结束
*/
二.常量和变量
#include
voidmain()
{
inta=6;
intb;
a=10;
}
/*
主题:
常量和变量
1.常量:
出现在程序中的,在程序运行过程中不能改变的量
inta=5;数据5就是常量
2.变量:
在程序运行过程中,能改变的量
变量的实质:
是存储器中的一块空间(容器)
3.常量的定义(声明)
1)符号常量的定义#defineMAX5
2)常规的常量就是出现在语句中的一个数据,
比如:
inta=5;语句中的5就是常量
4.变量的定义
变量定义的格式:
数据类型变量名;
变量在定义的同时可以初始化;
1)变量在使用之前必须定义(一般情况下,习惯放在函数的开头或者文件的开头集中定义)
2)变量必须有名字,变量名:
标示变量占用的是存储器中的那块空间
变量名其实就是变量所占的存储单元的地址
比如:
inta=5;变量名:
a
3)变量名的命名规则:
只能由字母数字下划线组成(在一些特殊的编译环境中,可能还有个别合法的符号),不能用数字开头
变量名区分大小写intStudent;intstudent;Student和student是两个不同的变量
*/
三.数据类型
#include
voidmain()
{
inta=6;
floatf1=2.3;
doublef2=2.6;
charc1='6',c2='b';
}
/*
主题:
基本数据类型
1.常用的数据类型
1)存放数值型数据
数值型数据:
数学上的数据,可以比较大小
分为整数和浮点数(小数)
**整数的数据类型
int
long
short
三种不同的整型类型所占的存储单元的个数不同,
整型数据的变量存储数据的时候,注意:
溢出、
产生溢出的原因:
变量所占的存储单元空间有限,能表示的数据的范围也是有限的。
超出了范围就溢出
**小数的数据类型:
浮点数
double
float
字符型数据:
就是一些符号,本身没有大小,学号里面的数字20140202;20140203;
字符型的常量:
用单引号
标准的c语言中,字符型数据只能是1个符号
'ab','abcd'都是错误的
char
例如:
charc1='6',c2='b';字符型变量c1,存储了一个字符型的常量'6',这里的6只表示符号6,没有数值概念
*/
四:
数据编码
不同类型的数据(基础类型)在内存中怎么存放
#include
voidmain()
{
inta=6,k=-6,l=20;
charc1,c2;
c1='0';
c2='a';
printf("%d,%x\n",a,a);
printf("%d,%x\n",k,k);
printf("%c,%d\n",c1,c1);
printf("%c,%d\n",c2,c2);
printf("%c,%d\n",c2+1,c2+1);
printf("helloworld\n");
printf("helloit'sa\"hahaha\n");//单引号在这里放在了双引号里面,不用再转义了,
}
/*
主题:
基本数据类型的数据编码
1.整数
整数在内存中的编码是以补码的形式存储的
整数的编码分为:
原码,反码,补码
所有的编码,都分为符号位和数值位
最高位都是符号位,正数用0表示,负数用1表示
数值位针对不同的编码有不同的表示
原码:
用数值的二进制码表示
比如,数据6,二进制码是:
110
在字长是8位的机器中(int型数据占8位,1位符号位,7位数值位)
+6的原码编码:
00000110;
-6的原码编码:
10000110;
反码:
是一种过渡编码,是为了求补码
正数的反码:
跟原码一样
负数的反码:
符号位为1,数值位取反。
+6的反码编码:
00000110;
-6的反码编码:
11111001;
补码:
正数的补码:
跟原码一样
负数的补码:
符号位为1,数值位反码+1(原码取反+1)
+6的补码编码:
00000110
-6的补码编码:
11111010(十六进制显示:
fa)
字长增加的情况,大家自己分析
无符号数:
unsignedint
存储空间的所有的位数都用来作为数值位,没有符号位,只能存正数
衍生的问题:
变量存储数据的范围(溢出)
2个字节的int型变量可以存储的数据的范围是:
-2^15~+2^15-1-32768~32767
2个字节的unsignedint可以存储的数据的范围:
0~2^16-1
2.浮点数
把内存空间划分为2块
一块存放底数,一块存放指数
数据123.5689转换成,0.1235689*10^3
底数1235689和指数3被分别存放
底数和指数的存放都是按照整数的编码来存放的
使用浮点数做运算的时候注意不要让两个相差很大的数据做运算,会因为精度原因丢失数据
3.字符数据
字符数据在内存中用专用编码存放:
ASCII码
常用的特殊字符的ASCII码记住,比如字符0,空格,a,A
ASCII码也是些整数
在特殊情况下,char型数据和int可以互通
字符数据可以在一定范围内进行一些简单的加减运算,比如,'a'+1,其实是97+1=98,代表的是字符b
转义字符:
把一些符号的含义进行转换
转义符号:
\,表示出现在\后面的符号,有了新的意义,不再是原来的含义
比如:
\n:
回车换行
这个符号中,转义符:
\后面的n,被转义了,不再是原来的符号n,而是表示回车换行
\':
这个符号中,'原来的含义:
就是字符数据的界定符,转义后,它不再表示界定符,而是就是单引号符号本身
\":
这个符号中,"原来的含义:
就是字符串数据的界定符,转义后,它不再表示界定符,而是就是双引号符号本身
下列语句正确的是:
第三个,第四个
charc;
c="a";c='ab';c='c',c='\n',c="\n"
c='b'+1;c="a"+1;
*/
四.运算符
#include
main()
{
inta,b,c,d,e;
floatf1=4.6,f2=2.3,f3,f4,f5,f6=4.8;
a=10;
b=5;
f3=f1+f2;
printf("%f\n",f3);
/*标准的c语言中,/只能用于整型数据
vc中进行了运算符的重载*/
f4=f1/f2;
printf("%f\n",f4);
/*
%只能用于整型数据,运算符的左边和右边都不能出现浮点数
*/
//f5=f6%f2;
//printf("%f\n",f5);
/*
*/
c=a+++b++;
printf("a=%d;b=%d,c=%d\n",a,b,c);
a=10;
b=5;
c=++a+b++;
printf("a=%d;b=%d,c=%d\n",a,b,c);
a=10;
b=5;
c=++a+(++b);
printf("a=%d;b=%d,c=%d\n",a,b,c);
printf("%d,%d\n",5>3,3>5);
a=5;
b=10;
d=20;
e=30;
c=(e=8>5)&&(d=a>b);
printf("%d,%d,%d\n",c,d,e);
a=5;
b=10;
d=20;
e=30;
/*
&&运算符链接的两个表达式,如果第一个不成立了,第二个就不会被执行判断和了
*/
c=(e=8<5)&&(d=a
printf("%d,%d,%d\n",c,d,e);
a=!
0;
printf("!
0=%d\n",a);
a=!
5;
printf("!
0=%d\n",a);
}
/*
一。
运算符和表达式
1.算数运算符
+,-,*,/,%
++:
变量自增1
--:
变量自减1
1)x++等价于:
x=x+1;
运算符中隐含了赋值操作,赋值操作只能对变量进行赋值
++运算符只能用于变量,不能出现5++这样的表达式
--也是一样的
2)++运算符构成的表达式:
X++<-->++X;两个表达式功能相同,都是x+1;
3)当++运算符与其他运算符结合的时候
y=x++;-->y=x;x=x+1;
y=++x;-->x=x+1;y=x;
还有一些复杂的运算符。
2.比较运算符和逻辑运算符
比较运算符:
><<=>=!
===
比较运算符构成的表达式的运算结果,
表达式成立:
结果为1
表达式不成立:
结果为0;
在c语言中,真和假,对应的是整型的,非0和0
if
(2)表示条件成立
==一定不要和=混了
逻辑运算符:
&&||!
3.条件运算符
三目运算符a==1?
c:
d;
a==1成立否?
如果成立返回c,不成立返回d;
*/
五.输入输出语句
C语言本身不提供输入输出指令,而是要调用函数来实现输入输出功能
#include
main()
{
inta=5;
intb,d;
charc;
printf("hello%04d\n",a);
scanf("%d,%d",&b,&d);
printf("%d,%d\n",b,d);
scanf("%d%d",&b,&d);
printf("%d,%d\n",b,d);
scanf("%d%c%d",&b,&c,&d);
printf("%d,%c,%d\n",b,c,d);
}
8月30日
1.比较表达式
<><=>=!
===
!
&&,||
C语言中的逻辑表达式的运算结果
零(false)和非零(true)
实际上的值:
整数0和1
举例:
if(5)
{printf(“aaa”);}
这里面printf语句会执行
if(5),5被认为是非零
printf(“%d,%d”,4>5,10<12);
输出,0,1,
逻辑表达式的运算
inta=10;
if((10<20)||(a=(5>3)))
{
pintf(“%d”,a);
}
输出的是:
10
在||运算符链接的表达式中,只要前面的条件成立,后面的不会被执行
If((10>20)&&(a=(5>3)))
&&链接的条件,只要前面的不成立,后面的就不在判断
条件表达式对于实际中条件的描述,
多加练习:
1)判断整数k是否是偶数
If(k%2==0)
2)判断字符c是否是大写字母
If((c>=’A’)&&(c<=’Z’))
2.If语句
★单分支:
if(a>10)
{
printf(“aa”);
}
printf(“kk”);
如果a的值是12:
输出aakk
如果a的值是8:
输出kk
★双分支:
if(a>10)
{Printf(“aa”);}
else//else后面不能加条件
{printf(“kk”);}
如果a的值是12,输出aa
如果a的值是8,输出:
kk
Else分支是不能单独存在的
★多分支:
If(a<0)
{Printf(“aa”);}
Elseif(a==0)
{printf(“kk”);}
Else
{printf(“ss”);}
**else,elseif都不能单独存在
Elseif分支可以有多个
Else可以没有,也可以有1个
★难点:
条件的描述要互斥
例如:
把百分制的分数转换成等级制
If(k<60)d=‘E’;
Elseif(k>90)d=‘A’;
Elseif(k>80)d=‘B’;
Elseif(k>60)d=‘D’;
Elsed=’C’;
分析条件的描述存在什么问题?
?
?
?
?
?
?
3.If语句的嵌套
★要避免的第一种情况
If(a>10)
{
If(a<15){}
}
外层分支的条件与内层分支的条件要有交集
★要避免的第二中情况:
If(a>10)
If(a>15)printf(“a>15”);
Else
Printf(“a<10”)
如果a的值为13:
会输出a<10
Else只会跟离它最近的if配对,注意正确的加上{}
改正后:
If(a>10)
{If(a>15)printf(“a>15”);}
Else
Printf(“a<10”)
4.Switch语句
Swtich(k)
{
Case0:
printf(“a”);Break;
Case1:
printf(“b”);Break;
Default:
printf(“c”);Break;
}
K的值为2:
输出c
K的值为1:
输出b
注意:
Switch(变量名),变量只能是简单类型的变量,一般是int,char
Case分支后面:
必须是常量
Case分支后面不用加{},不管有多少条语句
★Break的使用
Switch(k)
{case0:
printf(“a”);
Case1:
printf(“b”);
Break;
Case2:
printf(“c”);
Break;
}
K=0时,输出:
ab;
K=1时,输出:
b
K=2时:
输出:
c
★switch语句表示不相等判断的应用
举例:
百分制转等级制
<60:
不及格
60<=k<70:
及格
70<=k<80:
良好
。
。
。
。
。
。
M=k/10;
Swtich(m)
{
Case0:
Case1:
Case2:
Case3:
Case4:
Case5:
Printf(“不及格”);break;
Case6:
Printf(“及格”);break;
…
Case9:
Printf(“优秀”);break;
Default:
printf(“Error”);break;
}
5.循环:
反复的执行某段代码
for()while()do-while()
1)语句的格式
For(expr1;expr2;expr3)
每个表达式都可以是多个表达式构成的
Exp1执行,一般用来初始化
判断expr2是否成立,如果成立执行循环体,如果不成立,退出循环
循环体执行完毕后,执行expr3
判断expr2….
For(k=0,sum=0;k<10;k++,sum+=k)
Expr1:
k=0,sum=0;
Expr2:
k<10;
Expr3:
k++,sum+=k
注意语法结构:
For(k=0,sum=0;k<10;k++,sum+=k);
For(k=0,sum=0;k<10;k++,sum+=k){}
验证:
k++,sum+=k里面,谁先运行
Sum=0;
For(k=0;k<10;k++)
{sum+=k;}
注意:
循环结束后,k的值?
10
后面如果继续使用K,注意它的值
K=0;sum=0;
for(;;)
{
If(k<10)
{sum+=k;k++;}
Elsebreak;
}
这段代码跟上面的代码效果一样
While(expr)
{
循环体
}
K=0;sum=0;
While(k<10)
{sum+=k;k++;}
注意k的范围:
While(k++<10);
Sum+=k;
Do-while(expr);
注意:
不管条件是否成立,循环体都会被执行至少一遍
语句结束的时候要加上;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 笔记