实验十四 指针(2)
班级______________姓名___________指导老师_____________成绩___________
第_____________机房___________号机器 时间:________________________
实验目的:1,掌握数组与指针的关系并能够利用指针解决数组的相关问题。
2,掌握字符串与指针的关系并能够利用指针处理字符串的问题。
3,掌握指针与函数的关系并能够利用指针处理函数问题。
4,了解指向指针的指针的概念及其使用方法。
5,能够使用指针进行程序设计。
实验要求:每次实验前,学生要先预习实验内容,写出分析结果或程序,经实验指导老师检查后,上机运行、调试程序,得出最终正确结果。
实 验 内 容
一、读程序
要求:读懂程序,写出分析结果;上机运行程序,得到运行结果,比较之。
1,
#include <stdio.h>
main()
{ int a=1,b=2,c=3,*pa=&a,*pb=&b,*pc=&c;
a++;c+=b;
{ int b=4,c,*pb=&b,*pc=&c;
c=2*b;
a+=c;
printf("%d,%d,%d\n",*pa,*pb,*pc);
}
printf("%d,%d,%d\n",*pa,*pb,*pc);
}
分析结果
运行结果
2,
#include <stdio.h>
void inv(int *a,int n)
{ int *p,*pa,*pe;
int t,m;
m=(n-1)/2;
C语言程序设计上机指导与同步训练
·76·
·76·
pa=a;
pe=a+n-1;
p=a+m;
while(pa<=p)
{ t=*pa;
*pa=*pe;
*pe=t;
++pa;
--pe; }
}
main()
{ int a[ ]={0,1,2,3,4,5,6,7,8,9},i;
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
inv(a,10);
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
}
分析结果
运行结果
3,
#include <stdio.h>
#include <string.h>
main()
{ char b1[8]="abcdefg",b2[8],*pb=b1+3;
while (--pb>=b1) strcpy(b2,pb);
printf("%d\n",strlen(b2));
}
分析结果
运行结果
4,
#include <stdio.h>
main()
{ int a[2][3]={{1,2,3},{10,11,12}};
int i,j,*pa[2];
pa[0]=a[0];
pa[1]=a[1];
for (i=0;i<2;i++)
{ for(j=0;j<3;j++)
printf("%4d",*pa[i]++);
printf("\n"); }
}
第一部分 C语言程序设计上机指导
·77·
·77·
分析结果
运行结果
5,
#include <stdio.h>
swap(int *p1,int *p2)
{ int t;
t=*p1;*p1=*p2;*p2=t;
}
main()
{ int a=2,b=3,*pa,*pb;
pa=&a;pb=&b;
if(*pa<*pb) swap(pa,pb);
printf("%d,%d\n",a,b);
printf("%d,%d\n",*pa,*pb);
}
分析结果
运行结果
二、完成程序
1,下面程序通过指向整型的指针将数组a[3][4]的内容按3行×4列的格式输出,请给
printf()填入适当的参数,使之通过指针p将数组元素按要求输出。
#include <stdio.h>
main()
{ int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int *p;
for(p=a[0];______________;______________)
{ if((p-a[0])%4==0) printf("\n");
____________________;
}
}
2,下面程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串。
#include <stdio.h>
#include <string.h>
main()
{ char str[81],*sptr;
int i;
for (i=0;i<80;i++)
{ str[i]=getchar();
if(str[i]=='\n') break;
}
str[i]='\0';
sptr=str;
while(*sptr)
C语言程序设计上机指导与同步训练
·78·
·78·
putchar(____________);
}
3,下面的程序实现从10个数中找出最大值和最小值。
#include <stdio.h>
int max,min;
find_max_min(int *p,int n)
{ int *q;
max=min=*p;
for(q=_________;___________;q++)
if(___________) max=*q;
else if (___________)min=*q;
}
main()
{ int i,num[10];
printf("input 10 numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&num[i]);
find_max_min(num,10);
printf("max=%d;min=%d\n",max,min);
}
4,编写一个程序,实现将任意输入的2个字符串,连接成一个字符串,在子函数中实现连接,形参用字符指针变量,在____________填写正确内容。
#include <stdio.h>
#include <sting.h>
void mystrcat(char *pa,char *pb)
{
for(;*pa!='\0';pa++) ;
for(;*pb!='\0';______________;)
______________;
*pa='\0';
}
main()
{char a[80],b[20];
gets(a);
gets(b);
___________________;
printf("\nLink string:%s\n",a);
}
三、调试程序
1,仔细阅读程序,判断程序对错。
#include <stdio.h>
main()
{
int va[10],vb[10],*pa,*pb,i;
pa=va;pb=vb;
第一部分 C语言程序设计上机指导
·79·
·79·
for(i=0;i<3;i++,pa++,pb++)
{
*pa=i;*pb=2*i;
printf("%d\t%d\n",*pa,*pb);
}
pa=va[0];pb=vb[0];
for(i=0;i<3;i++)
{
*pa=*pa+i;
*pb=*pb+i;
printf("%d\t%d\n",*pa++,*pb++);
}
}
运行结果,正确
错误所在,错误
应改为,
2,
#include <stdio.h>
main()
{
int i;
char *a,b[6];
a="STUDY";
b[0]='s';b[1]='t';b[2]='u';b[3]='d';b[4]='y';b[5]='\0';
printf("a=%s\n",a);
printf("b=%s\n",b);
for(i=0;i<5;i++)putchar(a[i]);
putchar('\n');
while (a!=’\0’) putchar(a++);
putchar('\n');
i=0;while(b[i])putchar(b[i++]);
putchar('\n');
}
运行结果,正确
错误所在,错误
应改为,
3,以下程序的功能是:输入3个字符串,按由小到大的顺序输出。
#include <stdio.h>
main()
{
char str1[20],str2[20],str3[20];
char swap();
C语言程序设计上机指导与同步训练
·80·
·80·
printf("\nPlease enter three string:\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,str2)>0) swap(str2,str3);
printf("\n");
printf("%s\n%s\n%s\n",str1,str2,str3); }
char swap(char *p1,char *p2)
{ char *p;
p=p1;p1=p2;p2=p;
}
运行结果,正确
错误所在,错误
应改为,
4,以下程序实现选择法对输入的任意10个整数排序。
#include <stdio.h>
main()
{
int *p,i,j,a[10];
p=a;
for(i=0;i<10;i++)
scanf("%d",p++);
p=a;
sort(p,10);
putchar('\n');
for(p=a,i=0;i<10;i++)
printf("%d,",p);
}
int sort(int *x,int n)
{ int i,j,k,t;
for(i=0;i<n-1;i++)
{ k=i;
for(j=i+1;j<n;j++)
if(x[j]>x[k]) k=j;
if(k!=i)
{ t=x[i];x[i]=x[k];x[k]=t;}
}
}
运行结果,正确
错误所在,错误
应改为,
第一部分 C语言程序设计上机指导
·81·
·81·
四、写程序
1,编写一个名为prd、无返回值的函数,它带有3个参数;一个是int型数组x,数组
x的长度为n,以及float型指针p,由它所指变量带回数组 x中 n个元素的平均值。main
函数调用函数prd,并输出实际数组元素的平均值。
2,编写一个名为 bst 的函数,它以一个 int 型数组及数组元素个数为参数,功能是找出数组中最小元素和最大元素,将最小元素与数组首元素交换,最大元素与数组尾元素交换。
main函数用实际数组验证之。
3,编写一个程序,用每周的g14533g7003名g12228g2033g3999g2282一个字符指针数组,当键盘输入整数为 1
到7g7114,g7186g12046g11468g5224的g7155g7411名,键入g1866g1194整数及字符g7114g7186g12046错g16835g1461g5699。