C++试卷

《高级语言程序设计(C++I)》练习题参考答案

一.单项选择题(每小题2分,共20分)

1.下列字符列中,合法的浮点型常量是:

    (A) 457        (B) 6e5.3          (C) e7         (D) 123e6

2.字符串常量 ”w\x42\\\nx\103y” 的长度是:

(A) 7       (B) 11      (C) 15      (D) 16

#include<iostream>

using namespace std;

void main()

{

    cout << strlen("w\x42\\\nx\103y");

}

#include<iostream>
using namespace std;
void main()

{
	cout << "w\x42\\\nx\103y";

}

上机为7

\x42

\\

\n

\103

都是一个

wB\
xCy

3.以下运算符中,自右向左结合的运算符是:

    (A) []         (B) <=         (C) *=          (D) <<

4.表达式4/8*100/2.0的值是:

    (A) 25         (B) 25.0           (C) 0          (D) 0.0

5.设变量int a = 5; 下列哪个表达式计算后,使得变量b的值不为2 ?

(A) b=a/2      (B) b=6-(--a)      (C) b=a%2       (D) b=a<3?3:2

6.设a是整型变量,不能表达数学关系式11<a<15的C++表达式是:

(A) a>11&&a<15                     (B) a==12||a==13||a==14

(C) !(a<=11)&&!(a>=15)             (D) 11<a<=14

对C++表达式  11<a<15 的计算:

11<a è 0 或1

0<15 è 1 或 1<15 è

原因:C++的逻辑判断结果为整型值

7.下列C++代码中,不能正确对字符串s1置串值的代码是:

  1. char *s1=new char[20]; cin>>s1;
  2. char s1=name;     //s1是字符变量,不能赋给串值

(C) char s1[5]=”name”;      (D) char s1[]={”name”};

8.一个具有6个整型指针元素的一维数组的正确定义是:

(A) int **p[6]             (B) int (*p)[6]

(C) int *p[6]              (D) *(*(p)[6])

试比较以下几种说明形式:

    int * p;       // p是指向整型变量的指针(p是关联类型为整型的指针)

    int *pa[10];   // pa是数组,元素类型是整型指针

    int (*pb)[10]; // pb是指针,指向(关联类型)长度为10的整型数组

    int * f();     // f是返回整型指针的函数名

    int (*f)();    // f是指针,指向(关联类型)是返回整型值的无参函数

    例:有声明

       int (*f)(int int);  int max(int,int);  int min(int, int);

    则:f=max;  f(a,b);     //等价于 (*f)(a,b);    max(a,b);

        f=min;  f(a,b);     //等价于 (*f)(a,b);    min(a,b);

9.执行语句 x=1; while(x++<7)cout<<’*’; 后输出结果是:

(A) **         (B) ****       (C) ******     (D) *******

(x++<7)     x<7      x=x+1

10.若用一维数组名作为调用函数时的实参,则传递给形参的是:

(A) 数组首元素的地址           (B) 数组首元素的值

(C) 数组元素的个数              (D) 数组中全部元素的值

二.简答题(每小题2分,共20分)

1.设整型变量x为任何一个整数,表达式 –2<x<2 的值是?      

2.调用函数时,希望从提供的实参变量中得到函数的结果,则对应的形参应该是? 

指针或引用类型参数

注意使用方法:

函数定义                   调用

void fun1(int x1);         int a1; fun1(a1);      //传数据值参数

void fun2(int * x2);       int a2; fun2(&a2);     //指针参数,传地址值

void fun3(int & x3);       int a3; fun3(a3);      //引用参数,传名

以上参数用于操作数据对象

void fun4(int * &x4);      int *a4; fun3(a4);     //指针引用参数,传名

以上参数用于操作指针对象

3.设有变量定义 char *s[]={“Beijing”,”Shanghai”,”Guangzhou”}; 执行语句cout<<*(s+1)+1; 输出是?   hanghai

    s是字符指针数组

S[0]

S[1]

S[2]

Beijing\0

Shanghai\0

Guangzhou\0

s+1 == &s[1]       //s是二级指针

*(s+1) == &s[1][0]

*(s+1)+1 == &s[1][1]  // 一级指针

输出字符指针是输出所指串值

4.表述“变量x的值等于3”和“变量y的值等于5”其中有且只有一种情况成立的表达式是?        x==3&&y!=5||x!=3&&y==5      (x==3)!=(y==5)

5.设有变量定义int a[4][3],*p=a[2]; 表达式 p+2 指向的元素是?    a[2][2]

a[0][0]   a[0][1]    a[0][2]

a[1][0]   a[1][1]    a[1][2]

a[2][0]   a[2][1]    a[2][2]

a[3][0]   a[3][1]    a[3][2]

6.将字符串str2拷贝到字符数组str1[]中,应调用函数?    strcpy(str1,str2)

7.说明语句 char *w(); 的含义是?  函数原型。w是函数名,返回字符型指针

8.表达式new int[10] 的含义是?分配长度为10的整型数组堆内存,返回首地址

    分配堆要用指针记录地址

    int *p=new int[10], *q;

    *p = 10; p[1] = 20;     //对动态数组的两种访问方式

    *q = 10; q[0]=12;       //错误,指针没有关联对象

9.设有函数调用语句 Count(a ,num,max,min,average); 功能是由参数max, min, average返回整型数组a前num个元素中的最大值,最小值和平均值。对应的函数原型是?

void Count(int[], int, int &,int &, double &);

若调用语句为  Count(a ,num, &max, &min, &average);

则函数原型为  void Count(int[], int , int* , int* , double * );

10.有说明 struct link{ int code; link *next; }; link *head,*p;已知head为单链表的头结点,在*head之后插入*p结点操作的语句是?

    p->next=head->next; head->next=p;      // p->next == (*p).next

  1. 结点插在表头如何操作?       p->next=head; head=p;
  2. 结点插在表尾如何操作?

q=head; while(q->next)q=q->next; q->next=p; p->next=NULL;

  1. 遍历链表,输出结点值:

q=head; while(q->next){cout<<q->code; q=q->next;}

(4)删除一个结点*(q->next)如何操作?

    t = q->next; q ->next = t->next; delete t;

三.分析程序,写输出结果(每小题5分,共20分

1.求>0的元素和;>0的元素个数。

#include<iostream.h>

void main()

{ int a[10]={2,4,0,-5,10,6,-8,9,6,7};

  int i,s=0,count=0;

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

    if(a[i]>0) s+=a[i],count++;

      else continue;

  cout<<"s="<<s<<"  count="<<count<<endl;

}   

s=44  count=7

2. 测试静态变量和自动变量。静态变量第一次自动初始化为0,再调用时不改变。

#include<iostream.h>

a

b

a+=3

a+b

0

2

3

5

3

2

6

8

6

2

9

11

9

2

12

14

void fun();

void main()

{int i;

 for(i=1;i<5;i++)  fun();  cout<<endl;

}

void fun()

{static int a;  int b=2;

 cout<<(a+=3,a+b)<<'\t';

5    8   11   14

3.求最小公倍数

#include<iostream.h>

int lcm(int m, int n)

{ int r,a,b;

  a=m; b=n; r=m;

  do                //辗转相除法,求最大公约数

   { m=n; n=r; r=m%n;

   } while(r);

  return a*b/n;     //求最小公倍数

}

void main()

{ cout<<lcm(3,7)<<'\t'<<lcm(4,6)<<endl;

21     12

4.输出数字三角型,以递归方式建立程序。

#include <iostream.h>

void printN(int n)

{ if(n)

    { printN(n-1);

      cout << n << endl;

    }

}

void print(int w)

{ if( w )

    { print( w-1 );

      printN(w);

      cout << endl;

    }

}

void main()

print( 5 ); }

1

1 2

1 2 3

1 2 3 4

1 2 3 4 5

四.根据程序功能填空。(每空2分,共20分)

1.本程序按以下公式计算e的值,精度为1e-6。

   

#include<iostream.h>

void main()

{ double e,t,n;

  e=0;

t=n=_____(1)_____;        1.0

  while(_____(2)_____)      t>=1e-6

  { e+=t;

    _____(3)_____;         t=t/n

    n=n+1.0;

  }

 cout<<"e="<<e<<endl;

}

2.本程序由主函数输入一字符串,调用函数,把该字符串中的数字0~9转换成小写字母a~j;所有小写字母转换成大写字符。然后在主函数输出转换后的字符串。

#include<iostream.h>

#include<ctype.h>

_____(4)_____           void change(char*, char*);

void main()

{char str1[20], str2[20];

 cin>>str1;

 change(str1,str2);

 cout<<str2<<endl;

}

void change(char *s1, char *s2)

{ while(_____(5)_____)      *s1

 {if(*s1>='0'&&*s1<='9')

     *s2=_____(6)_____;     *s1 + 'a' -' 0'

   else *s2=toupper(*s1);

  _____(7)_____             s1++ ; s2++;

 }

 *s2='\0';

}

3.函数create从键盘输入整数序列,以输入0为结束。按输入逆序建立一个以head为表头的单向链表。例如,输入序列为1 2 3 4 5 0,建立的链表是5 4 3 2 1。

struct node{int data; node * next;};

void create(node * &head)

{

node *p;

 _____(8)_____;         p = new node

 cin>>p->data;

 while(p->data!=0)

 {if(head==NULL)

    { head=p; head->next=NULL; }

  else

{ _____(9)_____     p->next = head;

_____(10)_____    head = p;

}

  p=new node;

  cin>>p->data;

 }

}

五.程序设计(第1小题6分,第2、3小题各7分,共20分)

  1. 编写函数输出以下形状的图形,其中构成图形的符号和输出的行数通过参数传送。

#

#   #

#       #

#           #

# # # # # # # # #

答案:

#include<iostream.h>

#include<iomanip.h>

void print_figure(int row, char tag)      //行参数和符号参数

{int i;

 cout<<setw(row-1)<<" "<<tag<<endl;       //输出第1行

 for(i=2;i<row;i++)                       //输出第2行到row-1行

   cout<<setw(row-i)<<" "<<tag<<setw(2*(i-1)-1)<<" "<<tag<<endl;

 for(i=1;i<=2*row-1;i++)cout<<tag;        //输出最后1行

 cout<<endl;

}

void main() { print_figure(5,'*');}

  1. 编写一个程序,实现如下功能:

(1)输入k(<100)个整数到数组x[100]中;

(2)计算k个数的平均值及大于平均值的元素个数。

答案:

#include<iostream.h>

void main()

{int x[100],k,i,n;

 double sum=0.0,ave;

 cout<<"How many Data ?\n";

 cin>>k;

 for(i=0;i<k;i++)        //求和

 { cin>>x[i]; sum+=x[i];}

 ave=sum/k;              //求平均值

 n=0;

 for(i=0;i<k;i++)        //求大于平均值的元素个数

   if(x[i]>ave) n++;

 cout<<"average="<<ave<<"\n";

 cout<<"There are "<<n<<" elements large than average.\n";

}

  1. 编写一个程序,实现如下功能:

(1)从键盘输入a op b。其中a, b为数值;op为字符,限制为+、-、*、/ 。

(2)调用函数count(op,a,b),计算表达式a op b的值。由主函数输出结果。

答案:

#include<iostream.h>

double count(char, double, double);

void main()

{double a,b; char op;

 cout<<"Begin count:\n";

 do

 { cin>>a>>op>>b;

   if(op!='+'&&op!='-'&&op!='*'&&op!='/')

      cout<<"input error,please again:\n";

   else break;

 }while(1);

 cout<<a<<op<<b<<"="<<count(op,a,b)<<endl;

}

double count(char op, double a, double b)

{ switch(op)

  { case '+': return a+b;

    case '-': return a-b;

    case '*': return a*b;

    case '/': return a/b;

  }

}

世间温柔,不过是芳春柳摇染花香,槐序蝉鸣入深巷,白茂叶落醉故乡。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值