这个是我学习C++上机题,你们试试自己完成一下
(一)函数
1. 函数的定义格式
<类型名><函数名>([<参数表>])
<函数体>
在C++中,如果一个函数要调用另外一个函数,则需要在本函数(称为主调函数)定义之前将要被调用的函数事先声明。函数原型的声明形式是:
<类型><被调用函数名>([<形参表>]);
函数调用的格式为:
函数名([<实参表>]);
在定义函数时,C++语言用三种方式将函数的形式参数分别声明为值参数、地址参数和引用参数。
A.值参数
传递规则:直接将实参的值复制给形参。这种传递方式的特点是无论被调用函数如何改变形参,都不会对实参产生任何影响。
B.地址参数
传递规则:实参在向形参传递时复制的是实参的地址。这种传递方式的特点是形参的改变会对实参产生影响。
C.引用参数
传递规则:实参在向形参传递时复制的是实参的"别名",这种传递方式的特点是形参的改变会对实参产生影响。
D.在C++中,函数在原型声明或定义时可以在形参表内预先给形参指定默认的值,这样的函数称为带默认值的函数,其形参表的一般形式为:
<类型><形参1>=<表达式1>,......,<类型><形参n>=<表达式n>
嵌套调用:在一个函数的执行过程中去调用另外一个函数处理相应任务的方法。
基本原则:被调用的函数必须提前定义,如果被调用的函数定义在主调函数之后,则必须在主调函数前的适当位置有被调函数的函数原型声明。
在一个函数的定义或声明前加上关键字inline就可以把该函数定义为内联函数。
使用内联函数需要注意以下几点:
(1)内联函数中不能含有任何循环语句以及switch和goto语句。
(2)内联函数的声明必须出现在内联函数第一次被调用之前。
(3)内联函数中不能声明数组。
(4)递归函数不能被定义为内联函数。
在C++语言中允许定义多个同名函数,这个功能被称为函数重载。
需要注意的是重载函数的形参在个数或类型上必须不同,不能仅依靠函数的返回值类型来区别重载函数,必须从形参数上区别开来。
在C++中,作用域可以分为5种:函数原型作用域,函数作用域,块作用域,类作用域和文件作用域。
在函数内部或块内部声明的变量称为局部变量,它具有块作用域,即从它声明的那一点开始到这个声明所在的块或函数结束为止。
在一个程序文件中,在所有函数外部定义的变量称为全局变量,有时也称为全程变量、公用变量。全局变量作用域是文件作用域,即从定义变量的位置开始到本程序文件结束。
在C++中,变量的存储类型分为4种:自动类型(auto),寄存器类型(register),外部类型(extern),静态类型(static)。用这4种类型说明的变量分别称为自动变量,寄存器变量,外部变量,静态变量。
生命周期是指一个标识符(变量,函数,类,对象等)从被创建开始到被释放为止的时间。
编译预处理是指在对源程序进行正常的编译之前,先对这些命令进行预处理,然后将预处理的结果和源程序一起再进行编译处理。C++提供的编译处理命令有:宏定义命令,文件包含命令和条件编译命令,这些命令均为"#"开头,以区别于语句。
(1)宏定义
不带参数的宏定义:不带参数的宏定义相对比较简单,如下:
#define 宏名 字符串(或数值)
带有参数的宏定义:在宏定义中允许宏名后带参数,如下:
#define 宏名(参数表) 字符串
(2)文件包含
预处理指令#include 称为文件包含指令。
#include 指令有两种书写形式:
第一种:#include <文件名>
第二种:#include "文件名"
(3)条件编译
条件编译指令有如下几种形式:
形式一:
#if 常量表达式1
程序段1
#elif常量表达式2
程序段2
……
#elif常量表达式n
程序段n
#else
程序段n+1
#endif
形式二:
#ifdef 标志符
程序段1
#else
程序段2
#endif
形式三:
#ifndef 标志符
程序段1
#else
程序段2
#endif
(二)数组
数组就是把一系列有序的相同类型的数据组合起来的数据集合,数组都有一个名字即数组名。数组中的每一个数据成为数组的元素。数组元素在数组中的位置由下标确定。根据数组元素下标的个数,数组分为一维数组和多维数组。当数组元素的数据类型为字符型时,该数组称为字符数组。
1.一维数组的定义与初始化赋值
(1)一维数组的定义
在使用数组前,必须对数组进行定义。一维数组的定义包括对数组名、数组元素的数据类型和个数的说明。一维数组的定义格式为:
{存储类型}<类型><数组名>[<常量表达式>];
(2)一维数组的初始化赋值
像普通变量一样,在数组定义的同时就可以对数组元素进行赋值。方法是从数组的第一个元素开始依次给出初值,形成一个初值表,表中各个初值之间用逗号分开,初值表用一对花括号包含起来。一维数组初始化赋值的方法有:
a.给数组的所有元素赋初值。
b.给数组的部分元素赋初值。
c.当把数组定义为全局变量或静态变量时,所有数组元素的初值均为0,当把数组定义为其他存储类型的局部变量时,数组元素没有确定的值,即其值是随机的。
2.一维数组在内存中的存储方式
当定义了一个数组之后,系统就为数组分配一串连续的存储单元,来依次存放各个数组元素。
3.一维数组元素的访问
数组必须先定义后使用。C++规定只能对数组中的元素进行访问,不能把整个数组作为一个整体使用。一维数组元素的访问形式:
<数组名>[<下标表达式>]
下标表达式的值就是被访问的数组元素的下标,其数据类型必须为整型。
4.二维数组的定义与初始化赋值
由两个或两个以上下标的数组元素所组成的数组称为多维数组。下面以二维数组为例子说明多维数组的定义和使用方法。
一维数组中的元素带有一个下标,而二维数组中的元素则带有两个下标。一维数组在逻辑上可以想象成一行长表,而二维数组在逻辑上可以想象成是由若干行,若干列组成的一张表格。
(1)二维数组的定义
{存储类型}<类型><数组名>[<常量表达式1>][<常量表达式2>];
(2)二维数组的初始化赋值
和一维数组一样,二维数组也可以进行初始化赋值。二维数组初始化赋值的方法有:
a.给数组的所有元素赋初值
b.给数组的部分元素赋初值
给数组的部分元素赋初值的方法与给数组的所有元素赋初值的方法类似。
虽然在逻辑上可以把二维数组看作是一张表格或者一个矩阵,但是在计算机中存储二维数组时,也是在内存中开辟一串连续的存储单元,依次存放各个数组元素。
C++中,是按行为主顺序存放二维数组各个数组元素的,即先存放第一行上的元素,再存放第二行上的元素,依次把各行上的元素存入一串连续的存储单元中。
二维数组元素的访问形式为:
<数组名>[<下标表达式1>][<下标表达式2>]
下标表达式1和下标表达式2的值就是被访问的数组元素的两个下标,其数据类型必须为整数。多维数组的定义和使用方法与二维数组类似。
【实例1】从键盘输入两个任意整数,实现值参数传递调用。
#include
using namespace std;
void swap(int x,int y)
{
int temp;
temp = x;
x=y;
y=temp;
}
void main()
{
int a,b;