实验8 指针实验报告答案

更新时间:2023-09-16 08:27:01 阅读量: 高中教育 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验八 指针

【实验类型】 设计性 【实验学时】2 【实验目的】

1.通过实验进一步掌握指针的概念,会定义和使用指针变量。 2.能正确使用数组的指针和指向数组的指针变量。 3.能正确使用字符串的指针和指向字符串的指针变量。 4.能正确使用指向函数的指针变量。

5.了解指向指针的指针的概念及其使用方法。。

【实验内容与步骤方法提示】

以下程序要求使用指针处理。

1. 输入三个整数,按由小到大的顺序输出。运行无错后改为:输入三个字符串,按由小到

大的顺序输出。 解:

#include int main() {

void exchange(int *p1,int *p2,int *p3); int a1,a2,a3,*p1,*p2,*p3; printf(\请输入三个整数:\\n\ scanf(\ p1=&a1;p2=&a2;p3=&a3; exchange(p1,p2,p3);

printf(\排序后:\\n%d,%d,%d\\n\ return 0; }

void exchange(int *p1,int *p2,int *p3) {

void swap(int *p1,int *p2); if(*p1>*p2) swap(p1,p2); if(*p1>*p3) swap(p1,p3); if(*p2>*p3) swap(p2,p3); }

void swap(int *p1,int *p2) {

int temp;

temp=*p1;*p1=*p2;*p2=temp; }

#include #include int main() {

void exchange(char *p1,char *p2,char *p3); char a1[30],a2[30],a3[30],*p1,*p2,*p3; printf(\请输入三个字符串:\\n\ gets(a1); gets(a2); gets(a3);

p1=a1;p2=a2;p3=a3; exchange(p1,p2,p3);

printf(\排序后:\\n%s,%s,%s\\n\ return 0; }

void exchange(char *p1,char *p2,char *p3) {

void swap(char *p1,char *p2); if(strcmp(p1,p2)>0) swap(p1,p2); if(strcmp(p1,p3)>0) swap(p1,p3); if(strcmp(p2,p3)>0) swap(p2,p3); }

void swap(char *p1,char *p2) {

char p[90];

strcpy(p,p1);strcpy(p1,p2);strcpy(p2,p); }

2.将一个3×3的矩阵转置,用一函数实现。

在一主函数中用scanf函数输入以下矩阵元素: 1 3 5 7 9 11 13 15 17

将数组名作为函数参数,在执行函数的过程中实现矩阵转置,函数调用结束后在主函数中输出转置后的矩阵。

#include void main() {

void move(int *p); int a[3][3],i,j,*p; for(i=0;i<3;i++) for(j=0;j<3;j++)

scanf(\ p=&a[0][0]; move(p);

for(i=0;i<3;i++) {

for(j=0;j<3;j++)

printf(\

printf(\ } }

void move(int *p) {

int i,j,t;

for(i=0;i<3;i++) for(j=i;j<3;j++) {

t=*(p+3*i+j);

*(p+3*i+j)=*(p+3*j+i); *(p+3*j+i)=t; } }

2. 有n人围成一个圈,顺序排号,从第一个人开始报数(从1到3报数),凡报到3的人

退出圈子,问最后留下的是原来第几号的那位。 #include void main() {

int i,k,m,n,a[80],*p; p=a;

printf(\请输入圈子的人数:n=\ scanf(\ for(i=0;i

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(\最后留在圈子内的是%d号。\\n\}

4.用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数的原型为:

int strcmp(char *p1,char *p2);

设p1指向字符串s1,p2指向字符串s2.要求当两个字符相同时返回0,若两个字符串

不相等,则返回返回它们二者第一个不同字符的ASCII码的差值。两个字符串s1,s2由主函数输入,strcmp函数的返回值也由主函数输出。

#include #include int main() {

int strcmp(char *p1,char *p2); char s1[80],s2[80],*p1,*p2;

printf(\请依次输入两个字符串:\\n\ gets(s1); gets(s2); p1=s1;p2=s2;

printf(\ return 0; }

int strcmp(char *p1,char *p2) {

int i=0;

while(*(p1+i)==*(p2+i))

if(*(p1+i++)=='\\0') return 0; return *(p1+i)-*(p2+i); }

5.写一个用矩形法求定积分的通用函数,分别求:

?sinxdx01?1?1cosdx?20edx

x说明:积分中用到的三个函数已在系统的数学函数库中,程序开头要加#include

调用格式为sin(x),cos(x),exp(x) 解:

#include #include void main() {

double integral(double (*p)(double),double a,double b,int n); double a1,a2,a3,b1,b2,b3,sum1,sum2,sum3; double (*p)(double); double fsin(double); double fcos(double); double fexp(double); long n=1000000;

printf(\请输入sin(x)的上、下限:\\n\ scanf(\

printf(\请输入cos(x)的上、下限:\\n\ scanf(\

printf(\请输入exp(x)的上、下限:\\n\ scanf(\ p=fsin;

sum1=integral(p,a1,b1,n); p=fcos;

sum2=integral(p,a2,b2,n); p=fexp;

sum3=integral(p,a3,b3,n);

printf(\的定积分为:%lf\\n\ printf(\的定积分为:%lf\\n\ printf(\的定积分为:%lf\\n\}

double fsin(double x) {

return sin(x); }

double fcos(double x) {

return cos(x); }

double fexp(double x) {

return exp(x); }

double integral(double (*p)(double),double a,double b,int n) {

int i;

double x,h,s; h=(a-b)/n; x=b; s=0;

for(i=0;i

x=x+h;

s=s+(*p)(x)*h; }

return(s); }

6.用指向指针的指针的方法对n个整数排序并输出。要求将排序单独写成一个函数,n和各整数在主函数中输入,最后在主函数中输出。 #include void main()

{

void sort(int **p,int n);

int i,n,data[30],**p,*pstr[30]; printf(\请输入n:\ scanf(\ for(i=0;i

printf(\请输入%d个整数:\\n\ for(i=0;i

scanf(\ p=pstr; sort(p,n);

printf(\个整数从小到大排序为:\\n\ for(i=0;i

printf(\ printf(\}

void sort(int **p,int n) {

int i,j,*temp; for(i=0;i

if(**(p+i)>**(p+j))

{temp=*(p+i);*(p+i)=*(p+j);*(p+j)=temp;} }

【实验仪器与软件平台】

计算机 Windows2000 Visual C++6.0 【实验前的预备知识】

【实验结果】(根据题目要求给出结果,对于编程的实验,要附上编写的程序)

{

void sort(int **p,int n);

int i,n,data[30],**p,*pstr[30]; printf(\请输入n:\ scanf(\ for(i=0;i

printf(\请输入%d个整数:\\n\ for(i=0;i

scanf(\ p=pstr; sort(p,n);

printf(\个整数从小到大排序为:\\n\ for(i=0;i

printf(\ printf(\}

void sort(int **p,int n) {

int i,j,*temp; for(i=0;i

if(**(p+i)>**(p+j))

{temp=*(p+i);*(p+i)=*(p+j);*(p+j)=temp;} }

【实验仪器与软件平台】

计算机 Windows2000 Visual C++6.0 【实验前的预备知识】

【实验结果】(根据题目要求给出结果,对于编程的实验,要附上编写的程序)

本文来源:https://www.bwwdw.com/article/p55h.html

Top