国产最新a级毛片无码专区_综合亚洲欧美日韩久久精品_日本成年片在线观看66_一本到九九av电影_一级毛片免费网站播放_国内精品久久人无码大片_国产人成视频99在线观看_欧美不卡在线一本二本_国产亚洲电影av_可以免费看黄色软件

知ing

大學(xué)C/C++語言程序設(shè)計實驗教程

陽小華 羅晨暉 編 / 電子工業(yè)出版社

王大膽 上傳

查看本書

實驗9 ?指針概念及指針與一維數(shù)組的關(guān)系

任務(wù)1 ?理解指針及其使用方法

1.閱讀分析下面程序,寫出運(yùn)行結(jié)果,理解指針概念及“*”“&”的含義。

#include <stdio.h>

main()

{

????int a,b;

????int *p1,*p2;

????a=100; b=10;

????p1=&a;

????p2=&b;

????printf("a=%d,b+2= %d\n",a ,b+2);

????printf("*p1=%d,*p2+2= %d\n",*p1,*p2+2 );

}

運(yùn)行結(jié)果為:

a=100,b+2= 12

*p1=100,*p2+2= 12

2.上機(jī)驗證下列程序的運(yùn)行結(jié)果。

#include <stdio.h>

void main(?)

{

????int a,b,*p1,*p2;

????p1=&a;

????p2=&b;

????a=5;

????b=7;

????printf("\na=%d,b=%d,p1=%dp2=%d",a,b,p1,p2);

????printf("\n&a=%d,*&a=%d,&b=%d,*&b=%d\n",&a,*&a,&b,*&b);

}

運(yùn)行結(jié)果如下:(下面紅色標(biāo)記的字,是漏寫了的)

a=5,b=7,p1=1245052,p2=1245048

&a=1245052, *&a=5,&b=1245048,?*&b=7

思考:在本題中,可不可用&*a來代替*&a?

不能代替,上機(jī)驗證通不過。所以*號只能寫在地址或指針變量的前面,不能寫在普通變量的前面。

3.分析下面程序,并運(yùn)行,理解用指針變量進(jìn)行輸入、輸出。

#include <stdio.h>

main(?)

{

????int *p,m;

????scanf("%d",&m);

????p=&m; ????????????/*指針p指向變量m*/

????printf("%d",*p); ???/*p是對指針?biāo)傅淖兞康囊眯问?/span>,與此m意義相同*/

}

如從鍵盤上輸入:5

????則運(yùn)行結(jié)果為:5

上述程序可修改為如下:

#include <stdio.h>

main(?)

{

????int *p,m;

????p=&m;

????scanf("%d",p) ; ???/*p是變量m的地址,可以替換&m*/

????printf("%d",m);

}

如從鍵盤上輸入:5

????則運(yùn)行結(jié)果為:5

任務(wù)2 ?使用指針訪問一維數(shù)組

1.閱讀分析下面程序,寫出運(yùn)行結(jié)果,理解指針與數(shù)組關(guān)系。

#include<stdio.h>

main(?)

{

????int a[]={1,2,3,4,5,6,7,8,9};

????int *p=a,b,c,s=0;

????for(b=0;b<3;b++)

???????for(c=0;c<3;c++)

?????????if(b==c) ?{ p++; s+=*p; }

????printf("s=%d",s);

}

運(yùn)行結(jié)果為:s=9

2.閱讀下面程序,理解指針、數(shù)組的多種表示法

#include<stdio.h>

main(?)

{

????int a[]={1,2,3};

????int *p,k;

????p=a;

????for(k=0;k<3;k++)

????{

??????printf("a[%d]=%d\n",k,a[k]);

??????printf("p[%d]=%d\n",k,p[k]);

??????printf("*(p+%d)=%d\n",k,*(p+k));

??????printf("*(a+%d)=%d\n",k,*(a+k));

????}

}

運(yùn)行結(jié)果為:

a[0]=1

p[0]=1

*(p+0)=1

*(a+0)=1

a[1]=2

p[1]=2

*(p+1)=2

*(a+1)=2

a[2]=3

p[2]=3

*(p+2)=3

*(a+2)=3

3.在空格中填上語句,以實現(xiàn)字符串復(fù)制的功能。

#include<stdio.h>

main( )

{

????char *ps="C language";

????char str[15];

????char *p1,*p2;

????p1=ps;

????p2=str;

????while(*p1!='\0')

????{

???????*p2=*p1?;

????????p1++ ?;

????????p2++ ?;

????}

????*p2='\0';

????printf("ps=%s\n",ps);

????printf("str=%s\n",str);

}

運(yùn)行結(jié)果為:

ps=C language

str=C language

4.下面程序完成從鍵盤輸入兩個字符串ab,再將ab的對應(yīng)位置字符中的較大者存放在數(shù)組c中,當(dāng)一個字符串結(jié)束時停止比較,此時將另一個字符串剩下的字符直接放在數(shù)組c的后面,填空完成該程序。

#include <stdio.h>

#include <string.h>

void main( )

{

????int k=0;

????char a[80],b[80],c[80]={'\0'},*p,*q;

????p=a;q=b;

????gets(a);

????gets(b);

????while( ?*p&&*q ?)

????{

??????if(??*p>*q ?) ?c[k]=*p;

??????else ?c[k]=*q;

??????p++;

????????q++ ?;

??????k++;

????}

????if(*p!= '\0') ?strcat(c,p);

????else ?strcat(c,q);

????puts(c );

}

5.指出下面程序的問題所在(輸出a數(shù)組的10個元素),理解指針與數(shù)組下標(biāo)的關(guān)系及指針變化情況。

void main( )

{

????int a[10];

????int *p,k;

????p=a;

????for(k=0;k<10;k++)

????{ *p=k; p++; }

????for(k=0;k<10;k++,p++)

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

}

運(yùn)行結(jié)果為:輸出10個隨機(jī)數(shù),原因是當(dāng)?shù)谝粋€for循環(huán)結(jié)束后,指針已經(jīng)指到最后一個元素的下一個地址,此時再輸出,已經(jīng)輸出的不是原來存儲的數(shù)據(jù)了。

6.編程實現(xiàn)從鍵盤輸入10個整數(shù),然后求出其中最小值(采用指針實現(xiàn))。

參考程序如下:

#include<stdio.h>

main( )

{

????int a[10],min;

????int *p,k;

????p=a;

????for(k=0;k<10;k++)

????{ scanf("%d",p);p++; }

p=a;

????min=a[0];

????for(k=0;k<10;k++,p++)

if(min>*p)min=*p;

????printf("%d",min);

}

?

?

?

實驗10 ?指針與二維數(shù)組、函數(shù)的關(guān)系

任務(wù)1 ?使用指針訪問二維數(shù)組

1.閱讀并運(yùn)行下列程序,理解訪問二維數(shù)組元素的多種方法。

#include<stdio.h>

void main( )

{

????int a[3][4];

????int i,j;

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

??????for(j=0;j<4;j++)

????????scanf("%d",&a[i][j]); ???/*數(shù)組元素下標(biāo)表示法*/

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

????{

????????for(j=0;j<4;j++)

???????????printf("%4d",*(*(a+i)+j));/*數(shù)組元素指針表示法*/

????????printf("\n");

????}

????printf("\n");

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

????{

????????for(j=0;j<4;j++)

???????????printf("%4d",*(a[i]+j)); ?/*數(shù)組元素下標(biāo)+指針表示法*/

????????printf("\n");

????}

????printf("\n");

}

如果從鍵盤上輸入:1 2 3 4 5 6 7 8 9 10 11 12

則運(yùn)行結(jié)果為:

??1 ??2 ??3 ??4

??5 ??6 ??7 ??8

??9 ?10 ?11 ?12

?

??1 ??2 ??3 ??4

??5 ??6 ??7 ??8

??9 ?10 ?11 ?12

2.分析下面程序的輸出結(jié)果,理解指針與二維數(shù)組以及數(shù)組指針的概念。

#include <stdio.h>

void f(int (*b)[3]);

void main( )

{

????static int a[2][3]={{1,2,3},{4,5,6}};

????f(a);

}

void f(int (*b)[3])

{

????printf("\n%d %d %d\n",b[0][0],b[0][1],b[0][2]);

}

運(yùn)行結(jié)果為:

1 2 3

思考:如將int(*b)[3]改為int(*b)[2],結(jié)果會如何?

???運(yùn)行結(jié)果一樣。

任務(wù)2 ?熟練掌握指針與函數(shù)的關(guān)系

1.下面程序完成截取字符串s中從第m個位置開始的n個字符,返回所截字符串的首地址(即指針型函數(shù)),認(rèn)真閱讀分析程序,寫出運(yùn)行結(jié)果。

#include <stdio.h>

static char sub[20];

void main( )

{

????static char s[]="CLanguageProgram";

????char *cut(char *s,int m,int n),*p;

????p=cut(s,3,4);

????printf("%s\n",p);

}

char *cut(char *s,int m,int n)

{

????int i;

????for(i=0;i<n;i++)

??????sub[i]=s[m++-1];

????sub[i]='\0';

????return sub;

}

運(yùn)行結(jié)果為:

angu

2.調(diào)用子程序,實現(xiàn)求解一維數(shù)組中的最大元素。請?zhí)羁?,完成程序功能?/span>

#include <stdio.h>

main( )

{

????int sub_max(int b[],int i);

????int n,a[10],*ptr=a; ?????/*定義變量,并使指針指向數(shù)組*/

????int max,i=10;

????for(n=0;n<=i-1;n++)

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

????max=??sub_max(a,i) ?; ?/*函數(shù)調(diào)用,其實參是指針*/

????printf("max=%d\n",max);

}

int sub_max(int b[],int i) ??????/*函數(shù)定義,其形參為數(shù)組*/

{

????int temp,j;

????temp=b[0] ;

????for(j=1;j<i;j++)

????if(temp<b[j]) temp=b[j];

????return temp;

}

此題無空可填,已經(jīng)是一個完整的程序,它的功能是求從鍵盤輸入10數(shù)中最大的那個數(shù)。故自己選一個地方加了藍(lán)色和下劃線,讓學(xué)生理解這個地方。

3.閱讀下面程序,理解利用指向指針的指針變量對二維字符數(shù)組的訪問方式。

#include <stdio.h>

#include <stdlib.h>

main( )

{

????int i;

????static char c[][16]={"c language","fox","computer","home page"};

????static char *cp[]={c[0],c[1],c[2],c[3]};

????static char **cpp; ??/*指向字符指針的指針變量*/

????cpp=cp; ???????????????/*將指針數(shù)組的首地址傳遞給指向字符指針的指針變量*/

????for(i=0;i<4;i++) ????/*按行輸出字符串*/

??????printf("%s\n",*cpp++);

????printf("-----------\n");

????for(i=0;i<4;i++)

????{

??????cpp=&cp[i];

??????printf("%s\n",*cpp);

????}

}

運(yùn)行結(jié)果如下:

c language

fox

computer

home page

----------

c language

fox

computer

home page


查看更多