实验七 指针
实验七 指针(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
43
实验七 指针
{
char *p; char s[80];
scanf(―%s\\n‖,s); p = s[0];
printf(―%s\\n‖,p); }
【例3】下面程序的功能是:从键盘上面输入3个整数,按由小到大的顺序输出。完善程序中的空缺行。 #include
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
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