浙江大學(xué)C語言總復(fù)習(xí)題—指針_第1頁
浙江大學(xué)C語言總復(fù)習(xí)題—指針_第2頁
浙江大學(xué)C語言總復(fù)習(xí)題—指針_第3頁
浙江大學(xué)C語言總復(fù)習(xí)題—指針_第4頁
浙江大學(xué)C語言總復(fù)習(xí)題—指針_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第5章 指 針學(xué)習(xí)和解題要點(diǎn)1. 內(nèi)存空間和地址:C程序中定義的任何類型的變量,相當(dāng)于在計(jì)算機(jī)內(nèi)存中開辟存貯空間。每個(gè)空間除了有名稱(變量名)可放什么樣的數(shù)值類型之外,還有一個(gè)地址的概念。如:int i,j “為可放整型的名叫i和j的變量,則它們的地址分別為&i,&j。一維數(shù)組的名稱(數(shù)組名)即為地址,如int a20則a即為地址,也代表第一個(gè)元素a0的地址&a0,二維數(shù)組的int b34;數(shù)組名b也是地址,但它不能代表第0行第0列元素的地址。對(duì)二維數(shù)組這里有二個(gè)層次的地址概念。二維數(shù)組b可以看成三個(gè)一維數(shù)組組成,它們的名稱分別為b0,b1,b2。它們分別是&b

2、00,&b10 ,&b20三個(gè)第一個(gè)元素(每個(gè)是一個(gè)整數(shù))的地址。這時(shí)b可以看成大元素的(每個(gè)元素為4個(gè)整數(shù))的數(shù)組的地址了,因此b就不是簡(jiǎn)單的一個(gè)整數(shù)的地址,也就是說b(也可寫成b+0)代表了b0的地址,b+1代表了b1的地址。bb0b1b2以上講的地址 &i,b0,b等都是常量,稱為地址常量,一當(dāng)定義就不可以再變的。2指針變量:簡(jiǎn)單地說就是放地址的變量,它是內(nèi)存中一個(gè)空間,不放數(shù)據(jù)專放地址,不同時(shí)候可放不同地址,因此不是如前的地址常量而是可變的變量。指針變量的定義如:有定義int i,*p;p是一個(gè)變量的名稱,但它不是一般的變量而是有個(gè)* 特別標(biāo)明以示與i的區(qū)別。因

3、此這里 * 是一個(gè)記號(hào)表示p與i不同,是指針變量。p可以放一個(gè)地址數(shù)但又不是任何的地址數(shù),只可放整型數(shù)的地址,如p=&i;因此int *p有三個(gè)意義:說明p是變量名,有 * 說明p是指針變量名,說明p只能放整型數(shù)的地址。3對(duì)指針變量的操作賦值操作:通過求地址運(yùn)算符 & 求出存儲(chǔ)單元地址,賦給指針變量,或把一維數(shù)組名賦給指針變量如: int i,a10,*p,*q;可以 p=&i 或 p=a;p=&a0 等,二個(gè)指針變量之間賦值:q=p 表示q與p指向同一個(gè)地方,或該q跟著p指。&iippaq當(dāng)指針變量指向數(shù)組后,對(duì)指針變量可以比較和加減整數(shù)的運(yùn)算。表示指

4、針變量指向數(shù)組元素的前后和在數(shù)組元素上移動(dòng)。4取指針?biāo)傅目臻g指針運(yùn)算符*表示取出指針?biāo)傅目臻g(變量或數(shù)組元素)如int i=3,*p;p=&i則 *p即i,用 *p輸出時(shí)即為3。又如int a4=10,11,12,14,p=a,則*p即為a0為10。5 指向動(dòng)態(tài)分配的空間C語言有一個(gè)函數(shù)malloc可在程序運(yùn)行時(shí)動(dòng)態(tài)的分配空間,其用法為:p=(類型名 *) malloc (sizeof(類型名))。表示由sizeof(類型名)測(cè)出該類型所需的字節(jié)數(shù),malloc申請(qǐng)這么多字節(jié),同時(shí)把它強(qiáng)制類型轉(zhuǎn)換成(類型名 *)地址。p是指針變量,就指向這個(gè)地址。當(dāng)然p應(yīng)預(yù)先定義成這個(gè)類型的指針變

5、量。6指向一維數(shù)組的指針的使用當(dāng)指針指向一維數(shù)組如:int *p,a10;p=a;后,則p即與a等效,可用p0,p1,.,p9與a0,a1,.a9代表下標(biāo)元素。也可用*p ,*(p+1).*(p+q)與*a,*(a+1),.*(a+9)代表下標(biāo)元素。另外,與a不同的是 p可以為p=p+1或p+運(yùn)算表示p在數(shù)組元素上“移動(dòng)”。7 指向二維數(shù)組的指針的使用變通的指針變量(我們稱之為“小”指針),如int b34,*p可以用來指向二維數(shù)組,這時(shí)把二維數(shù)組看成幾個(gè)一維的數(shù)組一個(gè)一個(gè)的處理才可以。如p=b0或p=*b,p=b1或p=*(b+1),這里不能寫成p=b或p=b+1。 *(b+1)

6、與b+1是地址相同概念不同的。b+1代表第1行的地址,我們可稱“行地址”,而*(b+1)是第一行第0列元素的地址,我們可稱“元素地址”,由于p是小指針因此只能用來指向元素地址 *(b+1),而不能指向b+1。這樣取第j個(gè)元素可用 *(p+j),或 *(p+i*4+j)或 *p+等。不能用*(*(p+i)+j),p是小指針,+i只是走過i個(gè)元素而不是走i行。專門指向數(shù)組的指針,我們稱之為“大”指針,如int (*p)4,int b34;可以用來指向二維數(shù)組的整個(gè)一維如 p=b,p=b+1,而(*p)j表示該行第j個(gè)元素了。另外還可以用p+i表示移i行,*(p+i)表示該行首元素地址 *(p+i)

7、表示該行首元素值,*(p+i)+j表示在該行位移j地址,*(*(p+i)+j)表示該行第j個(gè)元素值。pb+iqpi8 指針數(shù)組和多維指針當(dāng)定義成int *p4;時(shí),表示有4個(gè)指針,可以用來指向不同的4個(gè)整型變量或4個(gè)整型數(shù)組。使用時(shí)要一個(gè)一個(gè)的,如p0=&i,p1=&j等等。當(dāng)定義成int *p,表示p是指針的指針,即可以指向指針變量,如int *p,*q,i q=&i,p=&q9 對(duì)于字符型的數(shù)組,用字符指針特別有意義。當(dāng)char str20,*p;p=str;p就可以當(dāng)成字符串使用,出現(xiàn)在任何字符串函數(shù)中。對(duì)于char *p4;這種指針數(shù)組就更加有意義,它表

8、示4個(gè)字符指針,可以分別指向4個(gè)不同的字符數(shù)組(字符串)。注意:char p10是10個(gè)字符的字符數(shù)組char *p10是10個(gè)指針的數(shù)組有10個(gè)字符型指針。10當(dāng)指針變量指向一維數(shù)組時(shí)注意下面的區(qū)別:*p+ 等價(jià)于 *(p+) 取 *p的值,后p加1(*p)+ 取 *p的值,后 *p的值加1*(+p) 與 *+p 等價(jià),p自加,再取*p值。11. 指向結(jié)構(gòu)的指針,有指向結(jié)構(gòu)體的指針和指向結(jié)構(gòu)數(shù)組的指針。如:struct st int sno; char sn10; s, a5, *p;指向結(jié)構(gòu)體的指針相當(dāng)于指針指向單個(gè)變量,用p=&s; 取結(jié)構(gòu)體的成員用:p->sno指向結(jié)構(gòu)數(shù)

9、組的指針相當(dāng)于指針指向一維數(shù)組,用p=a; 可用p+或p+i取數(shù)組元素。12在使用指針變量中,要充分注意C語言并不給指針變量賦初值,因此程序中如果未給指針賦值,則稱該指針變量為“無向指針”,使用這種指針是十分危險(xiǎn)的。例如:int i=10,*p; *p=10,或*p=i是錯(cuò)誤的,因?yàn)閜沒有指向的空間。因此,10或i的值無法賦給*p。同樣如有:int a=10,b=20,*p;交換a和b值寫成:*p=a;a=b;b=*p;這里*p也是沒有指向空間的“無向指針”。同樣,char *str; scanf(“%s”,str); 也是錯(cuò)誤的。13. 指向數(shù)組的指針的例子例1:main() static

10、int a10=0,1,2,3,4,5,6,7,8,9; int *p, i; printf("打印,移動(dòng)指針:n"); printf("數(shù)組 a 中的值:n"); for(i=0;i<10;i+) printf("%d,",ai); printf("n"); p=&a4; for(i=4;i<=6;i+,p+) printf("%d,",*p); printf("n"); printf("%d",*p); printf("e

11、nd p+n"); printf("數(shù)組 a 中的值:n"); for(i=0;i<10;i+) printf("%d,",ai); printf("n"); p=&a4; for(i=4;i<=6;i+,p-) printf("%d,",*p); printf("n"); printf("%d",*p); printf("end p-n"); printf("邊打印,邊移動(dòng)指針,不加括號(hào):n"); pri

12、ntf("數(shù)組 a 中的值:n"); for(i=0;i<10;i+) printf("%d,",ai); printf("n"); p=a; for(i=0;i<10;i+) printf("%d,",*p+); printf(" end *p+n"); printf("數(shù)組 a 中的值:n"); for(i=0;i<10;i+) printf("%d,",ai); printf("n"); p=&a9; f

13、or(i=0;i<10;i+) printf("%d,",*p-); printf(" end *p-n"); printf("數(shù)組 a 中的值:n"); for(i=0;i<10;i+) printf("%d,",ai); printf("n"); p=a; for(i=0;i<9;i+) printf("%d,",*+p); printf(" end *+pn"); printf("數(shù)組 a 中的值:n"); fo

14、r(i=0;i<10;i+) printf("%d,",ai); printf("n"); p=&a9; for(i=0;i<9;i+) printf("%d,",*-p); printf(" end *-pn"); printf("邊打印,邊移動(dòng)指針,加括號(hào):n"); printf("數(shù)組 a 中的值:n"); for(i=0;i<10;i+) printf("%d,",ai); printf("n"); p

15、=a; for(i=0;i<10;i+) printf("%d,",*(p+); printf(" end *(p+)n"); printf("數(shù)組 a 中的值:n"); for(i=0;i<10;i+) printf("%d,",ai); printf("n"); p=&a9; for(i=0;i<10;i+) printf("%d,",*(p-); printf(" end *(p-)n"); printf("數(shù)組

16、a 中的值:n"); for(i=0;i<10;i+) printf("%d,",ai); printf("n"); p=a; for(i=0;i<9;i+) printf("%d,",*(+p); printf(" end *(+p)n"); printf("數(shù)組 a 中的值:n"); for(i=0;i<10;i+) printf("%d,",ai); printf("n"); p=&a9; for(i=0;i<

17、;9;i+) printf("%d,",*(-p); printf(" end *(-p)n"); printf("邊打印,邊使值變化:n"); printf("數(shù)組 a 中的值:n"); for(i=0;i<10;i+) printf("%d,",ai); printf("n"); p=a; for(i=0;i<10;i+,p+) printf("%d,",(*p)+); printf(" end (*p)+)n"); p

18、rintf("數(shù)組 a 中的值:n"); for(i=0;i<10;i+) printf("%d,",ai); printf("n"); p=a; for(i=0;i<10;i+,p+) printf("%d,",(*p)-); printf(" end (*p)-n"); printf("數(shù)組 a 中的值:n"); for(i=0;i<10;i+) printf("%d,",ai); printf("n"); p=a

19、; for(i=0;i<10;i+,p+) printf("%d,",+(*p); printf(" end +(*p)n"); printf("數(shù)組 a 中的值:n"); for(i=0;i<10;i+) printf("%d,",ai); printf("n"); p=a; for(i=0;i<10;i+,p+) printf("%d,",-(*p); printf(" end -(*p)n");例2:#include <std

20、io.h>void main() static a34=1,2,3,4,5,6,7,8,9,10,11,12; int i,j; int (*p)4,*q;/p是“大”指針,q是“小”指針 p=a; /p指向二維數(shù)組a中的一維 for(i=0;i<3;i+) p=a+i; /p移動(dòng)即移過一行 for(j=0;j<4;j+) printf("%d,", (*p)j); /取這行的j元素 printf("n"); p=a; for(i=0;i<3;i+) /p+i 第i行,*(p+i)第i行首元素地址, *(p+i)+j 位移j, *

21、(*(p+i)+j)取元素 for(j=0;j<4;j+) printf("%d,", *(*(p+i)+j); printf("n"); q=a0; /q是“小”指針,指向首元素 for(i=0;i<3;i+) q=*(a+i); /q指向i行首元素 for(j=0;j<4;j+) printf("%d,", *(q+j); /移過q+j, 取元素*(q+j) printf("n"); q=a0; /q指向首元素 for(i=0;i<3;i+) for(j=0;j<4;j+) pri

22、ntf("%d,", *(q+i*4+j); /移過q+i*4+j, 取元素*(q+i*4+j) printf("n"); q=a0; /q指向首元素 for(i=0;i<3;i+) for(j=0;j<4;j+) printf("%d,", *q+);/行列一個(gè)一個(gè)的移 printf("n"); q=a0; for(i=0;i<12;i+) printf("%d,", *q+); /一個(gè)一個(gè)的移,移12次 printf("n"); for(q=a0;q&l

23、t;a0+12;q+) printf("%d,", *q); /用a0 到 a0+12控制 printf("n");練習(xí)題一、 單項(xiàng)選擇題1. 對(duì)于同類型的指針變量,不可能進(jìn)行的運(yùn)算是( )。 A-B=C+D=2. 下列不正確的定義是( )。 Aint *p=&i, i; Bint *p, i; Cint i, *p=&i;Dint i,*p;3. 下列正確的定義是( )。 Aint x=3,*p=1; Bint x=3,*P; Cint x=3,*p=x;Dint *p=&x=3;4設(shè)有定義“a=3,b,*p=&a”,則

24、下列語句中使b不為3的語句是( )。 Ab=*&a;Bb=*p;Cb=a;Db=*a;5設(shè)指針x指向的整型變量值為25,則printf(“%dn”,+*x);的輸出是( )。 A23B24C25D266若有說明:“int i,j=7,*p=&i;”則與i=j;等價(jià)的語句是( )。Ai=*p;B*p=*&j;Ci=&j;Di=*p;7若有說明:“char ch,*p;”則不能正確獲得值的語句是( )。A*p=getchar();Bp=&ch; scanf(“%c”,p);Cp=(char *)malloc(1);*p=getchar();Dp=&c

25、h; *p=getchar();8. 若有以下定義,且0<=i<5,則對(duì)數(shù)組元素錯(cuò)誤的引用是( )。int a=1,2,3,4,5,*p=a,i; A*(a+i)Bap-aCp+iD*(&ai)9若有說明語句“int a5,*p=a;”,對(duì)數(shù)組元素的正確引用是( )。 A*&a5B*p+2C*(a+2)D*a+10若有說明語句“int a5,*p=a;”,對(duì)數(shù)組元素的正確引用是( )。 AapBpaC*(p+2)Dp+211. 若有以下定義,且0<=i<5,則對(duì)數(shù)組元素地址的正確表示是( )。int a=1,2,3,4,5,*p=a,i;A&(a

26、+i)Ba+C&pD. &pi12下面各語句中,能正確進(jìn)行賦字符串操作的語句是( )。 Achar s5=”ABCDE”;Bchar s5=A, B, C, D, E;Cchar *s; s=”ABCDE”;Dchar *s; scanf(“%s”,&s);13. 若有以下定義,則*(p+5)的值為( )。 char s=”Hello”, *p=s; A0B0C0的地址D不確定的值14若有以下定義,則不能表示a數(shù)組元素的表達(dá)式是( )。 int a10=1,2,3,4,5,6,7,8,9,10,*p=a; A*pBa10C*aDap-a15若有以下的定義,則值為3的表達(dá)

27、式是( )。 int a10=1,2,3,4,5,6,7,8,9,10,*p=a; Ap+=2,*(p+)Bp+=2,*+pCp+=3,*p+Dp+=2,+*p;16執(zhí)行語句“char a10=“abcd”,*p=a”后,*(p+4)的值是( )。A”abcd”BdC0D不能確定17若有定義“int a34;”,則對(duì)數(shù)組元素aij(0<=i<3,0<=j<4) 正確的引用是( )。 A*(a+4*i+j)B*(*(a+i)+j)C*(a+i)jDai+j18若有定義“int a34,*p;”,則對(duì)數(shù)組元素aij(0<=i<3,0<=j<4) 正確

28、的引用是( )。Ap=aB*(*(p+i)+j)C*(p+i*4+j)D. *(*(a+i)+j)19若有定義“int a34,(*p)3;”,則對(duì)數(shù)組元素aij(0<=i<3,0<=j<4) 正確的引用是( )。Ap=aiBp=&aijC*(p+i*4+j)D. *(*(p+i)+j)20. 若有定義“int a34,*p,*q3;”,且0<=i<3,則錯(cuò)誤的賦值語句是( )。Ap=aBqi=aiCp=aiD. qi=&a2021設(shè)有定義語句“int (*ptr)10;”,其中的ptr是( )。A. 10個(gè)指向整型變量的函數(shù)指針B. 指向1

29、0個(gè)整型變量的函數(shù)指針C. 一個(gè)指向具有10個(gè)元素的一維數(shù)組的指針D. 具有10個(gè)指針元素的一維數(shù)組22若有以下定義,則數(shù)值為4的表達(dá)式是( )。 int w34=0,1,2,4,0,1,0,1,(*p)4=w; A*w1+1Bp+,*(p+1)Cw22Dp1123若有下面的程序片段,則對(duì)數(shù)組元素的錯(cuò)誤引用是( )。 int a12=0, *p3, *p, i; for(i=0;i<3;i+) pi=&ai*4; pp=p; App01Ba10Cp31D*(*(+2)+2)24若有如下定義和語句,則輸出結(jié)果是( )。 int *pp, *p, a=10, b=20; pp=&am

30、p;p; p=&a; p=&b; printf(“%d,%dn”,*p,*pp); A10,20B10,10C20,10D20,2025若有以下定義和語句,則對(duì)w數(shù)組元素的非法引用是( )。 int w23, (*pw)3; pw=w; A*(w0+2)B*pw2Cpw00D*(pw1+2)二、填充題1C語言中,數(shù)組名是一個(gè) 常量,不能對(duì)它進(jìn)行 和 運(yùn)算。由 代表它的首地址。2. 在C程序中,指針變量只能賦 值和 值。3. 在C程序中,指針變量可以通過 , , 三種方式賦值。4在C程序中,可以對(duì)指針變量進(jìn)行 和 來移動(dòng)指針。5“*”稱為 運(yùn)算符,“&”稱為 運(yùn)算符。6若

31、兩個(gè)指針變量指向同一個(gè)數(shù)組的不同元素,可以進(jìn)行減法運(yùn)算和 運(yùn)算。7設(shè)int a10,*p=a;則對(duì)a3的引用可以是p 和*(p )。8若d是已定義的雙精度變量,再定義一個(gè)指向d的指針變量p的語句是 。9&后跟變量名,表示該變量的 ,*后跟指針變量名,表示該指計(jì)變量 ,&后指針變量名,表示該指針變量的 。10設(shè)有 int sz4,*p=sz; 有 , , 和 四種不同的引用數(shù)組元素的方法。11設(shè)有char *a=”ABCD”; ,則printf(“%s”,a)的輸出是 ;而printf(“%c”,*a)的輸出是 。12設(shè)有以下定義和語句,則的值為 。 int a32=10,20,

32、30,40,50,60,(*p)2; p=a;13. 以下程序用指針指向三個(gè)整型存儲(chǔ)單元,輸入三個(gè)整數(shù),選出其中最小值并輸出,請(qǐng)?zhí)羁铡?#include <stdio.h> main() int ; a=(int *)malloc(sizeof(int); b=(int *)malloc(sizeof(int); c=(int *)malloc(sizeof(int); min=(int *)malloc(sizeof(int); printf(“輸入三個(gè)整數(shù):n”);scanf(“%d%d%d”, ); printf(“輸出這三個(gè)整數(shù):%d %d %d n”, ); *min=*

33、a; if(*a>*b) ; if( > *c) ; printf(“輸出最小整數(shù):%dn”, ); 14以下程序的功能是從鍵盤上輸入若干個(gè)字符(以回車鍵作為結(jié)束)組成一個(gè)字符串存入一個(gè)字符數(shù)組,然后輸出該字符數(shù)組中的字符串。請(qǐng)?zhí)羁铡?# include “stdio.h” #include “ctype.h” main() char str81,*sptr; int i; for(i=0;i<80;i+) stri=getchar(); if (stri=n) break; stri= ; sptr=str; while(*sptr) putchar(*sptr ); 15

34、. 以下程序從輸入的10 個(gè)字符串中找出最長(zhǎng)的那個(gè)串及長(zhǎng)度。請(qǐng)?zhí)羁铡?include <stdio.h>#include <string.h>main() char str1080,*sp; int i; for(i=0;i<10;i+) gets(stri); sp= str0 ; for(i=0;i<10;i+) if(strlen(sp)<strlen(stri) ; printf(“輸出最長(zhǎng)的那個(gè)串: %sn”, ); printf(“輸出最長(zhǎng)的那個(gè)串的長(zhǎng)度: %dn”, );三、程序分析題1閱讀下列程序,寫出程序的輸出結(jié)果。 main() c

35、har *a6=“AB”, “CD”, “EF”, “GH”, “IJ”, “KL”; int i; for(i=0;i<4;i+) printf(“%s”,ai); printf(“n”); 2閱讀程序,寫出程序的主要功能。 main() int i, a10, *p=&a9; for(i=0;i<10;i+) scanf(“%d”,&ai); for(;p>=a;p-) printf(“%dn”,*p); 3閱讀下列程序,寫出程序運(yùn)行的輸出結(jié)果。 char s=”ABCD”; main() char *p; for(p=s;p<s+4;p+) pri

36、ntf(“%c %sn”,*p, p); 4設(shè)有下列程序,試寫出運(yùn)行的結(jié)果。 main() int i,b,c,a=1,10,-3,-21,7,13, *p_b, *p_c; b=c=1; p_b=p_c=a; for(i=0;i<6;i+) if(b<*(a+i) b=*(a+i); p_b=&ai; if(c>*(a+i) c=*(a+i); p_c=&ai; i=*a; *a=*p_b; *p_b=i; i=*(a+5); *(a+5)=*p_c; *p_c=i; printf(“%d,%d,%d,%d,%d,%dn”,a0, a1, a2, a3, a

37、4, a5); 5設(shè)有下列程序,當(dāng)輸入字符串“LEVEL”和“LEVAL”時(shí),試寫出運(yùn)行的結(jié)果。 #include <stdio.h> #include <string.h> void main() char s81,*pi,*pj; int n; gets(s); n=strlen(s); pi=s; pj=s+n-1; while(*pi=' ') pi+; while(*pj=' ') pj-; while(pi<pj)&&(*pi=*pj) pi+; pj-; if(pi<pj) printf(&quo

38、t;NOn"); else printf("YESn");6. 閱讀下列程序,寫出程序運(yùn)行的輸出結(jié)果。 #include <stdio.h> void main() char *alpha4="ABCD","EFGH","IJKL","MNOP" char *p; int i; p=alpha0; for(i=0;i<4;p=alpha+i) printf("%c",*(p); printf("n"); 7. 閱讀下列程序,寫出

39、程序運(yùn)行的輸出結(jié)果。 #include <stdio.h> void main() int s44,i,j; for(i=0;i<4;i+) for(j=0;j<4;j+) *(*(s+i)+j)=i-j; for(j=0;j<4;j+) for(i=0;i<4;i+) printf("%4d", *(*(s+i)+j); printf("n"); 8. 閱讀下列程序,寫出程序運(yùn)行的輸出結(jié)果。 #include <stdio.h> void main() static int a44; int *p4,i,

40、j; for(i=0; i<4; i+) pi=&ai0; for(i=0; i<4; i+) *(pi+i)=1; *(pi+4-(i+1)=1; for(i=0;i<4;i+) for(j=0;j<4;j+) printf("%2d", pij); printf("n"); 四、程序設(shè)計(jì)題(全部題目均要求用指針方法實(shí)現(xiàn))1 輸入3個(gè)整數(shù),按從大到小的次序輸出。2 編一個(gè)程序,輸入15個(gè)整數(shù)存入一維數(shù)組,再按逆序重新存放后再輸出。3 輸入一個(gè)字符串,按相反次序輸出其中的所有字符。4 輸入一個(gè)一維實(shí)型數(shù)組,輸出其中的最大值

41、、最小值和平均值。5 輸入一個(gè)3×6的二維整型數(shù)組,輸出其中最大值、最小值及其所在的行列下標(biāo)。6 輸入3個(gè)字符串,輸出其中最大的字符串。7 輸入2個(gè)字符串,將其連接后輸出。8 比較2個(gè)字符串是否相等。9 輸入10個(gè)整數(shù),將其中最大數(shù)和最后一個(gè)數(shù)交換,最小數(shù)和第1個(gè)數(shù)交換。10 有10個(gè)整數(shù),編一程序使它循環(huán)后移4個(gè)位置,再輸出該整數(shù)。11 寫一程序,將一個(gè)3×3的整數(shù)矩陣轉(zhuǎn)置,并輸出。12 寫一程序,輸入一字符串,輸出其長(zhǎng)度。13 寫一程序,輸入一行文字,找出其中大寫字母、小寫字母、空格、數(shù)字以及其他字符各有多少?14 將輸入的一個(gè)字符串從第m個(gè)字符開始的全部字符復(fù)制到另一

42、字符串并輸出。15 把10個(gè)字符串從小到大排序并輸出。第5章 指 針練習(xí)題答案一、 單項(xiàng)選擇題12345678910CABDDBACCC11121314151617181920DCBBACBCDA2122232425CDCDC二、填充題1. 地址 加減 賦值 數(shù)組名 2. 地址 NULL 3. 取地址運(yùn)算符 , 相互賦值 , 賦NULL 4. 加減整數(shù) +,- 5. 指針(取值) 取地址 6. 比較 7. 3 +3 8. double *p=&a 9. 地址 指的變量 地址 10. szi , pi , *(sz+i) 和 *(p+i) 11. ABCD A 12. 50 13. *m

43、in,*a,*b,*c a , b , c *a, *b, *c *min=*b *min *min=*c *min 14. 0 + 15. sp=stri sp strlen(sp)三、程序分析題1. 程序輸出:ABCDEFGH2. 程序的主要功能:把輸入的10個(gè)整數(shù)反序一行一個(gè)的輸出。3. 程序運(yùn)行的輸出結(jié)果:A ABCD B BCD C CD D D4. 該程序找出數(shù)組中最大和最小的元素,分別與第一和最后的元素交換,運(yùn)行結(jié)果輸出: 13,10,-3,1,7,-215. 程序用pi和指針pj指向字符串s的頭尾,然后逐步向中比較字符,到不等時(shí)終止。若都相等,則是“回文”,回答“YES”,否則

44、回答“NO”。因此當(dāng)輸入字符串“LEVEL”時(shí),輸出“YES”, 當(dāng)輸入字符串 “LEVAL”時(shí)輸出 “NO”。6. 四個(gè)字符指針指向四個(gè)字符串,程序每次循環(huán)p指向一個(gè)字符串,輸出第一的字符*p,運(yùn)行的輸出結(jié)果: AEIM7. 程序運(yùn)行輸出:0 1 2 3 -1 0 1 2 -2 -1 0 1 -3 -2 -1 08. 程序運(yùn)行輸出:1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 1四、程序設(shè)計(jì)題1. #include <stdio.h>main() int a, b, c, *pa=&a, *pb=&b, *pc=&c; scanf(“%d,%

45、d,%d”,pa,pb,pc); if(*pa>=*pb) if(*pb>*pc) printf(“%d, %d, %dn“,*pa,*pb,*pc); else if(*pa>*pc) printf(“%d, %d, %dn“,*pa,*pc,*pb); else printf(“%d, %d, %dn“,*pc,*pa,*pb); else if(*pc>*pb) printf(“%d, %d, %dn“,*pc,*pb,*pa); else if(*pa>*pc) printf(“%d, %d, %dn“,*pb,*pa,*pc); else printf(

46、“%d, %d, %dn“,*pb,*pc,*pa);2. #include <stdio.h>#define N 15main() int aN, b, *p, *q; for(p=a;p<a+N;p+) scanf(“%d”,p); for(p=a,q=a+N-1;p<a+N/2;p+,q-) b=*p; *p=*q; *q=b; for(p=a;p<a+N;p+) printf(“%3d ”,*p); printf(“n”);3. #include <stdio.h>#include <string.h>main() char str

47、81, *sptr; gets(str); sptr=str+strlen(str)-1; for(;sptr>=str;sptr-) printf(“%c”,*sptr); printf(“n”);4. #include <stdio.h>#define N 10main() float aN, avg, *pm, *ps, *p; for(p=a;p<a+N;p+) scanf(“%f”,p); pm=ps=a; avg=*a; for(p=a+1;p<a+N;p+) if(*p>*pm) pm=p; if(*p<*ps) ps=p; avg+=*

48、p; printf(“一維實(shí)型數(shù)組最大值=%fn”,*pm); printf(“一維實(shí)型數(shù)組最小值=%fn”,*ps); printf(“一維實(shí)型數(shù)組平均值=%fn”,avg/N);5. #include <stdio.h>main() int a36, (*p)6,i,j,maxh=0,maxl=0,minh=0,minl=0,max,min; for(p=a,i=0;i<3;i+) for(j=0;j<6;j+) scanf(“%d”,*(p+i)+j); printf(“二維數(shù)組是:n”); for(p=a,i=0;i<3;i+,p+) for(j=0;j&

49、lt;6;j+) printf(“%3d ”,(*p)j); printf(“n”); max=min=a00; for(p=a,i=0;i<3;i+) for(j=0;j<6;j+) if(*(*(p+i)+j)>max) maxh=i; maxl=j; max=*(*(p+i)+j); if(*(*(p+i)+j)<min) minh=i; minl=j; min=*(*(p+i)+j); printf(“最大值是:%d 所在的行:%d 所在的列:%dn”,amaxhmaxl,maxh,maxl); printf(“最小值是:%d 所在的行:%d 所在的列:%dn”

50、,aminhminl,minh,minl); 6. #include <stdio.h>#include <string.h>main() char s381, *p3=s0,s1,s2, *tp; int i; printf(“輸入3個(gè)字符串: n”); for(i=0;i<3;i+) gets(pi); tp=p0; for(i=1;i<3;i+) if(strcmp(pi,tp)>0) tp=pi; printf(“其中最大的字符串是:%sn”,tp);7. #include <stdio.h>#include <string.

51、h>main() char a40,b40,c80,*s,*t=c; gets(a); gets(b); s=a; for(;*s;) *t+=*s+; s=b; for(;*s;) *t+=*s+; *t=0; puts(c);8. #include <stdio.h>#include <string.h>main() char a81,b81,*s=a,*t=b; gets(a); gets(b); whilw(*s&&*t) if(*s+!=*t+) break; if(!*s&&!*t) printf(“%s 與 %s 相等

52、n”,a,b); elas printf(“%s 與 %s 不相等n”,a,b);9. #include <stdio.h> #define N 10 main() int xN,*p=x, *min, *max, t1,t2; printf("輸入十個(gè)整數(shù)(用空格分開):n"); for(p=a;p<a+N;p+) scanf("%d",p); min=&a0; max=&aN-1; for(p=a;p<a+N;p+) if (*p<*min) min=p;if (*p>*max) max=p; t1

53、=*min; *min=a0; a0=t1; t2=*max; *max=aN-1;aN-1=t2; for(p=a;p<a+N;p+) printf("%d ",*p); 10. #include <stdio.h> void main() int x100,i,n,m,end_num,*p; printf("輸入整數(shù)個(gè)數(shù)n(少于100個(gè)): ");scanf("%d",&n); printf("輸入%d個(gè)整數(shù)(用空格分開):n",n); for(p=x;p<x+n;p+) scanf("%d",p); printf(&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論