2019年12月9日
- 運算符(可是要返回值的!!!!)
1)算術運算符(=(賦值)、+(加法)、-(減法)、-和+(符號運算符)、?(乘法)、/(除法)、%(取模))。進行算術運算。返回計算結果!!!!優先級與數學優先級一樣。涉及到變量的類型轉換。
 賦值運算符拓展+=、-=、*=、/=、%=。
 2)關系運算符(>、>=、<、<=、!=、==)進行大小比較,返回真1或假0。具有返回值!!!!!
 3)邏輯運算符(&&(且)、||(或)、!(非))。根據成員間的關系,進行邏輯判斷!返回真1假0值。
 4)條件運算符(?:)。三目運算符。(a>b)?a:b,真則返回第一個數a,假則返回第二個數b。
 5)位運算符
 (1)位邏輯運算符(~(按位取反)、&(按位與)、|(按位或)、^(按位異或))用法:掩碼、打開位、關閉位、轉置位、查看一位的值。
 (2)移位運算符(<<(左移運算符)、>>(右移運算符)。
 6)其他運算符。
 (1)sizeof運算符,返回unsigned char類型size_t
 (2)逗號運算符(,)。一、保證被它分開的表達式按從左到右的次序進行計算;二、整個逗號表達式的值是右邊成員的值。注意,依然是有返回值的,看你自己賦不賦了!例如x=(y=3,(z=++y+2)+5);,x=11。又例如,a=249,666;那么a等于666.
 (3)自增運算符和自減運算符,前綴,使用前值已變化,再使用;后綴,先使用,才變化。
- C語言的保留標識符34?32?
 1)auto、const、extern、enum、restrict、static、volatile。7
 2)char、double、float、int、long、register、short。7
 3)unsigned、signed。2
 4)typedef、struct、union。3
 5)break、case、continue、default、do、else、for、goto、if、return、switch、while。12
 6)inline、void。2
 7)sizeof。1
- 不確定循環與計數循環,條件循環。
 1)必須初始化一個計數器;
 2)計數器與某個有限的值比較;
 3)每次執行循環,計數器的值都要遞增。
 while、for等大同小異。
 不確定循環:交互式有關。
 計數循環:計數器變量。
 條件循環:直到滿足某條件即可。
- C語言控制語句:循環、分支與跳轉
 嵌套循環;
 循環輔助手段:continue和break
 多重選擇:switch和break
 goto語句
- 字符輸入輸出和輸入確認
 (1)單字符I/O:getchar()和putchar()。
 緩沖區
 1)為什么需要緩沖區?將若干字符作為一個塊傳輸比逐個發送這些字符耗費的時間少。其次,可以使用鍵盤更正功能來修改錯誤。
 2)沒有優劣之分,緩沖輸入與非緩沖輸入具有各自的用途。在游戲中,需要立即執行某個命令,不需要緩沖區。
 (2)關鍵概念
 C程序將輸入視為一個外來字節流。getchar()函數將每個字節解釋為一個字符編碼。scanf()函數以同樣的方式看待輸入,但在其轉換說明符的指導下,該函數可以將字符轉換為數值。許多操作系統都提供重定向,這就使您能夠用文件代替鍵盤作為輸入,或用文件代替顯示器輸出。
 1)輸入重定向
 2)輸出重定向
- 字符串和字符串函數
 (1)字符串輸入
 1)創建存儲空間
2)輸入函數
 gets()函數
gets()函數的構造
char *gets(char * s) {...return(s); }fgets()函數
#include<stdio.h> #define MAX 81 int main(void) {char name[Max];char * ptr;printf("Hi,what's your name?\n");ptr=fgets(name,MAX,stdin);//從鍵盤上讀數據時,可以使用stdin作為該參數)printf("%s?Ah!%s!\n",name,ptr);return 0; }gets()的一個不足之處是它不檢查預留存儲區是否能夠容納實際輸入的數據。多出來的字符串簡單地溢出到相鄰地內存區。fgets()函數改進了這個問題,它能夠讓你指定最大讀入字符數。由于fgets()是為文件I/O而設計,在處理鍵盤輸入時就不如gets()那么方便。
 scanf()函數
 scanf()和gets()主要的差別在于它們如何決定字符串何時結束。
 scanf()更基于獲取單詞而不是獲取字符串,而gets()函數,正如你所看到,會讀取所有的字符,直到遇到第一個換行符為止。
(2)字符串輸出
 puts()
 注意每個字符串都是單行顯示。與printf()不同,puts()顯示字符串時自動在其后添加一個換行符。
 fputs()
 fputs()函數是pets()的面向文件版本。
printf()
 如同puts()一樣,printf()需要一個字符串地址作為參數。printf()使用起來沒有puts()那么方便,但是它可以格式化多種數據類型,因而更通用。區別之一就是printf()并不在新行上輸出每一個字符串。相反,你必須要另起一行。
- 自定義字符串輸入/輸出函數
不一定要使用標準C庫的函數進行輸入和輸出,如果不具備或者不喜歡它們,你可以自行定義,在getchar()和putchar()的基礎上建立自己的函數。
#include<stdio.h> void put1(const char * string) {while(*string!='\0')putchar(string[i++]); }- 字符串函數
strlen()
 返回字符串長度
 strcat()
 接受兩個字符串參數。它將第二個字符串的一份拷貝添加到第一個字符串的結尾,從而使第一個字符串成為一個新的組合字符串,第二個字符串并沒有改變。
 strncat()
 strcat()函數并不檢查第一個數組是否能夠容納第二個字符串。如果沒有為第一個數組分配足夠大的空間。多出來的字符溢出到相鄰存儲單元時就會出現問題。
 strcmp()
 把用戶的響應和一個已有的字符串進行比較。兩個字符串相同時,返回0。
兩個字符串比較返回值。
strcmp("A","A") is 0 strcmp("A","B") is -1 strcmp("B","A") is 1 strcmp("C","A") is 2 strcmp("Z","a") is -7 strcmp("apples","apple") is 115ASCII碼相減。
 strncmp()
 strcmp()函數比較字符串時,一直比較到找到不同的相應字符,搜索可能要進行到字符串結尾處。而strncmp()函數比較字符串時,可以比較到字符串不同處,也可以比較完由第三個參數指定的字符數。
strcpy()
 復制字符串,可以使用strcpy()函數
 strncpy()
 strcpy()和gets()函數同樣都有一個問題,那就是都不檢查目標字符串是否容納的下源字符串。復制字符串使用strncpy()比較安全,它需要第三個參數來指明最大可復制的字符數。
sprintf()
 sprintf()函數是在stdio.h而不在string.h里聲名。它的作用和printf()一樣,但是它寫到字符串里而不是寫到輸出顯示。因此,它提供了把幾個元素組合成一個字符串的一種途徑。sprintf()的第一個參數是目標字符串的地址,其余的參數和printf()一樣:一個轉換說明符字符串,接著是要寫的項目列表。
 總結
 (1)字符串輸入
 1)創建存儲空間
 2)gets()函數
 3)fgets()函數
 4)scanf()函數
 (2)字符串輸出
 1)puts()函數
 2)fputs()函數
 3)printf()函數
 (3)利用putchar()和getchar()函數自定義字符串輸入/輸出函數
 (4)字符串函數
 1)strlen()函數
 2)strcat()函數
 3)strncat()函數
 4)strcmp()函數
 5)strncmp()函數
 6)strcpy()函數
 7)strncpy()函數
C字符串是一串以空字符’\0’結束的char類型值。字符串可以放在字符數組中,也可以用字符串常量表示。在字符串中,字符串(除空字符)是被包含在雙引號中的。編譯器為它加上空字符。因此,存儲在“joy”時有4個字符:j、o、y和\0。strlen()函數測得字符串長度不包括空字符。
 函數利用指向字符串第一個字符的指針來標識它所作用的字符串。通常,相應的實際參數可以是數組名、指針變量或雙引號中的字符串。這些情況下,傳遞的都是第一個字符的地址。一般來說,并不需要傳遞字符串的長度,因為可以根據標志結束的空字符來確定字符串結束。
 gets()和puts()函數分別讀取一行輸入和進行一行輸出。都是stdio.h里的函數
總結
以上是生活随笔為你收集整理的2019年12月9日的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 展望未来电力行业发展
- 下一篇: anaconda离线环境迁移(舍弃繁文缛
