4.指针考试试卷

来源:互联网 发布:2016年零售业数据 编辑:程序博客网 时间:2024/04/28 01:16

一、单项选择题(在每小题的四个备选答案中,选出一个正确的答案,并将其代码填入题干后的括号内。每小题2分,共40分)

1、下面有关重载函数的说法中,正确的是(C)

A) 重载函数必须具有不同的返回值类型

B) 重载函数形参个数必须不同

C) 重载函数必须有不同的形参列表

D) 重载函数名可以不同         

函数重载的条件:参数类型不同或者参数个数不同。

2、以下选项中能表示合法常量的是(D

A) '\'       B) 1,200        C) 1.5E2.0        D) ‘\007

A选项是一个转义字符,不能识别

B选项中的“,”错误

C表示幂的时候,指数只能是整数,不能是小数

 

3、若变量已正确定义为int型,要通过语句

cin >> a >> b >> c;

给a赋值1、给b赋值2、给c赋值3,以下输入形式中正确的是(注:□代表一个空格符)( D

A) □□□1,2,b3<回车>

B) N1,2,MN3<回车>

C) 1, □□□2, □□□3<回车>

D) 1 □ 2 □3<回车>

 

4、以下选项中,值为1的表达式是(D

A) ‘\0’-‘0’

B) ’1’-0

C) 1-‘0’

D) 1-‘\0’

‘\0’就是0

‘1’表示的是ASCII码值


5、以下选项中关于常量的叙述错误的是 ( A

A) 经常被使用的变量可以定义成常量

B) 所谓常量,是指在程序运行过程中,其值不能被改变的量

C) 常量可分为数值型常量和非数值型常量

D) 常量分为整型常置、实型常量、字符常量和字符串常量

 

6、阅读以下程序

#include <iostream>

using namespace std;

void main ()

{

   int case;

   float printF;

   cout<< “请输入2个数:

   cin>> case >> printF;

   cout<< case << printF;

}

该程序在编译时产生错误,其出错原因是( A

A) 定义语句出错,case是关键字,不能用作用户自定义标识符

B) 定义语句无错,printf不能输出case的值

C) 定义语句无错,scanf不能作为输入函数使用

D) 定义语句出错,printF不能用作用户自定义标识符

“case是关键字,不能定义为变量

 

7、当把以下四个表达式用作if语句的控制表达式时,有一个选项与其它三个选项含义不同,这个选项是( D    )。

A、k%2        B、k%2==1         C、(k%2)!=0        D、!k%2==1

 

k%2的值只有两种:0或1,代入数字直接计算即可

 

8、有以下程序

#include <iostream>

using namespace std;

void main()

{

   char a='H';

   a = ( a>='A'&&a<='Z')?(a+32):a;

   cout<< a << endl;

}

程序运行后的输出结果是(C

A) A

B) a

C) h

D) H

 

题目的意义是:大写变为小写,小写直接输出

9、关于变量,以下叙述中错误的是(A

A) 变量所占的存储单元地址可以随时改变

B) 程序中用到的所有变量都必须先定义后才能使用

C) 由三条下划线构成的符号名是合法的变量名

D) 所谓变量是指在程序运行过程中其值可以被改变的量

地址在运行时是不能改变的

10、以下叙述中正确的是( B

A) C语言的关系表达式:0<x<10完全等价于:(0<x)&& (x<10)

B) 由&&构成的逻辑表达式与由||构成的逻辑表达式都有"短路"现象

C) 取地址符*的运算级别是最高的

D) 逻辑”或”(即运算符||)的运算级别比算术运算要高

运算符优先级:算数>关系>逻辑

单目>双目>三目

 

11、对于语句int* pa[5];下列描述中正确的是(D

A) pa是一个指向数组的指针,所指向的数组是5个int型元素

B) pa是一个指向某数组中第5个元素的指针,该元素是int型变量

C) pa[5]表示某个元素的第5个元素的值

D) pa是一个具有5个元素的指针数组,每个元素是一个int型指针

Int*p[5]:指针数组:是一个数组,数组的每一个元素是指针

Int(*)p[5]:数组指针:是一个指针,这个指针指向的是一个数组

12、已知以下函数声明

   int fun(double  d, int  n)

则下面,与此函数构成重载的是(D

A)int fun1(double x, int n);    B)double fun(double x, int n);

C)double fun1(double x, int n); D)int fun(int x, int n);

函数的重载的条件是:参数个数不同或者参数类型不同

 

 

13、以下对一维数组a的正确说明是(D

A)char a(10);   B)int a[ ];

C)intk=5,a[k];    D)char a[ ]={'a' , 'b' ,'c'};

A:括号错误         B:数组的元素个数未知         C:写法错误,a未定义

14、下段程序的运行结果是(B

void main()

{

   char *p,*q;

   char str[]="Hello,World\n";

   q = p =str;         //将指针的首地址赋值给p,再将p的值赋值给q

   p++;                   //p的值向前移一位

   cout<< q;

   cout<< p;

}

A) H    e  

B) Hello,World      ello,World

C) Hello,World     Hello,World

D) ello,World     ell,World

 

15、若有说明语句:int a[2][4];,则对a数组元素的正确引用是( A

A)a[0][3]  B)a[0][4]  C)a[2][2]  D)a[2][2+1]

题目定义的是2行4列的二维数组;

B:列数越界(4)             C:行数越界 (2)        D:行数越界(2)

16、已知 int array[10] = {},下面描述正确的是(B

A) sizeof(array)的值为10                     //正解:40=4*10

B) sizeof(*array)的值为4

//正解:意义是数组的第一个元素所占的字节数,int型为4字节

C) sizeof(&array)的值为40                  //首地址的地址???

D) sizeof(*&array)的值为4

//正解:“*&”:解引用与取地址相互抵消,sizeof(array)=???

 

17、若二维数组y有m列,则在y[i][j]前的元素个数为(B

A) j*m+i    B) i*m+j

C) i*m+j-1    D) i*m+j+1

自己定义一个2行2列的数组可直接得出答案B

 

18、若有说明:"int  i,j=7,*p=&i;", 则与i=j;等价的语句是(B

A) i=*p; //式子的意义与j没有关系               

B) *p=*&j;//*p=7;*&”:解引用与取地址相互抵消,7=j

C)i=&j;  //i=j的地址                 

D) i=**p;//二级指针

 

19、若有以下说明,则数值为6的表达式是(C

int  a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;

A) *p+6                   B) *(p+6)

C) *p+=5                  D) p-5

A:*p+6  为数组中的第7个元素:7

B) *(p+6) 为数组中的第7个元素:7

C) *p+=5《==》*p=*p+5

D) p-5:越界

20、下面程序的输出结果是( A

void main()

{

      inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};

      int(*p)[4]=a,i,j,k=0;

      for(i=0;i<3;i++)

           for(j=0;j<2;j++)

           {k=k+*(*(p+i)+j);}

           Cout<< k << endl;

}

A) 60                       B)68

C) 99                       D)108

 

二.填空题(每小题4分,共20分)

1、如果程序中已有定义:int a;

   1) 定义一个指向变量a的指针变量ptr的语句是 int *ptr = &a;       

2) 通过指针变量,将数值6赋值给a的语句是 *ptr = 6;     

 3) 定义一个可以指向指针变量ptr的变量pp的语句是 int**pp = NULL;      

4) 通过赋值语句将pp指向指针变量ptr的语句是 pp= &ptr;      

   5) 通过指向指针的变量pp,将a的值增加一倍的语句是 a += **pp;     

 

2、若有定义 int a[6] = {}; ,sizeof(a)=  24  ,sizeof(&a) = 4  

 

3、若有定义有: double x[5];,那么获取指向此一维数组的指针的语句是

double *ptr = x;    

若有定义有:char  x[5][5];,那么获取 指向此二维数组的指针的语句是 

char (*ptr)[5] = x;    

 

4、若有定义:int a[3][4]={{1, 2}, {0}, {4, 6, 8, 10}};, 则初始化后,a[1][2]得到的初值是 0   ,a[2][1]得到的初值是 6   

 

5、语句int (*pa)[5]表示的意思是 一个指向列数为5的二维数组的指针                                  

 

三.编程题(每小题20分,共40分)

1. 编写一个程序实现功能:将字符串”Computer Science”赋给一个字符数组,然后从第一个字母开始间隔的输出该串,用指针完成。

 

   char ch[] = "Computer Science";

   char* pch = ch;

 

   int length = 0;

   while (ch[length] != '\0')    //求长度

   {

      length++;

   }

 

   for (int i = 0; i < length; i+=2) //输出

   {

      cout << pch[i];

   }

 

2.输入一个字符串数组,求出字符串的长度,然后反转顺序输出。

char ch[100];

   cin >> ch;

 

   int length = 0;

   while (ch[length] != '\0')

   {

      length++;

   }

   cout << "字符串的长度为:" << length << endl;

 

   //反转顺序输出

   cout << "反转顺序输出的结果为:";

   for (int i = length - 1; i >= 0; i--)

   {

      cout << ch[i];

   }

3.利用数组指针变量求5×3数组各行元素之和。

     inta[5][3] =

     {

      {1, 2, 3 },

      {10, 20, 30 },

      {5, 6, 7 },

      {15, 21, 33 },

      {12, 25, 10 }

     };

     int(*p)[3]= a;

     for(int i = 0; i < 5; i++)

     {

      intsum = 0;

      for(int j = 0; j < 3; j++)

      {

         sum += p[i][j];

      }

      cout<<"第"<< i + 1 << "行元素之和为:" << sum << endl;

     }

 

4.输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数:①输入10个数;②进行处理;③输出10个数。所有函数的参数均用指针。

#include<iostream>

usingnamespace std;

//输入

voidInputArray(int* arr,int length)

{

   for (int i = 0; i < length; i++)

   {

      cin >> arr[i];

   }

}

//处理

voidProcess(int* arr, int length)

{

   int min = arr[0]; //最小数的值

   int minIndex = 0; //最小数的索引

   int max = arr[0]; //最大数的值

   int maxIndex = 0; //最大数的索引

   for (int i = 0; i < length; i++)

   {

      if (min > arr[i])

      {

         min= arr[i];

        minIndex = i;

      }

      if (max < arr[i])

      {

        max = arr[i];

        maxIndex = i;

      }

   }

   int temp = arr[minIndex];

   arr[minIndex] = arr[0];

   arr[0] = temp;

 

   temp = arr[maxIndex];

   arr[maxIndex] = arr[length-1];

   arr[length - 1] = temp;

}

//输出

voidOutputArray(int* arr, int length)

{

   for (int i = 0; i < length; i++)

   {

      cout << arr[i] << "";

   }

   cout << endl;

}

 

void main()

{

   int arr[10];

   int length = sizeof(arr) / sizeof(int);

   InputArray(arr, length);

   Process(arr, length);

   OutputArray(arr, length);

}