admin 管理员组文章数量: 887018
2024年2月26日发(作者:methodinfo在c++中的替代)
实验七 指针的应用
一、实验目的
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 sum=sum+*p; 6.[目的]指针与字符串 [题目内容] 已知,char name[20]="DELHIk"; int length; char *cptr=name; ,编写程序,使用指针来确定字符串的长度。 [输入] 无 [输出] 字符串的长度 [提示]关键语句: while(*cptr!='0') cptr++; length=cptr-name;先将指针定位于字符串开始处,利用循环结构将指针移动到字符串尾部,length=cptr-name;即为字符串长度。 三、课后作业(写实验报告) 1.[目的]指针与函数 [题目内容] 使用指针作函数参数,编写用于交换两个参数值的函数。调用该函数用于对从键盘输入的两个整数进行交换。 [输入] 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 int main() { int *larger(int *a,int *b); int x=10,y=20; int *p; p=larger(&x,&y); printf("%dn",*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 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=%dn”,s); return 0; } 2.下面程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输○出该字符串。 #include 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 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链接后的字符串是:%sn",a); return 0; } 6、调试程序 要求:分析下列程序是否正确,如有错,错在哪儿?应如何改正?如正确,运行 结果如何?上机调试之。 1.行号 #include 1. int main() 2. { int a , b ; 3. int *p ,*q ; 4. printf("请输入两个整数:"); 5. scanf("%d,%d", p ,q); 6. printf("%d,%dn",a ,b); 7. printf("%d,%dn",*p,*q); 8. return 0; 9. } 2.以下程序实现求数组中的元素的和。 行号#include 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 6 s + = *p; 7 printf(“sum=%dn”,sum); 8 return 0; 9 } 3.以下程序的功能是:输入三个字符串,按由小到大的顺序输出; 行号#include 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); 9 if (strcmp(str2,str3)>0) swap(str2,str3); 10 printf("n"); 11 printf("%sn%sn%sn",str1,str2,str3); 12 return 0; 13 } 14 void swap(char *p1,char *p2) 15 { 17 } char *p; 16 p=p1;p1=p2;p2=p;
版权声明:本文标题:C语言_实验七、指针程序设计 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1708935445h534817.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论