C语言试验九报告

  • 格式:doc
  • 大小:111.18 KB
  • 文档页数:5

上机实验九 指针1

班级 学号 姓名

一共6个题,其中1个选做题

一.实验内容

【实验题1】程序填空,交换指针p1,p2所指向的变量。

#include

void main( )

{ int a=1,b=2, *p1, *p2, *pt;

p1=&a; p2=&b;

printf(“%d, %d \n”, *p1,*p2);

//交换指针变量p1,p2的指向

; ; ;

printf(“%d, %d \n”, *p1,*p2);

}

运行结果:

【实验题2】程序填空,交换指针p1,p2所指变量的值。

#include

void main ( )

{ int a=1,b=2, *p1, *p2, temp;

p1=&a; p2=&b;

printf(“*p1=%d, *p2=%d \n”, *p1,*p2);

//交换p1,p2所指向的变量的值

; ; ;

printf(“*p1=%d, *p2=%d \n”, *p1,*p2);

}

运行结果:

【实验题3】程序填空:输入三个整数,要求设计2个指针变量p1,p2 ,使p1指向这三个数的最大值,p2指向最小者 ,并输出最大值和最小值。

#include

void main ( )

{

int a,b,c, *p1, *p2, *p3;

scanf(“%d%d%d”,&a,&b,&c);

//令p1指向a和b最大值

if(a>b)

p1= ;

else

p1= ;

//令p1指向a、b和c中最大值

if( ) p1=&c;

//令 p2指向最小值,提示使用条件表达式

p2= ; //p2指向a,b中较小者

if( ) p2=&c;

printf(“max=%d, min=%d\n”, *p1,*p2 );

}

运行结果:输入 1 2 3

输出

指针(二):指针与数组

【实验题4】程序填空:请用下标、数组名、指针等不同方法来输出数组元素。

方法1:用下标引用数组元素,源程序如下:

#include

void main ( )

{ int i, a[5]={1,2,3,4,5};

for( i=0 ; i<5 ; i++ )

printf("%d ", );

printf("\n");

}

方法3: 用指针和下标引用数组元素,源程序如下:

#include

void main ( )

{ int i, a[5]={1,2,3,4,5}, *p;

for( p=a , i=0 ; i<5 ; i++ )

printf("%d ", );

printf("\n");

}

由此可见,若指针p=a, 则a[i]≡*(a+ i )≡*(p+i )≡p[ ]

&a[i]≡a+ i ≡p+ i 方法2: 用数组名引用数组元素,源程序如下:

#include

void main ( )

{ int i, a[5]={1,2,3,4,5};

for( i=0 ; i<5 ; i++)

printf("%d ", *( ) );

printf("\n");

}

方法4: 用指针引用数组元素,源程序如下:

#include

void main ( )

{ int a[5]={1,2,3,4,5}, *p;

for( p=a ; p

printf("%d ", );

printf("\n");

}

而对指针p进行自增或自减运算,意味着移动指针,即 p++ 表示令指针p指向 下 (上/下)一个元素,而p-- 表示令指针p指向 上(上/下)一个元素。

【实验题5】程序填空:利用指针,将数组a中的10个整数按相反顺序存放.源程序如下:

#include

void main ( )

{

int i,t, a[10],*p,*q;

printf("Input 10 integers:");

for(i=0; i<10; i++)

scanf("%d", &a[i] );

p= ; q= ; //p指向首元素,q指向最后一个元素

for( ; ; p++ , q-- ) //逐对交换对称元素,这里第一次出现,希望以后记住

{

t= *p; *p= *q; *q=t;

}

for(i=0; i<10; i++) printf("%d ", a[i] );

printf("\n");

}

三、选做题

1. 完成大数加法,输入两个非负整数A和B(最大为100位),计算A+B的结果。

说明:本题的算法有很大的实用性。关于大数之间的加、减、乘、除是科学计算中经常会遇到的,科学运算中的数:

1)往往会超过整型所能表示的范围;

2)往往会超过double型所能表示的精度。

当需要更大的数或者更大精度时,就需要用数组来表示数了,本题是大数加法的一个简单例子。

本题提示:

1)题目中要求输入的非负整数A和B最大为100位,因此不能设置为整型来输入(超出范围),而需要按字符来输入。举例:输入12345678900000000000000000 1234,则可以设置两个字符数组c1和c2用于存储这两个字符串(需要跳过空格,可以用scanf(“%s%s”,c1,c2)),然后在程序中转化为一位一位的数字分别存储于两个整型数组中。

2)字符数组转化为整型数组,‟1‟-„0‟可以表示数字1,‟2‟-„0‟为数字2,…,‟9‟-„0‟为数字9。

3)注意算法中不要漏掉0000+000=0的情况。

本题有一定的难度,大家可以试试。

源代码粘贴处