1.问题:第一个C++程序?
思路:基本结构
#include<iostream>
using namespace std;
int main()
{
}
代码:#include<iostream>
using namespace std;
int main()
{
cout<<"Hello world!"<<endl;
cout<<"This is my first C++ program./n";
}
解释:#include<iostream> 预处理iostream头文件
using namespace std; namespace 命名空间 std 标准
int main() 主函数
{函数体} 大括号内为函数体
cout 输出/cin输入/endl换行//n转义字符(换行)
2.问题:C++程序的注释
思路:C风格注释 /* */
C++风格注释 // 单行,到行尾
代码:#include<iostream> /* #预处理
include<文件名>:插入系统自带的头文件,98年以后头文件不带.h
include "文件名": 插入自己的文件 */
using namespace std; //使用标准命名空间,以防重名
int main() //C++程序执行主函数中的内容,即函数体
{
cout<<"Hello world!"<<endl; //cout:console output的缩写 控制输出
cout<<"This is my first C++ program./n";
}
解释:C++源代码 XXX.CPP XXX.CC
CPP:c plus plus 源文件源程序
方法1:分步编译
编辑:vi hello.cc
编译:g++ -c 结果:生成目标文件hello.o
连接:g++ hello.o 结果:生成可执行文件:a.out
执行:a.out 或 ./a.out
方法2:编译连接一次完成
编辑:vi hello.cc
编译连接:g++ hello.cc 结果:生成可执行文件:a.out
执行:a.out 或 ./a.out
3.问题:输入一个数值,从零开始循环到这个输入数值的次数。
循环内容:输入名字,性别,年龄;输出名字,性别,年龄。
插曲:循环过程中,只要遇到明男,就跳出这层函数体。
思路:cin>>: 输入到放指定数据的地方(内存中)
变量特点:“喜新厌旧”(内存中指定地址的存储单元)
开辟放数据的指定地方:int num,string name,char gender,int age
C风格字符串:char a[] C++风格字符串:string name, 最大1G
代码:#include<iostream>
using namespace std;
#include <string>
string name;
int main()
{ int num;
cout<<" 请输入反复次数:";
cin>>num;
for(int i=0;i<num;i++)
{ char gender;
int age;
cout<<" 请输入你的姓名、性别和年龄:/n";
cin>>name;
if(name=="明男") break; // 如果名字是明男,就跳出这层函数体(让这层循环结束,继续执行下面代码(如果有))
cin>>gender>>age;
cout<<"Name is: "<<name<<endl;
cout<<"Gender is: "<<gender<<endl;
cout<<"Age is: "<<age<<endl;
}
}
解释:cin:console input的缩写 控制输入
4.问题:输入一个数,未对该数初始化,输出;另一个数,未输入,却输出其值。
思路:对变量n初始化,输出;对变量m未初始化,输出。
代码:#include<iostream>
using namespace std;
int main()
{
int n;
int m;
cout<<"请输入一个整数:";
cin>>n;
//cout<<"请输入一个整数:";
//cin>>m;
cout<<"n"<<n<<endl;
cout<<"m"<<m<<endl;
}
解释:未初始化数据为垃圾数据,即m为垃圾数据。不使用垃圾数据。
5.问题:乘客坐公交车,6岁以下为儿童票,免票。6岁以上买票。
思路:1.申请年龄的数据空间,即声明年龄变量。
2.输入数据,即初始化。
3.判断三种情况:
如果年龄<=0,输出为无效年龄;
如果0<=年龄<=6,输出为小朋友不需要购票;
如果6<=年龄,输出为需要购票;
代码:#include<iostream>
using namespace std;
int main()
{
int age;
cout<<"请输入您的年龄:";
cin>>age;
if(age>=0)
{
if(age<=6)
{
cout<<"小朋友不用购票"<<endl;
cout<<"注意不要跟爸爸妈妈走散了"<<endl;
}
else
{
cout<<"您需要购票"<<endl;
cout<<"请保管好您的贵重物品!"<<endl;
}
}
else
{
cout<<"无效年龄"<<endl;
}
}
解释:控制语句:
条件判断语句:if{...};if{...}else{...}
循环语句:for(){...};while(){...};do{...}while()
多路选择语句:switch(){case:...}
6.问题:ASCII码值
思路:无
代码:#include<iostream>
using namespace std;
int main()
{
char ch;
cout<<"input a char:";
cin>>ch;
cout<<"ch="<<ch<<endl;
cout<<"(int):"<<(int)ch<<endl;
cout<<(int)'/0'<<endl;
cout<<(int)'0'<<endl;
}
解释:ASCII码值<=32的字符是不可见的;'0'~'9':48~57;'A'~'Z':65~90;'a'~'z':97~122
7.问题:转义字符的作用
思路:无
代码:#include<iostream>
using namespace std;
int main()
{
cout<<"abcd/ref"<<endl;
cout<<"abcd/bef"<<endl;
cout<<"/a"<<endl;
cout<<"a/t b/t c"<<endl;
}
解释:'/r':(回车符):回到本行开头
'/b':退格符
'/a':响铃符
'/t':制表符
8.问题:变量声明(即,变量定义)
思路:先声明(declared),后使用
代码:#include<iostream>
using namespace std;
int main()
{
signed char c1='A';
unsigned char c2='B';
cout<<"c1="<<c1<<endl;
cout<<"c2="<<c2<<endl;
c1=97;
c2=98;
cout<<"c1="<<(int)c1<<endl;
cout<<"c2="<<(int)c2<<endl;
c1=-1;
c2=-1;// 可以写成c2=(char)-1;就没有警告了
cout<<"c1="<<(int)c1<<endl;
cout<<"c2="<<(int)c2<<endl;
}
解释:1.类型保留字(类型关键字):保留字(关键字)由一些特殊字符组合而成的,在代码输入中会变色(在Micorsoft visual c++编译器中),关键字是标准C++定义的。
字符型:char(character的缩写), unsigned char, signed char
整型:int(integer的缩写), unsigned int, signed int, short int, unsigned short int, signed short int, long int, signed long int, unsigned long int,
实型:float, double, long double(小数变量)
布尔型:bool(逻辑变量类型)
无类型:void,如void main(){}
其他类型:enum(枚举类型),struct(结构类型),union(联合类型),array(数组类型),pointer(指针类型),class(类)
2.变量(identifier)命名规则:
1.第一个字符必须是字母或下划线(最好用字母开头,因为库中的函数以下划线开头)
2.中间不能有空格
3.只能使用字母,数字,或下划线
4.严格区分大小写
5.长度一般不要超过32个字符(最好见文知意,如:学生名:StuName)
6.避免名字冲突,也不要和关键字和函数名重复
3.char[整数]C风格的字符串,C++完全包含C,但尽量用C++风格的类型
string:C++ 风格的字符串,但它不是基本类型(需要#include<string>,即需预编译string头文件)
4.signed int 可正可负(符号位: 用来表示是否为负数);unsigned int 非负整数
int的左边有long/short/signed/unsigned 修饰的时候可以省略"int"字符
5.-1在内存中为“11111111”,补码表示法(正的反,反的加1)
9.问题:固定变量值,const用法
思路:无
代码:#include<iostream>
using namespace std;
int main()
{
double const pi=3.1416;
const double PI=3.1416;
cout<<"pi="<<pi<<endl;
cout<<"PI="<<PI<<endl;
}
解释:1.double const pi=3.1416; 或者const double pi=3.1416; 皆可
2.assignment 赋值/variable 变量/read-only 只读
3.在常量或变量在定义时就指定值叫做初始化,而定义之后再从新放入数据就叫做赋值;对于变量没有初始化就是垃圾数据
常量必须初始化
10.问题:取数据类型的长度(即,所占用数据空间)
思路:无
代码:#include<iostream>
using namespace std; int main()
{
long double a=100;
cout<<"sizeof(a)="<<sizeof(a)<<endl;
cout<<"a="<<a<<endl;
}
解释:只针对类型,不针对数据
11.问题:运算关键字的应用
思路:无
代码:#include<iostream>
using namespace std;
namespace lionking{
int g=100;
}
int g=200;
int main()
{
int a=9;
float b=1;
float c=0.99999;
int g=300;
cout<<"3/2="<<3/2<<endl;
cout<<"3%2="<<3%2<<endl;
cout<<"g="<<g<<endl;
cout<<"lionking::g="<<czq::g<<endl;
cout<<"::g="<<::g<<endl;
//++5;//ERROR!!
++a;//加后,存到数据空间中
cout<<"a="<<a<<endl;
cout<<"a="<<++a<<endl;//先加后取值,存到数据空间中,输出
a++;//加后,存到数据空间中
cout<<"a="<<a<<endl;
cout<<"a="<<a++<<endl;//先取值,输出,后加,存到数据空间中
cout<<"b-c="<<b-c<<endl;//近似值的科学计数法
cout<<"&a="<<&a<<endl;
*&a=7;
cout<<"a="<<a<<endl;
cout<<~0<<endl;
cout<<(a<<2)<<endl;
cout<<a<<endl;
cout<<"a=a+50"<<a=a+50<<"a+=50"<<a+=50<<endl;
}
解释:1.运算符保留字:
+,-,*,/,%,::
++,--,=
==, >, <, >=, <=, !=
!, &&, ||
& | ^ ~ << >>
2.'/':整数相除的时候只保留整数部分
'%':取余数。列:x%100:0~99
'::':成员运算符:A::B表示A中定义的B
'++','--','=':只有这三个运算符改变变量的值;只能用于变量
'==','!=':相等和不等于;计算机中小数只能用近似表示
'&&','||':逻辑与( 而且)和逻辑或(或者)
'&&':真&&真=真;真&&假=假;假&&真=假;假&&假=假;
'||':真||真=真;真||假=真;假||真=真;假||假=假;
'&':取地址,内存的地址就是一个编号;如果一个变量占了很多字节,那就从第一个字节取
'*':通过地址找变量,即取指针指向的变量;而x*y则表示乘号
'&','^','|':(?)
& 按位相与 ^ 按位异或(与&正好相反) |按位或(只要有1个是1就是1)
0 0 1 1 0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1 0 1 0 1
-------- -------- --------
0 0 0 1 0 1 1 0 0 1 1 1
'~':非:按位取反。例:~0是-1
'<<'(左移):<<n 相当于乘于2的n次方
'>>'(右移):>>n 相当于除于2的n次方(unsigned 右移后左补0;signed 右移后左补符号位)
'A?B:C':三目运算符(条件运算符):如果A为真,就计算B;如果A为假,就计算C;
用来代替简单的if...else... 语句 。如: 闰年?366:365
3.相等表示法:如:a=a+50<=>a+=50;a=a*3 <=>a*=3;a=a<<5<=>a<<=5
12.问题:闰年计算(包含'&&','||'计算)
思路:1.判断闰年:(能被4整除但不能被100整除)||能被400整除?
2.'A?B:C;':三目运算符
代码:#include<iostream>
using namespace std;
int main()
{
int a;
cout<<"请输入年份:";
cin>>a;
((a%4==0&&a%100!=0)||a%400==0)?cout<<"这一年是闰年"<<endl:cout<<"这一年不是闰年"<<endl;
}
解释:'A?B:C;'中:号左右的类型要一致