发布时间 : 星期日 文章C++语言程序设计自测练习(一)更新完毕开始阅读e27187a3b0717fd5360cdc97
49. 当定义一个结构体变量时,系统分配给该变量的内存大小等于各成员所需内存大小的_____。 50. 一个指针类型的对象占用内存的________个字节的存储空间。
51. 一个指针指向一个数据对象,它保存着该数据对象的________,若数据对象为DataType类型,则相应的指针类型为__________。
52. 若要把一个整型指针p转换为字符指针,则采用的强制转换表达式为________。 53. 假定一个数据对象为int*类型,则指向该对象的指针类型为_______。
54. 假定p是一个指向整数对象的指针,则用________表示该整数对象,用________表示指针变量p的地址。
55. 假定p是一个指针,则*p++运算首先访问________,然后使________的值增1。 56. 假定p是一个指针,则(*p)++运算首先访问________,然后使________的值增1。 57. 假定p所指对象的值为25,p+1所指对象的值为42,则*p++的值为________。
58.假定p所指对象的值为25,p+1所指对象的值为42,则*++p的值为________。
59. 假定p所指对象的值为25,p+1所指对象的值为42,则执行(*p)++运算后,p所指对象的值__。 60.假定p所指对象的值为25,p+1所指对象的值为42,则执行*p++运算后,p所指对象的值为________。
61. 假定对数组a[]进行初始化的数据为{2,7,9,6,5,7,10},则a[2]和a[5]分别被初始化为________和________。
三、程序填充题,对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程序下面相应标号的后面。
1. 采用指针访问方式从键盘给数组a[N]输入数据,然后对元素值重新按逆序存放并输出。 #include
{ int a[N],*p,*q;
for(p=a; p int r=*p; *p=*q; *q=r; ___(2)___; ___(3)___; } for(p=a;p 2. 从键盘上输入一个正整数,然后把它转换成的二进制数的每一位存放到一维数组中,最后输出该二进制数。注意二进制数的存放是按照从低位到高位的次序进行的。 #include cout<<\输入一个整数:\ cin>>x; int a[20],k=0,r; 21 do { r=x%2; a[k++]=r; x=___(1)___; } while(___(2)___); for(--k;k>=0;k--) ___(3)___; cout< 3. 对数组a[n]按升序进行的选择排序算法 void SelectSort(int a[], ___(1)___) { int i,j,k; for(i=1;i for(j=i;j if(a[j] int x=a[i-1]; a[i-1]=a[k]; ___(3)___; } } 4. 对数组a[n]按升序进行的插入排序算法 void InsertSort(___(1)___, int n) { int i,j,x; for(i=1;i for(j=i-1;j>=0;j--) //为x顺序向前寻找合适的插入位置 if(x 5. 对按从小到大排列的有序数组a[n]进行二分查找x的算法,若查找成功返回该元素下标,否则返回-1。 int BinarySearch(int a[],int x) { int low=0, high=N-1; //定义并初始化区间下界和上界变量 int mid; //定义保存中点元素下标的变量 while(low<=high) { mid=___(1)___; if(x==a[mid]) ___(2)___; else if(x 22 return -1; } 6. 用插入排序方法对table指针数组中size个指针所指向的字符串进行按升序排序的算法。 void sort(char *table[], int size){ for(int i=1,___(1)___; i++){ char *p=table[i]; for(int j=i-1; j>=0 ; j--) if(strcmp(p,table[j])<0) ___(2)___; else break; table[j+1]=___(3)___; } } 7. 假定有定义为“struct NODE{int data; NODE* next;};”,下面算法根据table数组中的n个元素建立一个表头指针为L的链表,链表中结点值的顺序与数组元素值的顺序相同。 void f5(NODE*& L, int table[], int n) { if(n<=0) {L=NULL; return;} L=new NODE; //生成附加的头结点 int i=0; NODE* p=L; while(___(1)___) { p=p->next=___(2)___; p->data=___(3)___; i++; } p->next=NULL; //把最后一个结点的指针域置空 p=L; L=L->next; //使L指向链表的第一个带值的结点 delete p; } 8. 假定有定义为“struct NODE{int data; NODE* next;};”,下面算法根据table数组中的n个元素建立一个表头指针为L的链表,链表中结点值的顺序与数组元素值的顺序正好相反。 void f6(NODE*& L, int table[], int n) { L=NULL; if(n<=0) return; int i=0; NODE* p; while(___(1)___) { p=new NODE; p->data=___(2)___; p->next=L; ___(3)___; i++; 23 } } 9. 假定有定义为“struct NODE{int data; NODE* next;};”,下面算法是依次显示输出以L为表头指针的链表中各结点的值。 void f7(NODE* L) { for(___(1)___; p!=NULL; ___(2)___) cout<<___(3)___ <<' '; cout< 10. 假定有定义为“struct NODE{int data; NODE* next;};”,下面算法是把以L为表头指针的链表中各结点依次按相反次序链接并返回新链表的表头指针。 NODE* f8(NODE* L) { if(L==NULL) return NULL; NODE *p=NULL, *q=L, *t; while(q!=NULL) { t=q; q=___(1)___; t->next=___(2)___; p=t; } ___(3)___; } 四、写出程序运行结果 1. #include for(i=1;i<=T;i+=2) for(j=2;j<=T;j+=2) { if(i+j 2. #include int a,b,c=0; for(a=1;a<4;a++) for(b=6;b>1;b-=2) { if((a+b)%2==0) c+=a+b; else c+=a*b; if(b==2) cout< 24