一.C++初识
1.第一个程序
#include<iostream>
using namespace std;
int main()
{
cout <<"hello world"<<endl; //endl作用换行
system("pause");
return 0;
}
2.注释
单行注释://
多行注释:/* */
3.变量(给一段指定内存空间起名,方便操作这段内存)
数据类型+变量名=变量初始值 eg:int a=10
4.常量(记录不可更改的数据)
(1)宏定义#define eg:#define a 10
(2)const修饰的变量 eg:const int a=10
#include<iostream>
using namespace std;
#define day 7 //常量不可修改,修改会报错
int main()
{
cout <<"one week have"<<day<<"day"<<endl;
const int month=12;
cout <<"one month have "<<month<<" month"<<endl;
system("pause");
return 0;
}
5.关键字:不可用作常量名或变量名,比如 int, long, auto等
6.标识符命名规则
标识符不能是关键字,只能由字母、数字、下划线组成,且第一个字符不能为数字,字母区分大小写
二.数据类型
数据类型存在的意义就是给变量分配合适的内存空间
1.整形(表示整数类型的数据)
int(整形):4字节 short(短整型):2字节 long(长整型):4字节 long long
2.sizeof关键字
利用sizeof统计数据类型所占内存大小,sizeof(数据类型/变量)
#include<iostream>
using namespace std;
int main(){
short num=10;
cout<<"int所占内存为 "<<sizeof(int)<<endl;
cout<<sizeof(num)<<endl;
return 0;
}
3.浮点型(表示小数)
单精度float:4字节 双精度double:8字节
科学计数法:3e2(表示3*10^2)
4.字符型char
char ch='a';//显示字符变量要用单引号括起来,单引号内只能有一个字符
字符型变量只占用一个字节
#include<iostream>
using namespace std;
int main(){
char ch='a';
cout<<ch<<endl;
cout<< sizeof(ch)<<endl;
cout<< int(ch)<<endl;//强制转换为整型
return 0;
}
5.转义字符(用于表示一些不能显示出来的ASCII字符)
#include<iostream>
using namespace std;
int main()
{
cout <<"hello world\n";
cout <<"\\"<<endl;
cout <<"hello\tworld"<<endl;
system("pause");
return 0;
}
6.字符串型(用于表示一串字符)
c语言风格:char 变量名[ ]="字符串值"
c++风格:string 变量名="字符串值"
#include<iostream>
using namespace std;
#include<string>//包含这个才能使用c++风格字符串
int main()
{
char str1[]="hello";//c语言风格
cout <<str1<<endl;
string str2="world";//c++风格
cout <<str2<<endl;
return 0;
}
7.布尔类型bool
true(真本质为1),false(假本质为0),占一个字节大小
bool flag = true; cout<<flag<<endl;//输出1
布尔类型非0的数值都代表1,只有数值为0输出才为0
8.数据输入cin
cin >> 变量
#include<iostream>
using namespace std;
int main(){
int a;
cout<<"result of a"<<endl;
cin>>a;
cout<<"result is "<<a<<endl;
return 0;
}
三.运算符
1.算数运算符(用于处理四则运算)
前置递增/递减:先自增/减,后取值 后置递增/递减:先取原值,后自增/减
2.赋值运算符
3.比较运算符(比较表达式,返回一个真值或假值)
cout << ( a == b ) <<endl;//用括号括起来表示优先级
4.逻辑运算符
与:&& 若a和b都为真,则结果为真,否则为假
或:|| 若a和b有一个为真,则为真,否则为假
非:! 若a为真,!a则为假
四.程序流程结构
1.选择结构
(1)if语句
if(条件1) {条件1满足后执行语句} //if条件后不加分号
else if(条件2) {条件2满足执行语句}
else(条件1、2不满足) {条件1、2不满足执行语句}
还可在if语句能嵌套一个if语句(嵌套if语句)
#include<iostream>
using namespace std;
int main(){
int score;
cout<<"input socre"<<endl;
cin>>score;
cout<<"score is "<<score<<endl;
if(score>600)
{
cout<<"you are success"<<endl;
}
else if(score<600&&score>500)
{
cout<<"you are good"<<endl;
}
else
cout<<"sorry"<<endl;
return 0;
}
(2)三目运算符
表达式1?表达式2:表达式3
//若表达式1为真,则执行表达式2,否则执行表达式3
(3)switch语句
#include<iostream>
using namespace std;
int main(){
int a;
cin>>a;
switch(a){
case 100:
cout<<"good"<<endl;break;
case 50:
cout<<"just so so"<<endl;break;
default:
cout<<"sorry"<<endl;break;
}
return 0;
}
2.循环结构
(1)while循环
while(条件) {执行}
//括号里面的条件成立为1时执行接下来的语句;循环要避免死循环
#include<iostream>
using namespace std;
#include<ctime>
int main(){
srand((unsigned int)time(NULL));
int num=rand()%101;//生成0~100的随机数
int input1;
int n=1;
while(n<=5){
cin>>input1;
if(input1>num)
cout<<"big"<<endl;
else if(input1<num)
cout<<"small"<<endl;
else{
cout<<"you are right"<<endl;
break;
}
n++;
}
return 0;
}
(2)do while循环
do{语句}while(条件)
//先执行do内的语句再判断,判断正确后输出
#include<iostream>
using namespace std;
int main(){
int num=100;
do{
int a=num/100;
int b=num%100/10;
int c=num%10;
if(num==a*a*a+b*b*b+c*c*c){
cout<<num<<endl;}
num++;
}while(num<1000);
return 0;
}
(3)for循环
for( 起始表达式 ; 条件表达式 ; 末尾循环体 ) { 执行语句 }
#include<iostream>
using namespace std;
int main(){
for(int i=1;i<=100;i++){
int a=i/10;
int b=i%10;
int c=i%7;
if(a==7||b==7||c==0)
cout<<i<<endl;
}
return 0;
}
(4) 嵌套循环
#include<iostream>
using namespace std;
int main(){
int i,j;
for(i=1;i<10;i++){ //外层循环
for(j=1;j<=i;j++) //内层循环
cout<<j<<"x"<<i<<"="<<j*i<<"\t";
cout<<"\n";
}
return 0;
}
3.跳转语句
(1)break语句(用于跳出选择结构或循环结构)
使用时机:switch语句中终止case;跳出当前循环语句;嵌套循环跳出最近内层循环。
(2)continue语句
执行到continue,不再执行接下来语句,之间进行下一次循环
(3)goto语句(少用,以免造成混乱)
goto 标记;
...
标记:...
五.数组
1.数组:即一个集合,存放相同数据类型的元素,数组是由连续的内存位置组成的
2.数据类型 数组名[数组长度]={值1,值2....}
3.可以通过下标和指针间接访问数组中的元素,例如arr[1]
和*arr+1
都是表示数组arr的第二个元素
4.若在初始化数组的时候定义了数组长度但未全部填写完数组内所有元素,会用0填补剩下元素;若未定义数组长度,则数组长度会根据数组内元素个数来自动定义
5.数组名的作用:
(1)可以统计整个数组在内存中的长度,例如sizeof(arr)
(2)可以获取数组在内存中的首地址,数组名表示的是数组内第一个元素在内存中的地址
注:数组名是一个常量,不可以进行赋值操作
#include<iostream>
using namespace std;
int main(){
int arr[5];
for(int j=0;j<5;j++)
cin>>arr[j];
int start=0;
int end=sizeof(arr)/sizeof(arr[0])-1;
while(start<end)
{
int temp=arr[start];
arr[start]=arr[end];
arr[end]=temp;
start++; end--;
}
end=sizeof(arr)/sizeof(arr[0])-1;
for(int i=0;i<=end;i++)
cout<<arr[i]<<endl;
return 0;
}
6.冒泡排序
比较相邻元素,如果第一个元素比第二个人大,则二者交换,对每一对相邻元素做相同工作,执行完毕后,找到第一个最大值,重复,每次比较次数-1,直到结束
#include<iostream>
using namespace std;
int main(){
int arr[6]={5,3,2,6,7,9};
int temp;
for(int i=0;i<5;i++)
for(int j=0;j<5-i;j++)
if(arr[j]>arr[j+1])
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
for(int n=0;n<6;n++)
cout<<arr[n];
return 0;
}
7.二维数组
数据类型 数组名[行数][列数]={{数据1,数据2},{数据3}{数据4}}
(1)二维数组中的行数可以省略,列数不可省略,初始化后行数会自动定义
(2)二维数组的数组名可用来查看数组所占内存空间( sizeof(arr)查看第一个所占内存,sizeof(arr[0])可以查看第一列所占内存);也可以用来查看数组的首地址(arr查看首地址,arr[0]查看第一行首地址)