日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2014.3.5-C语言学习小结

發(fā)布時間:2023/12/9 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2014.3.5-C语言学习小结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
知識點:1.結構體 struct2.聯合體 union3.枚舉4.結構、聯合與函數 =========================== 結構體思考:如果現在希望保存一個學生的信息,該如何保存sprintf "zhangsan:18:180”%s:%d:%d, name, height, agechar name[10][100]int age[10]int height[10]1.什么是結構體 struct結構體指的是一種數據結構,是c語言中復合數據類型的一種多種不同數據類型的集合2.結構體的作用結構體可以用來創(chuàng)建復雜的數據結構3.結構體的定義1)定義的語法!! 4.結構體成員聲明1)可以聲明各種類型的成員2)成員聲明時需要注意的地方練習:struct1.定義一個結構體,用來描述時間,具體說該結構體有三個成員,分別描述時分秒信息2.定義一個結構體,用來描述書本的信息,結構體成員包括名稱,單價,作者,出版社authorpricepublish5.聲明結構體類型變量和初始化. 非指針-> 指針6.結構體成員的訪問方式練習:1.初始化并輸出時間結構體的信息2.初始化并輸出書本結構體的信息3.從終端輸入書本的信息,并且輸出7.結構體數組練習:1.2本書的名稱等信息,然后按照每行一本書的信息輸出2.建立包含2個學生信息的登記表,其中包括學號,姓名,性別,住址和3門成績8.結構體指針變量1)指向結構體變量的指針int *p;struct stu *p;9.結構體的嵌套和指針成員1)結構體中嵌套結構體2)結構體中的成員為一個指針變量10.結構體和函數1)思考:結構體在函數傳遞時是否會和數組一樣進行地址傳遞2)結構體的參數傳遞方式,值傳遞和地址傳遞練習:0.實現一個函數,作用為輸入某個學生的學生信息scanf("%d", &s->id);1.實現一個函數,作用為輸出某個學生的學生信息2.實現一個函數,作用為遍歷所有的學生信息11.結構體的大小和內存對齊1)思考:為什么會出現相同機構體,大小不同的情況2)原因:大致可以分為2點1>平臺原因(移植):不是所有的硬件平臺都能訪問任意地址上的任意數據2>性能原因:經過內存對齊后,cpu的內存訪問速度大大提升3)對齊方式 1>和編譯器有關,一般32位系統默認以4個字節(jié)方式對齊2>本系統以結構體中最大元素的類型進行對齊 =========================== 聯合體ip協議192.168.1.1fe80::72cd:60ff:fe38:308%en0union{struct ipv4{//...};struct ipv6{//...};}; 1.什么是聯合體 union1)共享存儲空間2)同時只能使用某一種數據類型charint double2.作用1)當多個數據需要共享內存或者多個數據每次只取其一時,可以利用聯合體 3.聯合體的定義//和結構體操作一致4.聯合體成員聲明5.聯合體類型變量6.聯合體大小7.聯合體成員輸入和輸出 =========================== 枚舉enum size{S,M,L}S = 0M = 1L = 21.什么是枚舉 enum所謂枚舉是指將變量的值一一列舉出來,變量只限于列舉出來的值的范圍內取值。 2.枚舉的作用關心的不是它的值的大小,而是其表示的狀態(tài)3.枚舉變量的聲明4.枚舉變量的初始化和輸入輸出5.枚舉的本質1)用標識符表示的整數常量集合2)枚舉元素不是變量,而是常量,因此枚舉元素又稱為枚舉常量。因為是常量,所以不能對枚舉元素進行賦值。 3)枚舉元素作為常量,它們是有值的,C 語言在編譯時按定義的順序使它們的值為,1,2,…。 練習:1.定義一個表示衣服碼數的枚舉集合2.讓用戶選擇碼數,然后輸出該碼數6.使用枚舉需要注意的地方1)在一個程序中不允許出現同名的枚舉類型2)在一個程序中不允許出現同名的枚舉常量 ===========================

  

?字符串總結:

知識點:1.字符和字符處理函數2.字符串的本質和字符串輸入輸出函數3.字符串轉換函數4.常用字符串處理函數5.字符串查找函數6.字符串分割函數7.字符串替換8.常用字符串處理函數實現9.sscanf函數 ================================= 字符和字符處理1.復習ascii碼'0'~'9' 'a'~'z' 'A'~'Z'48 97 652.字符的本質 思考:sizeof(char) 和sizeof('a')1)字符的本質為一個int類型的ascii碼2)字符變量保存的是ascii碼,但是ascii碼只需要一個字節(jié)即可保存3.使用字符判斷函數isdigit 數字字符isalpha 字母(大小寫)isalnum 數字字符和字母islower 小寫字母isupper 大寫字母isspace 空格字符0 --表示測試不成立1 --表示測試成立練習:1.用戶輸入一個字符串,統計其中數字,字母,空格的個數 2.分別統計出大小寫字母的個數4.使用字符轉換函數tolower 大寫轉換為小寫int tolower(int c)toupper 小寫轉換為大寫int toupper(int c)練習: 1.將用戶輸入的字符串中的大寫字母轉換為小寫字母 2.將用戶輸入的字符串中的數字 小寫字母全部轉換為*號3.將用戶輸入的字符串中的其他字符轉換為?號其他字符不包括數字,字母,空格Hell+ worldHell? world ================================= 字符串 char s1[100] = "hello world";char *s2 = "hello world";0.字符串不以字符數組引用時為一個常量//棧char str[] = "hello";char str[12] = {'h', 'e','l','l', 'o','\0'};char str[100];//只讀數據段 char *p = "hello world";printf("%s", str); string scanf("%s"); 不包含空格的輸入scanf("%[^\n]"); 包含空格的輸入printf("hello world");char str[] = "hello world"char str[] = {'h','e','l','o','\0'};1.字符串的本質1)字符串本質為字符串常量"hello world"2.思考:sizeof('A')和sizeof("A")字符常量按照4個字節(jié)處理字符串常量為了節(jié)省內存空間,字符串中的所有字符均以char類型處理3.回憶char *str和char str[]區(qū)別NSString NSMutableString ================================= 字符串的輸入輸出1.字符串的輸入和輸出0)字符串輸入輸出函數1>回憶scanf獲取字符串scanf("%s");2>如何獲取帶空格的字符串%[^\n]3>puts string4>字符串輸出puts函數會在字符串輸出后添加換行符號printf("%s\n", str);1)字符串的輸入與溢出問題思考:字符數組在輸入時候的長度問題2)解決方法fgets用法:fgets(buf, 100, stdin);從標準輸入獲取指定長度的字符串,包含字符串結束符 ================================= 字符串轉換函數 100 + 200需求:現在用戶輸入一個算術表達式,要求得到對應的結果思考:如何將字符串中的字符數字轉換為真實的數字1.字符串轉換函數1)atol和atoi和atof函數atof返回double2)實現atoi函數(支持正負數)示例:實現個位數的負數轉換練習:實現n位數的的正負數轉換3)strtol函數 1010 0x123456字符串中不能出現和當前進制相悖的數據1>atoi的增強版 2, 8, 10, 162>函數說明:將指定字符串按照base的進制方式轉換為10進制base范圍為2~36==================================== 字符串常用函數需求:用戶需要知道輸入的字符數的長度1.字符串長度計算函數1)strlen函數使用 "hello world"while (str[i] != '\0'){cnt++;i++;}2)思考:strlen和sizeof的區(qū)別 3)思考:strlen長度的大小需求:用戶需要我們在軟件中實現選中字符的復制功能2.字符串拷貝函數strcpy 會將src內的所有內容拷貝到dst數組中,包括\0strncpy 思考:strncpy拷貝后是否會包含結束符練習:實現一個字符串拷貝模塊需求:用戶需要在軟件中實現一個字符串的查找功能3.單個字符的查找strchr 查找字符第一次出現的地址 strrchr 查找字符最后一次出現的地址練習: 輸入一個字符串,再輸入一個字符查找并打印第一次出現和最后一次出現的字符并輸出該字符的地址4.字符串查找到strstr,strcasestr,strnstr 需求:用戶需要輸入一個名字,判斷該用戶是否存在5.字符串比較函數strcmp,strcasecmpstrncmp,strncasecmpint strncmp(const char *s1, const char *s2, int n);1)比較順序:s1是否和s2相同2)比較結果:0為相同,非0為不同,并且返回對應的差值思考:非0的結果表示什么3)思考:當s1比s2長度長的話會如何返回s1最后一個字符和s2結束符的差練習:0.編寫一個模擬登陸程序,輸入用戶名和密碼,判斷用戶名和密碼是否和所設定的一致1.編寫一個驗證程序,判斷用戶輸入的字符串是否以qianfeng開頭需求:用戶現在需要將輸入的兩個字符串組合成一個完整的字符串6.字符串連接strcat,strncat練習:先輸入自己的姓,再輸入名字,最后將連接好的名字輸出需求:用戶現在需要按照一定的格式分割一個字符串7.字符串分割函數 1)strtok使用1>要分割的內容2>分割符,分割標記2)如何獲取下一個字符串3)注意0>不能截取字符串常量1>截取后的長度2>如果在下一次截取前截取另外一個字符串會如何練習:1.順序輸出分割后的所有字符串2.查找字符串中的最長單詞,并且輸出該單詞需求:現在用戶需要實現一個文本的查找替換功能8.單個字符替換strchr9.字符串替換strstr和strncpy聯合實現hello world===================================== 常用字符串處理函數的實現1.字符處理函數的實現2.字符串處理函數的實現strlenint mystrlen(const char *str);strcpyvoid mystrcpy(char *dst, const char *src);strchrchar *mystrchr(char *str, int c);strrchr char *mystrrchr(char *str, int c);strcmpint mystrcmp(const char *s1, const char *s2)strcatvoid mystrcat(char *s1, const char *s2);====================================“11:59:59” sprintf和sscanf%[^'|']需求:用戶需要將每個用戶的信息按照以下格式輸出1.字符串格式化函數1)sprintf使用2)printf和sprintf對比int sprintf(const char *s, const char *fmt, …)練習:1.按照以下格式輸出時間年-月-日 時:分:秒 需求:用戶需要將剛才的用戶信息重新解析為單個的屬性2.字符串格式化讀取函數1)sscanf使用集strtok和atoi等函數于一體2)scanf和sscanf對比 ====================================超大數相加 “123” + “123” = “246” 2 = ’2‘ “123423413412374891374238476123846183474183” “123423413412374891374238476123846183474183”

  

?位操作總結:

?

知識點:1.位運算符2.位移運算符1.將指定位設置為1 2.將指定位設置為0 3.獲取指定位的內容========================== 復習二進制1.二進制轉換 10--> /2 取余數 10102.原碼,反碼,補碼-1 0xffffffff %d %#x %#o3.二進制高位和低位0000 00014.二進制輸出函數1010 ========================== 位操作1.什么是位操作位操作是程序設計當中對位模式按位或二進制數的一元和二元操作. 在許多古老的微處理器上, 位運算比加減運算略快, 通常位運算比乘除法運算要快很多. 在現代架構中, 情況并非如此:位運算的運算速度通常與加法運算相同(仍然快于乘法運算).2.作用1)加快某些算術元素操作,例如乘法和除法使用位移效率較高2)標志位設置 ========================== 位運算符 1.位運算符 << , >>, &, |, ~, ^ 1)對比邏輯運算符 &&, ||, !2.位與操作 &1)按位&運算符的運算方法按順序,每一位進行比較,如果兩位都為1,結果為1,相反為02)十六進制表示二進制4)作用:1.清空某一位2.獲取某一位示例: 0&0, 1&0, 0&1, 1&1-1 & 1 練習:1.手工運算,然后程序驗證:1010 1100 & 1110 0111 164—>0xa41110 1101 & 1010 0101 165->0xa5 3.位或操作 |1)按位|運算的運算方法對應位只要一個為1,結果為1,如果都為0,結果為0練習:1.手工運算,然后程序驗證:1010 1100 | 1110 0111 2391110 1101 | 1010 0101 237& 0 10 0 01 0 1| 0 10 0 11 1 14.位取反 ~ 1)位取反運算方法所有位按位取反2)注意取反結果練習:手工運算,然后程序驗證:1.~11011111 0xffffff202.~-15.位異或(xor) ^ 1)運算方法對應位不同為1,相同為0^ 0 10 0 11 1 0練習:手工運算,然后程序驗證1. 1 ^ 1, 1 ^ 2, 1 ^ 32. -1 ^ 10兩數交換的位操作版本 =========================== 位移操作 2^n |0000 0001| 1.左移運算符 << 1)運算方式高位移出位舍棄,低位補0 示例:1111 0001 << 1練習: 手工運算,然后程序驗證1. 1 << 0, 1 << 1, 1 << 2, 1 << 32. -1 << 11 << 31|0000 0010| |1111 1000||0000 0001| |1111 1100|0|0000 0000|1 |1111 1110|000000 0001 >> 1 1 / 2 1%22.右移運算符 >>1)運算方式1>無符號右移 unsigned 高位補02>有符號右移 -2 2移出位舍棄,高位補符號位練習:手工運算,然后程序驗證1. 1 >> 0,1 >> 1, 4 >> 1, 8 >> 12. -10 >> 1-5 >> 1======================================== 應用示例:1.指定位清0思考:如何設置第n位為0n & ~(1 << num)練習:定義一個函數,作用為設置指定為0函數原型:int set0(int n, int num)2.指定位設置為1思考:如何設置第n位為1n | (1 << num)練習:定義一個函數,作用為設置指定位為1函數原型:int set1(int n, int num)3.獲取某一位的值n >> num & 1 00000000思考:如何可以獲取指定位的值練習:定義一個函數,作用為獲取某一位的值函數原型:int get_bits(int n, int num)4.二進制轉換函數思考:如何利用位操作可以獲取到一個數的二進制函數原型:void binshow(unsigned int n, int size) ========================================= 擴展1.如何循環(huán)左移或者右移int的所有位 1 2 3 4 55 1 2 3 4 unsigned1010010110102.利用位操作實現簡單的加密解密功能^

  

轉載于:https://www.cnblogs.com/firstrate/p/3583243.html

總結

以上是生活随笔為你收集整理的2014.3.5-C语言学习小结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。