程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 自問自答學c語言(2)

自問自答學c語言(2)

編輯:關於C語言

 

問題11c語言的基本類型?

數字: 整數和小數int 和float; int 有short int long int;float有double

字符: char

邏輯: bool

一個整體:struct,union, enum, 數組[]

操作底層的:指針,void

 

問題12不同數據類型,空間大小的問題?

 

sizeof(int) sizeof(float) sizeof(double)sizeof(struct my), 這些根據不同的編譯環境一般不同,大體上是

int:4;float 4:   short int就為2,double就為8;long 也為4; 還有就是struct的字節對齊的問題影響sizeof;看一下mystru2和mystru3的區別sizeof一個是8一個是12

/*COPYRIGHT  [email protected]*/

#include <stdio.h>

struct myStru

{

    char a;

    char b;

    int  c;

};

struct myStru2

{

    char a;

    char b;

    char d;

    int  c;

};

struct myStru3

{

    char a;

    char b;

    int  c;

    char d;

};

int main()

{

 

//copyright  [email protected]

    printf("sizeof(short int)is %d\n",sizeof(short int));

    printf("sizeof(long int)is %d\n",sizeof(long int));

    printf("sizeof(int) is%d\n",sizeof(int));

    printf("sizeof(float) is%d\n",sizeof(float));

    printf("sizeof(double) is%d\n",sizeof(double));

    printf("sizeof(myStru) is%d\n",sizeof(myStru));

    printf("sizeof(myStru2) is%d\n",sizeof(myStru2));

    printf("sizeof(myStru3) is%d\n",sizeof(myStru3));

    char str[100];

    gets(str);

    printf("str is%s\n",str);

    printf("sizeof(%s) is%d\n",str,sizeof(str));

    return 0;

}

 

問題13sizeof是函數嗎?

sizeof是運算符,不是函數; 是c語言中的關鍵字,同float,int,return一樣;c++中的new也是關鍵字。

 

問題14ASCII碼表

設計計算機時,以英文為語言;只要可以輸入基本常用的字符共127個就可以了,於是2的7次方為

16*16/2=128 , 而16*16=(16+6)*10+6*6=220+36=256速算,速算法參我的另一博客文章

而64*64=64*66-128=4224-128=4096

因此一個byte表示所有的127個基本字符,其中高位全置為0.

 

問題15unsigned char 和signedchar的范圍

signed char: 非負數 第八位為0其它全為1; 即0111 1111 大小為2的7次方-1=127因此范圍0-127

                         負數 第八位為1其它為1: 即11111111大小為-1;1000 0000 大小為-128

unisigned char: 0-1111 1111 大小為2的8次方-1=255;

可以這樣記憶:

先記憶無符號的8位,范圍在2的8次方-1=255 0-255; 符號的范圍最小為-2的八次方/2=-128, 最大由於正數裡面多了個0,因此到127即-128-127

 

問題16 scanf printf參數寫的是變量名字還是變量地址?

printf("variable a is %d",a);

scanf("%d",&a);

設置時為了方便從stdin輸入的東西直接放入變量的地址裡就可以了,不必在通過變量尋址存放,因此scanf會設計成直接寫入地址。

printf是打印的變量的數據和地址無關,因此這樣設計。

我經常犯的毛病是寫成scanf("%d",a)了。其次是scanf的輸入格式的問題

 

scanf(“%d  %d”,&a,&b)兩個空格隔開的則應該輸入兩個空格

 

scanf(“a=%d,b=%d”,&a,&b);

 

 

問題17沒有計算器寫個2進制,10進制的轉換.

 

編譯器在printf中看到%會認為和後面組成 輸出格式, 那就有個問題,我就想輸出%d怎麼辦?

 

#include <stdio.h>

 

int main()

 

{

 

//copyright  [email protected]

 

    signed int i = -1;

 

    signed int j =0xFFFFFFFF;

 

    printf("i is %d,%x\n",i,i);

 

    printf("j is%d,%x\n",j,j);

 

    printf("%%d");

 

    return 0;

 

}

 

還有我一直認為-1是1000 0000其實是1111 1111,因為-1是負數的最大。

 

 

 

問題18輸出單個字符,我必須用printf(“%c”,c);嗎?

 

不必,可以下列代碼putchar

 

 

 

#include <stdio.h>

 

int main()

 

{

 

         // copyright  [email protected]

 

    char c='bc1';//此處int截斷為char

 

    char d='b';

 

    putchar(c);

 

    putchar('\n');

 

    putchar(d);

 

    return 0;

 

}

                    

問題19scanf語句調用後,我不按回車,是否可以無窮盡的輸入字符?

 

顯然是不會的,否則和永動機沒區別了,實際上用戶利用鍵盤輸入時,輸入的字符會依次被送到緩沖區中,在此處等待的輸入函數只有在用戶輸入了回車時,才會去緩沖區中取字符。接下來的輸入函數也是先去緩沖區中查看當前是否存在字符。如果存在,則會取出字符;如果不存在,則會中斷,提示用戶輸入

 

所以下面的代碼才會有不合理的表現,加上fflush(stdin)後,第二個scanf顯然在緩沖區查到不存在字符,因此中斷,提示用戶輸入。一般緩沖區大小為4K

 

我們敲入的回車鍵也是作為一個字符送到緩沖區的。也被看成一個字符,和字符1沒有什麼區別,只是作為字符輸入的結束符,當輸完回車後,則所有輸入的字符包括回車字符,一起被送入緩沖區,並執行此處等待的輸入函數。

 

#include <stdio.h>

 

int main()

 

{

 

//copyright  [email protected]

 

    char a,b;

 

    printf("pleaseinput a and b as the format: a=123\n");

 

   scanf("a=%c",&a);

 

    //fflush(stdin);

 

   scanf("b=%c",&b);

 

   printf("a=%c,b=%c",a,b);

 

    return 0;

 

}

 

問題20:運算符的優先級是什麼?

 

想到最基礎的運算符+-*/%,需要2個操作數,叫做雙目運算符;

 

相應還有單目的,三目的;

 

單目的有: 自減,自加;* & !還有 (int)(double)類型轉換,還有一個是sizeof

 

三目的有:?:, 常用在a>=b?a:b

 

還有移位,邏輯,關系,賦值運算符。

 

速記如下: 單目的肯定高了;

 

處長想當局長了(移位運算符<<>>),於是去找關系跑官(< ><= >= == !=),這種思維很符合現代中國人的邏輯(&& ||), 但是局長推托說不符合條件(?:)不能安排,給你個副局長干干(副職->賦值= += *=)

 

移位》關系》邏輯》條件》賦值

 

作者:drbinzhao的專欄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved