实验七指针的应用
一、实验目的
1.掌握指针变量的定义和引用。
2.掌握指针与变量的程序设计方法
3.掌握指针与数组的程序设计方法
4.掌握指针与字符串的程序设计方法
5.掌握指针与函数的程序设计方法
二、实验内容
1.[目的]访问变量的地址。
[题目内容]已知,char a;int x;float p,q; 而且a=’A’;x=125;p=10.25;q=18.75;编写程序显示变量a,x,p,q的值及其地址。
[输入]无
[输出]变量a,x,p,q的值及其地址
[提示]使用运算符&,地址输出采用%u格式(因为内存地址是无符号的整数)。2.[目的]通过指针访问变量。
[题目内容]已知,int x,y;int *ptr; 而且x=10;ptr=&x;y=*ptr;,运行下列程序,使用运算符*来访问指针所指的值。
[输入]无
[输出] x,&x、*&x,&x、*ptr,ptr、y,&*ptr、ptr,&ptr、y,&y。
[提示]地址输出采用%u格式
3.[目的]练习指针表达式。
[题目内容]已知,int x,y,a,b;int *ptr1,*ptr2; 而且x=12;y=4;ptr=&x;ptr2=&y;,编写程序,当执行表达式:a=*ptr1**ptr2-6;以及:b=(4*(-*ptr2))/(*ptr1)+10;后,各变量的值分别为多少?
[输入]无
[输出]各变量的值。
[提示]地址输出采用%u格式
4.[目的]指针与数组
[题目内容]已知,int *p,sum,i; int x[5]={5,9,6,3,7};,编写程序,使用指针来计算数组中所有元素的总和。
[输入]无
[输出]
Element Value Address
x[0] 5 1245024
x[1] 9 1245028
x[2] 6 1245032
x[3] 3 1245036
x[4] 7 1245040
sum=30
[提示]关键语句:sum=sum+*p;以及p++;
5.[目的]指针与数组
[题目内容]编写一个函数,用于对作为参数的数组中的元素求平均值,函数以指针方式进行处理。平均值为函数的返回值。
[输入]10个实数
[输出]平均值
[提示]函数原型 float average(int x[],int n);关键语句:float *p;
p=x;
for(i=0;i<n;i++,p++)
sum=sum+*p;
6.[目的]指针与字符串
[题目内容]已知,char name[20]="DELHIk"; int length; char *cptr=name; ,编写程序,使用指针来确定字符串的长度。
[输入]无
[输出]字符串的长度
[提示]关键语句:while(*cptr!='\0') cptr++; length=cptr-name;先将指针定位于字符串开始处,利用循环结构将指针移动到字符串尾部,length=cptr-name;即为字符串长度。
三、课后作业(写实验报告)
1.[目的]指针与函数
c语言指针实验总结[题目内容]使用指针作函数参数,编写用于交换两个参数值的函数。调用该函数用于对从键盘输入的两个整数进行交换。
[输入] x=100,y=200
[输出] x=200,y=100
[提示]用于交换两个参数值的函数原型为:exchange(int *a,int *b); 2.[目的]函数返回指针
[题目内容]有函数:int *larger(int *a,int *b)
{
if(*a>*b)
return a;
else
return b;
}
和主函数:
#include <stdio.h>
int main()
{
int *larger(int *a,int *b);
int x=10,y=20;
int *p;
p=larger(&x,&y);
printf("%d\n",*p);
return 0;
}
运行程序,给出运行结果,并说明此程序的功能。
3.[目的]指针综合应用
[题目内容]假设已有函数:
void swap(int *p1,int*p2)
{
int temp;
temp=*p1;*p1=*p2;*p2=temp;
}
编写程序,输入3个整数,调用swap函数,完成将3个整数按从小到大顺序输出的功能。
[输入] 3个数
[输出]从小到大顺序输出
[提示]关键语句:
if(a>b) swap(p1,p2);
if(a>c) swap(p1,p3);
if(b>c) swap(p2,p3);
4.[目的]指针综合应用
[题目内容]一个数组中的15个值已经按升序排列存放,输入一个数,编程查是否有该数,有显示其所在的位置,没有,显示“No Found”,通过指针实现。
5、完成程序
要求:依据题目要求,分析已给出的语句,填写空白。但是不要增行或删行,改动程序的结构。
○1.以下程序通过指针实现求a数组中各元素的和,请在____________填写正确
内容。
#include <stdio.h>
int main()
{ int a[6]={2,4,6,8,10,12};
int s, i,*p ;
s=0;
p=a;
for (i=0;i<6;i++)
_____________________//求各元素的和。
printf(“s=%d\n”,s);
return 0;
}
○2.下面程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输
出该字符串。
#include <stdio.h>
int main()
{ char str[61],*p;
int i;
for (i=0;i<60;i++)
{ str[i]=getchar();
if(str[i]=='\n') break;
}
str[i]='\0';
p=str;
while(*p)
putchar(____________);//输出p指向单元的内容,并使得p指针指向下一下单元。
return 0;
}
○3.编写一个程序,实现将任意输入的两个字符串,连接成一个字符串,在子函
数中实现连接,形参用字符指针变量,在____________填写正确内容。
#include <stdio.h>
void mystrcat(char *pa,char *pb)
{
while(*pa!='\0')pa++;//pa指向第一个字符串的尾部
while(*pb!='\0')
{ }//把pb指向单元的内容//连接在pa之后,可用一句或多句实现
*pa='\0';
}
int main()
{ char a[90],b[30];
gets(a);
gets(b);
//调用函数,实现两个字符串的连接。
printf("\n链接后的字符串是:%s\n",a);
return 0;
}
6、调试程序
要求:分析下列程序是否正确,如有错,错在哪儿?应如何改正?如正确,运行
结果如何?上机调试之。
1.行号 #include <stdio.h>
1.int main()
2.{ int a , b ;
3.int *p ,*q ;
4.printf("请输入两个整数:");
5.scanf("%d,%d", p ,q);
6.printf("%d,%d\n",a ,b);
7.printf("%d,%d\n",*p,*q);
9.}
2.以下程序实现求数组中的元素的和。
行号#include <stdio.h>
int main()
1 { int a[10]={1,2,3,4,5,6,7,8,9,0};
2 int sum ,*p ;
3 sum=0;
4 p=&a;
5 while( p<p+10)
6 s + = *p;
7 printf(“sum=%d\n”,sum);
8 return 0;
9 }
3.以下程序的功能是:输入三个字符串,按由小到大的顺序输出;
行号#include <stdio.h>
1 int main()
2 {
3 char str1[20],str2[20],str3[20];
4 void swap();
5 printf("Please enter three string:\n");
6 gets(str1); gets(str2);gets(str3);
7 if (strcmp(str1,str2)>0) swap(str1,str2);
8 if (strcmp(str1,str3)>0) swap(str1,str3);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论