C++ 学习笔记.docx
《C++ 学习笔记.docx》由会员分享,可在线阅读,更多相关《C++ 学习笔记.docx(72页珍藏版)》请在冰豆网上搜索。
![C++ 学习笔记.docx](https://file1.bdocx.com/fileroot1/2023-8/4/0beec4bc-cba6-4fd8-ad4e-fe737fbb1527/0beec4bc-cba6-4fd8-ad4e-fe737fbb15271.gif)
C++学习笔记
C++学习笔记
第一章程序设计基本概念
1.1.2程序设计
1.确定数据结构
2.确定算法
3.编码
4.在计算机上调试程序
5.整理并写出文文件资料
1.2算法
定义:
是指为了解决某个特定的问题而采取的确定且有限的步骤。
1.有限性
2.确定性
3.可行性
4.
有零个或多个输入一个程序可以没有输入但是一定要有输出
5.有一个或多个输出
1.3结构化程序设计和模块结构
结构化程序由三种基本结构组成
1.顺序结构
语句1
语句2
2.选择结构
不满足
判断表达式
语句2
语句1
3循环结构
(当性循环结构)
判断表达式
满足
循环体
(直到性循环结构)
循环体
满足
判断表达式
不满足
习题:
1、计算机能直接执行的程序是(B)
A.源程序B.目标程序C.汇编程序D.可执行程序
2、下列叙述中正确的是(D)
A.程序设计的任务就是编写程序代码并上机调试
B.程序设计的任务就是确定所有数据结构
C.程序设计的任务就是确定所用算法
D.以上三种说法都不完整
第二章程序的设计初步了解
2.1C语言程序的构成和格式
#include
Main()
{
Doublea,b,area;
a=1.2,b=3.6;/*将矩形的两边长分别赋给a和b变数*/
}
#include:
每当写一个程序时,第一条语句永远是这条语句,因为一个程序可以没有输入但必须有输出,而这个语句就是控制输入和输出的。
所以任何一个程序都必须由这个语句开始。
main():
是一个程序的主函数。
一个程序是由多个函数组成的,而任何一个程序都要有一个主函数,有且只有一个。
任何程序都是由主函数开始执行的。
{}:
它们两个必须要成对出现,它们中的语句是主函数体。
包括定义部分和执行部分。
它们中的语句,每一条必须由;结束。
;是C语言的一个组成部分而不是一个结束标识。
/**/:
注释符一定要成对出现,不允许嵌套。
两个符号间的语句不被执行。
2.2标识符,常量和变数
2.2.1标识符:
定义:
由字母,数字和下划线组成,并且第一个字符必须为字母或下划线的。
这样的组成就是标识符。
注意:
在C语言中大写字母和小写字母被认为是两个不同的字符。
分类:
在C语言中已经定义好了的,不能当作其它来用了。
如:
ifdoubleint等等。
预定义标识符:
如printfscanf
用户标识符:
用户根据自己的需求来定义的
2.2.2常量:
定义:
是指在程序的执行过程中,其值不会被改变的量。
分类:
整数常量:
没有小数的常量。
如:
391234
实型常量:
有小数的常量。
如:
3.93.03.
字符常量:
由单个字符组成的量。
如:
’a’‘b’
字符串常量:
至少由一个字符组成的量。
如:
”a”“abc”“beijng”
符号常量:
符号常量的值到底是多少,这是由在来定义符号常量时来决定的。
2.3整型常量与实型常量
整型常量的几种表示方法
十进制数:
由0–9组成
八进制数:
以0开头的数字,由0-7组成。
十六进制数:
以OX开头,由0–9和A-F组成。
实型常量123.4
小数形式:
123.4
指数形式:
1.234e2
1.字母e和E之间必须要有数字
2.字母e和E之后的数字必须是整数
3.字母e和数字之间不能有空格
2.2.4变数
变数
1.定义:
在程序的运行过程中其值可以被改变的量,就叫做变量。
2.原则:
变量必须先定义后使用。
变量定义的过程就是给变量开辟存储单元的过程。
3.分类:
整型变数:
用关键词int来表示。
shortint短整型
longint长整型在内存中占4个字节如123L
unsigned无符号如有-200U这就是错的
变量的定义:
inta这是定义了一个整型变量a
实型变数:
用关键词double或float来表示。
float单精度在内存中占4个字节
double双精度在内存中占8个字节。
算术表达式
一、基本的算术运算符
+-*/%这些是双目运算符(就是指操作对象有两个)
注意:
除%外,其它的运算符的运算对象可以是整型也可以是实型。
%的操作对象只能是整型。
如:
10%3=110.3%310%4.5
+-也可以做为单目运算。
-5.4+4.9
说明:
1.如果双目运算符两边运算数的类型一致,则所得结果的类型与运算数的类型一致。
如1.0/2.0=0.51/2=0
2.如果双目运算符两边运算数的类型不一致,则系统会自动进行类型转换,使两边的类型一致后,再进行运算。
1.0/2=0.5
是正负符号,是单目运算,高于
双目运算级
3.所有的单精度数据,在运算过程中都以双进度进行运算。
二、优先级
()+-*/%+-
没有优先级的,它们的运算等级是一样的
由高低
如5+1/2=5
解析:
1/2=0
5+0=5
前面的类型名小括号必须得有,当表达式的式子是一个时,表达式的小括号可有可无,但是表达式的式子是多个时,表达式的小括号就一定得有。
(5+1)/2=3
解析:
(5+1)=6
6/2=3
总结
2.5.3强制类型转换表达式
格式:
(类型名)(表达式)
例如:
(int)(3.234)=3
(double)10%3=
解析:
先把10转换为双精度然后再%3
表达式:
(int)((double)9/2)-(9)%2的值是(B)
A.0B.3C.4D.5
解析:
因为:
(int)((double)9/2)=4
(9)%2=1
所以:
4-1=3
设变量已正确定义并赋值,以下正确的表达式是(C)
A.x=y*5=x+zB.int(15.8%5)C.x=y+z+5,++yD.x=25%5.0
少了小括号
2.6赋值表达式
格式:
变量名=表达式
注:
1.不可以颠倒(左边必须是变量名,右边必须是C语言中合法的表达式)
2.功能就是先求出右边表达式的值,然后把此值赋值给赋值号左边的变数。
确切的说是把数据库存入以该变量为标识的存储单元中去。
3.结合性的优先级级高于逗号表达式。
顺序是自右向左的。
如a=2+7/3
4.“=”是一个赋值号,不是一个等号。
5.x=y。
变量的值也是可以传递和赋值的,它的意思就是将变量y中的值赋值到x中去。
同样N=N+1也成立
6.赋值运算符的左侧只能是变量,不能是常量或表达式a+b=c这样是违法的
7.赋值号的右边也可以是一个赋值表达式。
如a=b=7+1
补充:
表达式与语句的区别,
表达式后面加一个分号就是语句。
2.6.2复合赋值表达式
格式:
a+=3-------a=a+3同理可得a*=3/=-=
例如:
a+=a-=a+aa的初始值是9
解析:
a+=a--=18
a+=(a=a-18)
a+=(a=-9)
a+=a
-18
2-9++和--的讲解
++:
自身加1
--:
自身减1
注:
++--是单目运算的
当++在前,先自身加1,然后再干别人干的事。
当++在后,先别人让干的事情然后再自身加1
2-10、逗号表达式
一、定义:
用逗号表达式连接起来的式子称为逗号表达式。
二、格式:
表达式1,表达式2,……,表达式N
三、说明:
1、逗号运算的结合性为从左边到右边进行运算,逗号表达式的值是最后一个表达式的值。
2、在所有运算符中,逗号运算符的优先级最低。
例题:
inti=5
inta,b,c
a=(i+8,7,i+7);a=12i=5
b=(i++,++i);b=7i=7
c=(i+7,i++);c=5i=6
3-1、输出语句的讲解
输出语句
一、printf函数的一般调用形式
格式:
printf(格式控制,输出项1,输出项2,……)
在printf函数的最后面写上;号就是输出语句。
1、给输出项白提供输出格式说明
格式说明符:
作用:
就是使数据按格式说明的要求进行输出
组成:
由%号和紧跟在其后的格式描述符组成。
int--------%d
float或double----%f或e%
char-----%c
2、提供原样输出的文字或字符
在”“中除了格式说明符和传译字符之外的内容要全部原样输出
各个输出项之间要用逗号隔开。
输出项可以是任意合法的常量,变量或表达式。
printf中常用的格式说明
需要被的
在格式说明符中,每一个格式说明符都必须以%号开头由相应的类型标识字母结束。
但在他们之间可以有其它的一个内容
%c:
输出一个字符
%d:
输出一个十进制的数据
%o:
以八进制格式输出
%X:
以十六进制输出
%U:
无符号十进制输出
%f:
以带小数点的数字输出
%e:
以指数形式输出
%s:
输出一个字符串
%%:
输出一个%号
%4d:
输出的数据长度是4个长度,当原来的长度大于4个时会自动突破。
小于4个时会填充空格。
%x.yf:
X代表数制的宽度(包括小数点)。
Y代表小数点后面的小数字数
注意事项:
1、输出比较自由一些,输出有的各个数字到底是什么,取决于格式说明符之间的内容。
2、格式说明符要与输出项一一对应。
3、输出语句中还可以有\n\r\t\a
4、尽管不要在输出语句中改变输出变量的值。
5、输出的数据中如果存在变量,一定要定义过的
3-6、输入语句的讲解
输入语句
格式:
scanf(格式控制,输入项1,输入项2……);
例如:
想通过键盘输入3个数分别给变量a,b,c.并且他们分别为整型,浮点型,双精度型。
输入语句为scanf(“%d%f%lf”&k,&a,&y);
说明:
1、格式说明符与输出语句一样。
(也就是%d呀,%f之类的,一样)
2、在格式串中,必须含有与输入项一一对应的格式转换说明符
3、在VC6.0的环境下,要收输入的DOUBLE型数据的格式说明符一定要用%if,否则数据不能正确输入。
4、由于输入是一个字符流,所以当输入的数据少于输入项时,程序会等待用户输入,直到满足要求。
当输入的数据多于输入项时,多余的数据会自动作废。
复合语句:
多个语被{}括起来,当成一条语句来执行。
空语句:
最后的表示只有一个;
4-1、关系运算与逻辑运算
关系运算与逻辑运算
一、简介:
关系表达式与逻辑表达式的运算结果都会得到一个逻辑值。
就是“真”、“假”
单“=”是赋值,双“==”是比较
在C语言中0表示“假”,非0(无论是负数还是正数都是真,更多时候用1来代替)表示真。
不等于
二、几个简单的关系运算符
<<=>>===!
=
注意:
1、由两个字符组成的运算符,中间不能有空格
2、它们都是双目运算符,且有自左至右的结合性。
3、上面的6个运算符中,前4个的优先级要比后2个的优先级要高。
先计算,后判断,最后进行赋值运算。
三、几个简单的逻辑运算符
运算优先级
&&与一假则假
||或一真则真
!
非非假则真,非真则假
1&&2=1
0&&6=0
inta=4,b=7
a&&7=1
intx=0,y=7
x++&&y++?
x=1y=7
++x&&y++?
x=1y=8
同样放在||中也是一样。
|
if语句
一、定义:
只有两个结果。
要么执行这条语句,要么执行那条语句。
if(条件表达式)
上述条件成立执行的句子
else
上述条件不成立执行的句子。
如:
if(成绩>60)
显示及格
else
显示不及格
二、分类
1、不含有else的语句
if(表达式)语句
2.含有else的语句
if(条件)
语句1;
else
{
语句2;
语句;
}
注:
1、if(条件)后面没有分号
2、控制的是与if或者else紧临的“一条”语句。
如:
if(a
printf(“%d”,b);
else
printf(“%d”,a);
#include
main()
{
Inta,b,c,t;
printf(“inputa,b,c:
”);
scanf(“%d%d”,&a&b&c);
printf(“a=%d,b=%d,c=%d\n”,a,b,c);
if(a>b)
{
t=a;a=b;b=t;}
if(a>c)
{t=a;a=c;c=t;}
if(b>c)
{t=b;b=c;c=t;
}
printf(“%d,%d,%d”,a,b,c);
}
5,7,22,7,52,5,7
4,1,81,4,8
嵌套的if语句
成绩分为>90<90&&>60<60
if(成绩>60)
if(成绩>90)
优
else
良
else
差
输入一个学生的成绩,评定他的等级。
每十分一个等级
if(a>=90)printf(“a”);
elseif(>=80)printf(“b”);
elseif(>=70)printf(“c”);
elseif(>=60)printf(“d”);
elseprintf(“e”);
4-6、条件表达式
条件表达式
是C语言中唯一的一个三目运算
格式:
表达式1?
表达式2:
表达式3
当成立(非零时)时,表达式的值就是2的值,否则就是3的值。
如:
1.1<2?
4:
5
2.printf(“%d”,x<0?
(-1)*++x:
x++)(假定x的值为3)
3.x++>3?
(x<3?
a:
b:
):
b(假定x的值为3)
case与常量之间有空格
4-7、switch语句
switch(表达式)
{
case常量表达式1:
语句1
case常量表达式2:
语句2
case常量表达式3:
语句3
case常量表达式3:
语句4
……
case常量表达式N:
语句N
}
5-1、while语句
while语句
一、格式:
while(表达式)
循环体
注:
1、while是一个关键词,不能再去使用
2、while后面的表达式不能丢,小括号也不能丢,其表达式是任意的,表达式都可以。
3、循环体while控制语句是其相邻的语句,如果,我们想执行多条语句的话,我就需要把这些多条语句变成复合语句来执行。
例如:
1+2+3+4+5……100求和
inti,sum;
i=1;sum=0;
while(i<101)
{sum=sum+i;
i++;}
printf(“%d”,sum);
优化while语句
inti=1,sum=0
while(i<101)
sum=sum+i++
printf(“%d”,sum);
从1开始加到那个数时它们的和将超过1000?
inti=1,sum=0;
while(sum<1000)
{sum+=I;
i++;}
printf(“%d”,--i);
注:
当什么什么时的时候,我们尽可能的使用while语句,while语句看上去是比较清晰的。
dowhile语句
dowhile()
格式:
do
循环体
while(表达式)
如:
1235813
inta1=1,a2=2;
do
{a3=a1+a2;
a1=a2;
A2=a3;
}while(a3<1000);
注:
1、对于dowhile语句的话,循环体至少循环1次。
2、对于dowhile语句的后面要有;号的,而while语句是没有那个分号的。
for语句和for语句构成的循环结构
一、格式:
for(表达式1;表达式2;表达式3)
循环体
相当于while语句的
表达式1;
while(表达式2)
{
循环体;
表达式3;
}
for(k=0;k<10;k++)
printf(“*”);
intk=0;
while(<10)
{
printf(“*”);
k++;
}
注:
1、表达式可以省略,但分号不可以。
2、表达式可以是任意有效的C语言表达式。
1+2+3+4+……+100求和
#include
main()
{
intI,sum;
for(i=0,sum=0;i<=100;i++)
sum+=I;
}
2+4+6+8+……+100
intI,sum=0;
for(i=2;i<=100;i++,i++)或for(i=2;i<=100;i+=2)
sum+=i;
素数:
只能被和他本身整除。
这样的数叫做质数。
break:
终止了break所有的當層循環體的執行。
continue:
跳過循環體continue下面的語句返回到循環開始的地方進行下次循環。
如:
S=1+2+3+4+……+i
>500時,求i的值
Main()
{
inti=1,s=0;
for(;;i++)
{
s+=i
if(s>5000)
break;
}
printf(“s=%d,i=%d”,s,i);
}
第六章、字符型數據
字符型常量
格式:
’a’‘a’‘’
要求:
1、單引號中的大寫字母和小寫字母代表不同的字符常量。
2、單引號中的空格也是一個字符常量,但不能是兩個連續的單引號
3、字符常量只能用單引號括起來,不能用雙引號。
轉義字符
\n代表回車
\’代表一個單引號
\\代表一個\
\\’’代表一個雙一號
注意:
1、轉義字符常量,如’\141’只代表一個字符
2、反斜線后的8進制數可以不用0開頭。
如1中所講的141就是一個8進制數。
0141
3、反斜線后的16進制數只可以用x開頭,不可以用X開頭。
字符串常量
格式:
由雙引號括起來的一串字符。
同時也要知道“A”和’A’是不一樣的
注:
單引號里的內容有且只有一個如,’a而’abc’就是錯誤的;但是”abc”就是真確的,因為它是字符串雙引號。
ACSⅡ嗎
A65a97
字符變量
定義:
char是一個字符變量
格式:
chara=’s’
字符的輸入和輸出
printf和scanf函數輸出和輸入字符
對於字符型數據的格式說明符是%c
charc=’a’
printf(“%c”,c);
chara,b,c,d;
scanf(“%c%c%c”,&a,&b,&c);
程序舉例
寫出26個大寫字母和他們的ASCⅡ代碼要求每行輸出兩組數據。
#include
main()
{
charch;inti
for(i=0;i<26:
i++)
{
ch=i+65;
if(i%2==0)
printf(“\n”);
printf(“c=%c,ASCⅡ=%d”,ch,ch);
}
}
在上面的程序中有對於字符的輸入與輸出,在C語言中也有另外的輸入輸出字符的語句。
這兩個函數只能用於字符
輸入:
變量名=getchar()
輸出:
putchar(變量名)
若變量已經正確說明,要求用以下語句給C1賦予字符%,給C2賦予字符#,給a賦予2.0,給b賦予4.0,則正確的輸入形式是C
A)2.0%4.0#B)2.0%4.0#
C)2%4#D)2%4
scanf(“%f%c%f%c”,&a,&c1,&b,&c2);
第七章、函數
分類:
庫函數
自定義函數
作用:
爲了解決固定問題而寫的程序。
擋在其它程序中也要解決相應的問題時,就不用再重新編寫了。
提高了程序的效率。
7.1、庫函數
1、調用C語言標準庫函數時要求的include命令行
include命令行必須以#開頭,系統提供的頭文件以h作為文件的後綴,文件名用一對尖括號(需要注意include命令行不是c語句,因此不能在最後加分號)
3、標準庫函數的調用
函數名(參數表)
如:
putchar(ch)
⑴出現在表達式中------printf()
⑵作為單獨的語句完成某種操作。
-------printf(“*******”);
7.2、函數的定義和返回值
由於C語言中的定義的函數不能完成用戶所有的要求,所以用戶可以為自己定義函數實現相應的功能。
7.2.1函數定義的語法
1、格式:
函數返回值的類型名函數名(類型名形式參數1,類型名形式參數2……)
{
說明部份
語句部份
}
2函數名和形式參數都是用戶命名的標誌符。
在同一個程序中,函數名必須唯一,形式參數名只要在同一函數中唯一即可,可以與其他函數中的變量同名
3、C語言規定,不能在函數的內部定義函數
4、若在函數的首部省略了函數返回值的類型名,則說明該函數的返回值是int類型
5、除了返回值類型為int類型的函數外,函數必須先定義後調用。
6、當沒有函數返回值,則必須把函數定義成void類型。
例:
編寫求兩個雙精度之和的函數。
doulbeadd(doublea,doubleb)
{
doubles:
s=a+b;
retums;
}
7.2.2、函數的返回值
函數的值通過retum語句返回,
retum表達式;
此表達式的值必須與函數首部所說明的類型一致,若類型不一致,則以函數值的類型爲準。
需要注意的是,無論函數體中有多少個retun語句,只能執行一次。
函數體內可沒有retum語句,這時也必須定義函數為viod類型。
7.3、函數的調用
7.3.1、函數的兩種調用方式
格式為:
函數名(實在參數表)
當實參的個數多餘一個時,各實參用逗號隔開。
實參的個數必須與調用函數中形參的個數相同,類型一一對應匹配。
如沒有形參,則形式為函數名()注意後面的小括號不能丟。
如題:
#include
doubleadd(double,double);
main()
{
doublem,n,z;
scanf(“%lf%lf”,m,n);
z=add(m,n);
printf(“%ld”,z);\
}
doubleadd(doublea,doubleb)
{
doubles;
s=a+b;
retums;
}
7.3.2、函數調用時的語法要求
1、調用函數時,函數名必須與所調用的函數名字完全一致。
2、實參的個數必須與形參的個數一致。
3、C語