实验指针参考标准答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言程序设计实验教学(8)
【实验目的】指针是C语言中非常重要的一章内容。通过实验让学生掌握各类指针的定义与引用、指针作为函数参数的应用、字符指针的应用、函数指针的应用。
【实验要求】使用指针来完成变量的引用,编写程序将指针作为参数进行传递,理解指针的含义。
【实验课时】10.0
【实验内容】
1. 上机编程实现用函数来将从键盘上输入的三个数按由小到大的顺序输出。要求编写自定义函数swap()用于交换两个变量的值;且函数原型为:void swap(int *p1,int *p2);;并在main函数中用指针变量作为实际参数调用函数swap();最后输出排序后的结果。
#include
main()
{void swap(int *p1,int *p2);
int n1,n2,n3; int *p1,*p2,*p3;
printf("Input three integers n1,n2,n3: ");
scanf("%d,%d,%d",&n1,&n2,&n3);
p1=&n1; p2=&n2; p3=&n3;
if(n1>n2) swap(p1,p2);
if(n1>n3) swap(p1,p3);
if(n2>n3) swap(p2,p3);
printf("Now, the order is: %d,%d,%d\n",n1,n2,n3);}
void swap(int *p1,int *p2)
{int p;
p=*p1;*p1=*p2;*p2=p;}
运行结果如下:
Input three integers n1,n2,n3: 34,21,25↙
Now, the order is: 21,25,34
2. 上机编程实现用函数来将从键盘上输入的三个字符串按由小到大的顺序输出。要求编写自定义函数swap()用于交换两个变量的值;且函数原型为:void swap(char *p1,char *p2);;并在main函数中用字符数组名作为实际参数调用函数swap();最后输出排序后的结果。
#include
#include
main()
{void swap (char *p1,char*p2);
char str1[20],str2[20],str3[20];
printf("Input three strings:\n");
gets(str1); gets(str2); gets(str3);
if(strcmp(str1,str2)>0) swap(str1,str2);
if(strcmp(str1,str3)>0) swap(str1,str3);
if(strcmp(str2,str3)>0) swap(str2,str3);
printf("Now, the order is:\n");
printf("%s\n%s\n%s\n",str1,str2,str3);}
void swap (char *p1,char*p2) /*交换两个字符串*/
{ char p[20];
strcpy(p,p1); strcpy(p1,p2); strcpy(p2,p);}
运行结果如下:
Input three lines:
I study very hard.↙
C language is very interesting.↙
He is a professor.↙
Now, the order is:
C language is very interesting.
He is a professor.
I study very hard.
3. 上机编程实现用函数来返回一维数组a中的最大值。要求设计一个自定义函数max()函数原型为:int max(int *p,int n);;在main函数中用数组名a和数组的长度n作为实际参数调用函数max();最后输出结果。
int max(int *p,int n)
{int i,max; max=p[0];
for(i=1;i if(max return max;} main() {int i,a[6]; for(i=0;i<6;i++) scanf("%d",&a[i]); printf("max=%d \n",max(a,6));} /*或者用max(&a[0],6) */ 4. 上机编程实现从键盘上输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。请编写3个函数:(1)输入10个数;input()函数原型为:void input(int *);;(2)进行处理;max_min_value()函数原型为:void max_min_value(int *);(3)输出10个数。output()函数原型为:void output(int *); 解:输入输出函数的N-S图见图10.1。交换函数的N-S图见图10.2。#include main() {void input(int *); void max_min_value(int *); void output(int *); int number[10]; input(number); max_min_value(number); output(number);} void input(int array[10]) {int i; printf("input 10 numbers: "); for(i=0;i<10;i++) scanf("%d",&array[i]);} void max_min_value(int array[10]) {int *max,*min,*p,*array_end; array_end=array+10; max=min=array; for(p=array+1;p if(*p>*max) max=p; else if(*p<*min) min=p; *p=array[0]; array[0]=*min; *min=*p; *p=array[9];array[9]=*max;*max=*p;} void output(int array[10]) {int *p; printf("Now, they are: "); for(p=array;p<=array+9;p++) printf("%d ",*p);} 运行结果如下: input 10 numbers: 32 24 56 78 198 36 44 29 6↙ Now, they are: 1 24 56 78 326 36 44 29 98 5.编写一函数,函数原型为:void invert(char *p,int m);,实现将n个数按输入顺序的逆序存放,并输出。