C++试卷

发布时间:2023年12月18日

_____________ ________

诚信应考,考试作弊将带来严重后果!

?华南理工大学期末考试?? 2008-12

高级语言程序设计 I 》试卷 ( A )?

注意事项:1. 考前请将密封线内填写清楚;

????????? 2. 所有答案写在答题纸上;

?????? ? 3.试卷和答题纸同时提交;

????????? 4.考试形式:闭卷;

????????? 5. 本试卷共五大题,满分100分,考试时间120分钟

题 号

总分

得 分

评卷人

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

  1. 下列选项中,合法的常量表示是(??? )。

(A) ‘program’??? (B) 183AF????? (C) -618e3???? (D) 1.0e-5.3

  1. 执行下列语句后,i,j,k的值为(?? )。

int i=1,j=1,k=1; (i++,--j) && ++k;

(A) 2,0,1????? (B) 2,0,2????? (C) 1,1,1????? (D) 1,0,2

  1. 以下有关C++的说法中,正确的陈述是(??? )。

(A) const只能约束普通内存变量的的写操作,不能约束指针变量的写操作。

(B) 静态变量和全局变量的作用域都是文件作用域。

??? (C)一维数组定义中数组的长度表达式可以使用赋初值的变量。

??? (D) inline函数没有普通函数调用的时空开销。

  1. 有如下代码段,不正确的函数调用形式(??? )。

typedef int (*pType)(int,int);

int max(int a,int b){ return a>b?a,b; }

pType pf = max;

(A) pf(1,2);?????? (B) (*pf)(1,2);???? (C) max(1,2);?? ??? (D) (&pf)(1,2);

  1. 以下程序段中,循环次数是()

for(int i=10;i>0&&i%2;){ i=i-2; }

(A) 0?????? ??? (B) 4????????? ??? (C) 5?????? ??? (D) 6

  1. 已知int iArray[2][2]={0,1,2,3},下列表达式的值为2的是(??? )。

(A) iArray[2][1]??? ?????????? (B) iArray[1][1]

(C) *(*(iArray+1)) ???? ??????? (D) *(*(iArray)+1)

  1. 假设 char *a[]={“fortran”,“basic”,“c++”, “java”};

则语句cout<<a+3;? 的输出结果是(??? )。

(A)c++java???? (B)一个地址值?????? (C)c++???? (D)java

  1. 设有两个字符指针char *s1和char*s2分别指向两个字符串,判断字符串s1和s2是否相等的表达式是(??? )。

(A) s1=s2?? (B) s1==s2???? (C) strcmp(s1,s2)==0??? (D) strcpy(s1,s2)==0

  1. 下列运算符,优先级最高的是(??? )。

(A)--????????? (B) =????????????? (C)->????????? (D)[]

  1. 30*(‘F’-‘C’)/5-2*3表达式的值是(??? )。

(A)6?????????? (B) 12???????????? (C)48????????? (D)18

  1. sizeof(char)+6*(6>5)/(2>3?2:3)表达式的值是(??? )。

(A) 3????????? (B) 4????????????? (C) 1????????????? (D)2

二、简答题。(共20分)

1.写出两个表达变量x和y的值都不等于零的逻辑表达式。 x!=0&&y!=0 x&&y

2.有以下语句,循环体执行次数是多少?结束后x的值是什么??? ??? 10,-1

??? int x=10; ?while(x--) cout<<x<<endl;

3.有说明语句:

??? int a; double x; int *p=new int[100];

分析以下表达式值的类型。

??? a+x???? a=a+x????? p+1???? double? int? int*

4.设有函数:

??? void fun1(int a){ a++; };

void fun2(int & a){ a++; };

??? 有以下调用:

??? int b=5;

???? fun1(b);????? //b的值是什么?

fun2(b);????? //b的值又是什么?

两次调用函数后变量b的值有变化吗?为什么?? 传值参数,引用参数

5.设有函数:

int function(int a)

{ static int k=0;? return a+k++; }

并有调用:

??? int t=1;

? ?? t=function(t)+function(t)+function(t);

有人说t的结果值等于3,对吗?为什么?????????????? 6,k是静态变量

6.设有语句:

??? int *ap=new int[10];

请写出两个动态数组最后一个元素的表示形式。

Ap[9]

*(ap+9)

7.请解释以下说明语句中标识符www的含义。

??? double * www(double);

www是函数名,有一个double值参,返回值类型为double*

8.设有语句:

??? char *s="South China University of Technology";

请写输出子串“University of Technology”的语句。? cout<<s+12<<endl;

9.有说明语句:

??? int ary[100]; int max;

赋值语句调用函数MaxAry求数组的最大元素值:

??? max=MaxAry(ary,10);

请写出MaxAry的函数原型。????? int MaxAry(const int *,int);

或?? int MaxAry(const int [],int);

10.有语句:

struct link{ int code; link *next; }; link *head;

//……

push(head,256);

已知head为单链表的头结点,函数调用语句push在表头插入一个数据,请写出对应的函数原型。????? void push(link *&, int);

三、阅读程序写输出结果(共20分)

1.//循环

#include <iostream.h>

void main()

{ int i=0,s=0;

? while (i++<=10)

? { if(i%2) continue;

??? s=s+i;

??? cout<<s<<'\t';

? }

}

2?? 6?? 12? 20? 30

2.//数组指针

#include<iostream.h>

void main()

{ int num[5];

? int *p=num, i;

? for(i=1;i<=5;i++) num[i-1]=i;

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

??? cout<<num[i]+(*p++)<<'\t';

? cout<<endl;

}

2????? 4????? 6????? 8????? 10

3. //递归

#include<iostream.h>

void print(char ch)

{ int i=0;

if(ch=='D')

return;

else

{ print(ch+1);

???? ? while(i++<=ch-'A')

?cout<<ch;

???? ? cout<<endl;

???? }

}

void main()

{ print('A');

}

CCC

BB

A

4. //函数指针参数

#include <iostream.h>

void fun(int *x, int *y)

{ cout<<"*x="<<*x<<'\t';

cout<<"*y="<<*y<<'\t';

*x = 3 ;

*y = 4 ;

}

void main()

{ int x = 1, y = 2 ;

fun(&y, &x);

cout<<"x="<<x<<'\t';

cout<<"y="<<y<<'\t'<<endl;

}

*x=2 *y=1 x=4 y=3

四、程序填空题(每空2分,共20分)

1. 假设90分以上为A等,80分到89分为B等,70分到79分为C等,60分到69分为D等,60分以下为E等。下面是输入一个分数,输出相应的五级制成绩的程序。

#include<iostream.h>

void main()

{double score;

?cout<<"score="; cin>>score;

?if( score > 100 || score < 0 )? cout <<"Input Error!";

?? else? switch(? ??????(1)???? ??)????????? ?// (1)? (int) score/10

???????? {case 9:

????????? case 10: cout<<"A\n"; break;

????????? case 8:? cout<<"B\n"; break;

????????? case 7:? cout<<"C\n"; break;

????????? case 6:? cout<<"D\n"; break;

????????? default:????? (2)???? ?;????? // (2)? cout<<"E\n";?

???????? }

}

2. 下面是显示如下图案的程序。

1111111111

?2222222

? 33333

?? 444

??? 5

#include<iostream.h>

void main()

{ int i ,? j, k ;

? for( i = 1; i <= 5; i++ )

?? {? for( k = 1;????? (3)???? ?; k++ )???????

?????????? cout<<ends ;

????? for( j =1 ;????? (4)???? ??; j++ ) ????

????? cout << ??????(5)???? ??;???????????

????? cout<<endl;??

}

}

#include<iostream>

using namespace std;

int main()

{

??? int i, j, k;

??? for (i = 1; i <= 5; i++)

??? {

??????? for (k = 1; k < i; k++)

??????????? cout << " ";

??????? for (j = 2*i-1; j >= 1; j--)

??????????? cout << i;

??????? cout << endl;

??? }

??? return 0;

}

3.下面的程序的输出结果是:

  1. 3?? 2? 1? 10? 9? 8? 7? 6? 5???

#include <iostream.h>

void? fun( ??????(6)???? ??, int n , int m )?? ?//int * s? 或? int? s[]

{ int i , j , t ;

? i = n ; j = m ;

? while ( i<j )

?{ t=s[i]; s[i]=s[j]; s[j]=t; i++; j--; }

?}

void? main()

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

? fun( a , 0 , 3 );???????

? fun( ??????7???? ??);?????????? ??????????????// a,4,9?

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

???? cout << a[i] << ends;

? cout << endl;

}

4.下面的程序运行时屏幕显示Please? input? i(1~10) :? 键盘输入3后,屏幕显示程序运行结果如图1所示:?????????????????

图1 程序运行结果

#include <iostream.h>

int i ;?????? ?????????????????

void? prints( ??????(8)???? ??, int i )??? ?????// char * s

{? cout<< ??????(9)???? ??<< endl;????? ????? ?// (s + i – 1)

?? cout<< ??????(10)???? ??<< endl; ??? ???????// *( s + i )

};

void? main()

{? int? i ;

?? cout << "Please? input i ( 1~10 ): ";

?? cin >> i;?

?? prints ( "ABCDEFGHIJ", i );

}

五、编程题(20分)

1、设计程序,输入一个正整数i(<256),求另一个正整数j,使i和j在用8位二进制表示时互为逆序。例如,输入i=3(00000011),应求得j=192(11000000)。

#include<iostream.h>

void main()

{ int i,j=0,k;

? cout<<"i=";

? cin>>i;

? for(k=0;k<8;k++)

? { j=j*2+i%2;

??? i/=2;

? }

? cout<<"j="<<j<<endl;

}

2、以下程序由随机数生成一个整数序列,放在数组a中,然后按奇数在前,偶数在后的顺序重新排放。程序运行效果如图2所示。请编写函数RandAry和函数PutAry。

#include<iostream.h>

#include<stdlib.h>

#include<time.h>

void RandAry(int *a, int n, int m);

void PutAry(int *a, int n);

void main()

{ int *a, i, n;

? cout<<"n=";? cin>>n;

? a=new int[n];

? RandAry(a, n, 100);? ?????? //用小于100的随机数对数组赋值

? for(i=0; i<n; i++)? cout<<a[i]<<"?? ";?????? ??????? //输出原始序列

? cout << endl;

? PutAry(a,n);???????????????????? //整理数组,奇数放在前,偶数在后

? for(i=0; i<n; i++)? cout<<a[i]<<"?? ";?????? ??????? //输出整理后序列

??cout << endl;

}

图2? 整理数据

void RandAry(int *a, int n, int m)

{ srand( time( 0 ) );????????????? //调用种子函数

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

? a[i] = rand() % m; ?????? ??????? //用随机函数初始化数组

}

void PutAry(int *a, int n)

{ int i,t,k=0;

? for( i = 0; i<n; i++ )

??????? if(a[i]%2)

??????? { t=a[i];

??????? ? a[i]=a[k];

??????? ? a[k++]=t;

??????? }

}

3、设有说明语句:

??????? struct list{ int data;? list * next; };

??????? list *head;

head是有序单向链表的头指针。请编写函数:

??????? void Count(list * head);

计算并输出链表中数据相同值的结点及个数。例如,数据序列为:

2 3 3 3 4 5 5 6 6 6 6 7 8 9 9

则输出为:

data????????? number

3?????????????? 3

5?????????????? 2

6?????????????? 4

9?????????????? 2

void Count(list * head)

{ list *p,*q;

? int n=1,t=0;//t表示是否发现了相同的值,n为相临结点具有相同值的结点的个数。

? q=head; p=head->next;

? cout<<"data\t"<<"number\n";

? while(p)

{ if(q->data==p->data)

????????? {n++; t=1;}

????? else t=0;

? if(!t&&n>1)

? {cout<<q->data<<'\t'<<n<<endl;

?? n=1;

? }

?q=p; p=p->next;

}

?if(n>1)//考虑最后一组相邻节点的情况

?? cout<<q->data<<'\t'<<n<<endl;

}

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

文章来源:https://blog.csdn.net/2302_79394843/article/details/135041389
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。