资源描述:
《《c语言程序设计ⅱ》实验1参考答案》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、实验1、指针(1)一、实验目的1、理解指针和指针变量、内存单元和地址、变量与地址、数组与地址的关系。2、掌握指针变量的定义和初始化,指针变量的引用方式。3、掌握指针运算符以及指叫变量的指针变量的使用。4、初步熟悉指向一维数组的指针变量的使用。5、进一步熟悉和掌握调试程序的方法。二、实验内容1、读懂以下各组程序,画示意图理解指针的使用,单步执行观察各个变量取值情况,回答相应问题。(1)以下两个程序的功能是输入三个整数,按由小到大的顺序输出。#include"程序Amain(){inta,b,c,*pl,*p2,*p
2、3,*t;scanf("%d,%d,%d",&a,&b,&c);pl=&a;p2=&b;p3=&c;if(*pl>*p2){t=p1;p1=p2;p2=t;}if(*pl>*p3){t=pl;pl=p3;p3=t;}if(*p2>*p3){t=p2;p2=p3;p3=t;}printf("%d,%d,%d",*pl,*p2,*p3);)#include//程序Bmain(){inta,b,c,*pl,*p2,*p3,t;scanf("%d,%d,%d",&a,&b,&c);pl=&a;p2=&b;p3=&c;
3、if(a〉b){t=*p1;*pI=*p2;*p2=t;}if(a〉c){t=*p1;*p1=*p3;*p3=t;}if(b〉c){t=*p2;*p2=*p3;*p3=t;}printf("%d,%d,%d",a,b,c);}回答:两个程序的主要不同在于:左边通过交换指针变泉的值实现排序,变量a,b,c的值米改变;右边通过交换指针变景所指变景的值实现排序,变景a,b,c的值变了:⑵以下两个程序的功能是通过指针变量的操作输出数组元素的值。#includevoidmain(){inta[5];int*p,i;pr
4、intf(”enter5integernumbers:");for(i=0;i<5;i++)scanff%d”,&a[i]);for(p=a;p<(a+5);p++)printf(’’%dn,*p);printf(,,u);#includevoidmain(){inti,a[5],*p=a;printf(npleaseenter5numbers:"for(i=0;i<5;i++)scanf("%d",p++);p=a;for(i=0;i<5;i++,p++)printf("%d",*p);printf(H
5、u);}回答:两个程序的主要不同在于:左边输入吋用下标法访问数组元素,输出吋用首地址加偏移觉控制指针的移动;右边输入时用指针法访问数组元素,输出时用循环变贵i控制指针的移动(3)下面所给程序是利用指针求解一个趣味智力问题(P291习题5):有n个人围成一圈,顺序排号。从第1个人幵始报数(从1到3报数),凡报到3的人退出阁子,问最后留下的是原来的第几号的那位。(先画示意图理解算法!)#include#defineN5main(){intiJk*p;for(i=0,p=a;p<=a+N;i++,p++)*p=i;//
6、给每人排号,a[0]=0表示未川p=a+l;k=N;//从1号开始报数,k表示队伍中剩下的人数for(i=0,j=l;k!=l;j++){if(p>(a+N))p=a+l;//围成一圈,队尾报数后,回到队头的第一个if(*p!=O)i++;//该位罝的人未退出,则报数if((i-3)==0){*p=O;i=O;k-;}//报数为3,则退出(数组元素赋值0),剩余人数减1P++;//移动到下一个位罝}for(i=l;i<=N;i++)//寻找未退出的数组元素的值(排号)if(a[i]!=0)printf("Thelastnumber
7、is%d”,a[i]);}回答:是否理解以上代码?指针变量p的作用是什么?2、程序改错调试T列程序的功能为:通过调用函数实现对所输入的任意两个整数,交换它们的值。程序中有三处错误。#includeswap(int*pl,int*p2){int*p;//I//2出错行号及正确代码:*p=*pl;//3//2intp*pl=*p2;"4*p2=*p;}//5//3p=*plmain()"6//5*p2=p{inta,b;"7scanf("%d%d",&a,&b);//8printf(Ha=%dtb=%dH,
8、a,b);//9swap(&a,&b);"10printf(Ha=%dtb=%dH,a,b);//113、程序填空下列程序的功能为:通过指针变fi的自增运算,扫描一维数组屮全部元素的地址,并引用它们各自的值,同时对数组中的正整数求和。#inc