int a=90; p=&a;
cout<<\ int b=50; rp=&b;
cout<<\ }
答: a=90,*rp=90 b=50,*rp=50
4.5 编程题(使用指针)
1. 已知4个字符串,编程输出它们中最小的一个。 答:编程如下:
#include
void swap(char p1[],char p2[]); void main() { char s1[10]=\ if(strcmp(s1,s2)) swap(s1,s2); if(strcmp(s3,s4)) swap(s3,s4); if(strcmp(s1,s3)) swap(s1,s3); cout< void swap(char p1[],char p2[]) { char p[10]; strcpy(p,p1); strcpy(p1,p2); strcpy(p2,p); } 2. 将一个长度为n的字符串,编程实现其逆序输出。 答:编程如下: #include void inverse(char p[]) { int n=strlen(p); int limit=n/2; for(int i=0;i 第 26 页 共 77 页 { } char t=p[i]; p[i]=p[n-i-1]; p[n-i-1]=t; } 3. 已知一个二维int型数组,编程求出它的最小的元素值。 答:编程如下: #include 4. 已知字符型指针数组中存放若干个字符串,编程从键盘上修改其中某个字符串。 答:编程如下: #include char *str[5]={\char *modify(int,char []); void main() { int n; char s[10]; cout<<\修改第几个字符串:\ cin>>n; cout<<\该字符串修改为:\ cin>>s; cout<<\修改后的字符串是 \ cout<<\修改后字符指针数组中的字符串如下:\\n\ for(int i=0;i<5;i++) cout< char *modify(int n,char s[]) { return *(str+n-1)=s; } 5. 有n个小孩排成一圈。从第1个小孩开始作1至3报数,凡报数为3的小孩从圈中出 来,求最后出圈的小孩的顺序号是多少? 答:编程如下: #include 第 27 页 共 77 页 } int n,num[100]; cout<<\输入排号人数:\cin>>n; int *p=num; for(int i=0;i int k=0,a=0; while(a while(*p==0) p++; cout<<\最后留下的是第 \号\ 4.6 简单回答下列问题 1. 指针与一般变量有何不同? 答:指针是变量,它不同于一般量。其一是指针存放的是地址值,其二指针的类型是它所指向的变量类型。 2. 指针可以作哪些运算? 答:指针的运算有4种: 赋值运算 加减一个整型数运算 在一定条件下,两个指针可以比较运算 在一定条件下,两个指针可以相减运算 3. 指针可以作数组元素,这种数组叫什么数组? 答:指针作数组元素的数组称为指针数组。 4. 什么是字符指针?字符指针与字符数组有何不同? 答:指符指针是指向字符串的指针。字符指针是变量指针,字符数组名是常量指针。 5. 什么是引用?引用有哪些特征? 答:引用不是变量,是变量或对象的别名。引用的值和地址值都是被引用的变量的值和地址值。当被引用的变量值被改变,则引用的值也被改变,反之亦然。 第5章 函数 第 28 页 共 77 页 练习题5 5.1 判断题 √ 1.函数的调用可以嵌套,函数的定义不能嵌套。 × 2.C++语言中,函数可以用原型说明,也可用简单说明。 × 3.定义函数时,存储类可以缺省,数据类型也可以省略。 × 4.函数可以没有参数,但是不能没有返回值。 × 5.函数定义时必须给出函数体,函数体内至少有一条语句。 √ 6.没有参数的两个函数是不能重载的。 √ 7.函数调用方式有传值调用和引用调用两种,传值调用中又分传值和传址两种。 √ 8.函数的存储类有外部的和静态的两种,它们的作用域分别是程序级的和文件级的。 × 9.没有返回值的函数不能设臵为内联函数。 × 10.函数可以设臵默认的参数值,默认参数值必须设臵在函数定义时的形参上。 5.2 单选题 1.当一个函数没有返回值时,该函数类型应说明为( A )。 A.void B.int C.无 D.任意 2.下列关于设臵函数默认的参数值的描述中,错误的是( C )。 A.可对函数的部分参数或全部参数设臵默认值 B.在有函数说明时,默认值应设臵在函数说明时,而不是定义时 C.设臵函数默认参数值时,只可用常量不可用含有变量的表达式 D.设臵函数参数默认值应从右向左设臵 3.下列关于被调用函数中return语句的描述中,错误的是( D )。 A.一个函数中可以有多条return语句 B.return语句具有返回程序控制权的作用 C.函数通过return语句返回值时仅有一个 D.一个函数中有且仅有一条return语句 4.函数返回值的类型是由( B )决定的。 A.调用该函数的调用函数的类型 B.定义该函数时所指定的类型 C.return语句中表达式的类型 D.接收函数返回值的变量或对象的类型 5.下列设臵函数参数默认值的说明语句中,错误的是( C )。 A.int fun(int x , int y=10); B.int fun(int x=5, int =10); C.int fun(int x=5, int y); D.int fun(int x , int y=a+b); (其中,a和b是已定义过具有有效值的变量) 6.下列选择重载函数的不同实现的判断条件中,错误的是( D )。 A.参数类型不同 B.参数个数不同 C.参数顺序不同 D.函数返回值不同 7.已知:int fun (int &a),m=10;下列调用fum()函数的语句中,正确的是( C )。 A.fun(&m); B.fun (m*2); C.fun (m); D.fun (m++); 8.在函数的引用调用中,函数的实参和形参分别应是( C )。 A.变量值和变量 B.地址值和指针 C.变量名和引用 D.地址值和引用 9.在函数的传址调用中,函数的实参和形参分别应是( B )。 A.变量值和变量 B.地址值和指针 第 29 页 共 77 页 C.变量名和引用 D.地址值和引用 10.说明一个内联函数时,应加关键字是( A )。 A.inline B.static C.void D.extern 5.3 填空题 1.如果将调用一个函数的过程分为3个步骤,第1步是 转去执行被调用函数 ,第2步是 执行被调用函数的语句 ,第3步是返回操作。 2.函数的存储类分两种,它们分别是 外部 函数和内部函数,其中 内部 函数的存储类说明不可省略,该说明符是 static 。 3.使用关键字inline说明的函数称为 内联 函数,具有相同函数名但具有不同实现的函数称为 重载 函数。 4.在调用一个函数过程中可以直接或间接地调用该函数,则该函数称为 被调用 函数。这种调用称为 嵌套 调用。 5.在引用调用中,函数实参用 变量名 ,形参用 引用名 。 5.4 分析下列程序的输出结果 1. #include int p(1),s(0); for(int i(1);i p*=i; s+=p; } return s; } void main() { int s=fun(4); cout< 2. #include for(int i(0);i<4;i++) fun(); } void fun() { int a(0); a++; static int b; b++; cout<<\ } 答: a=1,b=1 a=1,b=2 a=1,b=3 第 30 页 共 77 页