《高级语言c程序设计》由会员分享,可在线阅读,更多相关《高级语言c程序设计(41页珍藏版)》请在金锄头文库上搜索。
1、思考题解答思考题解答 1.什么是地址,什么是地址中的内容,两者的什么是地址,什么是地址中的内容,两者的 区别是什么?区别是什么?P136n42000p2000例:例:int n=4,*p; p=&n;变量的属性变量的属性:内容和地址内容和地址12.尝试建立尝试建立1个个2维数组并画出该数组在内存维数组并画出该数组在内存 中的存储状态图。中的存储状态图。P140例:例:int a23;a00a01a02a03a10a11a12a23.什么是指针?地址和指针有什么样的关系?什么是指针?地址和指针有什么样的关系?P139*=;初值初值:可缺省。可以是该类型的某变量的地址可缺省。可以是该类型的某变量的
2、地址34.指针的值和类型是怎样规定的?它有哪些运指针的值和类型是怎样规定的?它有哪些运 算?算?P139-140*=;类型名类型名-基本类型名及派生类型名,用户定义的类、枚基本类型名及派生类型名,用户定义的类、枚 举类型、结构类型、联合类型名举类型、结构类型、联合类型名初值初值可缺省。可以是该类型的某变量的地址可缺省。可以是该类型的某变量的地址运算:取地址运算运算:取地址运算&和取内容运算和取内容运算*; 数组指针的算术运算;数组指针的算术运算; 指针的关系运算;指针的关系运算; 指针的赋值运算。指针的赋值运算。45.用指针可有几种表示数组元素的方法,试简用指针可有几种表示数组元素的方法,试简
3、 述述3种方法的使用方法。种方法的使用方法。P142指向数组指向数组元素元素的指针的指针指向数组的指针指向数组的指针指针数组指针数组56.简述指针和数组的关系。简述指针和数组的关系。P14267.指针有哪些运算?和普通的数据类型的运指针有哪些运算?和普通的数据类型的运 算有什么不同?算有什么不同?P139-140运算:取地址运算运算:取地址运算&和取内容运算和取内容运算*; 数组指针的算术运算;数组指针的算术运算; 指针的关系运算;指针的关系运算; 指针的赋值运算。指针的赋值运算。78.&和和*的用法各有几种?它们的使用方法是的用法各有几种?它们的使用方法是 什么?什么?P140&:取地址运算
4、;:取地址运算; *:指针:指针/取内容运算。取内容运算。89.试述函数指针的用法。在计算机上实现试述函数指针的用法。在计算机上实现 simpson函数。函数。P147-148910.试述指针在函数的参数传递中的作用及其试述指针在函数的参数传递中的作用及其 使用方法。使用方法。P146指针作函数参数指针作函数参数-函数的参数函数的参数(引用型参数除外引用型参数除外)在调用过程在调用过程 中,实参中,实参(表达式表达式)的值的值仅在调用中有意义仅在调用中有意义 的形参,参加函数体的运算。难以实现相的形参,参加函数体的运算。难以实现相 对于函数的外部的对于函数的外部的“全局全局”变量作某些处理。变
5、量作某些处理。1011.简述指针和函数的关系。简述指针和函数的关系。P146函数返回指针函数返回指针-指针型函数指针型函数:返回值为指针的函数,返回类返回值为指针的函数,返回类 型的说明应指明指针的对象类型后加型的说明应指明指针的对象类型后加*。函数指针函数指针-函数的地址也可作指针的值,使函数作为函数的地址也可作指针的值,使函数作为 参数参数指针作函数参数指针作函数参数-函数的参数函数的参数(引用型参数除外引用型参数除外)在调用过程在调用过程 中,实参中,实参(表达式表达式)的值的值仅在调用中有意义仅在调用中有意义 的形参,参加函数体的运算。难以实现相的形参,参加函数体的运算。难以实现相 对
6、于函数的外部的对于函数的外部的“全局全局”变量作某些处理。变量作某些处理。1112.怎样使用动态分配运算符对指针变量进行怎样使用动态分配运算符对指针变量进行 动态分配?动态分配?P148new-动态数据生成动态数据生成 生成生成1个无名的动态变量,返回个无名的动态变量,返回1个该类型个该类型的指针值,程序中利用指针对该变量操作;的指针值,程序中利用指针对该变量操作;newnewsize /数组数组new()1212.怎样使用动态分配运算符对指针变量进行怎样使用动态分配运算符对指针变量进行 动态分配?动态分配?P148deletedelete delete-动态数据释放动态数据释放 释放释放/撤
7、消撤消new生成的动态变量。生成的动态变量。1313.什么是引用?什么是引用?P150,引用和指针的区别是,引用和指针的区别是 什么?什么?P151&=;指针:对象变量的指针:对象变量的地址地址,表示对象变量时,表示对象变量时, 用用*;*=;引用变量:已定义的变量的引用变量:已定义的变量的别名别名,表示对象,表示对象 变量时,直接代表。变量时,直接代表。1414.引用性参数具有哪些优点?引用性参数具有哪些优点?P152(1)函数外的变量以别名形式引入到函数体内参函数外的变量以别名形式引入到函数体内参 加运算;加运算;(2)不必在调用时创建与实参变量不必在调用时创建与实参变量/对象对应的值对象
8、对应的值 参数变量,当实参变量参数变量,当实参变量/对象占用内存较多时,对象占用内存较多时, 节省内存;节省内存;(3) 指针可以改变内容,任意赋值,不如引用参指针可以改变内容,任意赋值,不如引用参 数安全。数安全。1515.简述指针在简述指针在C+语言中的重要性和它在程语言中的重要性和它在程 序安全方面的负面影响。序安全方面的负面影响。P138-1531616.尝试将节中选择排序的程序改造为从尝试将节中选择排序的程序改造为从 小到大的排列顺序。小到大的排列顺序。P136#include#include void ssort(float*,int);void main(void)const i
9、nt n=500;int i;float listn,*pf; /listi=*(list+i)for(i=0;in;i+) listi=rand();pf=&list0; /&list0= list= list首地址首地址ssort(pf,n); /= ssort(list,n)17void swapl(float *a,float *b) float temp; temp=*a; *a=*b; *b=temp;void ssort(float *a,int m)/对对m个浮点数组排序个浮点数组排序 int i,j,index; float elem; for(i=0;im-1;i+) el
10、em=*(a+i); /*(a+i)=ai index=i; for(j=i+1;jm;j+) if(*(a+j)elem) elem=*(a+j); index=j; swapl(a+i,a+index); 18练习题解答练习题解答1.说明下面定义的指针的含义。说明下面定义的指针的含义。 float *pf; / pf:未赋初值的未赋初值的float型的指针变量型的指针变量 double *pd23; /pd:2维的维的double型的指针数组型的指针数组 int(*pi)2; /指向指向int型型1维数组的指针维数组的指针 P142 char *ch=“abcde”; /ch:字符串指针字
11、符串指针=a存储地址存储地址 char *name=“Tom”,”John”,”Lennis”; /name:字符串指针数组字符串指针数组 P145192.读下面的代码并完成要求的问题。读下面的代码并完成要求的问题。 已知程序的第已知程序的第1行输出数据是行输出数据是65fdf4,请判断下,请判断下 面的面的4行上出哪些可以确定其输入值,请写出哪行上出哪些可以确定其输入值,请写出哪 些可以判断的值。些可以判断的值。P140#include “stdio.h”main()int tmp=10;int *p=&tmp;int *q=p;printf(“%xn”,q); /65fdf4printf(
12、“%dn”,*p); /10printf(“%xn”,&tmp); /65fdf4printf(“%xn”,&p); /65fdf4-4=65fdf0 VC中,中,int占占4Bprintf(“%xn”,p); /65fdf4tmp10p q&tmp203.下面语句声明的是什么?下面语句声明的是什么?P143 double *ara46; a.双精度浮点型数组双精度浮点型数组 b.双精度浮点型指针数组双精度浮点型指针数组 c.非法的声明非法的声明214.设有以下的语句:设有以下的语句: int a10=0,1,2,3,4,; int *p=a; 请指出以下的对请指出以下的对a数组元素的正确引用
13、是哪些?数组元素的正确引用是哪些? 并指出其值是什么。并指出其值是什么。P1422p-a; /p2; /=*(p+2)=2*(*(a+1); /*(&a3); /3012340apP2a3225.编制函数编制函数char *FindPlace(char *str,char c);该函该函 数返回字符串数返回字符串str中第中第1次出现字符次出现字符c的位置以后的的位置以后的 字符串。若没有字符串。若没有c字符则返回字符则返回1个空字符串。个空字符串。#include#includechar *FindPlace(char *str,char c);main()char a15=This is
14、a dog.;char charc,*p;int i;cout字符串:字符串:;for(i=0;i14;i+)coutai;coutendlcharc;23coutendl查找到的字符串:查找到的字符串:;p=FindPlace(a,charc);if(p!=NULL) for(i=0;istrlen(p);i+) cout*(p+i);char *FindPlace(char *str,char c)int i; bool flag; flag=false; for(i=0;istrlen(str);i+) if (*(str+i)=c) flag=true; return (str+i+1
15、); break; if (flag=false) return (NULL);24执行结果执行结果256.完成下面的一段程序,使该程序能够输出指定完成下面的一段程序,使该程序能够输出指定 的的2维数组任意行任意列元素的值。维数组任意行任意列元素的值。P142main()static int a33=1,2,3,4,5,6,7,8,9;int (*p)3,i,j;p=a;scanf(“i=%d”,&i,&j);printf(“a%d,%d=%dn”,i,j,_);请在空格处填入代码,使得运行情况可以达到请在空格处填入代码,使得运行情况可以达到如下效果:如下效果:i=0,j=0 a0,0=1ai
16、j/*(p)0267.已知如下的结构:已知如下的结构: static char *name=“Tom”,”John”,”Follow me” 试编写试编写1个程序来输出这个数组中的数据,输出效个程序来输出这个数组中的数据,输出效 果如下:果如下:Tom John Follow me P145#include #include main()int i;static char *name=Tom,John,Follow me;for(i=0;i3;i+) printf(%sn,namei);27执行结果执行结果288.仔细检查以下的代码,完成题目。仔细检查以下的代码,完成题目。P149#inclu
17、de void main(void)int *p;p=new int;*p=10;cout“int value is:”*p;delete p;请指出程序的输出。请指出程序的输出。298.仔细检查以下的代码,完成题目。仔细检查以下的代码,完成题目。P149 #include void main(void)int *p;p=new int;*p=10;cout“int value is:”*p;delete p;详细描述这段程序在内存中执行时的变化情况。详细描述这段程序在内存中执行时的变化情况。10p308.仔细检查以下的代码,完成题目。仔细检查以下的代码,完成题目。P149 #include
18、#include0 void main(void)1 int *p;2 p=new int;3 *p=10;4 cout“int value is:”*p;delete p;printf(“%xn”,&p);回答下列问题:在程序的第回答下列问题:在程序的第3行执行后,行执行后,p中的中的数据是什么?数据是什么?*p的值是什么?在程序的第的值是什么?在程序的第4行行执行后,执行后,p中的数据是什么?中的数据是什么?*p的值是什么?的值是什么?若在若在delete p;后还有输出后还有输出&p的的printf(“%xn”,&p),这条语句是这条语句是否否意义?意义?10p319.编写求编写求3*4
19、阶矩阵和其自身转置矩阵的乘积的程阶矩阵和其自身转置矩阵的乘积的程 序,自定义结构。要求具有比较好的模块化功能。序,自定义结构。要求具有比较好的模块化功能。 完成上述题目后,尝试编制可以允许用户自己输完成上述题目后,尝试编制可以允许用户自己输 入矩阵的阶数的矩阵乘积程序。入矩阵的阶数的矩阵乘积程序。32#includemain()int i,j,k;int a34=1,2,3,4,9,8,7,6,-10,10,-5,2;int b43,c33; /转置矩阵,积转置矩阵,积for(i=0;i=2;i+) /行行 for(j=0;j=3;j+) /列列 bji=aij; /求乘积求乘积for(i=0
20、;i=2;i+) for(k=0;k=3;k+) for(j=0;j=3 & j=i;j+) cij+=aik*bkj;3310.设计设计1种数据结构,编写个函数种数据结构,编写个函数Imalloc(n),当,当 用户输入用户输入1个个n后,可以在内存中为用户分配后,可以在内存中为用户分配n个个 字节的空间,并将内存空间的首地址的指针返字节的空间,并将内存空间的首地址的指针返 回给用户。编制函数回给用户。编制函数IMFree()来释放这些内存来释放这些内存 空间。(提示:可参考空间。(提示:可参考11题的结构)题的结构)#includestruct StringNode *IMalloc(in
21、t n);IMFree(struct StringNode *iNode);struct StringNodechar m_char;struct StringNode *Next;34main()int n;struct StringNode *p;p=IMalloc(n);IMFree;struct StringNode *IMalloc(int n)int i; struct StringNode *Node; Node=NULL; for(i=1;iNext=new (struct StringNode); return Node;35IMFree(struct StringNode
22、*iNode)int i; struct StringNode *Node,*tmp; Node=iNode; tmp=Node-Next; while(tmp!=NULL) Node=Node-Next-Next; delete tmp; tmp=Node-Next; delete Node;3611.有如下定义的结构:有如下定义的结构:struct StringNodechar m_char;StringNode *Next; 试利用这种结构存储字符串,并编制函数试利用这种结构存储字符串,并编制函数 SearchMax在这个字符串中检索出出现次在这个字符串中检索出出现次 数最多的字符。数最
23、多的字符。P157#include struct StringNodechar m_char;StringNode *Next;SearchMax(StringNode *str);37main()/建立字符串建立字符串struct StringNode *head,*temp,*tail;int i;temp=new StringNode;head=temp; tail=temp;couttemp-m_char;if(temp-m_char!=*) temp-Next=NULL; tail=temp;elsedelete temp; tail-Next=NULL; break;temp-Ne
24、xt=new StringNode;temp=temp-Next;temp=head;38if(temp!=NULL) SearchMax(head);SearchMax(struct StringNode *str) /检索检索struct StringNode *tmp;int count26=0,i,Max,m,n,index; tmp=str;for(i=1;i+) if(tmp=NULL) break; elsem=tmp-m_char-a; if(m=0) countm+=1; else n=tmp-m_char-A;countn+=1; tmp=tmp-Next; 39Max=count0;index=0; for(i=1;iMax) Max=counti;index=i; cout出现最多的字符:出现最多的字符:char(A+index)共共Max次次;40执行结果执行结果41