c++学习(2)
这次学习的主要是一些符号、表达式及控制结构。这些与C语言中大部分都很相像,这边主要配合着程序讲解一些与C不同的。
作用域解析操作符::,主要用于甄别类,以确定成员函数的所属类
#include<iostream>
using namespace std;
int m=10;//声明并初始化一个全局变量
int main()
{
int m=20;//又声明了m,为main函数的局部变量
{
int k=m;
int m=30;//在内层块又声明了m,使其成局部变量
cout<<"we are in inner block\n";
cout<<"k="<<k<<endl;
cout<<"m="<<m<<endl;
cout<<"::m="<<::m<<endl;//::m总是指全局变量,此处指的是{}外,main中的
}
cout<<"we are in outter block\n";
cout<<"m="<<m<<endl;
cout<<"::m="<<::m<<endl;//::m总是指全局变量,此处指的是最外层的全局变量
return 0;
}
在以上程序中,主要体现C++通过引用作用域解析操作符:: ,来解决全局变量无法被内层块所访问的问题。
<span style="font-size:12px;color:#000000;BACKGROUND-COLOR: #cccccc">///操纵器,用于格式化显示数据的操作符,最常用的有endl和setw
//endl,用在输出语句中,触发换行符的插入;
//setw,对所有数值设定一个公共的域宽,并强制右对齐
#include<iostream>
#include<iomanip>//该头文件包含setw函数
using namespace std;
int main()
{
int B=950,A=95,T=1045;
cout<<setw(10)<<"Basic"<<setw(5)<<B<<endl
<<setw(10)<<"Allowance"<<setw(5)<<A<<endl
<<setw(10)<<"Total"<<setw(5)<<T<<endl;
cout<<"Basic"<<B<<"\n"
<<"Allowance"<<A<<"\n"
<<"Total"<<T<<"\n";
return 0;
}</span>
以上程序主要体现了C++中新的一类指令——操作符。
题目1.编写一个程序,使用引用变量作为参数,交换一对整数值。
解题关键:就在于引用变量的使用。引用变量主要用处是函数自变量。引用变量的定义使用了取地符号&的重载,格式如下:数据类型 & 参数名=变量名。引用变量就相当于定义变量的别名,即可替换的名字。具体参考程序如下:
<span style="font-size:12px;color:#000000;">#include<iostream>
using namespace std;
void transform(int & x,int & y)//传引用调用 &x 相当于a的别名
{
int temp;
temp=x;
x=y; //当a、b发生变化时,x、y也变化
y=temp;
}
int main()
{
int a,b;
cout<<"Enter a is:";
cin>>a;
cout<<"Enter b is:";
cin>>b;
transform(a,b);//函数的调用
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
return 0;
}</span>
题目2.编写一个程序,创建一个数组,大小为用户指定数M,使用new操纵符。
解题关键:本题主要考查内存管理操作符new,主要用来创建对象并分配内存空间,而要销毁则需要使用delete。new创建多维数组时除第一维可以是变量外,其它位数必须指定大小,如int *p =new int[m][5][4];具体参考程序如下:
<span style="font-size:12px;color:#000000;">#include<iostream>
using namespace std;
int main()
{
int M;
cout<<"Enter the array's length:";
cin>>M;
int * p =new int[M];//new 语法:指针变量=new 数据类型
delete [] p;//释放指针P指向的整个数组
return 0;
}</span>
题目3.编写一个函数,使用for循环,打印如下输出:
1
22
333
..........
解题关键:本题主要考查控制结构:for循环的使用。相信学过C语言对for循环的使用并不会陌生。参考程序如下:
<span style="font-size:12px;color:#000000;">#include<iostream>
using namespace std;
int main()
{
int a=1;//控制输出值及循环次数
while(a!=10)
{
for(int i=1;i<a+1;i++)//for 语句的使用,格式:for(变量初始值;判断条件;变量变化)
cout<<a;
cout<<endl;
a++;
}
return 0;
}</span>
题目4.竞选中有5名候选人,分别以1~5标记。投票中,要记录每人的得票数。编写一个程序,读入选票,使用数组count来记录每个候选人的得票数。如果选票上的数字不在1~5,当弃票处理。程序中也要统计出弃票的数目。
解题关键:首先分析,每个候选人及弃票数都要统计各自的得票数,那不是有6中情况,这时就可以想到多分支语句switch语句。(当然if语句也是可以实现的)。在C中与C++中switch语句并没有太大区别。另外一点,就是如何控制计票的终止。可以知道,当所有投的票都唱票完了,也意味着每个人所得票数出来了,所以可以总投票数来终止计票过程。其参考程序如下:
#include<iostream>
using namespace std;
int main()
{
int count[6]={0};//此数组用于记录各人得票数及弃票数
int i,num=50;//i用于输入每个人的投票情况,num表示总投票人数(控制计票的结束)
在此处num的值也可以设置成用户输入的形式
while(num--)
{
cout<<"Enter a number for a people:";//提示输入
cin>>i;//输入当前获票的人
switch(i)
{
case 1://记录第一个人的得票数
{
count[1]++;
break;
}
case 2://记录第二个人的得票数
{
count[2]++;
break;
}
case 3://记录第三个人的得票数
{
count[3]++;
break;
}
case 4://记录第四个人的得票数
{
count[4]++;
break;
}
case 5://记录第5个人的得票数
{
count[5]++;
break;
}
default://记录弃票数
{
count[0]++;
break;
}
}
}
for(int j=0;j<6;j++)//显示最终每个人的得票数
{
cout<<"The number of people:"<<j<<endl
<<"The vote is:"<<count[j]<<endl<<endl;
}
return 0;
}