C++的实例(1)
目录标题
- 1.下面是一个演示使用for循环创建乘法表并用二维数组存储结果的小程序:
- 2.将数组传递给函数
- 3.对100个数进行排序
- 4.用随机数对数组赋值并对数组排序,证明这个排序算法是否能正常工作。(插入算法)
- 5.一个示例程序,该程序将结合数组和结构体,演示一个游戏读取5位玩家名称的过程
- 6.这是一个简单的程序,演示了如何创建和升级单个敌军飞船:
- 7.指针
- 8.通过简单的程序,来演示指针的功能。
- 9.下面两个函数都试图交换两个变量中的存储值
- 10.你可以用数组来创建一个选票计数器。其中,候选人从0到9进行编号,选民使用数字0-9来投票。然后,每个数组索引对应一个候选人,数组在该位置上的值即是候选人的票数。
- 11.下面是一个实际可运行的例子,用来展示实际的输出。怎样写出一个递归函数,来输出数字123 456 789 987 654 321呢?
- 12.要找到列表中的一个特定节点,用递归:
1.下面是一个演示使用for循环创建乘法表并用二维数组存储结果的小程序:
#include<iostream>
using namespace std;
int main()
{
int array[8][8]; //声明像棋盘似的数组
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
array[i][j]=i*j; //对每个元素赋值
}
}
cout<<"Multiplication table:\n";
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
cout<<"["<< i <<"]["<< j <<"] = ";
cout<<array[i][j]<<" ";
cout<<"\n";
}
}
}
2.将数组传递给函数
#include<iostream>
using namespace std;
int main()
{
int array[8][8]; //声明像棋盘似的数组
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
array[i][j]=i*j; //对每个元素赋值
}
}
cout<<"Multiplication table:\n";
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
cout<<"["<< i <<"]["<< j <<"] = ";
cout<<array[i][j]<<" ";
cout<<"\n";
}
}
}
3.对100个数进行排序
#include<iostream>
using namespace std;
int main()
{
int a[100];
for(int i=0;i<100;i++)
{
cout<<"Enter value "<<i<<": ";
cin>>a[i]; //输入数组
}
}
4.用随机数对数组赋值并对数组排序,证明这个排序算法是否能正常工作。(插入算法)
思路:首先,调用随机数的头文件。
之后,创建sort函数,创建findsmall函数,用if语句和for循环,,创建swap函数,创建displayArray函数。最后,主函数输出。
#include<cstdlib>
#include<ctime>
#include<iostream>
using namespace std;
int findsmall(int array[],int size,int index);
void swap(int array[],int first_index,int second_index);
void displayArray(int array[],int size);
void sort(int array[],int size)
{
for(int i=0;i<size;i++)
{
int index=findsmall(array,size,i);
swap(array,i,index);
}
}
int findsmall(int array[],int size,int index)
{
int index_of_smallest_value=index;
for(int i=index+1;i<size;i++)
{
if(array[i]<array[index_of_smallest_value])
{
index_of_smallest_value=i;
}
}
return index_of_smallest_value;
}
void swap(int array[],int first_index,int second_index)
{
int temp;
temp=array[first_index];
array[first_index]=array[second_index];
array[second_index]=temp;
}
//显示排序前和排序后数组的辅助方法
void displayArray(int array[],int size)
{
cout<<"{";
for(int i=0;i<size;i++)
{
//格式化输出列表,如果不是第一个元素,便添加逗号
if(i!=0)
{
cout<<",";
}
cout<<array[i];
}
cout<<"}";
}
int main()
{
int array[10];
srand(time(NULL));
for(int i=0;i<10;i++)
{
//为方便阅读限制数字大小
array[i]=rand()%100;
}
cout<<"Original array: ";
displayArray(array,10);
cout<<"\n";
sort(array,10);
cout<<"Sorted array: ";
displayArray(array,10);
cout<<"\n";
}
5.一个示例程序,该程序将结合数组和结构体,演示一个游戏读取5位玩家名称的过程
#include<iostream>
using namespace std;
struct PlayerInfo
{
int skill_level;
string name;
};
using namespace std;
int main()
{
//就像使用普通的变量类型一样,创建一个结构体的数组
PlayerInfo players[5];
for(int i=0;i<5;i++)
{
cout<<"Please enter the name for player: "<<i<<'\n';
//首先使用正常的数组语法来访问数组元素
//然后使用"."语法来访问结构体的域
cin>>players[i].name;
cout<<"Please enter the skill level for "<<players[i].name<<'\n';
cin>>players[i].skill_level;
}
for(int i=0;i<5;++i)
{
cout<<players[i].name<<"is at skill level "<<players[i].skill_level<<'\n';
}
}
6.这是一个简单的程序,演示了如何创建和升级单个敌军飞船:
#include<iostream>
using namespace std;
struct EnemySpaceShip{
int x_coordinate; //横坐标
int y_coordinate; //纵坐标
int weapon_power;
};
using namespace std;
EnemySpaceShip getNewEnemy()
{
EnemySpaceShip ship;
ship.x_coordinate=0;
ship.y_coordinate=0;
ship.weapon_power=20;
return ship;
}
EnemySpaceShip upgradeWeapons(EnemySpaceShip ship)
{
ship.weapon_power+=10;
return ship;
}
int main()
{
EnemySpaceShip enemy=getNewEnemy();
enemy=upgradeWeapons(enemy);
EnemySpaceShip my_enemy_ships[10];
}
7.指针
指针:"指向"内存空间的变量。与超链接非常类似。
地址:指针存储着一些数据的位置。
变量:是值的表示形式,这个值实际上存储在一个特定的内存位置,即一个特定的内存地址。
&:它的作用是得到变量的地址。使用&符号就像是通过网站的地址栏获得该网站的URL(网址)。
(1).要获得指针中的存储的内存地址,直接使用指针即可,就像使用一个普通变量一样。
例子:
int x=5;
int *p_pointer_to_integer=&x;
cout<<p_pointer_to_integer; //输出x的地址
//等价于cout<<&x;
这个代码片段打印输出变量x的内存地址,而这个变量存储在p_pointer_to_integer中。
(2)要访问内存单元中存储的值,你可以使用*操作符。下面就是一个小例子,它初始化一个指向另一变量的指针:
int x=5;
int *p_pointer_to_integer=&x;
cout<<*p_pointer_to_integer; //输出5
//等价于cout<<x;
两个简单的规则:
(1). 指针1存储的是地址。因此,直接使用"裸"指针(即不带任何符号的指针)得到的就是地址。要获得或调整存储在该地址中的值,必须添加额外的*.
(2).变量存储的是数据值。因此,直接使用变量得到的就是数据值。而要获得变量的地址,就必须额外添加&。
动态分配:在程序运行时请求所需要的内存大小。
指针代表内存地址,而内存地址归根结底只是个数字。
任何的多维数组,都必须指定除高度之外的所有维度的大小。一维数组可以看成是数组的特例,即一个只有高度的数组。
要通过指针访问结构体的域,可以在使用“.”运算符的位置使用"->"运算符。
我们通过使用包含一个指针指向下一个元素的结构体所创建出来的列表,都称为链表。
8.通过简单的程序,来演示指针的功能。
#include<iostream>
using namespace std;
int main()
{
int x; //x为普通变量
int *p_int; //p_int为指向一个整型的指针
p_int=&x; //将x的地址赋值给p_int
cout<<"Please enter a number: ";
cin>>x; //读入一个值并赋值给变量x,这里的x也可以用*p_int来代替
cout<<*p_int<<endl; //使用*来获得指针所指向的变量的值
*p_int=10;
cout<<x; //再次输出10!
}
9.下面两个函数都试图交换两个变量中的存储值
#include<iostream>
using namespace std;
void swap1(int left,int right) //交换了left和right的值,但x和y的值完全没变。
{
int temp;
temp=left;
left=right;
right=left;
}
void swap2(int *p_left,int *p_right) //交换了x和y的值。
{
int temp;
temp=*p_left;
*p_left=*p_right;
*p_right=temp;
}
int main()
{
int x=1,y=2;
swap1(x,y);
cout<<x<<" "<<y<<endl;
swap2(&x,&y);
cout<<x<<" "<<y<<endl;
}
10.你可以用数组来创建一个选票计数器。其中,候选人从0到9进行编号,选民使用数字0-9来投票。然后,每个数组索引对应一个候选人,数组在该位置上的值即是候选人的票数。
#include<iostream>
using namespace std;
int main()
{
int votes[10];
//确保选举没有作弊(通过清空数组)
for(int i=0;i<10;i++)
{
votes[i]=0;
}
int candidate;
cout<<"Vote for the candidate of your choice,using numbers: 0)Joe 1)Bob 2)Mary 3)Suzy 4)Margaret 5)Eleanor 6)Alex 7)Thomas 8)Andrew 9)Ilene"<<endl;
cin>>candidate;
//输入选票,直到用户输入一个非候选人编号
while(0<=candidate&&candidate<10)
{
//注意,不能使用do-while循环,
//因为需要在更新数组之前检查下candidate是否在正确的范围内
//一个do-while循环将需要读入candidate的值,
//然后再进行检查,接着增加对应的票数。
votes[candidate]++;
cout<<"Please enter another vote: ";
cin>>candidate;
}
//显示票数
for(int i=0;i<10;++i)
{
cout<<votes[i]<<endl;
}
}
11.下面是一个实际可运行的例子,用来展示实际的输出。怎样写出一个递归函数,来输出数字123 456 789 987 654 321呢?
#include<iostream>
using namespace std;
void printNum(int num)
{
//函数的两次cout调用,将像"三明治"一样输出
//形如(num+1)...99...(num+1)的数字序列
cout<<num;
//只要num小于9,就递归输出
//序列(num+1)...99...(num+1)
if(num<9)
{
printNum(num+1);
}
cout<<num;
}
int main()
{
printNum(1);
}
12.要找到列表中的一个特定节点,用递归:
如果我们在列表的末尾,返回NULL
否则,如果当前节点就是查找的目标,将其返回。
否则,在列表的其余部分继续查找
在代码中,应该是这样的:
struct node
{
int value;
node *next;
};
node* search(node* list,int value_to_find)
{
if(list==NULL)
{
return NULL;
}
if(list->value==value_to_find)
{
return list;
}
else
return search(list->next,value_to_find);
}