《计算机C++高级编程练习题》由会员分享,可在线阅读,更多相关《计算机C++高级编程练习题(44页珍藏版)》请在金锄头文库上搜索。
1、1 C+语言基础及过程化程序设计1.1 基础概念1. 函数声明和函数定义有什么区别?答:1) 函数声明是函数的原型,强调函数如何被使用,不包含函数的实现代码;2) 函数定义给出函数的实现代码。2. const char *p1; char * const p2;的区别答:1) const位于星号的左侧, const用来修饰指针所指向的变量,即指针指向为常量;2)const位于星号的右侧,const用来修饰指针本身,即指针本身是常量。3. delete与 delete 区别答:delete只会调用一次析构函数,而delete会调用动态分配的多个对象的析构函数4. 解释堆和栈的区别答:1) 栈:由
2、编译器自动分配释放,存放函数的参数、局部变量等。通常在超出作用域后由系统自动释放。2) 堆:一般由程序员负责分配与释放,若程序员不释放,占用的内存直到程序结束才由OS回收。5. 在什么时候需要使用“常引用”?答:如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。6. 全局变量和局部变量在内存中的区别。答:1) 全局变量储存在静态数据区,程序加载时分配并初始化,程序结束时释放;2) 局部变量在栈中,进入变量作用域后分配,超出其作用域后释放;3) 全局变量不初始化会执行缺省初始化,如整型变量缺省初始化为0,局部变量不初始化不会执行缺省初始化,往往为垃圾值。7
3、. 简述内存的分配方式。答:1) 静态存储区,是在程序编译时就已经分配好的,在整个运行期间都存在,如全局变量、常量。2) 栈上分配,函数内的局部变量和形参在栈上分配。3) 堆上分配,动态分配,用new分配内存,用delete来释放内存。8. 指针的几种典型应用情况。int *pn;-指针数组,每个元素均为指向整型数据的指针。int (*p) n;-指向一维数组的指针,这个一维数组含有n个整型数据。int *p();-返回指向整型指针的函数。int (*p) ();-指向函数的指针,要求函数无参并返回整型。 9. 说明0、0、0、“0”的区别答:0表示整数常量,值为0;0表示ASCII码值为0的
4、字符常量;0表示ASCII码值为48的字符常量;“0”为字符串常量,其中包含0和0两个字符。10. 说明下面程序中存在的问题#includeint main()int arr10, *p=arr;int i;for( ; p*p;for(; ap;+arr)cout*arr0;return 0;答:arr为数组名,对应地址不可修改,不能应用+arr运算。11. 有如下定义,请写出访问a23元素的不同方法int a45;int (*p)5 = a;答:a23、p23、*(a2+3)、*(p2+3)、*(*(a+2)+3)、*(*(p+2)+3)1.2 阅读程序1. 写出下面程序的运行结果。#in
5、clude using namespace std;int main()double numOne = 2.5;int numTwo = 3;double quotient = numOne/2;coutQuotient: quotientendl;quotient = numTwo/2;coutQuotient: quotientendl;return 0;2. 写出下面程序的运行结果。#include using namespace std;int main()int number = 103;int digit, tens, hundreds;digit = number %10;ten
6、s = (number/10)%10;hundreds = (number/100)%10;coutHundreds: hundreds, Tens: tens, Digit: digitendl;return 0;3. 运行下面的程序3次,分别输入90、78、60,写出每次程序执行的输出结果。#include using namespace std;int main()int grade;coutgrade;if(grade=85)coutExcellentn;else if(70=grade85)coutPassn;elsecoutFailn;return 0;4. 写出下面程序的运行结果
7、。#include using namespace std;bool check( int score, int baseLine)if( score = baseLine )return true;return false;bool check(int score, int baseLine = 60);int main()int score=65;if( check(score) = true)coutPassed!n;elsecoutFailed!n;if( check(score, 70) = true)coutPassed!n;elsecoutFailed!n;return 0;5.
8、 写出下面程序的运行结果。#include using namespace std;int fun(int a);double fun(double a);char fun(char a);int main()coutfun(3)endl;coutfun(3.6)endl;coutfun(A)endl;coutfun(g)=a& a=A& a=Z)result=a+32;return result;6. 写出下面程序的运行结果。#include using namespace std;int gcd(int m, int n)if(n=0)return m;return gcd(n, m%n)
9、;int main()cout1:gcd(20,8)endl;cout2:gcd(36,64)endl;return 0;7. 写出下面程序的运行结果,假定输入Hello_123。#include using namespace std;int main()char word50;coutword;for(int i=0; wordi!=0; +i)if(wordi=a & wordi= z )wordi-= 32;coutUpper case: wordendl;return 0;8. 写出下面程序的运行结果,假定输入Hello123_World。#include using namespa
10、ce std;int main()char word50;coutword;int pos=0;for(int i=0; wordi!=0; +i)if(wordi9 )wordpos=wordi;+pos;wordpos=0;coutresult: wordendl;return 0;9. 写出下面程序的运行结果。#include using namespace std;int main() int i,j; for(i=0;i5;i+) for(j=i;j5;j+) cout *; coutendl; return 0;10. 写出下面程序的运行结果。#include using name
11、space std;int sum( int a, int b=1, int c=3 )return a+b+c;int main()int sum(int a, int b=3, int c=4);coutsum (2)endl;coutsum (2,5)endl;coutsum (2,3,6)endl; return 0;11. 写出下面程序的运行结果。#include using namespace std;char & elem(char *s, int n)return sn;int main()char str=HelloWorld;elem(str,1)= A;coutstrendl; return 0;12. 写出下面程序的运行结果。#include using namespace std;int x=10; int main()int x=15;coutxendl; cout:xendl; return 0;13. 写出下面程序的运行结果。#include using namespace std;void xhg(int *a,int *b)int *tmp;tmp=b; b=a; a=tmp;cout*a *bendl;int main()int x(5),y(4);xhg(&x,&y);coutx yendl;ret