20160201.CCPP體系詳解(0011天)

尹成發表於2016-02-16

內容概要:C語言基本資料型別及運算題庫(含答案)

第二章 基本資料型別及運算
一、選擇題
1. 若以下選項中的變數已正確定義,則正確的賦值語句是【C】。
A) x1=26.8%3;        B) 1+2=x2;      C) x3=0x12;        D) x4=1+2=3;
2. 設變數x為float型且已經賦值,則以下語句中能夠將x中的數值保留到小數點後面兩位,並將第三位四捨五入的是【C】。
A) x=x*100+0.5/100.0                      B) x=(x*100+0.5)/100.0   
C) x=(int)(x*100+0.5)/100.0               D) x=(x/100+0.5)* 100.0

3. 下列C語言中運算物件必須是整型的運算子是【A】。
A) %=        B) /      C) =        D) *=
4. 若有以下程式段:int c1=1,c2=2,c3; c3=1.0/c2*c1;則執行後,c3中的值是【A】。
A) 0        B) 0.5      C) 1        D) 2

5. 設xy均為int型變數,則以下語句:x+=y; y=x-y; x-=y; 的功能是【D】。
A) 把xy按從大到小排列     B) 把xy按從小到大排列   
C) 無確定結果                 D) 交換xy中的值

6. 下列變數定義中合法的是【A】。
A)short _a=1-1.1e-1;               B)double b=1+5e2.5;
C)long do=0xfdaL;              D)float 2_and=1-e-3;

7. 以下4個選項中,不能被看作是一條語句的是【D】。
A) {;}                              B) a=0,b=0,c=0;
C) if (a>0);                         D) if (b==0)m=1;n=2;

8. 設x=1,y=-1,下列表示式中解為8的是【D】。
    X 0001 1110
    Y 1111 
A)x&y      B)~xx      C)xx      D)x<<=3
  答:位運算可以提高乘法和除法的運算效率(但是必須是2的整數次方運算才行)
9. 在C語言中不合法的整數是【C】。
A)20      B)0x4001      C)08      D)0x12ed

10. 以下選項中不正確的實型常量是【B】。
A)2.607E-1     B)0.8103e0.2     C)-77.77     D)456e–2
11.若變數已正確定義並賦值,符合C語言語法的表示式是【A,B】。
A)a=a+7                       B)a=7+b+c,a++區分逗號表示式和賦值語句.
C)int(12.3%4)                 D)a=a+7=c+b
12. 以下十六進位制數中不合法的是【A,D】。
A)oxff      B)0Xabc    C)0x11     D)0x1G
13. 設int i=2,j=3,k=4,a=4,b=5,c=3;,則執行表示式(a=i<j)&&(b=j>k)&&(c=i,j,k)後,c值是【D】。
A)0      B)1      C)2     D)3

14. 下列程式的執行結果是【C】。
# include “stdio.h”
void main( )
{  int i=23;
   do{++i;}
   while(i);
   printf(“%d”,i);
}
A)23      B)24      C)死迴圈    D)無任何結果

15.設int a=3,b=4,c=5;,下列表示式的值不為1的是【A】。
A)a+b>c&&b==c                           B)a||b+c&&b-c-->a||(b+c&&b-c)
C)!(a>b)&&!c||1-->(!(a>b)&&!c)||1      D)!(a+b)+c-1&&b+c/2

16.下列不合法的常量是:【(2),(4),(6),(9),(10),(14),(16)】
(1)’?’  (2)’abc’  (3)”Turbo c”  (4)’\0x32’  (5)’\123’
(6)’’’’  (7)”△” (8)’△’     (9)”\\\”   (10)’’a’’’
(11)’\\’ (12)’\0123’(13)’\xaf’     (14)’王’   (15)”李為民”
(16)”\xaif”

17. 下列運算子中,結合方向為自左向右的是【B】。
(A)?:  (B),  (C)+ =  (D)++

18. 若有float x;則sizeof (x)和sizeof (float)兩種描述【A】。
(A)都正確  (B)都不正確  (C)前者正確 (D)後者正確

19. 有整型變數x,單精度變數y=5.5,表示式x=(float)(y*3+((int)y)%4)執行後,x的值為【A】。過程:(inty=5 -> 5%4=1 ->5.5*3+1=17.5 ->(float)(17.5)=17.500000 -> (int)17.500000 -> 17
(A)17  (B)17.500000  (C)17.5 (D)16
     賦值號會自動進行資料型別轉換,小數部分會被捨棄(只會有取整操作)
20. 若給定條件表示式(M)?(a++):(a--),則其中表示式(M)【C】。
A.和(M==0)等價               B.和(M==1)等價
C.和(M!=0)等價               D.和(M!=1)等價

21. 已知float x=1,y;則y=++x*++x的結果是【A】。
A.y=9        B.y=6      C.y=1       D.表示式是錯誤的
解析過程:
1.  當一個表示式當中同時出現對一個變數的自變運算子的時候
2.  取最後一次累計的結果作為一個整體進行替換運算操作
3.  統一記憶體資料讀取操作的特點

22. 以下程式的輸出結果是【D】。2^16=65536
short i=65535; printf ("%d\n",i);
A.65535                                       B.0
C.語法錯誤,無輸出結果           D.-1
解析過程:
1.  如果printf();函式當中的格式控制符與所需列印的資料的資料型別不匹配的時候
2.  就會涉及到嘗試的自動資料型別轉換操作(建立在同一型別不同長度的情況之下)
3.  先判斷是否有符號,如果有符號,就會考慮到符號位進行資料型別轉換,如果沒有符號,則不然(決定是否補上符號位)

23.有變數說明語句int a,b ,c;,順序執行下面語句:
   a=b=c=1;
   ++a||++b&&++c;-->++a||(++b&&++c);
那麼,變數b的值應是【B】。
A.2    B.1    C.0    D.3
答:這道題優先順序是++  &&  ||,b的值是1,這裡先算++a=2,++b=2,++c=2,再算b&&c,這裡  邏輯且如果左邊的值是非零,後面就跳過,不會執行了,而且&&返回的是10,這時b為非零,所以不執行後面的,返回非零就是1

24. 有變數說明int a=3;,則表示式a<1&&--a>1的運算結果和a的值應該是【B】。
A.02    B.03    C.12    D.13
答:優先順序:-- <  >  &&,--a=2,a<1=0,2>1=1,0&&1=0,整個表示式的結果是0,a<1=0不賦值,所以a=3
25. 以下程式的輸出為【C】。
#include<stdio.h>
void main( )
{
  double x=213.82631;
  printf("%-6.2e\n",x);
}
A.213.82        B.21.38e+01      C.2.14e+02       D.-2.14e2
答:-代表左對齊,所以排除D,A不是以指數形式,指數形式一般會留小數點前一位B也不對,對於指數形式的實數列印方式,沒有正負號的區分,但是又小數位的區分

26. 下列關於單目運算子+ +、- -的敘述中正確的是【D】。
A)它們的運算物件可以是任何變數和常量
B)它們的運算物件可以是char型變數和int型變數,但不能是float型變數
C)它們的運算物件可以是int型變數,但不能是double型變數和float型變數
D)它們的運算物件可以是char型變數、int型變數和float型變數
27. 有以下程式:
#include <stdio.h>
void main ( )
{
    char a,b,c,*d;
    a='\';b='\xbc';
    c='\0xab';d="\0127";
    printf ("%c%c%c%c\n",a,b,c,*d);
}
編譯時出現錯誤,以下敘述中正確的是【D】。
A)程式中只有“a='\';”語句不正確
B)“b='\xbc';”語句不正確
C)“d="\0127";”語句不正確
D)“a='\';”和“c='\0xab';”語句都不正確
解析過程:
給字元變數賦值只能賦一個字元,包括轉義字元,語句“a='\'”是錯誤的,因為“\”是轉義字元,應該用“\\”來表示,語句“B='\xbc';”是正確的,它是將一個用十六進位制表示的轉義字元賦給一個字元型變數,故選項B不為所選;語句“c=\0xab;”是錯誤的,反斜線後的十六進位制只可由小寫x開頭, 不能用Ox。語句“d="\0127";”是正確的,可以給字元型指標變數賦一個字串,其作用是讓該指標變數指向該字串,故選項C不正確。所以,D選項為所選。

28. 有以下程式:
#include <stdio.h>
void main ( )
{ 
    int a=1,b=2,m=0,n=0,k;
    k=(n=b>a)||(m=a<b);
    printf ("%d,%d\n",k,m);
}
程式執行後的輸出結果是【C】。
A)0,0      B)0,1      C)1,0      D)1,1  
29. 已定義ch為字元型變數,下列賦值語句中錯誤的是【A】。
A)ch='\';      B)ch=62+3;      C)ch=NULL;      D)ch='\xaa';
30. 以下4個選項中,不能看作一條語句的是【D】。
A){;}                    B)a=0,b=0,c=0;
C)if (a>0);                  D)if (b= =0)m=1;n=2;
答:D
A.是塊語句,B.一條語句中有多個表示式可以用逗號隔開C.if的條件語句D以個分號代表一條語句的結束

31. 假定有以下變數定義,則能使值為3的表示式是【D】。
int k=7,x=12;
A)x%=(k%=5)  =0          B)x%=(k-k%5)  =2
C)x%=k-k%5   =2          D)(x%=k)-(k%=5)  =3


32. 以下程式的輸出結果是        。
#include <stdio.h>
void main( )
{   
    int x=3,y=2,z=1;
    printf ("%s=%d\n", "x/y&z",x/y&z);
    printf ("%s=%d\n", "x^y&~z", x^y&~z);
}
=
A)x/y&z=0            B)x/y&z=1
   x^y&~z =0             x^y&~z =0
C)s=x/y&z=0          D)x/y&z=1
   s=x^y&~z =1           x^y&~z =1
 解析過程:
x->0000 0011 y->0000 0010  z->0000 0001
x^y->0000 0001 ~z->0000 0000=>x^y&~z
    整數1的反碼就是0
33. 設有“int x=11;”則表示式(x++*1/3)的值是【A】。
A)3     B)4     C)11     D)12


34. 若有語句scanf(”%d %c%f”,&a,&b,&c),假設輸入序列為2223a123o.12,a、b、c的值為【D】。
A)無值                   B)2223,a,123o.12
C)2223,a,無               D)2223,a,123   
35. 下列描述中,正確的一條是【A】。
A)C語言的整型變數可以分為int 、short、long、unsigned int、unsigned short、unsigned long等幾種型別,因此整型常量也可以分為這幾種型別
B)C語言的字元資料與整型資料可以互相賦值-->在一定的範圍內
C)若對字元型變數的定義為:“char c;”可使用語句c=“a”對變數c賦值
D)已知x為float型,執行語句(int)x後,x為int型
解析過程:
    B選項,在char型別所能描述的整型資料範圍之內
    C選項,區分字元變數和字元指標變數
    D選項,資料型別轉換,不會影響到原有資料型別的變化
36. 設“int x=1,y=1;”,表示式(!x‖y--)的值是【B】。
 A)0    B)1     C)2    D)-1
37. 執行x=5>1+2&&2||2*4<4-!0後,x的值為【C】。
 A)-1    B)0     C)1    D)5  
38. 語句“printf ("%d ", (a=2)&&(b=-2));”的輸出結果是【D】。
 A)無輸出    B)結果不確定     C)-1    D)1
39. 設a=2、b=3、c=4,則表示式a+b>c&&b= =c&&a||b+c&&b+c的值為【D】。
 A)5    B)8     C)0    D)1
解析過程:邏輯與經常用於將各種運算元繫結在一起進行運算
((a+b>c&&b==c)&&a)||(b+c&&b+c)
40. 執行語句scanf (“%c%c%c”,&c1,&c2,&c3),輸入abc時, 變數c1、c2、c3的值分別為【A】。
A)'a', 'b', 'c'   B)'a','b', ''     
C)'a', '', 'b'     D)'a','','c'


41. 若有以下定義:
int a=10,b=9,c=8;
順序執行下列語句後,變數b中的值是【C】。
c=(a -= (b-5));
c=(a%11)+(b=3);
 A)3    B)8     C)9    D)10
42. 有以下程式段:
int m=0,n=0;char c='a';
scanf("%d%c%d",&m,&c,&n);
printf("%d,%c,%d\n",m,c,n);
若從鍵盤上輸入:10A10<Enter鍵>,則輸出結果是【A】。
A)10,A,10        B)10,a,10      C)10,a,0        D)10,A,0


43. 已定義c為字元型變數,則下列語句中正確的是【C】。
A)c='97 '      B)c=“97 “    C)c=97        D)c=“a”


44. 若有以下變數說明和資料的輸入方式,則正確的輸入語句為【B】。
    變數說明:float x1,x2;
    輸入方式:4.52<回車>
              3.5<回車>
A)scanf (“%f,%f”,&x1,&x2);      
B)scnaf (“%f%f”,&x1,&x2);
C)scanf (“%3.2f %2.1f”,&x1,&x2);      
D)scnaf (“%3.2f%2.1f”,&x1,&x2);


45. 若有程式段:【D】.
for (m=1;m<=100;m++)
{
    scanf("%d",&y);
    if(y<0) continue;
    printf("%3d",m);
}
正確的描述是(   )。
A)當y<0時整個迴圈結束       B)y>=0時什麼也不輸出
C)printf函式永遠也不執行      D)最多允許輸出100個非負整數


46. 下面程式的執行結果是【A】。
#include <stdio.h>
#define DATA  20+7
void main( )
{  
    printf("DATA=%d",DATA/3);   
}
A)DATA=22       B)DATA=21
C)DATA=9        D)以上都不對


47. sizeof(float)是【B】。
A)一個雙精度型表示式       B)一個整型表示式     
C)一種函式呼叫             D)一個不合法的表示式


48. 設有語句
    int a=5,b=6,c=7,d=8,x=2,y=2,n;
    n=(x=a<b)&&(y=(++c>d&&b>c));
則執行完上述語句後n的值為【D】。
A)1       B)2     C)3     D)0


49. 設c1,c2均是字元型變數,則以下不正確的函式呼叫為【D】。
A)scanf(“c1=%cc2=%c”,&c1,&c2);       B)c1=getchar( );    
C)putchar(c2);                          D)putchar(c1,c2);


50. 有定義如下:【D】。
    char str1[50],str2[20],ch;
則下列語句中正確的是(   )。
A)str1={“Crazy”};              B)str1={“Crazy”};
   str2=str1;                          str2={“English”};
                                     strcpy(str1,str2);
C)ch=“xy”; ch是一個字元                   D)ch='x';


51. 有以下定義語句:
    double a,b;   int w;   long c;
若各變數已正確賦值,則下列選項中正確的表示式是【C,D】
A)a=a+b=b++     a+b是右值    B)w%((int)a+b)  
C)(c+w)%(int)a               D)w=a=b


52. 有以下程式:【D】。
#include <stdio.h>
void main( )
{  
    int i=0,s=0;
    for(; ;)
    { 
        if(i==3||i==5)continue;
        if(i==6)  break;
        i++;
        s+=i;
    };
    printf("%d\n",s);
}
程式執行後的輸出結果是(   )。
A)10                B)13            C)21      D)程式進入死迴圈


53. 以下選項中可以作為C語言中合法整數的是【C】。
(A)10110B      (B)0386 八進位制不能有8(C)0Xffa      (D)x2a2
54.以下選項中可作為C語言合法常量的是【B】。
(A)-80. Double型轉換為int會丟失資料(B)-080(C)-8e1.0 指數不能為小數(D)-80.0e
解析過程:
    A選項,小數點兒後面必須跟有數字
    B選項,八進位制的資料可以新增正負號
    C選項,實數的指數形式,其中指數不能為小數
    D選項,實數的指數形式,指數不能不寫
55.若a為整型變數,則以下語句【B】。
a=-2L;printf(“%d\n”,a);//高位階段,不補上符號位,再以有符號型別進行解析操作
(A)賦值不合法   (B)輸出值為-2    (C)輸出為不確定值    (D)輸出值為2
56.若有以下程式:
#include <stdio.h>
void main( )
{  int k=2,i=2,m;
   m=(k+=i*=k);
   printf(" %d,%d\n ",m,i);
}
    執行後的輸出結果是【C】。
(A)8, 6   (B)8 ,3    (C)6, 4    (D)7, 4
57. 以下非法的賦值語句是【C】。
(A)n=(i+2,i++);      (B)j++;      (C)++(i+1);      (D)x=j>0
58. 有以下程式
#include <stdio.h>
void main( )
{  int x=102,y=012;
   printf(“%2d,%2d\n”,x,y);
}
執行後輸出結果是【C】。
(A)10,01      (B)02,12      (C)102,10      (D)02,10
   X=102是十進位制,y=012是八進位制,而%d是按照十進位制列印,所以它會把012換算成十進位制,就是10

59. 以下程式輸出的結果是【D】。
#include <stdio.h>
void main( )
{  
    printf("\n*a=%15s,","chinazhongguo");
    printf("\n*b=%-5s*", "chi");
}
(A)*a=chinazhongguo*              (B)*a=chinazhongguo*   
      b=**chi*                            *b=chi *    
(C)*a=*  chinabeijing*             (D)*a= chinazhongguo*
      *b=chi*                             *b=chi *
%15s表示輸出十五位,而字串裡只有13位,而預設是右對齊的,所以會在左邊補兩個空格 %-5s*,-表示左對齊,5表示輸出5位,所以會在右邊補兩個空格
60. 若整型變數a、b、c、d中的值依次為:1、4、3、2。則條件表示式a<b?a:c<d?c:d的值是【A】。
(A)1       (B)2       (C)3      (D)4
三目運算子的就和方向是自右向左先算後面一個c<d不成立取d的值為2,再算前面的a<b成立取a的值 所以結果為1
61. 設有定義:int x=1,y=-1;。則語句“printf(“%d\n”,(x--&&++y);”的輸出結果是【B】。
(A)1       (B)0       (C)-1      (D)2
   x--先取值再執行--,就是1  ++y先執行後取值就是0  1&&0就是0

62. 若變數a是int型別,並執行了語句  = ' A ' +1.6;,則正確的敘述是【D】。
(A)a的值是字元C                 (B)a的值是浮點型       
(C)不允許字元型和浮點型相加      (D)a的值是字元'A'的ASCII值加上1
   賦值運算子會自動進行資料型別轉換,它會把右邊表示式的值的資料型別自動轉換成左邊的資料型別,字元A用到這裡會按照A的ASCII碼值進行運算,然後會把整個表示式的資料型別轉化成int型別,小數部分會被捨棄,所以就是66  選D
63. 有一下程式
#include <stdio.h>
void main()
{  
    int x=3,y=2,z=1;
    printf("%d\n",x/y&~z);
}
程式執行後的輸出結果是【D】。
(A)3     (B)2    (C)-1     (D)0
   按照運算子優先順序先對z取反,z就是0  0&任何數都為0,所以x/y不用計算   
64. 表示式x<b||~c&d的運算順序是【D】。
(A)~,&,<,||          (B)~,||,—,>   
(C)~,&,|| , <          (D)~,<,&,||
65. 整型變數x和y的值相等,且均為非0值,則以下選項中,結果為0的表示式是【D】。
(A)x||y          (B)x|y         (C)x & y          (D)x^y
66. 在下列符號中,不屬於轉義字元的是【A】。
(A)\   (B)\x12   (C)\013     (D)\05
   B是按16進位制輸出整數C和D是按八進位制輸出整數,轉義字元有整體的意義,單獨的\只能表示轉義的作用,但並不是用於表示所謂的轉義字元本身
67. 若有以下定義:intx,y;char a,b,c;並有以下輸入資料(此處代表空格):
12
ABC
則能給x賦整數1,給y賦整數2,給a賦字元A,給b賦字元B,給c賦字元C的正確程式段是【D】。
(A)scanf ("x=%dy=%d",&x,&y);a=getchar( );b=getchar( );c=getchar( );
(B)scanf ("%d %d",&x,&y);a=getchar();b=getchar( );c=getchar( );
(C)scanf ("%d%d%c%c%c ",&x,&y,&a,&b,&c);                     
(D)scanf ("%d%d%c%c%c %c%c%c",&x,&y,&a,&a,&b,&b,&c,&c);
   這裡輸入順序是1<空格<2<回車<A<空格<B<空格<C字元錄入能夠識別不可見字元
只有在進行字串,數字錄入的時候,才會自動的以空格,Tab鍵,回車作為字串掃描的結束標識,作為字元掃描的時候不會將空格,Tab鍵,回車給忽略掉
68. 語句:printf("%03d,%-3d\n",4,5);的輸出為【A】。
(A)004,5          (B)004,5   
(C)4,5                      (D)4,5
   %03d表示場寬為3位左邊補充為0,%-3d表示場寬為3位左對齊

69. 若有以下程式段:【B】。
int a=0,b=0,c=0;
c=(a-=a-5),(a=b,b+3);
printf("%d,%d,%d\n",a, b, c);
其輸出結果是
A)3,0,-10     B)0,0,5    
C)-10,3,-10   D)3,0,3

70. 若有以下程式段:
#include <stdio.h>
void main()
{   
    int a=2,b=5;
    printf("a=%%d,b=%%d\n",a,b);
}
其輸出結果是【D】。
A)a=%2,b=%5                     B)a=2,b=5
C)a=%%d,b=%%d                   D)a=%d,b=%d
   兩個%代表輸出一個%  所以這裡的d起不到作用

71. 若變數c定義為float型別,當從終端輸入283.1900<CR> (<CR>代表Enter鍵),能給變數c賦以283.19的輸入語句是【C】。
A)scanf(“%f”,c);              B)scanf(“%8.4f”,&c);
C)scanf(“%6.2f”,&c);          D)scanf(“%8f”,&c);
   )
72. 下列運算子中優先順序最高的是【A】。
A)!     B)%     C)- =     D)&&
73. 設a、b和c都是int型變數,且 a=3,b=4,c=5;則以下的表示式中,值為0的表達
式是【D】。
A)a&&b     B)a<=b     C)a||b+c&&b-c     D)!((a<b)&&!c||1)
74. C語言中不合法的字元常量是【A】。
A)'\0xff '      B)'\65 '      C)'& '      D)'\028 '
75. 以下的程式:
#include <stdio.h>
void main()
{  
    char x=040;
    printf("%d\n",x=x<<1);
}

其輸出是【D】。
A)100      B)160      C)120      D)64
左移*2右移/2  這裡按8進位制賦值按10進位制列印,所以要把x先換算成十進位制再左移1為就是*2就是64

76. 以下定義語句中正確的是【C】.
A)char a='A'b='B';        B)float a=b=10.0;
C)int  a=10,*b=&a;           D)float *a, b=&a;
   A中定義多個變數要用逗號隔開,C中,*b指向的本來就是一個記憶體地址C同B一樣
77. 以下所列的C語言常量中,錯誤的是【B】。
A)0xFF      B)1.2e0.5      C)2L      D)'\72'
   指數不能為小數

78. 有以下程式
#include <stdio.h>
void main()
{  
    int m=0256,n=256;
    printf("%o %o\n",m,n);
}
程式執行後的輸出結果是【C】。2004年9月)
A)0256  0400      B)0256  256      C)256  400      D)400  400
   %o代表按照八進位制輸出  定義m=0256是代表八進位制,n=256代表十進位制,所以都按照八進位制列印要把n換算成八進位制就是400而這裡沒有按照%#o所以前面不會加0

79. 已經定義ch為字元型變數,以下賦值語句中錯誤的是【A】。
A)ch= '\’;      B)ch=62+3      C)ch=NULL      D)ch= '\xaa';
80. 有以下程式
#include <stdio.h>
void main()
{  
    int m=3,n=4,x;
    x=-m++;
    x=x+8/++n;
    printf("%d\n",x);
}
程式執行後的輸出結果是【D】。
A)3     B)5      C)-1      D)-2


81. 下列程式的輸出結果是【C】。
#include <stdio.h>
void main()
{ 
    double d=3.2; 
    int x,y;
    x=1.2;y=(x+3.8)/5.0;
    printf("%d\n",d*y);
}
A)3     B)3.2     C)0      D)3.07
這裡按照運算順序結果=3.2,但是是按照%d來列印,所以列印小數會解析失敗,所以會列印0
82. 設有如下程式段
int x=2002,y=2003;
printf("%d\n",(x,y));
則以下敘述中正確的是【D】。
A)輸出語句中格式說明符的個數少於輸出項的個數,不能正確輸出
B)執行時產生出錯資訊
C)輸出值為2002   
D)輸出值為2003
   這裡是輸出一個逗號表示式的結果,所以會輸出2003

83. 有以下程式
#include <stdio.h>
void main()
{  
    unsigned char a,b; //0000 0100
    a=4|3;             //0000 0011
    b=4&3;
    printf("%d %d\n",a,b);
}
執行後輸出結果是【A】。
A)7 0    B)0  7     C)1  1     D)43  0
   這裡列印的不是邏輯的值0與非零,在這裡是要把43換算成2進位制運算,然後再換算成十進位制列印

84. 設a和b均為double型變數,且a=5.5、b=2.5,則表示式(int)a+b/b的值是【D】。
A)6.500000    B)6     C)5.500000    D)6000000
   這裡(int)是隻把a轉換為int型別,不是把整個表示式的結果轉換成int型別
(int)5.5+2.5/2.5 -> 5+1.000000 -> 6.000000
85. 已有定義:int x=3,y=4,z=5;則表示式!(x+y)+z-1&&y+z/2的值是【D】。
A)6     B)0     C)2     D)1
   按照優先順序運算()>!>/>+-   結果為1
    (!(x+y)+z-1)&&(y+z/2)B
86. 設int x=1,y=1;表示式(!x||y--))的值是【B】。
A)0     B)1     C)2     D)-1
87. 若xy代表整型數,以下表示式中不能正確表示數學關係|x-y|<10的是【C】。
A)abs(x-y)<10   B)x-y>-10&&x-y<10   C)!(x-y)<-10||!(y-x)>10  D)(x-y)*(x-y)<100
88. 在下列選項中,不正確的賦值語句是【D】。
A)++t;      B)n1=(n2=(n3=0));      C)k=i= =j;      D)b+c=1;
89. 若x=2,y=3,則x&y的結果是【B】。
A)0     B)2      C)3      D)5   1
90. 下面程式的輸出結果是【A】。
main( )
{ unsigned a=32768;
printf(“a=%d\n”,a);
}
A)a=32768      B)a=32767      C)a=-32767      D)a=-1
   這裡按照無符號定義,按無符號十進位制解析,沒有超出資料極限,所以可以正常列印

91. 以下程式的輸出結果是【B】
#include <stdio.h>
void main( )
{  
    int i=010,j=10;
    printf("%d,%d\n",++i, j--);
}
A)11,10      B)9,10      C)010,9      D)10,9
   %d是按照十進位制解析,所以需要把i先轉換為十進位制  然後執行++就是9
92. 以下程式的輸出結果是【B】。
#include <stdio.h>
void main( )
{  
    int a,b,d=241;
    a=d/100%9;
    b=(-1)&&(-1);
    printf("%d,%d\n",a,b);
}
A)6,1      B)2,1      C)6,0      D)2,0
93. 如果在使用者的程式中使用C語言庫函式中的sqrt函式,應在該原始檔中使用的include命令是【B】。
A)# include <string.h>    B)# include <math.h>
C)# include <ctype.h>    D)# include <stdio.h>
   求完全平方

94. 下面程式的輸出結果是【9a,ffffff65】。
#include <stdio.h>
void main( )
{  
    unsigned int a,b;
    a=0x9a;10+9*16=154
    1001 1010->0110 0101
    b= ~a;
    printf("%x, %x\n",a,b);
}
 :9a,ff65(TC2.0)或9a,ffffff65(Visual C++6.0)
A=十六進位制的9a換算成二進位制就是10011010,再把a取反就是01100101賦值給b,換算成十六進位制就是65  按十六進位制顯示就是ffffff65
95. sizeof(double)是【C】。
A)一種函式呼叫      B)一個雙精度型表示式      
C)一個整型表示式    D)一個不合法的表示式
   Sizeof返回的是位元組數,所以它是一個整型表示式
96. 下面的程式【D】。
#include <stdio.h>
void main( )
{  
    int x=3,y=0,z=0;
    if(x=y+z)
        printf("* * * *");
    else
        printf("# # # #");
}
A)有語法錯誤不能通過編譯     
B)輸出 * * * *     
C)可以通過編譯,但是無法連線,因而不能執行
D)輸出# # # #


97. 已知i、j、k為 int型變數,若從鍵盤輸入:123<回車>,使i的值為1、j的值為2、k的值為3,以下選項中正確的輸入語句是【C】。(20029月)
A)scanf("%2d%2d%2d", &i, &j, &k);
B)scanf("%d  %d  %d", &i, &j, &k);
C)scanf("%d,%d,%d", &i, &j, &k);   
D)scanf("i=%d,j=%d,k=%d", &i, &j, &k);
98. 設有以下語句:
char x=3,y=6,z; 0000 0011
z=x^y<<2;       0000 0110->0000 0101->0001 0100
則z的二進位制值是【A】。
A.00010100      B.00011011      C.00011100      D.00011000
   先把y左移兩位
99. putchar 函式可以向終端輸出一個【D】。
A)整型變數表示式的值           B)實型變數的值
C)字串                       D)字元或字元型變數的值
100. 已知ch是字元型變數,下面不正確的賦值表示式是【A】。
A)ch='a+b'   B)ch='\0'    C)ch='7'+'9'    D)ch=5+9
101.以下常量中,合法的是【C】。
A)5e2.5          B)e8           C)’\\’             D)’BASIC’
解析過程:e這個必須得有指數,而且必須有係數
102. C語言提供的合法的資料型別關鍵字是【B】。
A)DOUBLE      B)short         C)integer          D)Character
103. 下列不正確的轉義字元是【D】。
A)’\\’            B)’\0’          C)’\’’             D)’057104.C語言中,合法的長整型常數是【A】。
A)1L            B)5074369      C)225D           D)326581&
105.以下型別中屬於C語言的資料型別是【D】。
A)邏輯型        B)純小數型     C)複數型         D)雙精度型
106.C語言中,運算物件必須是整形數的運算子是【B】。
A)*             B)%            C)+             D)/
107.表示式10<20的值是【D】。
A)10            B)20            C)0             D)1
108.表示關係x20x50,應使用C語言表示式是【A】。
A)x<=20 || x>=50                    B)x<=20 or x>=50
C)x20 or x50                    D)x20 || x50
109.已知int  t = 1;  t+ = 9;  y = t++; 則y =【B】。
A)11            B)10            C)9             D)1
110.已知char a; int b; float c; double d; 則表示式a+b * c-d的結果為【D】型。
A)char           B)int            C)float          D)double 
   資料型別轉換規則是從低到高
111. 若xint型變數,則執行語句x=10;  x+ = x— = xx後,x的值為【C】。
A)0             B)10            C)20            D)30
112. 若x、a、b、c均 為int型變數,則執行表示式x= (a = 4, b = 8, c = 12)後,x的值為【C】。
A)4             B)8             C)12            D)24
   逗號表示式的值就是最後一個逗號後面的表示式的值
113. 在C程式中,x + y是_______x + y;是_______。
A)表示式、語句                   B)表示式、表示式
C)語句、語句                     D)語句、表示式
    解析過程:表示式和語句的區別,表示式末尾沒有分號,語句後面含有分號
114.已知int x = 23;  則printf(“%d \n”,x++*1/3)的輸出結果為【D】。
A)8            B)7.66            C)7.33          D)7
   這裡++是後++所以本語句中部執行  型別是int型  所以是7

115.若a、b、c為int型變數,且值均為5;  則以下表示式正確的是【C】。
A)17.6%a                         B)a = a+7 = b+c
C)c = b = a * 5 + 6                  D)a: = c + b
   %運算符只能作用於整數   a+7是左值  
116. 設 int b=2;表示式(b>>2)/(b>>1)的值是【A】。
A) 0                  B) 2                C) 4                D) 8
    0000 0010 >> 2 -> 0000 0000 -> 0(移丟失的位就被捨棄掉了)
0000 0010 >> 1 -> 0000 0001 -> 1
117. 以下程式的功能是進行位運算
#include <stdio.h>
void main()
{ 
    unsigned char a, b;    0111  0100->1011
    a=7^3; b= ~4 & 3;      0011        0011
    printf("%d %d\n",a,b);
}
程式執行後的輸出結果是【A】。
A)4 3           B)7 3           C)7 0           D)4 0
118. 以下程式的輸出結果是【D】。
#include <stdio.h>
void main()
{
    int a=-1, b=4, k;
    k = ( ++a < 0) && ( b += 5);
    printf ("%d%d%d \n", k, a, b );
}
A)104          B)103          C)003            D)004
   按優先順序運算  ++a=0  0<0=0  後面無意義  k=0  a=0  b=4

119. 若有以下定義和語句:
char c1 = 'b', c2 = 'e';
printf ( "%d, %c \n", c2 - c1, c2 - 'a' + 'A' );
則輸出的結果是【A】。
A)3,E         B)3,D        C)2,D           D)2,E
   //這裡會按照ascii來進行運算然後會按照相應的列印方式列印
120. 已知,xint型變數,y是float型變數,用下列語句給這兩個變數賦值時,為了把10075.3分別賦給xy,則正確的輸入為【B】。
scanf ( “ x = %d, y = %f ”, &x, &y );
A)100<空格>75.3<回車>               B)x = 100y = 75.3<回車>
C)100<回車>75.3<回車>               D)x = 100<回車>y = 75.3<回車>
121. 以下對於scanf函式敘述正確的是【B】。
A)輸入項可以是一個實型常量,如scanf ( “ %f ”, 7.3 ); 
B)當輸入資料時,必須指明變數地址,如scanf ( “ %f ”, &a );
C)當輸入一個實型資料時,可以規定小數點後位數,如scanf ( “ %5.3f ”, &a );
D)只有格式控制,沒有輸入項也能正確輸入資料,如scanf ( “ x = %d, y = %f ” );
123. 語句printf ( “%d”, ( a = 2)&&(b = -2));的輸出結果是【A】。
A)1            B)0         C)提示語法錯誤     D)結果不確定
124. 若有以下定義和語句:int x = ‘f’;
printf ( “ %c \n”, ‘A’ + ( x – ‘a’ + 2));
則輸出的結果是【A】。
A)H         B)h         C)G         D)I
  // 65+(102-97+2)=72
125. 下列程式執行的結果是【B】。
#include <stdio.h>
void main()
{
    int a = 9, b = 7;
    printf ("a = %d, b = %d \n", a, b);
}
A)a = %9, b  = %7           B)a = 9, b  = 7  
C)a = %d, b  = %d           D)9, 7
126. 語句printf ( “a\bcd\’ef\’g\\\bij\n”);的輸出結果是【C】。
A)a\bcd\’ef\’g\\\bij\n          B)acd’ef’gbij\n 
C)cd’ef’gij                     D)以上均不正確
127. 執行下列程式片斷後c的值是【A】。
int a = 1, b = 2, c;
c = 1.0/b*a;
A)0         B)0.5       C)1         D)2
128. 已知xy、z被定義為int型變數,若從鍵盤對其輸入資料,正確的是【C】。
A)INPUT  x, y, z;                   B)read ( “%d%d%d”, &x, &y, &z);
C)scanf ( “%d%d%d”, &x, &y, &z);    D)scan ( “%d%d%d”, &x, &y, &z);
129. 執行下列程式後的輸出結果是【C】。
#include <stdio.h>
void main()
{
    int x = 11;
    printf ("x = %d, x = %o, x = %x \n", x, x, x);
}
A)x = 11, x = o13, x = oxb      B)x = 11, x = 13, x = 11
C)x = 11, x =13, x = b          D)x = 11, x = o13, x = ox11
130. 分析以下程式,其輸出結果是【D】。
# include "stdio.h "
void main ( )
{
int a, b, c = 210;
a = c/100%9;
b = (-1) && (-1);
printf (" %d, %d \n ", a, b);
}
A)210, -1           B)210,          C)2, -1             D)2, 1
131.已定義str為字元型變數,則以下賦值語句中錯誤的是【A】。
A)str="\";                B)str=NULL;     
C)str=55+8;              D)str=‘\xbb’;
   //“”表示字串=
132. 已定義c為字元型變數,則下列語句中正確的是【C】。
A)c=‘98’;    B)c="98";      C)c=98;        D) c="b";
133. 有以下程式
#include <stdio.h>
void main()
{
    printf("%d\n", NULL);  
}
程式執行後的輸出結果是【A】
A)0             B)1             C) -1           D) NULL沒有定義,出錯
134. 下列程式執行後的輸出結果是【A】
#include <stdio.h>
void main()
{  
    int x= 'f';
    printf("%c ", 'A'+(x-'a'+1)); 
}
A) G      B) H      C) I       D) J
135. 若變數c為char型別,能正確判斷出c為數字的表示式是【D】。
A)  '0'<=c<= '9'                       B)  (c>= '0')||(c<= '9')
C)  ('0'<=c) and ('9'>=c)                D)  (c>= '0')&&(c<= '9')
136. 若有定義  char c=’\010’;則該變數中包含的字元個數是【B】。 
A)  非法定義                        B)  1個
C)  3個                            D) 4個
137. 下列函式中能夠向終端輸出一個字元或字元型變數值的是【D】。
A) gets      B) puts      C) getchar       D) putchar
138. 若有下列語句
char c=’A’;
printf(“%d”,c);
則輸出的結果是【C】。
A) A     B) c      C) 65       D) 錯誤的語句
139. 下列程式輸入’a’字母后,執行程式後輸出的結果【B】。
#include <stdio.h>
void main( )
{
    char c;
    c=getchar();
    c=c-32;
    printf("%c\n",c);
}
A)65     B) A      C) 97       D) a 
140.以下不能正確計算代數式值的C語言表示式是【A】。
A)1/3*sin(1/2)*sin(1/2)先除   B)sin(0.5)*sin(0.5)/3
C)pow(sin(0.5),2)/3  D)1/3.0*pow(sin(1.0/2),2)
141.以下能正確定義且賦初值的語句是【B】。
A)int n1=n2=10;  B)char c=32;
C)float f=f+1.1;     D)double x=12.3E2.5;
142.設有定義:int k=1,m=2; float f=7;,則以下選項中錯誤的表示式【A】。
A)k=k>=     B)-k++     C)k%int(f)     D)k>=f>=m
143.設有定義:int a=2,b=3,c=4;,則以下選項中值為0的表示式是【A】。
A)(!a==1)&&(!b==0)   B)(a<B)&& !c||1
C)a && b     D)a||(b+b)&&(c-a)
144.以下選項中可作為C語言合法常量的是【B】。
A)-80.   B)-080  C)-8e1.0    D)-80.0e
145.以下不能定義為使用者識別符號的是【D】。
A)Main   B)_0    C)_int  D)sizeof
146.以下選項中不能作為合法常量的是【B】。
A)1.234e04   B)1.234e0.4     C)1.234e+4  D)1.234e0
147.有以下程式:
#include <stdio.h>
void main( )
{ 
    int m=12,n=34;
    printf("%d%d",m++,++n);12 35 35 14
    printf("%d%d\n",n++,++m);
}
程式執行後的輸出結果是【A】。
A)12353514   B)12353513  C)12343514  D)12343513
148.有以下程式:
#include <stdio.h>
void main( )
{ 
    int a,b,d=25;
    a=d/10%9;
    b=a&&(-1);
    printf("%d,%d\n",a,b);
}
程式執行後的輸出結果是【B】。
A)6,1    B)2,1   C)6,0   D)2,0
149.以下敘述中正確的是【B】。
A)呼叫printf函式時,必須要有輸出項
B)使用putchar函式時,必須在之前包含標頭檔案stdio.h
C)在C語言中,整數可以以十二進位制、八進位制或十六進位制的形式輸出
D)呼叫getchar函式讀入字元時,可以從鍵盤上輸入字元所對應的ASCII碼
150.以下程式的功能是:給r輸入資料後計算半徑為r的圓面積s。程式在編譯時出錯。
#include <stdio.h>
void main()
{ 
    int r; 
    float s;
    scanf("%d",&r);
    s=p*r*r;
    printf("s=%f\n",s);
}
出錯的原因是【D】。
A)註釋語句書寫位置錯誤
B)存放圓半徑的變數r不應該定義為整型
C)輸出語句中格式描述符非法
D)計算圓面積的賦值語句中使用了非法變數
151.數字字元0的ASCII值為48,若有以下程式
#include <stdio.h>
void main()
{ 
    char a='1',b='2';
    printf("%c,",b++);
    printf("%d\n",b-a);
}
程式執行後的輸出結果是【C】。
A)3,2    B)50,2  C)2,2  D)2,50


152.有定義語句:int b;char c[10];,則正確的輸入語句是【B】。
A)scanf("%d%s",&b,&c);   B)scanf("%d%s",&b, c);
C)scanf("%d%s",b, c);    D)scanf("%d%s",b,&c);
153.有以下程式
#include <stdio.h>
void main()
{ 
    int m,n,p;
    scanf("m=%dn=%dp=%d",&m,&n,&p);
    printf("%d%d%d\n",m,n,p);
}
若想從鍵盤上輸入資料,使變數m中的值為123,n中的值為456,p中的值為789,則正確的輸入是【A】。
A)m=123n=456p=789    B)m=123 n=456 p=789
C)m=123,n=456,p=789  D)123 456 789
154.有以下程式
#include <stdio.h>
void main()
{ 
    char c1='1',c2='2';
    c1=getchar(); c2=getchar(); putchar(c1); putchar(c2);
}
當執行時輸入a<回車> 後,以下敘述正確的是【A】。
A)變數c1被賦予字元a,c2被賦予回車符
B)程式將等待使用者輸入第2個字元
C)變數c1被賦予字元a,c2中仍是原有字元2
D)變數c1被賦予字元a,c2中將無確定值
155.以下程式的功能是進行位運算
#include <stdio.h>
void main()
{ 
    unsigned char a, b;      0111  0100
    a=7^3; b= ~4 & 3;        0011  1011
    printf("%d %d\n",b,a);   0100   0011
}
程式執行後的輸出結果是【A】。
A)4 3    B)7 3   C)7 0   D)4 0
156. 有以下程式
#include <stdio.h>
void main()
{ 
    int c=35;
    printf("%d\n",c&c); 
}
程式執行後的輸出結果【C】。
A)0    B)70    C)35    D)1
157.設有定義語句  char c1=92,c2=92;,則以下表示式中值為零的是【A】。
A)c1^c2         B)c1&c2         C)~c2          D)c1|c2
158. 有定義語句:int  a,b;, 若要通過scanf("%d,%d",&a,&b);語句使變數a得到數值30,變數b得到數值40, 則下面四組輸入形式中,錯誤的輸入形式是【A】。
A)30  40<回車>                    B)30,40<回車>
C)30,40<回車>                 D=30,<回車>40<回車>
159. 若有說明語句  char ch=’65’;則變數ch【C】。
A)包含3個字元                    B)包含2個字元
C)包含1個字元                        D)說明不合法,變數值不確定
160. 已知字母a的ASCII碼為十進位制的97,ch1為字元型變數,則執行語句ch1='a'+'7'-'5';後,ch1中的值為【D】
A) 99         B)不確定的值    C) b         D) c
161. 假設變數a是整型,b是實型,c是雙精度型,則表示式30+a+c*b的值的資料型別是【C】。
A) int        B) float        C) double    D) 不確定
162.若變數c為char型別,能正確判斷出c為大寫字母的表示式是【D】。
A)  'A'<=c<= 'Z'             B)  (c>= 'A')||(c<= 'Z')
C)  ('A'<=c) and ('Z'>=c)    D)  (c>= 'A')&&(c<= 'Z')
163. 若有定義:int a=7;f1oat x=2.5,y=4.7;則表示式x+a%3*(int)(x+y)%2/4的值是【A】。
A) 2.5          B) 2.7           C) 3.5             D) 4.7
164.下列程式執行後的輸出結果是【G】。
#include <stdio.h>
void main()x
{  
    int x= 'f';
    printf("%c",'A'+(x-'a'+1)); 
}
A) G            B) H             C) I               D) J
165. 在C語言中(以TC編譯系統為例),5種基本資料型別的儲存空間長度的排列順序為【A】。
A) char<int<long int<=float<double     B) char=int<long int<=float<double
C) char<int<long int=float=double      D) char=int=long int<=float<double
166. 在c語言中,非char型資料在記憶體中的儲存形式是【A】。
A) 補碼       B) 反碼        C) 原碼        D) ASCII碼
167. 在c語言中,char型資料在記憶體中的儲存形式是【D】。
A) 補碼       B) 反碼        C) 原碼        D) ASCII碼
二、填空題
1. printf庫函式的第一個引數中的格式串是指明輸出資料格式,各種資料型別對應的基本格式串是:
short、int  %hd&%hu %d&%u  ,      long     %ld&%lu  ,
float   %f%e  ,   double   %lf%le  ,
char   %c%hd&%d&%ld  ,   字串  %s  。
2. scanf庫函式格式串和輸入項之間的關係是  一一對應:格式控制字串當中的格式控制
符與輸入項的順序要一致,型別要匹配,個數要對應   。
3. 閱讀下述程式功能:將三位整數n的十位數的數字變為0。例如,輸入三位整數為738,輸出為708。請將正確 寫在橫線處。
# include<stdio.h>
void main( )
{
 int n=0,d2=0,d0=0  ;
printf (“輸入一個三位整數:”);
scanf (“%d”,&n);
d2=   n/100  ;   /* 取出百位數的數字 */
d0=   n%10  ;   /* 取出個位數的數字 */
printf (“輸出三位整數:%d\n”,   d2*100+d0  );
}
5. 若x為單精度型變數,y為字元型變數,z為整型變數,執行如下的輸入語句:
scanf (“%f %c%d”,&x,&y,&z);後,從鍵盤輸入12.77A79A86。此時,變數x、y、z的值分別為  12.770000   、   A    、  79   。
6. 表示式8/4*(int)2.5/(int)(1.25*(3.7+2.3))的值是      0    。
7. 已知char c= 'A';int i=1,j;執行語句j=!c&& i++後,i和j的值分別是  1   和
   0   。
8. 執行下面的程式
#include <stdio.h>
void main( )
{
  int a=0100,b=100;
  printf("x=%d,y=%d\n",--a,b++);
}
則輸出結果是 x=63,y=100   
9. 如果要通過以下語句給a、b、c、d分別輸入字元A、B、C、D,給w、x、y、z分別輸入10、20、30、40,正確的輸入形式是  10A20[]30BC30D    ,請用<CR>表示Enter鍵。
scanf ("%d%c%d%d%c%c%d%c",&w,&a,&x,&y,&b,&c,&z,&d);
解:輸入格式“%c”表示輸入任意一個字元,包括按回車、空格和Tab鍵等。因此在輸入整數10、30、40後不能輸入空格而要直接輸入字母;同理,字母B和C之間也不能輸入空格。同時在20和30之間必須輸入空格進行兩個整數的區分。所以本題 為:10A20□30BC40D<CR>(其中,“□”表示一個空格)。
10. 有以下程式:
#include <stdio.h>
void main ( )
{ 
    char ch1,ch2;int n1,n2;
    ch1=getchar ( );ch2=getchar ( );
    n1=ch1-'0';n2=n1*10+(ch2-'0');
    printf ("%d\n",n2);
}
程式執行時輸入:12<回車>,執行後輸出結果是  12    。(2004年4月)
11.程式的執行結果為   aabb    cc     。
#include <stdio.h>
void main( )
{
    char c1='a',c2='b',c3='c';
    printf ("a%cb%c\tc%c\n",c1,c2,c3);
}
12. 請在空白處填上適當的語句,使以下程式的輸出結果是16.00,。
#include <stdio.h>
void main ( )
{
int a=9,b=2;
float x=   6.6    ,y=1.1,z;
z=a/2+b*x/y+1/2;
printf (“%5.2f\n”,z);
}
13. 有如下程式:
#include <stdio.h>
void main( )
{  
    int y=3,x=3,z=1;
    printf("%d %d\n",(++x,y++),z+2);
}
執行該程式的輸出結果是【D】。
A)3 4       B)4 2     C)4 3        D)3 3
14. 以下程式段中與語句k=a>b?(b>c?1:0):0;功能等價的是【A】。
A)if((a>b&&(b>c))k=1;        B) if((a>b)‖(b>c))k=1;  
   else  k=0;                       else  k=0;
C)if(a<=b)  k=0;            D)  if(a>b)  k=1;
   else if(b<=c) k=1;               else if(b>c) k=1;
                                else  k=0;
15. 已知大寫字母A的ASCII碼值是65,小寫字母a的ASCII碼是97,則用八進位制表示的字元常量是'\101'是    A   。 
16. 下面程式的執行結果是        。
#include <stdio.h>
#define STR "a C program"
void main( )
{ 
    printf("No.1:This is a STR!\n");
    printf("No.2:This is %s!",STR);
}
 :  No.1:This is a STR!
    No.2:This is a C program!

17. 若有以下程式:
   main( )
  {
int i=4;
printf(“%d”,-++i);//負號只是對變數的一種修飾形式而已,不是變數自身組成
   }
該程式執行後的輸出結果以及i的值分別是   -5   、   5   。
18. 以下程式執行時若從鍵盤輸入:10 20 30<回車>。輸出結果是   10300    。
#include <stdio.h>
void main( )
{  
    int i=0,j=0,k=0;
    scanf("%d%*d%d",&i,&j,&k);
    printf("%d%d%d\n",i,j,k);
}
19. 以下程式的執行結果是    c=3,a=2,b=3     。
#include <stdio.h>
void main( )
{  
    int a,b,c;
    c=(a=3,b=a--);
    printf("c=%d, a=%d, b=%d\n",c,a,b);
}
20. 已知x=7.5,y=2,z=3.6,則表示式x>y&&z>x<y&&!z>y的值是 0 。
 :0 解析方式:(x>y&&z>x<y)&&(!z>y)
21. 以下程式執行的結果是   1,1      。
#include <stdio.h>
void main( )
{  
    int a,b,c;
    a=1;b=2;c=3;a=b--<=a||a+b!=c;//a=(b--<=a)||(a+b!=c)
    printf("%d,%d",a,b);
}
22. 輸入“12345,xyz”,下列程式輸出的結果是  123,4     。
main( )
{  int x;char y;
   scanf (“%3d%3c”,&x,&y);
   printf (“%d,%c”,x,y);}
23. 以下的程式執行時,先輸入a  ;後輸入b  。最後顯示的結果是    b,    。
#include <stdio.h>
void main( )
{  
    int x,y;
    printf("Enter a character:");
    x=getchar( ); y=getchar( );
    printf("Enter a character,again:");
    x=getchar( ); y=getchar( );
    printf("%c,%c\n",x,y);
}
24. 讀程式段://位運算運算的是記憶體儲存形式補碼
int a=-5;a=a|0337;  printf("%d,%o\n",a,a);
0101
-5原碼:1000 0000 0000 0000 0000 0000 0000 0101
-5反碼:1111 1111 1111 1111 1111 1111 1111 1010
-5補碼:1111 1111 1111 1111 1111 1111 1111 1011
0337補碼:0000 0000 0000 0000 0000 0000 1101 1111
補碼結果:1111 1111 1111 1111 1111 1111 1111 1111
11 111 111 111 111 111 111 111 111 111 111
以上程式段輸出結果是   -1,37777777    。
//八進位制的資料沒有符號的概念(從低二進位制位到高二進位制位數三位),位運算的運算物件是補碼(位運算的實質就是操作記憶體當中的資料實際儲存形式)
25. 設有二進位制數a的值為11001101,若通過a&b運算使a中的低4位不變,高4位清零,則b的二進位制數是    00001111      。  
26. 設a是一個整數(兩個位元組),若要通過a|b使a的低八位為1,高八位不變,則b的八進位制數是   0377     。
27. 變數i、j、k已定義為int型別並有初值0,用以下語句進行輸入
     scanf("%d",&i); scanf("%d",&j); scanf("%d",&k);
當執行以上輸入語句,從鍵盤輸入(<CR>代表Enter鍵):
    12.3<CR>//當遇到非格式控制符的資料掃描時,不能正常掃描資料
//不能正確掃描的資料,就保持原樣的資料形式
則變數i、j、k、的值分別是   12    、   0    、    0     。
28. 有以下語句段
int n1=10,n2=20;
printf("  n1=%d\nn2=%d\n    ",n1,n2);
要求按以下格式輸出n1和n2的值,每個輸出行從第一列開始,請填空。
n1=10
n2=20
29. 把int型變數low中的低位元組及變數high中的高位元組放入變數s中的表示式是  
low&0x0000ffff | high&0xffff0000     。
此題結果與編譯環境有關,上面結果為Visual C++6.0環境下的表示式。
30. 以下語句的輸出結果為    ASCII of ‘x’ec=120,oct=170,hex=78,character=x      。
    char c= 'x';
    printf ("ASCII of 'x'  ec=%d,oct=%o,hex=%x,character=%c\n",c,c,c,c);
31.表示關係x≤y≤z,應使用C語言表示式是_x<=y&&y<=z_;表示數學式 的C語言表示式是_a/(b*c)_。
32.已知  har a; int b; float c; double d;則表示式a*b + c-d的結果為_double_型。
33.執行了以下程式片斷後,x = _11_;y = _11_。
int  x = 10 , y = 10;
x++;  ++y;
34.若a、b、x、y均為int變數,且a=b= 6, x=y=7則執行表示式(x = a > b) && (y = 2)後x的值為_0_;y的值為 7__。
35.若int  x = 3,則執行表示式x* = x+ = x - 1後x的值為_25_。
36.已知:int  x = 256,執行語句printf( “%x”, x )的結果是_100_。
37. 已知:int x = 97,執行語句printf( “%c”, x )的結果是_a_;執行語句printf ( “%d”, x )的結果是_97_。
38.在C語言中所提供的資料結構是以資料型別形式出現的,其中的基本型別包括int 型 即_整型__、float型即_單精度性__、double型即_雙精度型__、char型即_字元型__等。
39.表示式3 * 7 % 2 + 7 % 2 * 5的值為_6__;表示式8.0*(1/2)的值為  0.0  __。
40. C語言中的賦值運算是_=__,表示相等的關係運算子是_==__。
41. C語言本身不提供輸入輸出語句,輸入和輸出操作是由_函式__實現的,如格式輸出函式_printf();__和格式輸入函式_scanf();__。
42. putchar ( )函式的作用是_向終端輸出一個字元__,getchar ( )函式的作用是_從終端
獲取一個字元__和。
43. 在printf ( )函式的格式說明中,%d表示_以有符號十進位制形式輸出__,%o表示 _以
八進位制整數形式進行輸出__,%f表示_輸出單精度浮點型__,%s表示 _輸出一個字串__,%ld表示以長整型形式輸出整數 。
44. 若想通過以下輸入語句給x賦1,給y賦2,則輸入資料的形式應是_x = 1, y =2__。
int a, b;
scanf( “x = %d, y = %d”, &x, &y);
……
45. 若想通過以下輸入語句使a = 5.0, b = 4, c = 3則輸入資料的形式應該是_5.0, 4, c 
= 3__。
46. 語句:printf(“%d”,x++);  printf(“%d”,++x); x+=1; x=1+x; x=x+1中,執行後能使變數x的值增1的有__;語句; 的輸出結果是否相等
_不相等_;語句; ; 是否完全等效_完全等效_。
47. C程式中的字元常量是用_單引號_括起來的一個字元;除此之外,還允許用一種特殊形式的字元常量,是以_\_開頭,被稱為轉義字元。
48. 轉義字元\n的功能是_換行_;\b的功能是_退格_;\\的功能是_輸出反斜槓字元\_。
49. 將一個字元常量放到一個字元變數中,實際上並不是把該字元放到記憶體單元中去,而是將該字元的相應_ASCII碼_放到儲存單元中,其儲存形式與_整數_的儲存形式相類似,所以可以以_整數_形式輸出。
50. 字串常量是一對_雙引號_括起來的字元序列,且以_\0__結束;則字串china的長度是_6_個字元。
51. C語言中沒有專門的字串變數,如需要存放在變數中,則以_字元陣列_形式來存放。
52. 執行以下程式段後,輸出的結果是_a__。
char c= 'z';
printf("%c",c-25);
53. 若想通過以下輸入語句使a中存放字串1234,b中存放字元5,則輸入資料的形式應該是__a=1234,b=5_。
char a[10],b;
scanf("a=%s,b=%c",a,&b);
54.通過使用關鍵字_const_,可以將一個變數定義為一個常量。
55.常量是指在程式執行過程中其值_不能_改變的量。
56.變數是指在程式執行過程中其值_可以_改變的量。
57.在C程式中,大寫字母和小寫字母是無區別的,此說法正確嗎?_不正確_。
58.以0開頭的整數是_八進位制整數_。
59.以0x開頭的整數是_十六進位制整數_。
60.在一個整數後面加一個字母_lorL_,則認為是long int型常量。
61.C整型變數可分為:基本型、_短整型_、_長整型_和無符號型四種。
62.C實型變數分為_單精度型_和_雙精度型_兩類。
63.C的字元常量是用_單引號_括起來的一個字元。
64._轉義字元_字元的意思是將反斜槓(\)後面的字元轉變成另外的意義。
65.轉義字元'\n'表示_換行_符,使游標移到螢幕上下一行開頭。
66.一個字元變數在記憶體中佔_一個_位元組。
67.一個字元資料既可以以字元形式輸出,也可以以_整數_形式輸出。
68.字串常量是用_雙引號_括起來的字元序列。
69.C規定以字元_’\0’_作為字串結束標誌。
70.在進行運算時,不同型別的資料必須_先轉換為統一型別_,然後進行運算。
71.可以利用_強制型別轉換_運算子將一個表示式的值轉換成指定的型別。
72.有兩種型別轉換,一種是在運算時不必使用者指定,系統自動進行型別轉換;另一種是_
強制型別轉換_。
73.兩個整數相除的結果是_整_數。
74.取餘運算子(%)只能用於_整數_運算元。
75.算術運算子*、/、%、+、- 的優先順序相同。此說法正確嗎?_不正確_。
76.所有運算子中級別最低的是_逗號_運算子。
77.自增運算子(++)和自減運算子(--)只能用於變數,而不能用於_常量或表示式_。
78.自增運算子(++)和自減運算子(--)的結合性是_右結合性(自右向左)_。
79.賦值運算子的作用是將一個資料或表示式的值賦給一個_變數_。
80.sizeof( double )表示的含義是一個double型資料佔用記憶體的_位元組_數。
81.一個表示式的最後加上一個_分號_就成了一個語句。
82.結構化程式設計中有三種基本結構:順序結構、_分支結構_、_迴圈結構_。
83.在C中,賦值語句和賦值表示式是相同的概念,此說法對嗎?_不正確_。
84.C語言本身不提供輸入輸出語句,輸入和輸出操作是由_函式_來實現的。
85.printf函式的作用是_向終端輸出若干個任意型別的資料_。
86.putchar函式的作用是_向終端輸出一個字元_。
87.scanf函式的作用是_從終端輸入若干個任意型別的資料_。
88.getchar函式的作用是_從終端獲取一個字元_。
89.scanf函式中應當是變數_地址_,而不應是變數名。
90.程式執行時,註釋語句使計算機在螢幕上列印//之後的文字。此說法對嗎?_不正確_。
99.所有變數都應先宣告後使用。此說法對嗎?_正確_。
100.C中變數number和NuMbEr是相同的。此說法對嗎?_不相同_。
101.C語言既具有高階語言的特點,又具有低階語言的功能,因而具有廣泛的用途和很強的生命力。其指標運算和_位_運算就很適合於系統軟體設計的需要。
102.位運算是指進行_二進位制位_的運算。

103.一個位元組一般由_8_個二進位組成,每一個二進位的值是_0or1_。
104.原碼只將最高位作符號位(以_0_代表正,_1_代表負),其餘個位代表數值本身的絕對
值(以二進位制表示)。
105._正整數_的補碼同其原碼相同,_負數_的補碼為:最高位是1,其餘各位為原碼的相應位取反,然後對整個數加1。
106._0_的補碼是唯一的,其值為_0_。
107.用補碼進行運算,減法可以用_加法_法來實現。
108.計算機是以_補碼_碼形式存放數的。
109.按位與運算的特殊用途:_清零_、取一個數中某些指定位、保留一個數中的某一位。
110.按位或運算常用來對一個資料的某些位定值為_1_。
111.按位異或運算的特殊用途:使特定位_翻轉_、交換兩個值,不用_臨時變數_。
112.同一個數與本身相_異或_運算,結果必為0。
113.取反運算子的優先順序別比算術運算子、關係運算子、邏輯運算子和其它位運算子都_
高_。
114.左移比乘法運算快得多,乘2運算可用左移_1_位來實現。
115.右移一位相當於除以_2_。
116. 以下程式的執行結果是 9,10,9,9 。
#include <stdio.h>
void main()
{ 
    int i=8,j=9,m,n;
    m=++i;
    n=j++;
    printf("%d,%d,%d,%d\n",i,j,m,n);
}
117.以下程式的執行結果是 2,1,2  。
#include <stdio.h>
void main()
{ 
    int a,b,c;
    a=b=c=1;
    if (a++||++b) c++;
    printf("%d,%d,%d\n",a,b,c);
}
118. 以下程式的輸出結果是 1,2,0 。
#include <stdio.h>
void main()
{
    int k, i=0, j=2;
    k = i++&&j++;
    printf ("%d,%d,%d\n", i, j, k);
}
119.下列程式的輸出結果是 2 。
#include <stdio.h>
void main()
{   
    int a = 3, b = 4 , c = 5;
    printf( " %d \n ", a++ - c++ + b );
}
120.下列程式的輸出結果是 66 。
#include <stdio.h>
void main()
{   
    int a = 3 , b = 14 , c = 5 ;
    c = c + a *a + b % 5 * 10 ;
    printf("%o\n" , c ) ;
}
121.有以下程式, 若從鍵盤輸入:247<回車>,則程式的輸出結果是 6689 。
#include <stdio.h>
void main()
{  
    int c;
    while ((c=getchar())!='\n')
    {  
        switch (c-'2')
        {   
            case 0:
            case 1: putchar(c+4);
            case 2: putchar(c+4);break;
            case 3: putchar(c+3);
            default:putchar(c+2);break;
        }
    }
} 
三、問答題
1. 字元型常量和字串常量有什麼區別?
解:字元型常量與字串常量的書寫方式不同,用單引號括起來的的單個字元是字元型常量,用雙引號括起來的字元序列是字串常量。字串常量與字元型常量的儲存方式不同,C編譯程式在儲存字串常量時,自動採用\0作為字串常量的結束標誌。C編譯器在儲存字元型常量的時候,通常是儲存該字元所對應的ASCII碼值,這一點和整數的儲存原理相似。
2. 已知int i=5,j=5;試問表示式或函式輸出的值:
(1)i++  - ++j   -1                (2)++i  - j++   1
(3)printf (“%d\n”,++i+(++j));  12 (4)printf (“%d\n”,i++ +j); 10
//後++是先取值後執行  前++是先執行後取值
3. 程式改錯:
    #include <stdio.h>  
void main( )
{   float f=7.12;
    char c=“c”; //字元常量應用‘’
    printf(“%d\n”,int(f%3));//%運算的運算元必須都是整數
    printf("%c",c); 
}
解:正確程式如下。
#include <stdio.h>
void main( )        
{  
    float f=7.12;
    char c='c';                     /*修*/
    printf("%d\n",(int)f%3);        /*修*/
    printf("%c",c);
}
4. 請指出以下程式段中的錯誤:
#include <stdio.h>
void main ( )
{
short j,i,k;
char a,b,c;
float x, y, z;    //short型別的整數極限值是32767~-32768
i=30000;
j=30000;
a= '9';
b= '5';
k=a*i+b*j;     //short型別的整數極限值是32767~-32768
//已經超出了資料極限
z=x*x+y*y;//x和y未賦初始值
}
答:錯誤的地方如下:
(1)變數k的值溢位,不能得到正確結果。
(2)變數x和y未賦初值。
5. 以下程式的輸出是什麼?
#include <stdio.h>
void main ( )
{  
    int i;
    unsigned int j;
    i= ~0; 
//解析過程:
//  1.預設的0就是-0,該-0的反碼為1111 1111 1111 1111
//  2.那麼,此時的記憶體資料就是1111 1111 1111 1111
//  3.只要儲存的二進位制記憶體資料一致,那麼解析一致,效果一致
//      解析不一致,效果不一致
//有符號解析:
//  記憶體資料:1111 1111 1111 1111 1111 1111 1111 1111
//  補碼資料:1111 1111 1111 1111 1111 1111 1111 1111
//  反碼資料:1111 1111 1111 1111 1111 1111 1111 1110
//  原碼資料:1000 0000 0000 0000 0000 0000 0000 0001->-1
//無符號解析:
//  記憶體資料:1111 1111 1111 1111 1111 1111 1111 1111
//  全是資料:0xffffffff->4294967295
//  有符解析:-1s
    j= ~0; 
    printf ("i=%d  j=%d\n",i,j);
}答:-1,-1
6. 使用運算子++可以把以下3個語句寫成一個語句。請設法寫出這個語句,並程式設計上機驗證結果。
y=y+1;   //這裡表示給y先自增1
z=x+y;   //這裡表示給z賦x+y的值
x=x+1;   //這裡表示給x後自增1
答:z=(x++)+(++y)
7. 假定輸入的資料流如下:
23.456789 12.23 567 hello F 34.32
為了把第二個數賦給變數second,把第三個數賦給變數third,把字元’F’賦給變數
ch。問scanf( )函式的表示形式是什麼?
解: scanf("%*f%f%d%*s%*c%c",&second,&third,&ch);
//字元格式控制符不能指定長度
8. 找出並更正以下程式中的錯誤。
    #include <stdio.h>
void main ( )
{
    double pound;
    double kilograms;
    scanf (“%f”,pound); //雙精度小數應該用%lf進行控制檯錄入
    kilogram=pound/2.2;
    printf (“%d pounds equals %d  kilograms\n”,pounds,kilograms);
}//雙精度小數運算結果這裡是除以2.2  所以也是double型別
答:
正確的程式如下:
#include <stdio.h>
void main ( )
{
    double pound;
    double kilograms;
    scanf ("%lf",&pound );  /* 輸入輸出double型數,要使用格式符%lf */
    kilograms=pound/2.2;
    printf ("%lf pounds equals %lf kilograms\n",pound , kilograms);
}

9. 語句printf("a\bRe\'CH\'y\\\bou\n");的輸出結果是  Re’CH’you  。
10. 說明下面程式的輸出結果:
#include <stdio.h>
void main()
{
    int x='f';
    printf("%c\n", 'A'+(x-'a'+1));
}//這裡會按照ascii碼值進行運算120-97+1+65=71  ascii碼71對應大寫字母G
答:輸出大寫字母G。因為x-’a’是字元常量’f’的ASCII碼值減去字元常量’a’的ASCII碼值。結果是5,加1後為6。於是’A’+6得到的是大寫字母G的ASCII碼值。按格式“%c”輸出,即是字母G。
11. 分析下面程式的輸出結果。
#include<stdio.h>
void main( )
{
    int x,m,n,a,b;
    m=n=a=b=8;
    x=(m=a>b)&&(n=a>b);
    printf("x=%d,m=%d,n=%d\n",x,m,n);//x=9,m=0,n=8
}
//這裡把a>b的邏輯值賦值給m  這裡不成立表示0,而&&運算子左邊為0就不考慮右邊的值,就直接把左邊的邏輯值賦值給x,所以x=0,m=0而n是剛才&&沒有運算的值  也就是初始值,
【解】輸出結果是:
x=0,m=0,n=8
這裡,變數m、n、a、b初始值都是8。語句
x=(m=a>b)&&(n=a>b);
把邏輯表示式(m=a>b) &&(n=a>b)的值賦給變數x。邏輯運算子&&左右兩邊都是賦值表示式:左邊是把關係表示式a>b的值賦給變數m;右邊是把關係表示式a>b的值賦給變數n.
    在計算這個邏輯表示式取值時,左邊的關係表示式a>b不成立,因此取值為0。也就是說,變數m的值為0,所以&&左邊的條件取值為假。於是,C語言不再去計算這個邏輯表示式右邊的條件,而直接把邏輯值0賦給變數x。正因為沒有去計算右邊表示式的取值,所以並沒有做把關係表示式的a>b的值賦給變數n的操作。因此變數n仍保持它原有的值8。
12. 執行下面的程式後,變數b裡的值是什麼?
#include <stdio.h>
void main( )
{
    int x =35;
    char c='A';
    int b;
        10 0011
        00 1111
        00 0011
    b=((x&15)&&(c<'a'));
    printf("%d\n",b);//1
}
【解】這裡是要把邏輯表示式(x&15)&&(c<‘a’)的值賦給變數b。該邏輯表示式進行的是邏輯與(“&&”)運算。它的左邊是一個位邏輯表示式,右邊是一個關係表示式。
先來看左邊的x&15。從圖3- 4看出,運算結果是3,即是邏輯真,取值為1。 
//這裡0&任何數都得0,1&任何數都得其本身
再來看右邊的關係表示式c<‘a’。由於變數c裡存放的是’A’,它的ASCII碼值(65)小於’a’的ASCII碼值(97)。因此,該關係成立,運算結果為1。
所以,整個邏輯表示式的結果是1。因此,程式執行後,變數b裡的值是1。
13. 以下程式的執行結果是什麼?為什麼?
#include <stdio.h>
main ( )
{
    long a=32767;
    long b;
    b=a+1;
    printf ("a=%ld,b=%ld\n",a,b);
}
解:這裡都是長整型數,儲存一個數的位數是32,故直接相加即可。
所以,本程式的執行結果為  =32767,b=32768
//這裡a和b都是長整型數,所以直接相加
14. 執行以下程式時輸入:
1234567
請寫出程式執行結果。
#include <stdio.h>
void main( )
{
    int x,y;
    scanf("%2d%*2s%1d",&x,&y);
    printf("x=%d,y=%d\n",x,y);
}
解:scanf ( )函式中第一個格式說明為“%2d”,表示接受兩個數字即12賦給x;第二個格式說明為“%*2s”,表示接受兩個數字不賦給任何變數,即跳過34;第三個格式說明為“%1d”,表示接受一個數字即5賦給y。所以程式輸出為:
x=12,y=5
15. 閱讀程式,並按給定的輸出格式將程式執行結果寫在“執行結果:”之後
#include <stdio.h>
void main()
{
    int i;
    float f;
    char c;
    scanf("%d %c %f", &i ,&c, &f);
    printf ("i= %d, c=%c, f=%f \n", i, c, f);
}
當輸入100a1.563時,程式的執行結果是:i=100,c=a,1.563000
當輸入1.23456時,程式的執行結果是:i=1,c=,f=23456.000000
//這裡會按照各自資料型別去解析,100a1.563,%d會解析到數字結束位置為止然後到%c,它會解析一個字元,最後一個%f會解析一個實數型別的資料
16. 閱讀程式,並按給定的輸出格式將程式執行結果寫在“執行結果:”之後
#include <stdio.h>
void main()
{
    int i = 010, j = 10, k = 0x10;
    printf ("i=%d, j=%d, k=%d \n", i, j, k);
}
執行結果是:i=8,j=10,k=16
//這裡定義分別是按八進位制十進位制十六進位制定義,而列印時按照十進位制列印,所以會自動把八進位制和十六進位制轉換成十進位制
17. 閱讀程式,並按給定的輸出格式將程式執行結果寫在“執行結果:”之後
#include <stdio.h>
void main()
{
    int a = 7, b = 9;
    a = a + b;  b = a - b;  a = a - b;
    printf ("a=%d, b=%d \n", a,b);
}
執行結果是:a=9,b=7
//典型的不用第三方變數進行資料交換,不適用於較大資料,否則會有溢位風險
18. 閱讀程式,並按給定的輸出格式將程式執行結果寫在“執行結果:”之後
#include <stdio.h>
void main()
{
    int a, b, c;
    a = (b = (c = 3) * 5)*5;
    printf ("a=%d, b=%d, c=%d \n", a, b, c);
}
執行結果是:a=75,b=15,c=3
19. 閱讀程式,並按給定的輸出格式將程式執行結果寫在“執行結果:”之後
#include <stdio.h>
void main()
{
    int a = 16, b, x = 6, y, z;
    b = a+++1;   //++優先順序會高於+,所以是(a++)+1,b=17,a=16               
    printf ("b=%d \n", b);//b=17
    x *= a = b;//賦值運算子的結合性是自右向左,所以會先把b的值賦值給a
    printf ("x=%d \n", x);//102
    x = 1;  y = 2;  z = 3;
    x += y += z;//x=6,y=5,z=3
    printf ("%d \n",z+=x>y?x++:y++);//9
} 
執行結果是:條件運算子的優先順序大於賦值運算子條件運算子是具有返回值的
 :執行結果是:                        
b=17
x=102
9
//這裡需要注意的是複合運算子優先順序低於三目運算子,所以先執行索娜姆運算子,最後執行復合運算
20. 閱讀程式,並按給定的輸出格式將程式執行結果寫在“執行結果:”之後
#include <stdio.h>
void main( )
{
    printf("  ab c\t de\rf\tg\n");
    printf("h\ti\b\bj   k");
}
:執行結果是:\r表示回車,回到當前行的首部進行下一次輸入,原先存在的依然保留,注意後輸入的資料具有覆蓋效果,覆蓋不完的部分依然進行顯示
f       gde
h      j   k
21. 閱讀程式,並按給定的輸出格式將程式執行結果寫在“執行結果:”之後
#include <stdio.h>
void main( )
{ 
    char c1, c2;  
    int n1, n2;
    c1 = getchar();  c2 = getchar();
    n1= c1 - '0';  n2 = n1*10 + (c2 - '0'); //字元0的ascii碼是48,這裡的getchar是等待輸入一個字元,會把48拆解開當作兩個字元解析,4的ascii碼是52,8的ascii碼是56,c2-‘0’就是8,n1*10就是40,加8 就是48,按照十進位制整數列印就是48
    printf ("%d\n", n2);
}
若輸入48,則執行結果是:48
22.閱讀程式,並按給定的輸出格式將程式執行結果寫在“執行結果:”之後
#include <stdio.h>
void main( )
{ 
    char c; 
    int n=100;
    float f=10; 
    double x;
    x=f*=n/=(c=50);
    printf("%d %f\n",n,x);2,20.000000
}
執行結果:
 :
2 20.000000
//n是int型別,x是double型別,賦值號回自動進行型別轉換
23.閱讀程式,並按給定的輸出格式將程式執行結果寫在“執行結果:”之後
#include <stdio.h>
void main( )
{ 
    int a,b,c;
    a=10; b=20; c=(a%b<1)||(a/b>1);
    printf("%d %d %d\n",a,b,c);
}//按優先順序運算,%<  左邊不成立為0,再看右邊/>也不成立都是0就返回0,這裡沒有對a和b進行賦值,所以還是初始值
執行結果:10 20 0
24.閱讀程式,並按給定的輸出格式將程式執行結果寫在“執行結果:”之後
#include <stdio.h>
void main()
{ 
    int x=0210; //定義變數賦值八進位制0210  
//010001000
//1000 1000
//88
    printf("%X\n",x);//按十六進位制解析就是88
}
執行結果:88
25.閱讀程式,並按給定的輸出格式將程式執行結果寫在“執行結果:”之後
已知字母A的ASCII碼為65。以下程式執行後的輸出結果是______。
#include <stdio.h>
void main()
{ 
    char a, b;
    a='A'+'5'-'3'; b=a+'6'-'2';
    printf("%d %c\n", a, b);//67 G
}

//運算結果a=67,b=71,這裡按照十進位制整數列印a就是67按字元列印b就是G
執行結果:67 G
26.閱讀程式,並按給定的輸出格式將程式執行結果寫在“執行結果:”之後
已知字元A的ASCII程式碼值為65,以下程式執行時若從鍵盤輸入  33<回車>,則輸出結果是______。
#include <stdio.h>
void main()
{ 
    char a,b;
    a=getchar();
    scanf("%d",&b);
    a=a-'A'+'0';b=b*2;//’A’=65   ‘0’=48 ‘3’51
    printf("%c %c\n",a,b);//ASCII34,6對應的字元
}
四、程式設計題:
1. 編寫程式,讀入3個雙精度數,求它們的平均值並保留此平均值小數點後一位數,對小數點後第二位數進行四捨五入,最後輸出結果。
【分析與解答】
(1)定義4個雙精度變數a、b、c和ave,變數a、b、c分別存放讀入的3個雙精度數,ave存放它們的平均值。
(2)設計輸入語句,以及在此之前用於提示輸入的(printf)語句。
(3)設計求平均值的演算法,把所求得平均值放入變數ave中。
(4)設計把變數ave中的數,從小數點後第二位數進行四捨五入的演算法。現舉例說明:若ave中的數為123.4644,為了保留此值小數點後一位,可用表示式:(int)(123.4644*10)/10.0;依次推算,為了保留此值小數點後二位,可用表示式:(int)(123.4644*100)/100.0;其他依次類推。
(5)若要求對小數點後第二位數進行四捨五入,則可對原數加0.05後再進行以上運算。如要求保留123.4644小數點後一位且對第二位數進行四捨五入,可用表示式:(int)((123.467+0.05)*10)/10.0。注意:分母一定要用實數10.0而不能用整數10,否則就變成整除了;若要求保留123.4644小數點後兩位且對第三位數進行四捨五入,可用表示式:(int)((123.467+0.005)*100)/100.0;其他依此類推。
(6)設計輸出語句。輸出a、b、c和ave。
(7)把以上內容放在主函式的一對花括號中。
(8)編寫程式如下:
#include <stdio.h>
void main()
{  
    double a,b,c,ave;
    printf("Enter a,b,c:");
    scanf("%1f %1f %1f", &a,&b,&c);
    ave=(a+b+c)/3;
    printf("ave=%f\n",ave);     /*用以比較四捨五入前後的資料*/
    ave=(int)((ave+0.05)*10)/10.0;
    printf("a=%f,b=%f,c=%f,ave=%f\n",a,b,c,ave);
 }

2. 編寫一個簡單的C程式,輸出以下資訊:
* * * * * * * * * * * * *
C program!
* * * * * * * * * * * * *
#include <stdio.h>
void main ( )
{
    printf("* * * * * * * * * * * * * \n");
    printf("     C program! \n");
    printf("* * * * * * * * * * * * * \n");
}
3. 編寫一個程式,輸入一個弧度值,並將其換算成角度值(度、分、秒的形式)輸出。
提示:設x為弧度,則對應的角度為180*x/∏,其整數部分為度數,餘下的部分乘60,其整數部分為分數,再將餘下的部分乘60,其整數部分為秒數。
#define pi 3.14159
#include <stdio.h>
void main()
{
    float x,a,a1;
    int d,f ,m;
    printf("請輸入弧度:");
    scanf("%f",&x);
    a=x*(180/pi);
    d=(int)a;
    a1=(a-d)*60;
    f=(int)a1;
    m=(int)((a1-f)*60+0.5);
    printf("%g弧度  <=>  %d度%d分%d秒\n",x,d,f,m);
}
4. 編寫一個程式,輸入一個攝氏溫度,輸出其對應的華氏溫度。
提示:攝氏溫度與華氏溫度之間的轉換公式為:華氏溫度=9*攝氏溫度/5+32。
#include <stdio.h>
void main()
{
    double s, h;
    printf("請輸入攝氏溫度:");
    scanf("%lf", &s);
    h = 9 * s / 5 + 32;
    printf("攝氏%lf溫度所對應的華氏溫度是%lf \n", s , h);
}
5. 編寫一個程式,輸入半徑,輸出其圓周長、圓面積、及圓球體積。
#define pi 3.14159
#include <stdio.h>
void main()

{
    double r = 0.0, c = 0.0, s = 0.0, v = 0.0;
    scanf("%lf", &r);
    c = 2 * PI*r;
    s = PI *r * r;
    v = PI*r * r * 4 / 3 * r;
    printf(" c = %lf, s = %lf, v = %lf \n");
}
6. 輸入一個字元,分別輸出其前導字元、該字元、後續字元。
#include <stdio.h>
void main()
{   
    char chr = '\0';
    chr = getchar();
    printf("qchr = %c, chr = %c, hchr = %C \n", chr - 1, chr, chr + 1);

    system("pause");
}

7.對任意輸入的一個字元進行加密,然後解密,輸出加密解密的結果。
【解】設一個常量d為加密碼,利用異或運算對字元c進行加密,解密過程則是再一次利用異或運算。程式如下:
#include<stdio.h>
void main( )
{   
    char dcode = '\0', code = '\0', rcode = '\0';
    int pass = 1234;
    scanf("%c", &dcode);
    printf("dcode = %c \n", dcode);
    code = dcode ^ pass;
    printf("code = %c \n", code);
    rcode = code ^ pass;
    printf("rcode = %c \n", rcode); 
}
8. 輸入三個整數,按從小到大的順序進行輸出。
#include<stdio.h>
#include <stdio.h>
void main()
{  
    int a = 0, b = 0, c = 0;
    scanf("%d %d %d", &a, &b, &c);
    if (a > b)
    {
        a = a^b;
        b = a^b;
        a = a^b;
    }
    if (a > c)
    {
        a = a^b;
        b = a^b;
        a = a^b;
    }
    if (b > c)
    {
        b = b ^c;
        c = b ^c;
        b = b ^c;
    }
    printf("a = %d , b = %d , c = %d \n", a, b, c);

    system("pause");
}

相關文章