C++重点知识点总结及习题

(c)

void fun1(int i,int j) {

cout<

void fun1(int i,int j) {

cout<

解答:

本题主要考查对函数定义方法的掌握。函数定义的形式为

函数类型 函数名(形式参数列表) {

函数体

}

选项a中多了一个分号;函数可以嵌套调用但是不能嵌套定义,选项b在函数内部定义函数是错误的;若果函数类型定义为void型,则该函数没有返回值,选项c定义了void型函数却有返回值,这是错误的。答案为:d

例题2:下列关于C++函数的叙述中,正确的是( )。 (a)每个函数至少要具有一个参数 (b)每个函数都必须返回一个值

(c)函数在被调用之前必须先声明或定义 (d)函数不能自己调用自己 解答:

本题主要考查对函数的要素及其调用方法的理解。函数可以有参数,也可以没有参数(无参函数),选项a错误;函数可以有返回值,也可以没有返回值,当没有返回值时将这个函数定义为void型,选项b错误;如果一个函数自己调用自己则称为递归调用,这是允许的。选项d错误。函数在调用之前必须已经声明或定义过。答案为:c。

例题3:下面的函数声明语句正确的是( )。

(a) int fun(int var1=1,char* var2=”Beijing”,double var3); (b) int fun(int,char* =”Beijing”,double =3.14159);

(c) int fun(int var1=1,char* var2=”Beijing”,double var3=3.14159);

int fun(int,char*,double var3= 12.34);

(d) int fun(int var1=1,char*,double var3=3.14159);

解答:

本题主要考查带默认参数的函数原型声明方法。函数调用时实参与形参按照从左到右顺序匹配,在对默认值进行定义时应该从右向左定义。选项a和d都没有遵从对默认值定义时应该从右向左定义的原则,即对于第一个有默认值的参数而言,它后面还有参数没有定义默认值这是错误的。选项c对函数中第3个参数定义了两次,错误。答案为:b 本题考查默认参数问题。

例题4:运行下列程序结果为_________________________。 #include int f(int[ ],int); void main()

{

int a[]={-1,3,5,-7,9,-11}; cout<

int f(int a[],int size) {

int i,t=1;

for(i=0;i

if(a[i]>0) t*=a[i]; return t; }

解答:

本题主要考查对数组参数的理解与应用。本程序的作用是计算数组中元素值为正数的元素的乘积。函数f含有两个形式参数,第一个参数存放一个整型数组的首地址,第二个参数存放该数组的长度,在该函数中仍然通过数组名[下标]的方式对数组元素进行引用。在主函数中定义了一个数组a,然后调用函数f,传递实参时第一个实参a(数组名)为数组a的首地址,第二个参数6为数组a的长度。答案为:135

例题5:运行下列程序结果为( )。 #include #include void main( ) {

char str[][10]={\

strcpy(s,(strcmp(str[0],str[1])<0?str[0]:str[1])); if (strcmp(str[2],s)<0) strcpy(s,str[2]); cout<

解答:

本程序的作用是将\三个字符串中最小的一个放入数组s,并输出s。采用二维数组str存放三个字符串,则str[0]、str[1]、str[2]中分别存放三个字符串的首地址,strcmp()函数用于比较两个字符串的大小,strcpy()函数用于将第二个参数所指字符串复制到第一个参数所指数组。C++中有一些操作字符串的标准的库函数,头文件string.h包含所有字符串处理函数的说明。常用的一些函数如下: strcpy(char destination[], const char source[]); //把第二个字符串拷贝到第一个字符串

strncpy(char destination[], const char source[], int numchars); strcat(char target[], const char source[]);

strncat(char target[], const char source[], int numchars); int strcmp(const char firststring[], const char secondstring); //比较两个字符串是否相等

strlen( const char string[] );//返回字符串长度 本题答案为:c++

例题6:运行下列程序的结果为__________。 #include

void fun1(const double& i) {

cout<

void fun2(double &j)

{

cout<

void fun3(double k) {

cout<

void main() {

fun1('a'); fun2('a'); fun3('a'); }

(a)97 (b)97 (c)a (d)程序出错,无法运行。 97 a a 97 97 a 解答:

文字量、常量和需要类型转换的参数都可以传递给const&参数,但不能传递给非const的引用参数。也就是说对非const引用参数不允许做类型转换。本题中对于函数fun1以及fun3在调用时参数都发生了隐形数据类型转换,而对于函数fun2它的参数为非const的引用参数,不允许作类型转换,所以对fun2的调用出错。因此程序出错无法运行。答案为:d。

例题7:运行下列程序的结果为_______________。 #include #include

int findmax(int Iarg[]); float findmax(float Farg[]); double findmax(double Darg[]);

main() {

int Iarg[6]={15,88,34,12,31,10};

float Farg[6]={145.5,32.3,363.2,19.3,70.1,35.4};

double Darg[6]={15.54323,2.47763,63.29876,19.67863,78.34541,35.44009}; cout<<\ cout<<\ cout<<\ return 0; }

int findmax(int Iarg[]) {

int max=0;

for(int i=0;i<6;i++) {

if(Iarg[i]>max) {

max=Iarg[i]; } }

return max; }

float findmax(float Farg[]) {

float max=0;

for(int i=0;i<6;i++) {

if(Farg[i]>max) {

max=Farg[i]; } }

return max; }

double findmax(double Darg[]) {

double max=0;

for(int i=0;i<6;i++) {

if(Darg[i]>max) {

max=Darg[i]; } }

return max; }

解答:

本题主要考查函数重载。本程序用于求解并输出一个整型数组的最大元素、一个浮点型数组的最大元素和一个双精度型数组的最大元素。在主函数中调用三次findmax()函数,根据传递实参数组类型不同,自动调用不同的函数完成求解操作,这里findmax()函数实现了重载。 答案为:

largest value in the Iarg is 88 largest value in the Farg is 363.2 largest value in the Darg is 78.3454

例题8:运行下列程序的结果为_______________。 #include int fun(int,int); void main() {

cout<<\}

int fun(int n,int s) {

int s1,n1; s1=s+n*n; if(s1<100) {

n1=n+1; fun(n1,s1); } else

return n-1;

}

解答:

本题主要考查对递归调用程序的理解。 f s1 n1 f(7,91) f(6,55) 91 7 f(5,30) 55 6 f(4,14) 30 5 f(3,5) 14 4 f(2,1) 5 3 f(1,0) 1 2 f(0,0) 0 1 压栈情况如上图所示。当调用f(7,91)时返回7-1=6程序结束。 答案为:n=6

例题9:运行下列程序结果为____________________。 #include void fun() {

for(int i=1;i<=3;i++) {

static int var1=1; int var2=1;

cout<<\

<<\ } }

void main() {

fun(); }

解答:

本题考查对静态局部变量的理解。静态局部变量存放在内存的全局数据区。函数结束时,静态局部变量不会消失,每次函数调用时,也不会为它重新分配空间,它始终驻留在全局数据区,直到程序运行结束。静态局部变量只在第一次调用时被初始化。在本程序中for循环3次,但是对静态变量var1的初始化只在第一次循环时完成,后两次循环不执行初始化。而变量var2在三次循环中都会被初始化。答案为: var1=1,var2=1 var1=2,var2=1 var1=3,var2=1

例题10:

#include void fun1(int); void main() {

void fun1(double);

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4