C程序设计实验指导书 - 2014版 下载本文

实验七 指针

实验七 指针(4学时)

目的要求

(1)掌握指针的概念,会定义和使用指针变量。 (2)基本掌握指针的C程序设计。

(3)学会使用数组指针和指向数组的指针变量。 (4)学会使用字符串指针和指向字符串的指针变量。 (5)结合数组、函数调用进行复杂的编程。

(6)巩固所学的理论知识,培养锻炼进行复杂C程序设计的能力。

上机内容

一般示例

【例1】调试下列程序,使之具有如下功能:用指针法输入12个数,然后按每行4个数输出。并指出程序错在什么地方,用到了哪些知识点。 #include

void main() {

int j,k,a[12],*p;

for(j = 0;j < 12;j ++) scanf(―%d‖,p ++); for(j = 0;j < 12;j ++) {

printf(\; if(j%4 == 0) printf(\; } }

【例2】上机调试程序,请修改下面程序中不正确的地方,写出错误原因。 (1)

void main( ) {

int x = 10,y = 5,*px,*py; px = py; px = &x; py = &y;

printf(―*px=%d,*py=%d,*px,*py); } (2)

#include void main( )

43

实验七 指针

{

char *p; char s[80];

scanf(―%s\\n‖,s); p = s[0];

printf(―%s\\n‖,p); }

【例3】下面程序的功能是:从键盘上面输入3个整数,按由小到大的顺序输出。完善程序中的空缺行。 #include void main() {

void swap( ); int n1,n2,n3; int p1,p2,p3;

printf(\请输入三个整数n1,n2,n3:\ scanf(\ p1=&n1; p2=&n2; ; if(n1>n2) swap( ); if(n1>n3) swap(p1,p3); if(n2>n3) swap(p2,p3);

printf(\排序后三个整数为:%d,%d,%d\\n\}

void swap( ) {

int p; p=*q1;

; *q2=p; }

【例4】下面程序求一个字符串的长度,程序中标有\行有错,请改正。 #include void main() { int length( ); int len ;

char *str[20];

printf(\请输入一个字符串:\ scanf(\

* len=length(*str);

printf(\字符串长度为%d\}

44

实验七 指针

* int length(*p) {

int n=0;

* while(p!= '\\0') { n++; p++; }

return(n); }

编程作业

下面的作业均要求画出程序流程图和写出源程序代码。并在电脑上运行通过。

1.编写一个函数,分别对double型数组的下标为偶数的元素和下标为奇数的元素求和。依据元素下标是奇数还是偶数,把各元素计算机到相应的和中。并在主函数中验证你编写的函数是否正确。函数定义格式应该如下:

void sum(double a[],int n,double *even_index_sum_ptr,double *odd_index_sum_ptr) /*n is the size of a[]*/

45

实验七 指针

2.编写一个自己的库函数strcmp(),用来实现实现两个字符串的比较,函数原型为:int strcmp (char * p1, char * p2);

设p1指向字符串s1,p2指向字符串s2,要求当s1=s2时,函数返回值为 0, 如果sl≠s2,则返回它们二者第一个不相同字符的ASCII码差值(如“BOY”与“BAD”的第二个字母不相同,“O”与“A”之差为79—65=14);如果sl>s2,则输出正值;如果sl

3.编写程序,输入三个整数,按由小到大的顺序输出。

然后将程序改为:输入三个字符串,按由小到大顺序输出。(习题l0.1、10.2)

46