来自匿名的C语言程序设计实验指导书 实验12

更新时间:2023-12-28 22:37:01 阅读量: 教育文库 文档下载

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

玉林师范学院 数学与信息科学学院 C语言上机实验

实验12 指针应用

班级

学号

姓名

学时

4

一、 实验目的

1. 重点掌握指针变量的定义和赋值; 2. 掌握指针变量的引用;

3. 初步掌握指向数组的指针的定义和使用;

4.掌握数组与指针的关系并能够利用指针解决数组的相关问题。 二、 实验内容

阅读程序

1. #include int main()

{ int *p,a=15,b=5; p=&a; a=*p+b;

printf(\return 0; }

分析结果 将指针指向a,将指针和b相加,赋值给a,得a=a+b=20. 运行结果

2. #include int sub(int *p); int main() { int i ,k;

for( i=0;i<5;i++) { k= sub(&i);

printf(\}

return 0; }

int sub(int *p) { static int t=0; t=*p +t ; return t; }

1

2016年春季

玉林师范学院 数学与信息科学学院 C语言上机实验

编写一个指针静态局部变量,输出第一次的k=0 分析结果 第二输出时指针的值为2,k=1+0;同理k=3,6,10. 运行结果 3. #include int main()

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

*(p+4)+=3;

printf(\ return 0; }

分析结果 将指针指向a[0],又将指针*(p+4)=*(p+4)+4,那么输出指针p的值为1,*(p+3)=4. 运行结果 4. #include int main()

{ int a[ ]={2,4,6,8,10}; int *p=a;

printf(\ printf(\ printf(\ printf(\ return 0; }

第一个输出的只是指针p的值;第二个先执行分析结果 p=a[1],再执行++p,得*(p+3);第三P=a[2] ++p得p=a[3] ;第四个输出*(p+3)。 运行结果 2

2016年春季

玉林师范学院 数学与信息科学学院 C语言上机实验

5.以下程序的输出结果是: #include #include int main()

{ char b1[8]=\while (--pb>=b1)

{strcpy(b2,pb);puts(b2);} printf(\ return 0; }

第一次循环由于d>a,输出def,第二循环c>a 分析结果 输出b2=cedf;第三循环输出,b>a输出b2=bcdef 第四次循环;输出b2=abcdef,输出“abccdef”字符串的长度。 运行结果

完成程序

要求:依据题目要求,分析已给出的语句,填写空白?但是不要增行或删行,改动程序的结构? 1.以下程序通过指针实现求a数组中各元素的和,请在___填写正确内容并运行程序。 #include main()

{ int a[6]={2,4,6,8,10,12}; int s, i,*p ; s=0; p=a;

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

s=+*(p+i)//求各元素的和。

printf(“s=%d\\n”,s); return 0; }

运行结果:

2.下面程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串。

#include int main()

{ char str[61],*p; int i;

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

3

2016年春季

玉林师范学院 数学与信息科学学院 C语言上机实验

{ str[i]=getchar();

if(str[i]=='\\n') break; }

str[i]='\\0'; p=str; while(*p)

putchar(*p++);//输出p指向单元的内容,并使得p指针指向下一下单元。 return 0; }

4

运行结果:

调试程序

要求:分析下列程序是否正确,如有错,错在哪儿?应如何改正?如正确,运行结果如何?上机调试之。

行号 #include 1. int main()

2. { int a , b ; 3. int *p ,*q ;

4. printf(\请输入两个整数:\5. scanf(\6. printf(\7. printf(\8. return 0; 9. }

错误行数:6

应改正为:第三行下面加入p=&a,q=&b;

运行结果:

2.以下程序实现求数组中的元素的和。 行号#include int main()

1 { int a[10]={1,2,3,4,5,6,7,8,9,0}; 2 int sum ,*p ; 3 sum=0; 4 p=&a;

5 while( p

7 printf(“sum=%d\\n”,sum); 8 return 0; 9 }

2016年春季

玉林师范学院 数学与信息科学学院 C语言上机实验

错误行数:4,5,6.

应改正为:4:p=a;5while(p<(a+10).6sum+=*(p++);

运行结果:

3.以下程序的功能是:输入三个字符串,按由小到大的顺序输出; 行号#include 1 int main() 2 { 3 char str1[20],str2[20],str3[20]; 4 void swap();

5 printf(\ enter three string:\\n\6 gets(str1); gets(str2);gets(str3);

7 if (strcmp(str1,str2)>0) swap(str1,str2); 8 if (strcmp(str1,str3)>0) swap(str1,str3); 9 if (strcmp(str2,str3)>0) swap(str2,str3); 10 printf(\

11 printf(\ 12 return 0; 13 }

14 void swap(char *p1,char *p2) 15 { char *p;

16 p=p1;p1=p2;p2=p; 17 }

错误行数:4,15,16.

应改正为:4: void swap(char *p1,char *p2);15: char p; 16:p=*p1;*p1=*p2;*p2=p;

5

运行结果:

编写程序

1. 一个数组中的15个值已经按升序排列存放,输入1个数,编程查找是否有该数,有显示其所在

的位置,没有,显示“No Found”,通过指针实现。 #include int main( ) {

int a[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,16}; int *p,b,i;

printf(\ scanf(\

2016年春季

玉林师范学院 数学与信息科学学院 C语言上机实验

p=a;

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

if(*p++==b) {printf(\ break;} } if(i==15)

printf(\}

2. 编程实现教材P291第6题. #include int main() {

char a[20]; char *p=a; int i=0; gets(a); p=a;

while(*p++!='\\0') i++;

printf(\ return 0;

}

3. 编程实现教材P291第10题. #include int main( ) {

int sb(int *); int a[5][5],i,j,*p; p=&a[0][0]; for(i=0;i<5;i++) for(j=0;j<5;j++)

scanf(\ sb(p);

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

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

printf(\ printf(\ }

6

2016年春季

玉林师范学院 数学与信息科学学院 C语言上机实验

}

int sb(int *q) {

int i,j,*qmax,*qmin,t; qmax=q; qmin=q;

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

if(*qmax<*(q+5*i+j)) qmax=q+5*i+j; if(*qmin>*(q+5*i+j)) qmin=q+5*i+j; }

t=*(q+12);

*(q+12)=*qmax; *qmax=t; t=*q;

*q=*qmin; *qmin=t; qmin=(q+1); for(i=0;i<5;i++) for(j=0;j<5;j++)

if((q+5*i+j)!=q&&*qmin>*(q+5*i+j)) qmin=q+5*i+j; t=*(q+4);

*(q+4)=*qmin; *qmin=t; qmin=(q+1); for(i=0;i<5;i++)

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

if((q+5*i+j)!=q&&(q+5*i+j)!=(q+4)&&*qmin>*(q+5*i+j)) qmin=(q+5*i+j);

t=*(q+20);

*(q+20)=*qmin; *qmin=t;

qmin=(q+1); for(i=0;i<5;i++) for(j=0;j<5;j++)

if((q+5*i+j)!=q&&(q+5*i+j)!=(q+4)&&(q+5*i+j)!=(q+20)&&*qmin>*(q+5*i+j)) qmin=(q+5*i+j); t=*(q+24);

7

2016年春季

玉林师范学院 数学与信息科学学院 C语言上机实验

*(q+24)=*qmin; *qmin=t; return 0; }

三.实验总结

这次试验为了提高我们对指针的了解程度,和运用静态局部变量的用法。 如何使用数组指针。

8

2016年春季

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

Top