C语言实验十指针及其应用.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验十指针及其应用
1.已知一个整型数组x[4],它的各元素分别为3、11、8和2
2.使用指针表示法编程序,求该数组各元素之积。
#include <stdio.h>
main()
{
int x[4]={3,11,8,22},*p,sum=1;
for(p=x;p<x+4;p++)
sum*=*p;
printf("该数组各元素之积为: %d\n",sum);
}
2.编写程序:输入10个整数至一数组,将其中最小的数与第一个对调,把最大的数与最后一个对调(要求输出对调前后的数组)
(1)利用函数调用:
#include <stdio.h>
void input(int*p,int n)
{
int *pt=p;
for(;pt<p+n;pt++)
scanf("%d",pt);
}
void output(int *p,int n)
{
int *pt=p;
for(;pt<p+n;pt++)
printf("%3d",*pt);
printf("\n");
}
void team(int *p,int n)
{
int *p1,*p2,*c,*d,temp,max,min;
p1=p; p2=p+(n-1);
max=min=*p1;
for(;p1<p+n;p1++)
{
if((*p1)>max) {max=*p1; d=p1;}
else if((*p1)<min) {min=*p1; c=p1;} }
p1=p;
temp=*p1; *p1=*c; *c=temp;
temp=*p2; *p2=*d; *d=temp;
}
main()
{
int a[10],*pa=a;
printf("输入十个数: ");
input(pa,10);
printf("输出对调前的数组: ");
output(pa,10);
team(pa,10);
printf("输出对调后的数组: ");
output(pa,10);
}
(2)非函数调用法;
#include <stdio.h>
main()
{
int a[10],*pa,*p1,*p2,*c,*d,t,max,min;
printf("输入十个数: ");
for(pa=a;pa<a+10;pa++)
scanf("%d",pa);
printf("\n输出对调前的数组: ");
for(pa=a;pa<a+10;pa++)
printf("%3d",*pa);
p1=a; p2=a+9;
max=min=*p1;
for(;p1<a+10;p1++)
{
if((*p1)>max) {max=*p1; c=p1;}
else if((*p1)<min) {min=*p1; d=p1;} }
p1=a;
t=*p2; *p2=*c; *c=t;
t=*p1; *p1=*d; *d=t;
printf("\n输出对调后的数组: ");
for(pa=a;pa<a+10;pa++)
printf("%3d",*pa);
printf("\n");
}
3,编写程序:复制一个含有数字字符的字符串到字符数组X中,要求在复制时删除其中的数字字符,之后输出X数组。
#include <stdio.h>
#include <string.h>
main()
{
char *p1="ae#r*56y7be";
char *p2,x[20];
p2=x;
printf("输出变换前的字符串: ");
puts(p1);
while(*p1!='\0')
{
if((*p1)>='0'&&(*p1)<='9') p1++;
else {*p2=*p1; p1++; p2++;}
}
*p2='\0';
printf("输出变换后的字符串: ");
puts(x);
}
4.利用动态内存分配的方法,输入一个班学生某门课的成绩,人数由用户指定,输出全班平均分、最高分、最低分。
#include <stdio.h>
#include <stdlib.h>
main()
{
int i,n,*p,*pa;
int max,min,sum=0;
float pj;
printf("输入学生人数n=");
scanf("%d",&n);
pa=(int*)malloc(n*sizeof(int));
if(p==NULL)
{printf("error!"); exit(1);}
printf("输入每个学生的成绩: ");
for(p=pa,i=0;i<n;i++)
scanf("%d",p+i);
max=min=*p;
for(p=pa,i=0;i<n;i++)
{
if(*(p+i)>max) max=*(p+i);
else if(*(p+i)<min) min=*(p+i);
sum+=*(p+i);
}
pj=sum/n;
printf("该班学生该门课成绩最高分为:%d\t最低分为:%d\t平均分为:%.2f\n",max,min,pj);
free(p);
}
5.用指针法编写函数:功能是求一个字符串中第一个小写字母的位置。
(编写main函数,定义字符数组,输入一个字符串,调用函数求出第一个小写字母的指针,在指针所指位置插入‘?’,输出该字符串。
即为:ABCDeFGH-------ABCD?eFGH)
#include <stdio.h>
#include <string.h>
char *find(char *p)
{
int i;
char *pa=p;
for(i=0;*(p+i)!='\0';i++)
if(*(p+i)>='a'&&*(p+i)<='z') {pa=p+i; break;}
return(pa);
}
main()
{
char a[10],*p,*p1;
int r;
p=p1=a;
printf("输入一个字符串: ");
gets(a);
p1=find(a);
r=strlen(a);
for(p=a+r;p>=p1;p--)
*(p+1)=*p;
*p1='?';
printf("变化后的新串为:");
puts(a);
}。