实验二、指针与数组
一、实验目的
1、 理解指针和数组间的关系。
2、 掌握通过指针操作数组元素的方法。
3、 掌握数组名作为函数参数的编程方式。
二、实验内容
1、 完成教材实验八剩余部分。
2、 用指针实现数组元素的逆序存放。
三、实验程序
二、基础编程题
1、 #include<stdio.h> int main(void) { void sum_diff(float op1,float op2,float *psum,float *pdiff); float psum,pdiff; float op1,op2; scanf("%f%f",&op1,&op2); sum_diff(op1,op2,&psum,&pdiff); printf("The sum is %.0f,The diff is %.0f",psum,pdiff); return 0; } void sum_diff(float op1,float op2,float *psum,float *pdiff) { *psum=op1+op2; *pdiff=op1-op2; }
2、 #include <stdio.h> int main(void) { double x,fracpart; int intpart; void splitfloat (double x, int *intpart, double *fracpart); scanf("%lf", &x); splitfloat(x, &intpart, &fracpart); printf("The intpart is: %d\t\n",intpart); printf("The fracpart is:%lf\t ",fracpart); return 0; } void splitfloat (double x, int *intpart, double *fracpart) { *intpart=(int)x; *fracpart=x-*intpart; }
3、 #include <stdio.h> void sort(int a[],int n) { int k,t,i,j; for(i=0;i<n;i++) { k=i; for(j=i+1;j<n;j++) if(a[k]>a[j]) k=j; t=*(a+k); *(a+k)=*(a+i); *(a+i)=t; } } int main() { int n,a[100],i; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",a+i); sort(a,n); for(i=0;i<n;i++) printf("%d ",*(a+i)); }
4、 #include<stdio.h> int search(int * ,int,int); int main(void) { int n,x,a[10],i; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); scanf("%d",&x); search(a,n,x); if(search(a,n,x)!=-1) printf("%d\n",search(a,n,x)); else printf("Not found\n"); return 0; } int search(int *list,int n,int x) { int i; for(i=0;i<n;i++) if(x==list[i]) return i; return -1; }
5、 #include<stdio.h> #include<string.h> void str(char *s) { char temp; char *end = s + strlen(s) - 1; while (end > s) { temp = *s; *s = *end; *end = temp; --end; ++s; } } int main() { char s[1000]; gets(s); str(s); puts(s); return 0; }
三、改错题 #include<stdio.h> void mov(int *x,int n,int m); int main() { int a[80],i,m,n,*p; scanf("%d%d",&n,&m); for(p=a,i=0;i<n;i++) scanf("%d",p++); mov(a,n,m); for(i=0;i<n;i++) printf("%5d ",a[i]); return 0; } void mov(int *x,int n,int m) { int i,j,k; for(i=0;i<m;i++) { k=x[n-1]; for(j=n-1;j>0;j--) x[j]=x[j-1]; x[0]=k; } }
四、拓展编程题
(1) #include<stdio.h> int main() { int i,k,m,n,num[1000],*p; scanf("%d",&n); p=num; for(i=0; i<n; i++) *(p+i)=i+1; i=0; k=0; m=0; while(m<n-1) { if(*(p+i)!=0) k++; if(k==3) { *(p+i)=0; k=0; m++; } i++; if(i==n) i=0; } while(*p==0) p++; printf("Last Number is %d\n",*p); }
(2) #include<stdio.h> #include<stdlib.h> int main() { int n,i,max,min; float sum,ave; float *p; scanf("%d",&n); p=(float*)malloc(n*sizeof(float)); for(sum=0,i=0; i<n; i++) { scanf("%f",p+i); sum+=*(p+i); } ave=sum/n; max=min=*p; for(i=0; i<n; i++) { if(max<*(p+i)) max=*(p+i); if(min>*(p+i)) min=*(p+i); } printf("average score is :%.2f\n",ave); printf("maximum score :%d\n",max); printf("minimum scare :%d\n",min); free(p); return 0; }