C++引言
C++程序的基本框架
(1)结构化程序设计框架:基本组成单元是函数
(2)面向对象程序设计框架:基本组成单元是类
C++基础知识
1、变量命名规则及其变量初始化
例如:double rate=0.07;或double rate(0.07);
2、基本输入输出
通过标准库中的输入/输出流对象cin和cout来完成
3、数据类型和表达式
(1)逻辑型bool,取值范围为true和false(C中没有该数据类型)字符型char
整型int
浮点型float和double
(2)算术运算符和算术表达式注意:++、--、%运算符
(3)关系运算符和关系表达式注意:==和=之间的区别
(4)逻辑运算符(!、&&、||)和逻辑表达式
4、选择语句与循环语句
(1)选择语句:if语句和switch语句
(2)循环语句:for语句、while语句和do-while语句
注:while语句和do-while语句循环体一定要改变循环控制变量
例1、bool类型
#include
using namespace std;
void main()
{
bool a;
cin>>a;
cout< } 例2、:表达式计算 (1)(float)(a+b)/2-(int)x%(int)y 设a=2,b=3,x=3.5,y=2.5 答: 按优先级先计算强制类型转换:(float)(a+b)/2=5.0 /2=2.5 (int)x%(int)y=(int)3.5%(int)2.5=3%2=1 最后计算(float)(a+b)/2-(int)x%(int)y=2.5-1=1.5 (2)'a'+x%3+5/2-'\24' 设x=8 'a'+x%3+5/2-'\24'=97+8%3+5/2-24=97+2+2-20=81 ‘\24’为八进制,‘\24’=024(八进制)=2*8+4(十进制)=20(十进制) 'a'的ASCII码为97 例3、 #include void main(void) { int i,j,m,n; i=8;j=10; m=++i;n=j++; //i=9 m=9 ,n=10 j=11 cout< cout< } 例4、逗号表达式。设a、b、c的值分别为5、8、9;指出分别运算下列表达式后x、y的值。(1)y=(a+b,b+c,c+a) (2)x=a,y=x+b 解: (1)y=(a+b,b+c,c+a) =(5+8,8+9,9+5)=(13,17,14)=14 y=14 (2)x=a, y=x+b = (x=5,y=x+b)=(5,y=5+8)=(5,y=13)=13 x=5, y=13 例5、短路求值 #include void main(void) { int w=3,x=10,z=7; char ch='D'; bool s; s=w++||++z; cout< } 例6、从键盘输入一个三位数abc,从左到右用a、b、c表示各位的数字,现要求依次输出从右到左的各位数字,即输出另一个三位数cba,例如:输入123,输出321,试设计程序。 例7、写出下列程序的运行结果 #include void main(void) { int n=4; while (--n) cout< cout< } 函数 1、函数基本知识 (1)数据类型转换如:(double)或static_cast (2)函数定义注:函数只能返回一个值,不能返回多个值 (3)函数调用调用方法为语句调用、表达式调用和参数调用 (4)注意变量作用域与生存周期 Type_returned Function_Name(Parameter_List); Type_returned Function_Name(Parameter_List) { //code to make the function work } Argument 2、函数参数 参数的传递方式: (1)传值 传值是将实参值的副本传递(拷贝)给被调用函数的形参 (2)传指针和传引用 传指针属于显示传递地址,因为传递的是地址,而变量的地址是唯一的,所以操作会影响到实参 引用的本质也是指针,是C++增加的一个更安全的操作。与传值相比,它们的优点是效率高,传指针和传引用不用进行复制操作,不用把实参的值复制一份给形参 注意:引用的概念 3、函数重载 重载规则: (1)函数重载必须参数类型不一样或参数个数不一样 (2)能依靠返回值不一样来区别重载函数 例1、参数传递过程。写出下列程序的运行结果 #include void modify(int x,int y) { cout<<"x="< x=x+3; y=y+4; cout<<"x="< } void main(void) { int a,b; a=1;b=2; cout<<"a="< modify(a,b); cout<<"a="< } 例2、递归调用过程 #include int fac(int n) { int z; if (n>0) z=n*fac(n-2); else z=1; return z; } void main(void) { int x=7,y; y=fac(x); cout< } 例3、静态变量 #include void main(void) { int i; void add1(void),add2(void); for (i=0;i<3;i++) { add1(); add2(); cout< } } void add1(void) { int x=0; x++; cout< } void add2(void) { static int x=0; x++; cout< } 例4、编写一个函数判断一个整数是否为素数。在主函数中输入一个整数,输出该整数是否为素数的信息。 #include #include #include int prime(int a) { int k,i; k=sqrt(a); for (i=2;i<=k;i++) //判断a是否是素数 if (a%i==0) break; if (i>k) //若i>k,则i为素数return 1; else return 0; } void main(void) { int a,b; cout<<"请输入一个整数:"; cin>>a; b=prime(a); if (b==1) cout< else cout< } 例5、编写两个函数,分别求两个整数m、n的最大公约数和最小公倍数。在主函数中输入两个整数,分别调用这两个函数求得结果并输出。求两个整数m、n的最大公约数和最小公倍数的算法提示如下: (1)将m、n中的最大数赋给变量a,最小数赋给变量b。 (2)用大数a除以小数b,若余数c为0,则余数c为最大公约数,否则进行(3)。(3)将小数b赋给a,余数c赋给b,再进行(2),直到余数等于0为止。 (4)最小公倍数=(m*n)/最大公约数。 例如:求20与14的最大公约数方法:20%14=6,14%6=2,6%2=0,则2为20与14的最大公约数。最小公倍数=20*14/2=140。 # include int gcd(int m,int n) { int r; while (m%n!=0) { r=m%n; m=n; n=r; } return n; } int lcm(int m,int n) { int lcm; lcm=m*n; lcm=lcm/gcd(m,n); return lcm; } void main(void) { int m,n; cout<<"please input m,n:"; cin>>m>>n; cout<<"Lease common multiple="< cout<<"Gretest common divisor="< } 例6: #include using namespace std; int &fun(int &temp) {temp+=10; return temp; } int main() {int a=0; int &b=fun(a); cout<<"b="< int n; void fun(char s[],int k); n=strlen(a); fun(a,n); cout< } void fun(char s[],int k) { int x,y; char c; x=0; for (y=k-1;x { c=s[y]; s[y]=s[x]; s[x]=c; x++; } } 例2、编写一个排序函数用选择法对一批整数按从大到小的次序进行排序。在主函数内输入数据,调用排序函数对数据排序,输出排序结果。 解: # include # define N 5 void sort1(int a[]) { int i,j,k,temp; for (i=0;i { k=i; for (j=i+1;j if (a[k] k=j; if (i!=k) { temp=a[i];a[i]=a[k];a[k]=temp;} } } void main(void) { int a[N],i;