C語言習題集合(指針)_第1頁
C語言習題集合(指針)_第2頁
C語言習題集合(指針)_第3頁
C語言習題集合(指針)_第4頁
C語言習題集合(指針)_第5頁
已閱讀5頁,還剩18頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第七章 指針71 選擇題1 若有說明:int a=2, *p=&a, *q=p;,則以下非法的賦值語句是()。A p=q; B *p=*q; C a=*q; D q=a;2 若定義:int a=511, *b=&a;,則printf("%dn", *b);的輸出結(jié)果為: A 無確定值 B a的地址 C 512 D 5113 已有定義int a=2, *p1=&a, *p2=&a; 下面不能正確執(zhí)行的賦值語句是()。A a=*p1+*p2; B p1=a; C p1=p2; D a=*p1*(*p2);4 變量的指針,其含義是指該變量的()。A

2、 值 B 地址 C 名 D 一個標志5 若有說明語句:int a, b, c, *d=&c;,則能正確從鍵盤讀入三個整數(shù)分別賦給變量a、b、c的語句是()。A scanf("%d%d%d", &a, &b, d); B scanf("%d%d%d", a, b, d);C scanf("%d%d%d", &a, &b, &d); D scanf("%d%d%d", a, b,*d);6 若已定義int a=5; 下面對(1)、(2)兩個語句的正確解釋是()。(1) i

3、nt *p=&a; (2) *p=a;A 語句(1)和(2)中的*p含義相同,都表示給指針變量p賦值。B (1)和(2)語句的執(zhí)行結(jié)果,都是把變量a的地址值賦給指針變量p。C (1)在對p進行說明的同時進行初始化,使p指向a;(2)變量a的值賦給指針變量p。D (1)在對p進行說明的同時進行初始化,使p指向a; (2)將變量a的值賦予*p。7 若有語句int *p, a=10; p=&a; 下面均代表地址的一組選項是()。A a, p, *&a B &*a, &a, *pC *&p, *p, &a D &a, &*p, p

4、0.2345px8 若需要建立如圖所示的存儲結(jié)構(gòu),且已有說明double *p, x=0.2345; 則正確的賦值語句是()。 A p=x; B p=&x; C *p=x; D *p=&x;9 若有說明:int *p, a=1, b; 以下正確的程序段是()。A p=&b; B scanf("%d", &b);scanf("%d", &p); *p=b;C p=&b; D p=&b;scanf("%d", *p); *p=a;10有如下語句:int m=6, n=9, *p, *

5、q; p=&m; q=&n; 如圖1所示,若要實現(xiàn)下圖所示的存儲結(jié)構(gòu),可選用的賦值語句是()。mpnqpmqn A *p=*q; B p=*q; C p=q; D *p=q;11以下程序中調(diào)用scanf函數(shù)給變量a輸入數(shù)值的方法是錯誤的,其錯誤原因是()。 #include <stdio.h> main() int *p, *q, a, b;p=&a;printf("input a:");scanf("%d", *p);A *p表示的是指針變量p的地址B *p表示的是變量a的值,而不是變量a的地址C *p表示的是指針變

6、量p的值D *p只能用來說明p是一個指針變量12下面程序的功能是從輸入的十個字符串中找出最長的那個串。請在_處填空。 #include "stdio.h" #include "string.h" #define N 10 main() char sN81, * t;int j; for (j=0; j<N; j+) gets (sj);t= *s; for (j=1; j<N; j+) if (strlen(t)<strlen(sj) _; printf("the max length of ten strings is: %

7、d, %sn", strlen(t), t);A t=sj B t=&sj C t= s+ D t=sj013下面判斷正確的是()。A char *s="girl" 等價于 char *s; *s="girl"B char s10="girl" 等價于 char s10; s10="girl"C char *s="girl" 等價于 char *s; s="girl"D char s4= "boy", t4= "boy"

8、; 等價于char s4=t4= "boy"14設(shè)char *s="ta017bc";則指針變量s指向的字符串所占的字節(jié)數(shù)是()。A 9 B 5 C 6 D 715下面程序段中,for循環(huán)的執(zhí)行次數(shù)是()。 char *s="ta018bc" for (;*s!='0';s+) printf("*");A 9 B 5 C 6 D 716以下不能正確進行字符串賦初值的語句是()。A. char str5= "good!" B char *str="good!"C

9、. char str="good!" D char str5='g', 'o','o', 'd'17若指針p已正確定義,要使p指向兩個連續(xù)的整型動態(tài)存儲單元,不正確的語句是()。A p=2*(int *)malloc(sizeof(int);B p=(int *)malloc(2*sizeof(int);C p=(int *)malloc(2*2);D p=(int*)calloc(2, sizeof(int);18下面程序段的運行結(jié)果是()。char *s="abcde" s+=2; pr

10、intf("%d", s);A cde B 字符'c' C 字符'c'的地址 D 無確定的輸出結(jié)果19設(shè)有如下的程序段:char s="girl", *t; t=s;則下列敘述正確的是()。A s和t完全相同B 數(shù)組s中的內(nèi)容和指針變量t中的內(nèi)容相等C s數(shù)組長度和t所指向的字符串長度相等D *t與s0相等20以下正確的程序段是()。A char s20; B char *s; scanf("%s", &s); scanf("%s", s);C char s20; D cha

11、r s20, *t=s; scanf("%s", &s2); scanf("%s", t2);21下面程序段的運行結(jié)果是()。#include "stdio.h"main() int m=10, n=20; char *format="%s, m=%d, n=%dn" m*=n; printf(format, "m*=n", m,n);A format, "m*=n", m, n B format, "m*=n"C m*=n, m=200, n=2

12、0 D 以上結(jié)果都不對22以下與庫函數(shù)strcpy(char *p, char *q)功能不相等的程序段是()。A strcpy1(char *p, char *q) while (*p+=*q+)!='0');B strcpy2( char *p, char *q) while(*p=*q)!='0') p+; q+;C strcpy3(char *p, char *q) while (*p+=*q+); D strcpy4( char *p, char *q) while(*p) *p+=*q+;23下面程序段的運行結(jié)果是()。#include "

13、stdio.h" main() char s="example!", *t; t=s; while( *t!='p') printf("%c", *t-32);t+; A EXAMPLE! B example! C EXAM D example!24以下正確的程序段是()。A char s="12345", t="6543d21" strcpy( s,t);B char s20, *t="12345" strcat(s,t);C char s20=" &quo

14、t;, *t="12345" strcat(s, t);D char *s="12345", *t="54321" strcat (s,t);25以下與庫函數(shù)strcmp(char *s, chat *t)的功能相等的程序段是()。A strcmp1( char *s, chat *t) for ( ;*s+=*t+ ;) if (*s='0') return 0; return (*s-*t);B strcmp2( char *s, char *t) for ( ;*s+=*t+ ;)if (!*s) return

15、0; return (*s-*t); C strcmp3( char *s, char *t) for ( ;*t=*s ;) if (!*t) return 0; t+; s+; return (*s-*t); D strcmp4( char *s, char *t) for( ;*s=*t;s+,t+) if (!*s) return 0;return (*t-*s);26若有以下定義和語句:int s45, (*ps)5; ps=s;則對s數(shù)組元素的正確引用形式是()。A ps+1 B *(ps+3) C ps02 D *(ps+1)+327不合法的main函數(shù)命令行參數(shù)表示形式是:()

16、。A main( int a, char *c) B main(int argc, char *argv)C main( int arc, char *arv) D main( int argv, char*argc)28若有說明語句:char s="it is a example", *t="it is a example."則以下不正確的敘述()。A s表示的是第一個字符i的地址,s+1表示的是第二個字符t的地址B t指向另外的字符串時,字符串的長度不受限制C t變量中存放的地址值可以改變D s中只能存放16個字符29若已定義char s10;則在下

17、面表達式中不表示s1地址的是()。A s+1 B s+ C &s0+1 D &s130下面程序段的運行結(jié)果是()。(注:代表空格) #include "stdio.h" main() char s6;s="abcd"printf(""%s"n", s); A "abcd" B "abcd" C "abcd" D 編譯出錯31執(zhí)行以下程序后,a的值為【1】, b的值為【2】。#include <stdio.h>main() int

18、 a, b, k=4, m=6, *p=&k, *q=&m; a=p=&m;b=(-*p)/(*q)+7;printf("a=%dn", a);printf("b=%dn", b);【1】 A -1 B 1 C 0 D 4【2】 A 5 B 6 C 7 D 1032下面程序的功能是將字符串s的所有字符傳送到字符串t中,要求每傳遞三個字符后再存放一個空格,例如字符串s為"abcdefg",則字符串t為"abc def g",請選擇填空。#include "stdio.h"

19、#include "string.h" main() int j, k=0;char s60, t100, *p;p=s;gets(p);while(*p) for (j=1; j<=3 && *p; 【1】) tk=*p;if (【2】) tk=' ' k+;tk='0'puts(t); 【1】 A p+ B p+,k+ C p+, k+, j+ D k+, j+【2】 A j=4 B *p='0' C !*p D j!=433下面程序的功能是將八進制正整數(shù)字符串轉(zhuǎn)換為十進制整數(shù)。請選擇填空。#incl

20、ude "stdio.h"#include "string.h"main() char *t, s8; int n; t=s; gets(t); n=【1】; while (【2】!= '0') n=n*8+*t-'0' printf("%dn", n);【1】A 0 B *t C *t-'0' D *t+'0'【2】A *t B *t+ C *(+t) D t34下面程序的功能是在字符串s中找出最大的字符并放在第一個位置上,并將該字符前的原字符往后順序移動,如:boy&

21、amp;girl變成ybo&girl。請選擇填空。#include "stdio.h"#include "string.h"main() char s80, *t, max, *w; t=s; gets(t); max=*(t+); while (*t!='0') if (max<*t) max=*t; w=t; t+; t=w; while (【1】) *t=*(t-1); 【2】; *t=max; puts(t); 【1】A t>s B t>=s C *t>s0 D *t>=s0【2】A t+ B

22、 s- C t- D w-35以下程序的功能是刪除字符串s中的所有空格(包括TAB符、回車符),請?zhí)羁铡?#include "stdio.h" #include "string.h" #include "ctype.h" main() char s80;gets(s);delspace(s);puts(s); delspace(char *t) int m, n;char c80;for(m=0, n=0; 【1】; m+) if (!isspace(【2】) /*C語言提供的庫函數(shù),用以判斷字符是否為空格*/ cn=tm; n+;c

23、n='0'strcpy(t, c); 【1】A tm B !tm C tm='0' D tm='0'【2】A t+m B *cm C *(t+m) D *(c+m)36下面程序的功能是統(tǒng)計字串sub在母串s中出現(xiàn)的次數(shù)。請選擇填空。 #include "stdio.h" #include "string.h" main() char s80, sub80;int n;gets(s);gets(sub);printf("%dn", count(s,sub);int count( char

24、*p, char *q) int m, n, k, num=0; for (m=0; pm; m+) for (【1】, k=0; qk=pn; k+, n+) if(q【2】='0') num+; break; return (num);【1】A n=m+1 B n=m C n=0 D n=1【2】A k B k+ C k+1 D +k37下列程序的輸出結(jié)果是()。#include "stdio.h"main() int a=1,2,3,4,5,6,7,8,9,0, *p; p=a; printf("%dn", *p+9);A 0 B

25、1 C 10 D 938以下程序的輸出結(jié)果是()。#include "stdio.h"char cchar(char ch) if (ch>='A' && ch<='Z') ch=ch-'A'+'a' return ch;main() char s="ABC+abc=defDEF", *p=s;while(*p) *p=cchar(*p); p+;printf("%sn",s);A abc+ABC=DEFdef B abcaABCDEFdefC

26、 abc+abc=defdef D abcabcdefdef39以下程序的輸出結(jié)果是()。#include "stdio.h" #include "string.h" main() char b18="abcdefg", b28, *pb=b1+3; while( -pb>=b1) strcpy(b2, pb); printf("%dn", strlen(b2); A 8 B 3 C 1 D 740有以下程序#include "string.h"#include "stdio.h

27、"main() char *p="abcde0fghjik0"printf("%dn", strlen(p); 程序運行后的輸出結(jié)果是()。 A 12 B 15 C 6 D 541有以下程序void ss( char *s, char t) while (*s) if (*s=t) *s=t-'a'+'A' s+;main() char str100="abcddfefdbd", c='d' ss(str, c); printf("%sn", str1);程

28、序運行后的輸出結(jié)果是()。AABCDDEFEDBD B abcDDfefDbD C abcAAfefAbA D Abcddfefdbd42以下程序調(diào)用findmax函數(shù)返回數(shù)組中的最大值。在下面劃線處應填入的是()。#include "stdio.h"findmax( int *a, int n) int *p, *s;for (p=a, s=a; p-a<n; p+) if(_) s=p;return (*s);main() int x5=12,21,13,6,18; printf("%dn", findmax(x,5);A p>s B *

29、p>*s C ap>as D p-a>p-s43有以下程序#include "stdio.h"#include "malloc.h"main()char *q, *p; p=(char*) malloc (sizeof(char) *20); /*為指針p分配一個地址*/ q=p; scanf("%s%s", p, q); printf("%s %sn", p, q);若從鍵盤輸入:abc def,則輸出結(jié)果是:A def def B abc def C abc d D d d44下面程序的運行結(jié)

30、果是()。 #include "stdio.h" #include "string.h" fun( char *s) char t10;s=t;strcpy(t, "example"); main() char *s;fun(s);puts(s); Aexample Bexample Cexample D不確定的值45下列程序段的輸出結(jié)果是()。#include "stdio.h"void fun( int *x, int *y) printf("%d%d", *x, *y);*x=3;*y=4

31、;main() int x=1, y=2; fun(&y, &x); printf("%d %d", x, y);A 2 1 4 3 B 1 2 1 2 C 1 2 3 4 D 2 1 1 246下列程序的輸出結(jié)果是()。#include "stdio.h"main()char a10=9,8,7,6,5,4,3,2,1,0, *p=a+5; printf("%d", *-p);A 非法 B a4的地址 C 5 D 347有以下程序#include "stdio.h"#include "s

32、tring.h"main(int argc, char *argv) int m, length=0;for (m=1;m<argc; m+) length+=strlen(argvm);printf("%dn", length);程序編譯連接后生成的可執(zhí)行文件是file.exe,若執(zhí)行時輸入帶參數(shù)的命令行是:file 1234 567 89則運行結(jié)果是()。A 22 B 17 C 12 D 948有以下函數(shù):char *fun(char *s) return s; 該函數(shù)的返回值是()。A 無確定值 B 形參s中存放的地址值C 一個臨時存儲單元的地址 D

33、形參s自身的地址值49假定下列程序的可執(zhí)行文件名為file.exe,則在該程序所在的子目錄下輸入命令行: file girl boy后,程序的輸出結(jié)果是()。#include "stdio.h"main(int argc, char *argv) int m;if (argc<=0) return; for (m=1; m<argc ; m+) printf("%c", *argvm);A girl boy B gb C gir D girlboy50設(shè)有一個名為file的C源程序,且已知命令行為:file girl boy student,

34、則可得到以下運行結(jié)果的C源程序為()。girl boy student A main( int argc, char *argv) while (-argc>1)printf("%s%c", *argv, (argc>1)? 'n':' '); B main( int a, char * b) while (a->1)printf("%sn", *+b); C main( int argc, char *argv) while (+argc>0)printf("%s%c", *+

35、argv, (argc>1) ? ' ' :'n'); D main(int argc, char *argv) while (argc>1)printf("%s", *+argv);72 填空題1 設(shè)有定義:int a, *p=&a; 以下語句將利用指針變量p讀寫變量a中的內(nèi)容,請將語句補充完整。scanf("%d", 【1】 );printf("%dn", 【2】 );Wpc2 請?zhí)羁眨航⑷鐖D所示存儲結(jié)構(gòu)所需的說明語句是【1】。建立如圖所示給c輸入數(shù)據(jù)的輸入語句是【2】。建立如

36、圖所示存儲結(jié)構(gòu)所需的賦值語句是【3】。3 以下程序的運行結(jié)果是_。#include "stdio.h"#include "string.h"int *p;main() int x=1, y=2, z=3; p=&y; fun(x+z, &y); printf("(1) %d %d %dn", x, y, *p);fun( int x, int *y) int z=4;*p=*y+z; x=*p-z; printf("(2) %d %d %dn", x, *y, *p);4 下面程序段是把從終端讀入的

37、一行字符作為字符串放在字符數(shù)組中,然后輸出。請?zhí)羁铡?#include "stdio.h" #include "string.h" main() int m; char s80, *t; for (m=0; m<79; m+) sm=getchar(); if (sm='n') break; sm= 【1】; t=【2】; while (*t) putchar(*t+); 5 下面程序段的運行結(jié)果是_。 char s80, *t="EXAMPLE" t=strcpy(s, t); s0='e' p

38、uts(t); 6 函數(shù)sstrcmp()的功能是對兩個字符串進行比較。當s所指字符串相等時,返回值為0;當s所指字符串大于t所指字符串時,返回值大于0;當s所指字符串小于t所指字符串時,返回值小于0(功能等同于庫函數(shù)strcmp())。請?zhí)羁铡?include "stdio.h"int sstrcmp( char *s, char *t) while (*s && *t && *s=【1】) s+; t+;return 【2】;7 下面程序的運行結(jié)果是_。void swap(int *a, int *b) int *t; t=a; a=b;

39、 b=t;main() int x=3, y=5, *p=&x, *q=&y; swap(p,q); printf("%d %dn", *p, *q);8 以下程序的輸出結(jié)果是_。#include "stdio.h"main() char *p="abcdefgh", *r; long *q;q=(long *) p; q+;r=(char *) q; printf("%sn", r);9 下面程序的功能是將字符串中的數(shù)字字符刪除后輸出。請?zhí)羁铡?#include "stdio.h&quo

40、t; #include "malloc.h" void delnum( char *t) int m, n; for (m=0,n=0; tm!='0'm+)if (tm<'0' 【1】tm>'9') tn=tm; n+; 【2】; main() char *s; s=(char *) malloc (sizeof(char); /*給s分配一個地址*/printf("n input the original string:");gets(s);delnum(s);puts(【3】);10下面程

41、序的功能是比較兩個字符串是否相等,若相等則返回1,否則返回0。請?zhí)羁铡?include "stdio.h" #include "string.h"fun (char *s, char *t)int m=0;while (*(s+m)=*(t+m) && 【1】) m+;return (【2】);11下面程序用來計算一個英文句子中最長單詞的長度(字母個數(shù))max。假設(shè)該英文句子中只含有字母和空格,在空格之間連續(xù)的字母串稱為單詞,句子以'.'為結(jié)束。請?zhí)羁铡?#include "stdio.h" main(

42、) static char s=" you make me happy when days are grey.", *t; int max=0, length=0; t=s; while (*t!='.') while (*t<='Z')&&(*t>='A')|(*t<='z')&&(*t>='a') length+; 【1】; if (max<length) 【2】; length=0; t+;printf("max=%d

43、", max);12下面程序是判斷輸入的字符串是否是“回文”,(順讀和倒讀都一樣的字符串稱為“回文”,如level)。請?zhí)羁铡?include "stdio.h"#include "string.h"main() char s80, *t1, *t2; int m; gets(s); m=strlen(s); t1=s; t2=【1】; while(t1<t2) if (*t1!=*t2) break; else t1+; 【2】; if (t1<t2) printf("NOn"); else printf(&q

44、uot;YESn"); 13當運行以下程序時,從鍵盤輸入:apple tample 則下面程序的運行結(jié)果是_。#include "stdio.h"main() char s80, *t; t=s; gets(t); while (*(+t)!='0') if (*t='a') break; else t+; gets(t); puts(t);14當運行以下程序時,從鍵盤輸入6,則下面程序的運行結(jié)果是_。#include "stdio.h"#include "string.h"main() ch

45、ar s="97531", c; c=getchar(); f(s,c); puts(s);f(char *t, char ch) while (*(t+)!='0'); while(*(t-1)<ch) *(t-)=*(t-1); *(t-)=ch;15若有定義:int a=1,2,3,4,5,6,7,8,9,10,11,12, *p3, m; 則下面程序段的輸出是_。 for ( m=0; m<3; m+) pm=&am*4; printf("%dn", p22);16下面程序的運行結(jié)果是_。#include &q

46、uot;stdio.h"main() char s="1357", *t; t=s;printf("%c, %cn", *t, +*t);17以下程序?qū)?shù)組a中的數(shù)據(jù)按逆序存放。請?zhí)羁铡?include "stdio.h"#define M 10 main() int aM, m, n, temp;for( m=0; m<M; m+) scanf ("%d", a+m);m=0;n=M-1;while(m<n) temp=*(a+m); 【1】; *(【2】)=temp; m+; n-; fo

47、r (m=0;m<M;m+) printf("%3d", *(a+m);18以下程序在a數(shù)組中查找與x值相同的元素的所在位置。請?zhí)羁铡?#include "stdio.h"main() int a11, x, m;printf("please input ten numbers:n");for(m=1;m<11;m+) scanf("%d", a+m);printf("please input x:");scanf("%d", &x);*a=【1】;m=1

48、0;while (x!=*(a+m) 【2】;if (m>0) printf("%5d's position is : %4dn", x, m);else printf("%d not been found!n", x);19以下程序的功能是_。#include "stdio.h"main() char * s= "PASCAL", "FORTRAN", "COBOL", "BASIC"char *p;int n;p=s;for (n=0;n

49、<4;n+) printf("%sn", *(p+); 20若有定義和語句:int a4=1,2,3,4,*p; p=&a2; ,則*-p的值是_。21若有定義和語句:int a23=0, (*p)3; p=a;,則p+1表示數(shù)組_。22若有如下定義和語句:int *p3, a6, n;for (m=0;m<3;m+) pm=&a2*m;則*p0引用的是a數(shù)組元素【1】;*(p1+1)引用的是a數(shù)組元素【2】。23若有以下定義和語句,在程序中引用數(shù)組元素am的四種形式是:【1】、【2】、【3】和am。(假設(shè)m 已正確說明并賦值) int a10, *p; p=a;24下面程序的輸出結(jié)果是_。 #include "stdio.h"main() int b23=1,3,5,7,9,11; int *a23; int i,j; int *p, m; for(i=0;i<2;i+) for(j=0;j<3;j+) aij=*(b+i)+j; p=a0; for(m=0;m<6;m+) printf("%4d", *p); p+; 25定義語

溫馨提示

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

評論

0/150

提交評論