PTA 2019-1-11

_Neha發表於2020-12-07

一、判斷題

1.在所有的關係運算子(>=、>、= =、!=、<=、<)中,優先順序最低的運算子是“= =、!=”。

【思想】:
運算子優先順序:

在這裡插入圖片描述
其中 一元運算子中+ -為正或負;

^(異或)
1.可以交換兩個數的值。
2. 兩個值不相同,則異或結果為真。反之,為假。
(0異或0=0,1異或0=1,0異或1=1,1異或1=0)

||(或)
(0或0=0,1或0=1,0或1=1,1或1=0)

|與|| &與&&的區別:結果無區別 但雙的話計算步驟少;

2.八進位制和十六進位制如何表示
【思想】8進位制前面有0 十六進位制前面有0X
在轉義字元中 8進位制\ 十六進位制\x

3.switch語句中default時必須的嗎
【思想】否

二、選擇題
1.以下正確的字元常量是______。
A.’\412’
B.255
C.’\08’
D.’'

自己疑問:什麼是正確的字元常量

【思想】
字元常量是括在單引號中,例如,‘x’ 可以儲存在 char 型別的簡單變數中。
注意:
1.字元常量只能用單引號,雙引號則代表是字串
2.單引號內只能包含一個字元,多個字元時,出最後一個外前面會自動失效
3.字元常量的值,就是它在ASCII編碼表中的值。是個從0-255之間的整數。因此字元常量可以作為整型資料來進行運算。
4.單引號括起來的字元包括英文字母大、小寫字元各26個、數字字元10個,以及空白符(空格符、製表符、換行符),標點和特殊符號(鍵盤上的共30個)

如 ‘Y’+32的值為121,‘7’+‘6’的值為109。

【補充】在 C 程式中,9ab是非法的使用者識別符號
自己:F
有效使用者識別符號:不能以數字開頭!

2.對下列程式碼的描述:

#include "stdio.h"
int main(){
    long num=1;
    while(num++ > 0) for(long i=num; i >=0; i--)printf("i :=\n \t %ld \n" , i);
    return 0;
}
正確的是:

A.程式有編譯錯誤,不能執行
B.迴圈條件永為真,迴圈無限次,程式根本停不下來,列印輸出無限行
C.迴圈有限次,程式正常結束,列印輸出有限行
D.程式執行過程必定會出錯(崩潰),結果列印輸出有限行

自己:B
正確:D

【思想】

1.你在死迴圈中包含了break語句或return,比如if滿足某個條件就執行break或者return。
2.你在迴圈中或呼叫的函式中,執行了exit函式,直接結束了整個程式。
3.你的程式碼有錯,比如使用野指標,越界訪問陣列等不可控行為。
4.記憶體不足,程式終止,比如迴圈malloc申請記憶體,但沒有釋放,又或者呼叫遞迴函式造成記憶體溢位。**==

3.下列語句中, 可輸出“☼”字元(ASCII 碼為 15)。

A) putchar(‘☼’);
B) putchar(15);
C) putchar(’\17’);
D) printf("%c", ‘\Xf’);

自己:BCD
正確:BC
【錯因】:‘\x’才為16進位制轉義符 '\X’不是

4.下列程式執行後的輸出結果是

int a=10, b=20,c;
c=(a%b<1)(a/b>1);
printf("%d %d %d\n", a, b, c);

【思想】:小的數餘大的數,結果為小的數!

三、填空題

1.執行以下程式後,如果從鍵盤上輸入china#<回車>,則輸出結果為

#include <stdio.h>
int main(void)
{
    int c1=0,c2=0;
    char ch;                      

    while((ch=getchar()) !='#')
    switch(ch)
    {    case 'a':
        case 'h':c1++;
        default:c2++;
    }
    printf("c1=%d,c2=%d\n",c1,c2);

    return 0;
}
正確:c1=2 c2=5

【思想】
1.switch並不是按順序來的 哪個符合就執行哪個
2.getchar()函式只能接收一個字元,其函式值就是從輸入裝置獲取到的字元。

【難點】
1.這題為什麼可以輸入一大串還讀出一大串,輸入又不一定全讀了,這題輸入多個 由於是個迴圈所以一個一個判斷
2.getchar可以讀取哪些字元:除\n其餘全部可以

2.在計算機系統中,符號整數採用 ___
來表示和儲存。

正確:補碼

補充:char用什麼儲存:ASCII碼 所以字元型與數值型儲存不一樣

**【難點】**什麼是某某碼
計算機系統儲存有符號整數

下列語句中,可輸出“☼”字元(ASCII 碼為 15)

A) putchar('☼');
B) putchar(15);
C) putchar('\17');
D) printf("%c", '\Xf');

自己難點:
1.char定義後 值為 什麼?
ASCII碼 且定義時要用數字來定義,若不用數字那就是變數

2.為什麼int 和char 分別定義同一個值後putchar()
輸出一樣
因為定義的都是相同的數字,故輸出一樣;

3.putchar與printf
**如printf("%c",‘A’) 相當於 putchar(‘A’) **
注意,無論哪個要輸出一個字元的時候 用的是對應的ASCII碼

putchar(c )中c可以是字元常量 整形常量 字元變數或整形變數(其值在字元的ASCII程式碼範圍內)

putchar(c )的擴充套件

 {1.putchar輸出換行(‘\n’)
  2.putchar輸出轉義字元(‘\101’)=A(八進位制)八進位制只用斜槓就可以了!
  3.輸出一個單撇號 (‘\'')}

4.分析實際問題

#include <stdio.h>

int main ()
{
int a;
scanf("%c",&a);
putchar(a); 
printf("\n");
printf("%c\n",a);
printf("%d",a);
}

此題自己【難點】:
int a後 scanf的是%c 那麼在記憶體中儲存的是什麼?

經過試驗後 得出結論
儲存為%c 即ASCII碼。(intchar相同的結果)

自己思考:char與int是整型 但char只能儲存ASCII中的數字 int的範圍大得多。

佐證:整型和字元型是互通的,他們是在記憶體中儲存的本質是相同的,只是儲存的範圍不同而已,整型可以是2位元組,4位元組,8位元組,而字元型只佔1位元組(8位)。

換做是float 則只有最後一步出結果 輸字母出0

  • 補充
字元'0'char c = '0';   它的ASCII碼實際上是48。記憶體中存放表示:00110000


字元'\0' : ASCII碼為0,表示一個字串結束的標誌。這是轉義字元。


整數0 :ASCII碼為0,字元表示為空字元,NULL;數值表示為0;記憶體中表示為:00000000

四、程式填空題

5-1
語句填空:下列 for迴圈語句將輸出:
0 1 2 0 1 2 0 1 2

 for( i=1; i<=9; i++ ) printf("%2d",_   )

自己 :無思路

正確:(i-1)%3

【思想】
1%3表示將1除以3,結果為0,餘數為1,所以1%3等於1.

5-2
用陣列來求fibonacci數列問題,列印前20項數列,每行列印4個數。

#include<stdio.h>
int main()
{
  int i;
  int f[20]={1,1};
  for (i=2;i<20;i++)
    f[i]=___;
  for ( ___ ;i<20;i++)
    {if( ___)printf("\n");
      printf("%d ",f[i]);
     }
      return 0;
}
前提:fibonacci數列特點:從第三項起
每一項都是前兩項的和

正確

   1.f[i-1]+f[i-2]
   2.i=0
   3.i%4==0