小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

5.1 單項(xiàng)選擇題

 ┣█一生有你 2007-01-10

    5.1  單項(xiàng)選擇題

    1.設(shè)有定義“int a3, b*p&a,則下列語句中使 b不為3的語句是(  
    ① b
* &a     ② b* p;    
    ③ b
a;     ④ b*a;

     
【解】定義有 int a3, b,*p&a;對(duì)b賦值的表達(dá)式有*&a、*p、a 、*a。引用變量。的值有兩種方法,一是直接引用a,二是通過a的指針間接引用a。對(duì)于后者,又有多種表達(dá)方法,通過指向a的指針p,間接引用a的內(nèi)容,如*p?;蛲ㄟ^求地址運(yùn)算符由變量a得到其指針&a,再由這指針表達(dá)式間接引用 a的內(nèi)容,如* &a。所以表達(dá)式*&a、*pa都能引用變量a的值,而使b的值為3。而表達(dá)式。a是錯(cuò)誤的,因?yàn)?span lang=EN-US>a
不是指針變量,不能對(duì)它施行取內(nèi)容運(yùn)算符。。所以解答是

         2
.設(shè)指針x指向的整型變量值為25,則"printf("%d\n",++ *x);"的輸出是( 
           ① 23          ② 24           ③ 25           ④ 26
     
【解】若指針變量x指向某個(gè)變量,例如指向變量v,并且變量v的值是25,則表達(dá)式++ *x的值是26。這是因?yàn)楸磉_(dá)式的計(jì)算順序可加圓括號(hào)表達(dá)成(++(*x)),首先是*x,是對(duì)X所指變量V的引用,所以++ *X就是++V++V是先讓變量V1,并以增至后的V的值為表達(dá)式++V的結(jié)果,所以其值是 26。所以解答是

       3
.若有說明:“ int i,j 7,*p&i;,則與“ ij;等價(jià)的語句是( 

    ①i*p;          ②*P* &j;
    ③i==&j
           ④i* *p;
   
【解】指針變量 p指向變量i時(shí),表達(dá)式i=*p等價(jià)于 ii;表達(dá)式*p*&j等價(jià)于ij;而表達(dá)式i&j企圖將整型變量的指針賦給整型變量,這是錯(cuò)誤的;表達(dá)式i=* *p也是一種錯(cuò)誤的表達(dá)式。p是指針,*pp所指變量j,* *p是企圖將整型變量j當(dāng)作指針,并想通過j間接引用某個(gè)變量。所以解答是


        4
.若有說明語句“int a[10],*pa,對(duì)數(shù)組元素的正確引用是( 
    ①a[p]             ②P[a]             
    ③*(P
2)              ④P2
    
【解】在 C語言中,約定數(shù)組名單獨(dú)出現(xiàn)在表達(dá)式中時(shí),它表示數(shù)組首元素的指針。有int a[10] ,則a可以作為&a[0]使用。另有整型指針變量p,代碼pa實(shí)現(xiàn)p指向數(shù)組a的首元素。則表達(dá)式*(p2)是引用數(shù)組元素a[2]。表達(dá)式a[p]p[a]都是不正確的,下標(biāo)必須是整型表達(dá)式,不可以是指針表達(dá)式。表達(dá)式p2是指針表達(dá)式,它的值是&p[2]。所以只有表達(dá)式*(p2)引用數(shù)組a的元素a[2]。所以解答是。


          5
.下面各語句中,能正確進(jìn)行賦字符串操作的語句是( 
         ①char s[5] ={"ABCDE"};            ②char s[5] ={‘A‘,‘B‘,‘C‘,‘D‘,‘E‘};
      ③ char *s
s"ABCDE";           ④ char *sscanf("%s", &s);
   
【解】字符串最終存儲(chǔ)于字符數(shù)組中,存儲(chǔ)字符串的字符數(shù)組可以是程序主動(dòng)引入的(定義或動(dòng)態(tài)分配),也可以是字符串常量,由系統(tǒng)分配。其中字符數(shù)組用字符串初始化就是字符串存儲(chǔ)于由程序引入的字符數(shù)組的例子。給字符指針賦字符串則是系統(tǒng)自動(dòng)分配字符率存儲(chǔ)空間的例子。給字符指針賦字符串并不是將一個(gè)長長的字符串存于字符指針變量中,而是將字符串常量存儲(chǔ)于常量區(qū),并將存儲(chǔ)這個(gè)字符串的首字節(jié)地址賦給指針變量,讓指針變量指向字符率常量的首字符。對(duì)于以字符串作為字符數(shù)組初值的情況,要求字符數(shù)組足夠的大,能存得下字符串常量。這里有一個(gè)特別的規(guī)定,若數(shù)組的大小少于存儲(chǔ)字符串有效字符的字節(jié)個(gè)數(shù),系統(tǒng)將報(bào)告錯(cuò)誤;當(dāng)字符數(shù)組的大小只能存儲(chǔ)字符串的有效字符,而不能存儲(chǔ)字符率結(jié)束標(biāo)記符時(shí),則存儲(chǔ)于字符數(shù)組中的內(nèi)容是字符序列,因沒有存儲(chǔ)字符率結(jié)束標(biāo)記符,存儲(chǔ)的內(nèi)容就不是字符串。如代碼char a[5]"ABCDE"。另外,給字符數(shù)組元素逐一賦字符初值,并在字符初值中沒有字符串結(jié)束標(biāo)記符,則存于字符數(shù)組中的內(nèi)容也不是字符串。如代碼 char s[5]={‘A‘,‘B‘‘C‘,‘D‘‘E‘}。特別要注意當(dāng)字符指針還未指向某個(gè)字符數(shù)組的元素時(shí),不可以通過字符指針輸入字符串。如代碼char *s;scanf("%s",s)。若寫成char *str;scanf("%s"&str)更是錯(cuò)誤的了。由于C語言規(guī)定數(shù)組不能相互賦值,所以只能將字符串常量賦給某字符指針。如代碼char *s;s"ABCDE"是正確的。實(shí)際上,字符率"ABCDE" 被存儲(chǔ)于常量區(qū)中,向指針變量賦的是字符指針,讓s指向其中的字符‘A‘。所以解答是。

         6
.若有以下定義,則不能表示a數(shù)組元素的表達(dá)式是()
         int a[10]
={12,34,5,6,78,91o},*pa;
                   ①*p           ② a[10]             ③*a              ④ a[p-a] 
      
【解】上述代碼定義了有10個(gè)元素的整型數(shù)組。,和定義指針變量p,并讓p指向數(shù)組元素a[0]。所以代碼*p是引用 a[0]。由于數(shù)組a只有10個(gè)元素,最后一個(gè)元素是a[9],表達(dá)式a[10]是錯(cuò)誤的。數(shù)組名a可以作為a的首元素的指針,表達(dá)式*a就是a[0] ,是對(duì)數(shù)組a的首元素a[0]的引用。指針p的值是a,表達(dá)式p-a。的值是0,所以a[pa]就是a[0]。所以解答是。

          7
.若有以下定義,則值為3的表達(dá)式是()

   int a[] {1,2,34,56,7,89,10}*pa;
    ①p
+=2,*(p++)           ③p+=2* ++p
    ③p
+=3,*p++           ④ p+=2
++ *p
     
【解】數(shù)組a10個(gè)元素,分別有值110,指針變量p指向a[0] ①逗號(hào)表達(dá)式 p+=2,*(P++),先是P+=2使P指向a[2],接著是*(P++),以當(dāng)時(shí)P所指變量a[2]取內(nèi)容3為表達(dá)式的值,同時(shí)使p指向a[3]。返號(hào)表達(dá)式p+=2,* ++p,先是p+=2使p指向a[2],以后是* ++p,又使 p1,讓它指向a[3],并取指針p所指變量a[3]的內(nèi)容4作為表達(dá)

式的值。逗號(hào)表達(dá)式 p+=3*p++,先是p+=3使p指向a[3],以后是*p++,表達(dá)式的值是 a[3] 4,而使p指向a[4]。逗號(hào)表達(dá)式p+=2++ *p,先是p+=2,使p指向a[2],以后是++ *p,因當(dāng)時(shí)的*p就是 a[2],++a[2]使a[2]1,變成4,并以4為表達(dá)式的值。所以只有p+=2,*(p++)的值是3。所以解答是。

      8
.設(shè)有定義“char a[10]={"abcd"},*p=a;",則*(p4)的值是( 
    ①"abCd"              ②‘d‘
    ③‘\0‘              ④
不能確定
 
  解】若有char a[10]"abcd",*pa,則指針變量p指向a[0]。在表達(dá)式*(p4)中,p4指向a[4],*(p4)就是a[4]。由于用字符"abcd" 給字符數(shù)組a賦初值,a[4]的值是字符串結(jié)束標(biāo)記符‘\0‘。所以解答是。

       9
.設(shè)有代碼"int(*ptr)[10];,其中的ptr是( 
    ①10
個(gè)指向整型變量的指針
    ②
指向10個(gè)整型變量的函數(shù)指針
    ③
一個(gè)指向具有10個(gè)元素的一維數(shù)組的指針
    ④
具有10個(gè)指針元素的一維數(shù)組
    
【解】代碼“int(*ptr)[10];的分析過程是,因圓括號(hào),括號(hào)內(nèi)的ptr先與字符*結(jié)合,字符*修飾標(biāo)識(shí)符ptr是一種指針;接著與后面的一對(duì)方括號(hào)結(jié)合,表示是這樣的一種指針,是指向一維數(shù)組的;再有方括號(hào)中的10,說明這種數(shù)組有10個(gè)元素。至此,ptr是指向含10個(gè)元素的一維數(shù)組的指針。最后,是最前面的int,表示數(shù)組元素是int類型的。所以,ptr是一個(gè)指向具有10個(gè)int型元素的一維數(shù)組的指針。所以解答是。另外,要是,10個(gè)指向整型變量的指針,就是一個(gè)指針數(shù)組,上述代碼應(yīng)寫成“int *ptr[10];,即ptr是一個(gè)有10個(gè)指向整型變量的數(shù)組。要是,返回值是指向10個(gè)整型變量的函數(shù)的指針,上述代碼應(yīng)寫成“int(*(*ptr)())[10];,即ptr是指針,指向一種函數(shù),函數(shù)的返回值又是一種指針,指向10個(gè)元素的數(shù)組,數(shù)組的元素是整型的。下面的代碼是這樣的函數(shù)指針和函數(shù)的例子:
        # include<stdio.h> 
    int a[][10]={{1
,23,45,678,9,0} ,{01,2,34,5,6,7,8,9} };
     int(*(*ptr)(int))[10]
;
     int(*f( int n))[10] 
     {return a
n;
      } 
    void main()
    { int(*p)[10]
,*q;
      ptr
f;/*ptr指向函數(shù)f*/
      P
(*ptr)(0)

   q=*p;
      printf("%d\n", *p)

     P
(*ptr)(l);
     q=*p
;
     printf("%d\n", *q)

     }
   
在上述代碼中,函數(shù)有一個(gè)int型的形參。要是,其意義與相同,上述代碼應(yīng)寫成“int* ptr[10];,即 ptr是一個(gè)有10個(gè)元素的數(shù)組,數(shù)組元素是指向整型變量的指針。

        10
.若有以下定義,則數(shù)值為4的表達(dá)式是( 
     int w[3][4]
{{01},{24},{5,8}},(* p)[4] W
                   ①*w[1]
l          ②p++,*(p1)           ③w[2][2]                ④p[1][1]
     
【解】二維數(shù)組定義有多種賦初值的辦法,問題給出的代碼是按行給數(shù)組的部分元素賦初值。它們分別是w[0][0]0w[0][1]1、w[1][1]=2w[1][1]=4,w[2][0]=5,w[2][1]8。根據(jù)約定,未指定初值的元素自動(dòng)置全0值。指針變量p是一個(gè)指向具有四個(gè)int型元素的一維數(shù)組的指針,定義時(shí)的初值使它指向數(shù)組W的第一行。的代碼,*w[1]+1中的W[l]是指向 w[l][0]的指針,*w[1] 就是w[1][0],其值是2,*w[1]l的值是3的代碼是逗號(hào)表達(dá)式,“p++,*(p1)”先使p指向數(shù)組w的第二行,*(pl)中的pl是指向數(shù)組w的第三行,*(p1)是指針值,指向數(shù)組w的第三行的第一個(gè)元素,即&w[2][0]. ③的代碼w[2][2]引用數(shù)組W第三行的第三列元素,其值是0。的代碼p[1][l]引用數(shù)組W第二行的第二列元素w[1][1],其值是 4。所以解答是


         11
.若有下面的程序片段,則對(duì)數(shù)組元素的錯(cuò)誤應(yīng)用的是( 
        int a[12]
{0},*p[3], * *ppi;
        for( i
0;i<3i++) p[i]=&a[i4];
        pp= P
;
    ①pp[0][1]            ②a[10]
    ③ p[3][l]           ④*(*(p
2)2) 
       
【解】上述代碼定義變量a是有12個(gè)整型元素的數(shù)組,它的初值全是0。p是有三個(gè)元素的指針數(shù)組,每個(gè)指針能指向整型變量。**pp是指針的指針,它能指向一個(gè)指向整型變量的指針, i是一個(gè)整型變量。執(zhí)行代碼for(i0;i<3;i++) P[i]&a[i+4] 使指針數(shù)組 p的元素 p[0]指向 a[4] p[l]指向a[5] ,p[2]指向 a[6]。代碼ppp使指針變量pp指向p[0]。代碼pp[0][l] 用指針表達(dá)可等價(jià)地寫成*(*ppl)。其中*pp就是 p[0]p[0]的值是&a[4],*pp+1的值是&a[4]1=&a[5],*(*pp+1)就是a[5]代碼a[l0] 當(dāng)然是引用數(shù)組a的元素。代碼p[3][1]數(shù)組p只有三個(gè)元素,沒有p[3],所以是錯(cuò)誤的。代碼*(*(p2)2)中的(p2) &p[2],*(p2) p[2],其值是&a[6],*(p2)2的值是&a[8],*(*(p2)2)引用的是a[8]。所以解答是。


        12
.若有如下定義和語句,則輸出結(jié)果是( 
        int * *pp
, *pa10,b20;
       PP=&p
P&a; P&b printf("%d%d\n",*p,* *PP);
    ①10
20                 ② 10, 10                
    ③ 20
, 10                 ④ 20
20
     
【解】上述代碼定義變量pp是指針的指針,它能指向一個(gè)指向整型變量的指針。定義變量p是指針,它能指向一個(gè)整型變量。a是一個(gè)整型變量,它有初值10。b也是一個(gè)整型變量,它有初值20。代碼 pp=&p 使pp指向pp&a使p指向a,p&b又使p指向b,不再指向a。所以。p是引用b,其值為20。* *pp是通過pp間接引用p,再通過p間接引用b,所以也是20。所以解答是。


    13
.若有以下定義和語句,則對(duì)w數(shù)組元素的非法引用是( 
    int w[2][3]
,(* pw)[3] pw w;
    ① *(w[0]
2)              ②*pw[2]          
    ③pw[0][0]             ④*(pw[l]+2) 
       
【解】上述代碼定義23列的二維數(shù)組w,定義能指向有3個(gè)整型元素一維數(shù)組的指針pw,并讓pw指向數(shù)組w的第一行。代碼*(w[0]2)中的w[0]&w[0][0],w[0]2&w[0][2],所以*(w[0]2)就是w[0][2]。代碼*pw[2]中的pw[2]&w[2][0],該數(shù)組w只有2行,沒有w[2][0],所以代碼*pw[2]是對(duì)數(shù)組W元素的非法引用。代碼pw[0][0]就是w[0][0]代碼*(pw[l]2)中的pw[1]就是*(pwl),即&w[l][0],pw[l]2就是&w[l][2],所以*(pw[1]2)就是w[1][2]。所以解答是。

 

    5.2    填充題

 

    1“* ”稱為___________運(yùn)算符,“&”稱為_________運(yùn)算符。
     
【解】單目運(yùn)算符“*”稱為取內(nèi)容運(yùn)算符,單目運(yùn)算符“&”稱為取地址運(yùn)算符。

         2
.若兩個(gè)指針變量指向同一個(gè)數(shù)組的不同元素,可以進(jìn)行減法運(yùn)算和___________運(yùn)算。
     
【解】若兩個(gè)指針變量指向同一個(gè)數(shù)組的不同元素,可以進(jìn)行減法運(yùn)算求它們所指元素相差多少元素。進(jìn)行關(guān)系運(yùn)算,判定它們所指元素的前后,或是否指向同一個(gè)元素等。

           3
.設(shè) int a[10] *pa;則對(duì)a[3]的引用可以是p[______________] *(p_________)
    
【解】若指針p指向數(shù)組a的首元素,則引用a[3]用指針p可以寫成p[3]*(p3)

           4
.若d是已定義的雙精度變量,再定義一個(gè)指向d的指針變量p的代碼是___________
    
【解】若d是一個(gè)雙精度變量,定義能指向它的指針變量p可以用以下代碼double *p&d

            5
&后跟變量名,表示該變量的_________;*后跟指針變量名,表示該指針變量_______。&后跟的是指針變量名,表示該指針變量的_____________
     
【解】單目運(yùn)算符&是取地址運(yùn)算符,&后跟變量名,就表示該變量的地址。單目運(yùn)算符*是取內(nèi)容運(yùn)算符,*后跟指針變量名,表示該指針變量所指變量的內(nèi)容。若&后跟的是指針變量名,就表示該指針變量的地址。若知道指針變量的地址,欲通過指針變量的地址引用指針變量所指變量的內(nèi)容,需要連續(xù)兩次取內(nèi)容運(yùn)算。

          6
.設(shè)有char *a"ABCD",則printf("%s",a)的輸出是_______;而printf("%c",*a)的輸出是______
   
【解】若給字符指針變量a賦一個(gè)字符串常量"ABCD",實(shí)際上是給a賦指向字符串常量首字符‘A‘的指針。程序通過它訪問字符串中的各字符。如用代碼printf("%s",a) 輸出這個(gè)字符串常量"ABCD"的字符列ABCD,用代碼printf("%c"*a)輸出a所指的字符 A。

           7
.設(shè)有以下定義和語句,則*(*(p2)l)的值為__________。
      int a[3][2]={10
20,3040,50,60},(*p)[2]
      p= a
;
   
【解】上述代碼定義32列的二維數(shù)組a ,定義指向兩個(gè)元素的一維數(shù)組指針p,并讓p指向二維數(shù)組a的首行。則代碼*(*(p2)l)中的p2指向二維數(shù)組a的第2a[2],*(p2)指向a[2][o],*(p2)+l指向a[2][l],*(*(p2)l)是引用a[2][l],其值是60。

        8
.以下程序的功能是從鍵盤上輸入若干個(gè)字符(以回車符作為結(jié)束)組成一個(gè)字符串存入一個(gè)字符數(shù)組,然后輸出該字符數(shù)組中的字符串。請(qǐng)?zhí)羁铡?/font>
       # include<ctype.h> 
       # include<stdio.h> 
       main()
      { char str[81]
*sptr;
        int i
;
        for(i
0i<80;i++)
      { str[i]=getchar()
;if(str[i]==‘\n‘) break;}

        str[i]
____________;
        sptr
str;

        while(* sptr) putchar(* sptr______________);
      }
       
【解】從鍵盤輸入字符行,通過循環(huán)逐一輸入字符,當(dāng)發(fā)現(xiàn)輸入字符是換行符時(shí),結(jié)束循環(huán)。為了使輸入的字符列變成字符串,必須在輸入字符列之后,原存儲(chǔ)換行符的元素改為存儲(chǔ)字符串的結(jié)束標(biāo)記符,需用代碼 str[i]‘\0‘ ,所以在第一框填入代碼\0。當(dāng)要將存于字符數(shù)組str中的字符串通過循環(huán)逐一輸出字符串的字符時(shí),可以用字符指針sptr,讓sptr遍歷整個(gè)字符串,每次循環(huán)時(shí),輸出sptr所指字符,并讓sptr1,即可用代碼*sptr++實(shí)現(xiàn),所以在第二框填入代碼++。

 

    5.3  程序分析題

 

1.閱讀下列程序,寫出程序的輸出結(jié)果。
    main() 
    {char *a[6]={"AB","CD","EF","GH",U","KL"}

     int i;
     for(i
0;i<4;i++) printf("%s" a[i]);
     printf("\n")
;
   }
     
【解】程序定義了有六個(gè)元素的字符指針數(shù)組a ,數(shù)組a 的各元素指向字符率常量。程序的for循環(huán)遍歷了a的前四個(gè)元素,用字符率輸出格式,輸出指針數(shù)組a前四個(gè)元素所指的字符串。所以程序輸出: ABCDEFGH。

        2
.閱讀下列程序,寫出程序的主要功能。
    main()
    { int i
,a[l0],*p&a[9] ;
     for(i=0
;i<10i++) scanf("%d",&a[i]);
     for(
p>=a; p--) printf("%d\n"*p) ;
    }
       
【解】程序定義了有10個(gè)元素的整型數(shù)組a,另定義指針變量p,并讓它指向a的最后一個(gè)元素a[9]。執(zhí)行代碼的第一個(gè)循環(huán)是順序輸人數(shù)組a10個(gè)元素。第二個(gè)循環(huán)利用指針p逆序遍歷數(shù)組a,將數(shù)組a的各元素逆序輸出。所以程序的功能是輸入10個(gè)整數(shù),并逆序輸出這10個(gè)整數(shù)。

        3
.閱讀下列程序,寫出程序運(yùn)行的輸出結(jié)果。
     char s[]
"ABCD";
  main()
    { char * p
;
     for( p
s;p< s4p++) printf("%s\n", p);
    }
     
【解]程序定義了一個(gè)字符數(shù)組s,由給它所賦的字符串初值知,該數(shù)組只有五個(gè)元素。程序另定義了字符指針變量p。循環(huán)開始時(shí),先讓p指向數(shù)組的首元素。循環(huán)每次輸出以p所指字符為首字符的字符串,并讓它指向下一個(gè)字符。如此反復(fù)循環(huán)四次,所以程序輸出以下內(nèi)容:
       ABCD
       BCD
       CD
       D

        4
.閱讀下列程序,試寫出程序運(yùn)行的結(jié)果。
     main()
     {int i,b
,c,a[]{1,10,-3,-21,713},*p_b,*p_c;
     b=C=1
;p_bp_C a;

     for(i
0i<6; i++)
    { if(b<*(a
i)) {b*(ai); p_b&a[i]
}
      if(c>*(a
i)) {c*(ai); p_c&a[i]
}
    }
   i*a;*a*p_b;*p_bi;i=*(a5)*(a5)*p_c*p_ci;
    printf("%d
%d,%d,%d%d,%d\n" a[O],a[1],a[2]a[3],   a[4], a[5]);
    }
     
【解]程序定義了一個(gè)整型數(shù)組。,由給它所賦的初值知,該數(shù)組有六個(gè)元素。程序另定義了三個(gè)整型變量ib、C和兩個(gè)指針變量p_bp_c。程序首先置變量bC都為1,p_bp_c都指向數(shù)組a 的首元素a[0]。接著執(zhí)行六次循環(huán),循環(huán)體由兩個(gè)if語句。第一個(gè)if語句是當(dāng) b的值小于*(ai)(就是a[i])時(shí),將*(ai)的值復(fù)制到b,并讓p_b指向a[i]。這是在a中找最大值,將最大值存于b,最大值元素的指針存于指針變量p_b。第二個(gè)if語句是當(dāng)c的值大于*(a+i)(就是a[i])時(shí),將*(ai) 的值復(fù)制到c,并讓p_c指向a[i]。這是在a中找最小值,將最小值存于c,最小值元素的指針存于指針變量p_c。循環(huán)結(jié)束后的前三個(gè)語句實(shí)現(xiàn)最大元素與a[0]交換。接著三個(gè)語句是在已經(jīng)過前面交換的基礎(chǔ)上,將最小元與a[5]交換。最后程序順序輸出數(shù)組a的六個(gè)元素。所以程序輸出內(nèi)容是:
             13
, 10,-3, l, 7,-21
   
若數(shù)組a的初值由輸入任意指定,上述程序?qū)σ环N特殊情況不能完成功能的要求,即最小元素若是a[0],p_c所指元素已被移到p_b指針?biāo)肝恢?,?shí)際與a[5]交換的不再是數(shù)組中的最小元素,而是最大元素。

    5.4  程序設(shè)計(jì)題

 

      1.輸人3個(gè)整數(shù),按從大到小順序輸出。
    
【解】存儲(chǔ)輸入的三個(gè)整數(shù)可用三個(gè)簡(jiǎn)單變量,也可用數(shù)組。設(shè)用三個(gè)簡(jiǎn)單變量x,y,z存儲(chǔ)輸入的三個(gè)整數(shù)。另設(shè)若干個(gè)指針變量指向存儲(chǔ)輸入數(shù)據(jù)的變量。實(shí)現(xiàn)從大到小輸出三個(gè)整數(shù)有多種方案,如通過比較交換變量的值,多次比較交換使變量滿足條件x>=y>=z。這樣,變量的輸入值可能會(huì)與它的輸出值不一樣。如通過比較交換指針變量,當(dāng)比較后發(fā)現(xiàn)要交換時(shí),就交換變量的指針,而不交換變量的值,則在比較結(jié)束后,變量的值沒有改變,但從指針方向來看,它們的值是從大到小排列的。下面的程序就采用這種方案。
      # include<stdio.h> 
        main()
       { int x
,y,z;
    int *big=&x
,*mid=&y,*sma=&z/*置三個(gè)指針變量分別指向x,y, z*/
    *temp

     printf("Enter x
,yz\n");
     scanf("%d%d%d"
, big,midsma);/*順序?yàn)樽兞?span lang=EN-US>x
y,z輸入值*/
  if(*big< *mid) {temp
big;bigmid; midtemp }/*使
*big>=*mid*/
  if(*big<*sma) { temp
big;bigsma;smatemp; }/*使
*big>=*sma*/
  if(*mid<*sma){temp
mid;mid=sma;sma=temp; }/*使
*mid>=*sma*/
  printf("%d\t%d\t%d\n"
, x,y,z);/*按輸入順序輸出x,y,
z*/
  printf("%d\t%d\t%d\n"
*big,*mid*sma);/*按從大到小的順序輸出
*/
   }

          2
.編一個(gè)程序,輸入15個(gè)整數(shù)存入一維數(shù)組,再按逆序重新存放后再輸出。

      
【解】輸入數(shù)組的元素,并重新顛倒存放后輸出。將存儲(chǔ)于數(shù)組中的元素顛倒存儲(chǔ),只要首尾相對(duì)應(yīng)的元素兩兩交換即可。若用指針實(shí)現(xiàn),可讓一個(gè)指針p指向前端的元素,另一個(gè)指針q指向與前端元素對(duì)應(yīng)的后端的元素。循環(huán)前,讓p指向數(shù)組的首元素,讓q指向數(shù)組的末元素。循環(huán)時(shí),讓pq所指兩個(gè)元素交換,并讓p1,ql。循環(huán)條件是p所指元素在前,q所指元素在后,即pq。程序如下:
        # include<stdio.h> 
        main()
      { int a[15]
,*p,*q, temp;
       printf("Enter 15 numbers
\n")
       for(p
a;pa15;p++
       scanf("%d"
, p)

       for(p
a,qa14pq;P++q--) { 
       temp
*p; *p*q;*q=temp

      }
      for(p
a;p<a15;p++) 
      printf("%d\t"
*p);

   printf("\n")
     }

          3
.輸入一個(gè)字符串,按相反的次序輸出其中的全部字符。
     
【解】要相反的次序輸出字符串的全部字符,可用一個(gè)字符指針變量,從指向字符串的本字符開始,逆序遍歷字符串,輸出指針?biāo)缸址纯?。但為了讓字符指針指向字符串的末字符,若不用字符串處理庫函?shù),得用一個(gè)循環(huán),讓它從字符串的首字符開始,順序移至字符串的結(jié)束標(biāo)記符,然后倒退一個(gè)字符,就能讓它指向字符串的末字符。程序如下:
      # include<stdio.h>
      # define N 200
      main()
     { char s[N]
,*p;
     printf("Enter a string
\n");
     scanf("%s"
, s)
     for(p
s;*p p++);
     for(p--
; p>=s p--)
     printf("%c"
,*p)

     printf("\n")
;
     } 

          4
.輸入一個(gè)一維實(shí)型數(shù)組,輸出其中的最大值、最小值和平均值。
     
【解】設(shè)實(shí)型數(shù)組的元素個(gè)數(shù)n不超過20。程序輸入n,并用循環(huán)輸入數(shù)組的元素,再用循環(huán)遍歷數(shù)組,求出數(shù)組的最大值和最小值、數(shù)組元素的和。然后求出數(shù)組元素的平均值,最后輸出結(jié)果。程序如下:
        # include<stdio.h>
       # define N 20
      main()
    { double a[N]
,max,min,ave,*p, t;
      int n
;
      printf("Enter n(0
n20)\n");
      do{
     scanf("%d"
,&n);
    if(n>0 && n<20) break
;
    printf("n
值不合要求,請(qǐng)重新輸入!\n");
    } while(l)
;
    printf("
輸入%d個(gè)實(shí)數(shù)\n", n)
    for(n
a;n<an p++){ 
    scanf("%lf"
,&t);*pt

   } 
   max
minave=*a;
   for(p
p+l;p<a+n
p++){ 
   if(max<*p) max
*p;

if(min>*p) min*p
 ave
+=*p;
 }
 ave/
n;
  printf("
最大值:%f\t最小值:%f\t平均值:%f\n"max,minave);
  }

           5
.輸入一個(gè)3×6的二維整型數(shù)組,輸出其中的最大值、最小值及其所在的行列下標(biāo)。

   【解】找出其最大值和最小值,及它們的行列位置。采用按行按列順序遍歷數(shù)組的方法找出數(shù)組的最大值、最小值,以及它們?cè)跀?shù)組中的位置指針。輸出時(shí),將位置指針轉(zhuǎn)換成行下標(biāo)和列下標(biāo)。程序如下:
    # include<stdio.h> 
    # define N 3
    # define M 6
    main()
   { int a[N][M]
,*maxp,*minp*q,t;
   printf("
輸入%d個(gè)整數(shù)\n" N*M);
   for(q
a[0];q<*aN*M;q++) {
   scanf("%d"
,&t)*qt;

   }
   maxp=minp=*a; 
   for(q
a[0];q<*a N*M; q++) {
  if(*maxp<*q) maxp=q
;

  if(*minp>*q) minp
q;
  }
   printf("
最大值:%d它的行下標(biāo)是%d它的列下標(biāo)是%d\n"
  *maxp,(maxp-*a)/M
(maxp-*a)%M);
   printf("
最小值:%d它的行下標(biāo)是%d它的列下標(biāo)是%d\n",
   *minp,(minp-*a)/M
,(minp-*a)%M;
   }

       
  6.輸入三個(gè)字符串,找出其中最大的字符串。
     
【解】將輸入的三個(gè)字符率分別存于三個(gè)一維字符數(shù)組中,另用一個(gè)字符指針數(shù)組,分別指向這三個(gè)字符串,然后用循環(huán)控制這三個(gè)字符串的比較,找出最大的字符串。兩字符串比較時(shí),程序不用標(biāo)準(zhǔn)庫函數(shù),而用兩字符串的對(duì)應(yīng)字符比較來實(shí)現(xiàn)。完整程序如下:
    # include<stdio.h> 
    # define N 120
    # define M 3
    mian()
   { char s1[N], s2[N],s3[N],*strs[M]={s1,s2,s3}
*p,*q*ms;
     int i
;

    printf("
輸入%d個(gè)字符串\n", M)

  for(i 0; i<M i++)
    scanf("%s"
,strs[i])

    ms
strs[0];
    for(i=1
;i<M; i++) {
    for( p=ms
,q=strs[i];*p! ‘\0‘ && *p==*q;p++,q++);

    if(*p<*q) ms
strs[i]
    }
    printf("
最大字符串:%s\n",ms);
   }

         7
.輸入兩個(gè)字符串,將它們連接后輸出。
    
【解】程序設(shè)有兩個(gè)存儲(chǔ)字符串的數(shù)組,先輸入兩個(gè)字符串,然后找到第一個(gè)字符串的末尾,接著將第二個(gè)字符串復(fù)制在第一個(gè)字符串的后面,然后輸出。程序如下:
     # include<stdio.h> 
     # define N 120
    main()
    { char s1[N
N],s2[N],*p*q;
     printf("
輸入2個(gè)字符串\n");
     scanf("%s%s"
s1,s2);
     for(p
sl* p!‘\0‘; p++)
     for(q
s2;*p++*q++;);
     printf("
兩字符串連接后:%s\n" sl);
     }

          8
.比較兩個(gè)字符串是否相等。
    
【解】程序設(shè)兩個(gè)存儲(chǔ)字符串的數(shù)組,先輸入兩個(gè)字符串,兩字符率比較時(shí),直接用兩字符串的對(duì)應(yīng)字符比較來實(shí)現(xiàn)。完整程序如下:
    # include<stdio.h> 
    # define N 120
    main()
    { char sl[N]
,s2[N],*p,*q
      char *result[]={"
小于","相等" "大于"};
      int comp
;
      printf("
輸入 2個(gè)字符串\n");
      scanf("%s%s"
,s1,s2);
      for(p
sl,qs2;*q!‘\0‘&& *p==*q p++,
q++);
     comp
*P <* q? 0*P==*q? l2;

     printf("
字符串1與字符串2比較:%s\n",result[comp]);
     }

          9
.輸入10個(gè)整數(shù),將其中最大數(shù)與最后一個(gè)數(shù)交換,最小數(shù)與第一個(gè)數(shù)交換。
     
【解】程序設(shè)一個(gè)一維數(shù)組存儲(chǔ)輸入的10個(gè)整數(shù)。然后遍歷數(shù)組,找出最大元素和最小元素的指針。接著按要求先將最大元素與最后一個(gè)元素交換,然后將最小元素與第一個(gè)元素交換。最后,輸出數(shù)組中的全部整數(shù)。程序應(yīng)考慮到這樣一種特殊情況,即最后一個(gè)元素正是最小元素,它在與最大元素交換后,位置已移到原先存儲(chǔ)最大元素的位置。程序應(yīng)保證最大元素移到末尾,最小元素移到最前端。程序如下:
    # include<stdio.h> 
    # define N 10
     main()
    { int a[N]
,*maxp,*minp,*q,t
    printf("
%d個(gè)整數(shù)\n,N)
    for(q
a;q<aN;q++) { 
    scanf("%d"
&t);*qt

    }
     maxp= minp= a
;
    for(q
a;q<aNq++){ 
    if(*maxp<*p) maxp=q
;

    if(*minp>*q) minp
q
    }
    t
*maxp; *maxp=a[N-1]; a[Nl]t;
    if(minp
==&a[Nl]) minpmaxp
    t
* minp*minp a[0]; a[0] t;
    for(q
a;q<aN; q++)
    printf("%d"
,*q)

    printf("\n")
;
   }

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多