C:结构体
構造類型:就是有基本的類型組成的
1.結構體 ?結構體是一種自定義的數據類型 和 int float 是一樣的都可以定義變量?
? 數組 只能存放一種類型的容器 ? ?
? 結構體 ? 可以存放多種數據類型? 相對于數組更加的完整
2.一個結構體可以被作為另一個結構體中的普通變量 ??
3.結構體的聲明(數據類型的聲明)
/*? ? struct 結構體名 {
? ? ? ? char name[20];
? ? ? ? int age; //結構體成員? 結構體成員之間是要用分號隔開 ? 在結構體內部定義變量的時候僅僅是聲明,不能賦值
? ? }; //分號是結構體聲明的結束標示符,在聲明的時候不能省略
?*/
聲明一個結構體變量(變量的聲明)
? ? //定義一個結構體變量
? ? struct student stu1 ={"lee", 18,'m',90};
struct student{//學生的結構體char name[20];int age; // char stuTele[11];char gender;//性別float score;};struct point{//點的結構體float x;//橫坐標float y;//縱坐標 };struct rect{//長方形結構體float width;//寬度float height;//長度float x;//x坐標float y;//y坐標 };struct round{//圓圈Point p;//一個結構體可以被作為另一個結構體中的普通變量float r;};struct cube{//定義一個立方體float leight;//長float width;//寬度float height;//高度 }; int main(int argc, const char * argv[]) {//main() 上面的都是 全局變量//結構體類型 struct + 結構體名//定義一個結構體變量struct student stu1 = {"lee", 18,'m',90};struct point p1 = {23, 12.25};struct rect r1 = {23,34};struct round round1 = { {12.5,15.6}, 12.5};//這里要注意一下struct cube cube1 = {12.5,3.4,23.5};}//給結構體的類型重命名? typedef ? ? ? ? ??
? ??typedef struct student Student;
// 結構體重命名的第二種形式typedef struct data{int year;int mounth;int day;}Day;//直接在定義的時候就重命名了 新起的名字與重命名的是等同的 都可以用Day d1 = {2015,07,31};// 我們使用重命名的名字進行定義變量Student stu1 = {"lee", 18,'m',90}; // 結構體成員的訪問 結構體變量.成員變量名//獲取stu 的姓名,性別,年齡,分數//給字符串賦值的時候要用到 strcpy()函數strcpy(stu1.name, "Kitty");//給stud1的姓名改為kittyprintf("%s \n",stu1.name);stu1.age;stu1.name;stu1.gender;stu1.score; //獲取stu1的基本信息; 輸出其信息//結構體的訪問是通過 變量名.成員變量名printf("name = %s age = %d gender = %c score = %.2f",stu1.name,stu1.age,stu1.gender,stu1.score); struct point p ={23.3,45.7};//賦值的第一種方式 單個成員逐個賦值p.x = 12;p.y = 13;//賦值的第二種方式 整體結構體賦值struct point p1 = {120,23};p = p1;printf("%.2f %.2f \n",p.x,p.y);? ??//對于整體賦值的小技巧 ? 數組作為一個結構體的成員時,就可以直接給數組賦值,對比之前數組是不能直接賦值的
?
//對于整體賦值的小技巧 數組作為一個結構體的成員時,就可以直接給數組賦值,對比之前數組是不能直接賦值的printf("%.2f %.2f \n",p.x,p.y);printf("%.2f %.2f \n",p.x,p.y);//語句要寫在函數的內部//賦值技巧struct one{int a[10];int num;};//數組作為結構體成員變量時,可以通過結構體的整體賦值為數組的每個元素賦值struct one s1 ={{1,2},3};struct one s2 ={{12,13},3};s1 = s2;for (int i = 0; i < 2; i++) {printf("%d \t",s1.a[i]);}?
? ??minAgePer = p1.age > p2.age ? p1 : p2;//這里是保存的是最大年齡的人的整體信息
? ? minAgePer = minAgePer.age > p3.age ? minAgePer : p3;
?下午筆記
struct teachr{char name[20];//分號隔開char gender;int age; // float height; };//定義一個有5個元素的結構體數組struct teachr Tea[5] ={//存有5個結構體的數組 結構體數組{"AA",'m',22},//結構體數組元素 以逗號 隔開{"鄧超",'m',19},{"王大治",'m',14},{"陳姐",'w',12},{"XXX",'w',21},//這里的逗號寫不寫無所謂 };int b = Tea[3].age;struct teachr tea1 = Tea[0];for (int i = 0; i < 5; i++) {printf("name is %s ,age is %d, sex is %c \n",Tea[i].name,Tea[i].age,Tea[i].gender);}結構體的內存空間:結構體的內存對齊方式--------(結構體所占內存空間大小 是以成員中最大數據類型為基本單位分配的) ?
*****? ?
struct test{char m[10];//如果把這一行放最后面 打印為 16double a;//double 8個字節float b;// int 、float 4個字節//為了節省存儲空間我們把定義的時候把所占內存最大的放最上面// char m[10]; double a; float a; 順序不同的放看結果 };printf("%lu \n",sizeof(struct test));分配的空間 前面的必須是后面的整數倍
?
?實戰:
1.創建一個 Size 結構體,包含 width,height 兩個變量。 并寫以下函數: 函數 1,判斷兩個 size 是否等寬。 函數 2,判斷兩個 size 是否在等高。 函數 3,判斷兩個 size 是否相等2.創建一個 Point 結構體,包含 x,y 兩個變量。 并寫以下函數: 函數 1,判斷兩個點是否在一條水平線上。 函數 2,判斷兩個點是否在一條垂直線上。 函數 3,判斷兩個點是否相等3.某班有 5 個學生,三門課。分別編寫 3 個函數實現以下要求: (1) 求各門課的平均分; (2) 找出有兩門以上不及格的學生,并輸出其學號和不及格課程的成績; (3) 找出三門課平均成績在 85-90 分的學生,并輸出其學號和姓名 4.創建一個Rect結構體,包含origin,size兩個變量。其中origin是Point類型的,size是Size類型的。 并寫以下函數: 函數1,判斷兩個Rect是否相交。 函數2,判斷兩個Rect是否包含某個Point。 函數3,判斷一個Rect是否在另外一個Rect中。 ====== 耶穌有13個門徒, 循環開始報數, 報道3的人去死, 最后存活的就是叛徒,找到叛徒的原來位置 有A,B,C,D四個候選人, 有n個人對其進行投票, 按票數從高到低進行輸出. 好的題目?
?
轉載于:https://www.cnblogs.com/benpaobadaniu/p/4691595.html
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
- 上一篇: Web性能优化之图片优化
- 下一篇: views display a summ