簡單學C——第五天

結構體

? 首先明確,結構體是一種構造的數據類型,是一種由多個數據類型如 int,char,double,數組或者結構體......組成的類型,現在告訴大家如何定義一個結構體。在定義int整型變量時,大家肯定都知道 int a; ??即定義了一個int 型變量,系統會自動分配 存int這么大的空間,但是對于結構體而言,它是由許多個不確定的類型組成的,所以在定義它的時候需要指明它是由哪些數據類型組成的.定義格式有多種,此處只說一種較為簡單的,定義格式如下.

struct 名字
{由哪些數據類型組成
};//注意末尾的分號一定要有

?

例如:我要定義一個學生,學生需要值得注意的屬性都有什么呢? 假設需要統計這名學生的 1學號,2姓名,3性別,4班級,5電話,6期末成績,此時為了簡潔且處理方便,就需要用到結構體

struct student //結構體名
{long long  number,tel; // 學號和電話int score; //成績char name[20],sex[4],clas[20]; //姓名,性別和班級
};

如上,就成功定義了一個關于學生信息的結構體,下面實現具體的輸入輸出操作

#include<stdio.h>
struct student
{long long  number,tel; // 學號和電話int score; //成績char name[20],sex[4],clas[20]; //姓名,性別和班級
};int main()
{struct student tiantian; //聲明了一個名為tiantian的變量,聲明可以與定義同時進行//現在可以輸入scanf("%lld%s%s%s%lld%d",&tiantian.number,tiantian.name,tiantian.sex,tiantian.clas,&tiantian.tel,&tiantian.score);//輸出printf("%lld %s %s %s %lld %d",tiantian.number,tiantian.name,tiantian.sex,tiantian.clas,tiantian.tel,tiantian.score);return 0;
}

運行結果:

?

或許在看了上面的之后,你會想,這也太麻煩了吧,我隨便定義6個獨立的變量,把它輸入再輸出出來,這樣效果是一樣的,而且代碼也會簡潔很多,不用在用每個變量時都再前面加上聲明結構體時聲明的變量。對于上面這個這樣想當然沒錯,不過我現在要說,請統計一下全班所有的人他們各自的 ?1學號,2姓名,3性別,4班級,5電話,6期末成績,這時就能體會到結構體的作用之大了,具體看下面的代碼。

?

#include<stdio.h>
struct student //結構體名,定義
{long long  number,tel; // 學號和電話int score; //成績char name[20],sex[4],clas[20]; //姓名,性別和班級
};int main()
{//假設此班的學生低于100名,聲明了一個名為stu的數組變量,//數組中的每一個元素都可以存放下一個學生的六個信息struct student stu[100];int i;//輸入,,用循環,j假設有續名學生for(i=0;i<5;i++)scanf("%lld%s%s%s%lld%d",&stu[i].number,stu[i].name,stu[i].sex,stu[i].clas,&stu[i].tel,&stu[i].score);//輸出for(i=0;i<5;i++)printf("%lld %s %s %s %lld %d\n",stu[i].number,stu[i].name,stu[i].sex,stu[i].clas,stu[i].tel,stu[i].score);return 0;
}

運行結果:

?

觀察上面的結果,輸入了五組數據,按下回車,輸出存儲在數組中的結果,每個學生一行,每個學生的信息之間空一格。當數字較小的時候或許還看不出優勢,可是如果當記錄的學生數據達到上千組,無疑,用結構體記錄學生數據是較好的方案。

?

比如我要在上述結構體中再添加一個信息,學生的出生年月日,此時應該怎么做呢??

可以用到結構體的嵌套,在c語言中,許多的東西都是可以嵌套的。修改上述結構體的定義可得:

#include<stdio.h>
struct date //表示日期的結構體
{int year,month,day;
};
struct student //結構體名,定義
{long long  number,tel; // 學號和電話int score; //成績char name[20],sex[4],clas[20]; //姓名,性別和班級struct date bri_day;      //將上面的表達日期的結構體套到學生結構體中表達學生的出生年月日
};
int main()
{struct student stu[100]; //聲明//內容
}

由上面的變化可以發現有一個問題,訪問年月日的時候怎么辦呢?當然也是層層訪問,如訪問學生的出生年,就應該是:stu[i].bri_day.year;另外可以看到我在主函數里面即main()

里面只申明了student結構體,并沒有聲明 date結構體,那么是不是就不用聲明date結構體呢?肯定不是的,注意..在student結構體的內部,我已經進行了date結構體的聲明,且聲明變量為bri_day.

當然,與結構體類似的類型還有共用體union和枚舉型enum,用法都大同小異,理解了結構體之后再看看他們就是小case了。

轉載于:https://www.cnblogs.com/stffer/p/4872960.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/397425.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397425.shtml
英文地址,請注明出處:http://en.pswp.cn/news/397425.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C語言二叉樹實驗報告流程圖,二叉樹的建立與遍歷實驗報告(c語言編寫,附源代碼).doc...

二叉樹的建立與遍歷實驗報告(c語言編寫,附源代碼).doc第 1 頁&#xff0c;共 9 頁二叉樹的建立與遍歷實驗報告級 班 年 月 日 姓名 學號_ 1實驗題目建立一棵二叉樹&#xff0c;并對其進行遍歷(先序、中序、后序)&#xff0c;打印輸出遍歷結果。2需求分析本程序用 VC 編寫&#…

三角函數泰勒展開C語言,第六章-函數作業 ---三角函數泰勒級數展開式計算正弦函數值...

E201_06_02_正弦函數題目要求&#xff1a;按照三角函數泰勒級數展開式計算正弦函數值&#xff1a;,直到最后一項的絕對值小于106解題思路&#xff1a;1. 輸入弧度2. 確定初始化值3. 求階梯函數代碼&#xff1a;public class E201_06_02_正弦函數 {public static void main(Stri…

Codeforces Round #325 (Div. 2) B. Laurenty and Shop 前綴和

B. Laurenty and Shop Time Limit: 1 Sec Memory Limit: 256 MB 題目連接 http://codeforces.com/contest/586/problem/BDescription A little boy Laurenty has been playing his favourite game Nota for quite a while and is now very hungry. The boy wants to make sau…

python學習感悟第3節

在繼列表的學習之后&#xff0c;進行了元組的學習。元組和列表功能相似&#xff0c;只是元組不能進行修改&#xff0c;所以元組又叫只讀列表。 下面列舉的是一系列的字符串操作&#xff1a; name.capitalize() #首字母大寫 name.count("a") #數列表中有幾個a name…

MyBatis_ibatis和mybatis的區別【轉】

1. ibatis3.*版本以后正式改名為mybaits&#xff0c;它也從apache轉到了google code下&#xff1b;也就是說ibatis2.*&#xff0c;mybatis3.*。2. 映射文件的不同ibatis的配置文件如下<?xml version"1.0" encoding"UTF-8" ?><!DOCTYPE sqlMapCo…

android gallery自動播放,可循環顯示圖像的Android Gallery組件

類型&#xff1a;源碼相關大小&#xff1a;23.6M語言&#xff1a;中文 評分&#xff1a;9.1標簽&#xff1a;立即下載第 4 頁 實現循環顯示圖像的Gallery組件實現循環顯示圖像的Gallery組件在本節將組出與循環顯示圖像相關的ImageAdapter類的完整代碼。讀者可以從中看到上一節介…

docker內程序如何讀取dockerfile和compose.yml中設置的環境變量

docker內程序如何讀取dockerfile和compose.yml中設置的環境變量 背景 compose文件中配置了服務A和服務B&#xff0c;其中B服務調用了A服務的接口&#xff0c;那么B的實現代碼中該如何調用A的服務呢&#xff1f; 解決 compose文件中&#xff0c;服務B的配置加入A的接口&#xff…

2015年10月13日

關于掙錢&#xff0c;我覺得&#xff0c;只要興趣所在&#xff0c;能把事做好&#xff0c;錢自己就會來。收入上不去&#xff0c;往往是做的事情就不在高收入的那個區間&#xff0c;寫程序很難出富翁。說實話&#xff0c;外圍一天的消費可能就是你工資的好幾倍&#xff0c;不用…

Spring Boot Servlet

上一篇我們對如何創建Controller 來響應JSON 以及如何顯示數據到頁面中&#xff0c;已經有了初步的了解。 Web開發使用 Controller 基本上可以完成大部分需求&#xff0c;但是我們還可能會用到 Servlet、Filter、Listener、Interceptor 等等。 當使用spring-Boot時&#xff0c;…

基于相關性分析系統性能瓶頸

測試的過程中&#xff0c;難免需要會遇到一些性能瓶頸&#xff0c;那么就要求我們能夠分析出性能瓶頸&#xff0c;并給出解決方案。性能瓶頸很抽象&#xff0c;我們可以通過數據使其具象。以我工作內容為例&#xff0c;服務器處理數據的能力是有限的&#xff0c;那么其處理的邊…

curl網站開發指南

curl網站開發指南 作者&#xff1a; 阮一峰 日期&#xff1a; 2011年9月 4日 我一向以為&#xff0c;curl只是一個編程用的函數庫。 最近才發現&#xff0c;這個命令本身&#xff0c;就是一個無比有用的網站開發工具&#xff0c;請看我整理的它的用法。 curl網站開發指南 阮一…

android格式化時間中文版,Android 仿微信聊天時間格式化顯示功能

本文給大家分享android仿微信聊天時間格式化顯示功能。在同一年的顯示規則&#xff1a;如果是當天顯示格式為 HH:mm 例&#xff1a;14:45如果是昨天,顯示格式為 昨天 HH:mm 例&#xff1a;昨天 13:12如果是在同一周 顯示格式為 周一 HH:mm 例&#xff1a;周一14:05如果不是同一…

java分享第十七天-01(封裝操作xml類)

做自動化測試的人&#xff0c;都應該對XPATH很熟悉了&#xff0c;但是在用JAVA解析XML時&#xff0c;我們通常是一層層的遍歷進去&#xff0c;這樣的代碼的局限性很大&#xff0c;也不方便&#xff0c;于是我們結合一下XPATH&#xff0c;來解決這個問題。所需要的JAR包&#xf…

Ubuntu12.04 內核樹建立

先查看自己使用的內核版本 linlin-virtual-machine:~$ uname -r 3.2.0-23-generic 如果安裝系統時&#xff0c;自動安裝了源碼。在 /usr/src 目錄下有對應的使用的版本目錄。 linlin-virtual-machine:~$ cd /usr/src linlin-virtual-machine:/usr/src$ ls linux-headers-3.2.0…

【mysql】Innodb三大特性之double write

1、doublewrite buffer&#xff08;mysql官方的介紹&#xff09; InnoDB uses a novel file flush technique called doublewrite. Before writing pages to the data files, InnoDB first writes them to a contiguous area called the doublewrite buffer. Only after the wr…

android crop 大圖,com.android.camera.action.CROP 實現圖片剪裁

APP 中選取圖片之后&#xff0c;有時候需要進行剪裁&#xff0c;比如頭像。以下是啟動代碼。在我的項目中&#xff0c;傳的是 filePath&#xff0c;所以我轉了一下&#xff0c;但實際上從相冊選擇圖片后&#xff0c;用 data.getData() 就可獲得 uri。Uri uri Uri.fromFile(new…

Who Gets the Most Candies? POJ - 2886 (線段樹)

按順時針給出n個小孩&#xff0c;n個小孩每個人都有一個紙&#xff0c;然后每個人都有一個val&#xff0c;這個val等于自己的因子數&#xff0c;如果這個val是正的&#xff0c;那就順時針的第val個孩子出去&#xff0c;如果是負的話&#xff0c;就逆時針的第val個孩子出去&…

javax.validation.ValidationException: Unable to find a default provider

2019獨角獸企業重金招聘Python工程師標準>>> [ERROR] [2016-11-16 13:58:21 602] [main] (FrameworkServlet.java:457) Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name org.springframewo…

第十章練習題----2

package com.Hanqi2;public class xitizhuhanshu {public static void main(String[] args) {// TODO Auto-generated method stubxiti tm new xiti("黑色","15寸");xitizhs tm3 new xitizhs("藍色","15寸");tm.Call("654"…

關于微信“被返回頁”在被返回時自動刷新

網上有很多這些文章&#xff0c;但我覺得沒一篇真正解決這個問題&#xff0c;倒是能給人一個解決方案的思路&#xff0c;對&#xff0c;就是posState事件。 要解決這個問題也不難&#xff0c;使用history的replaceState屬性替換當前網頁鏈接&#xff08;其實作用是在不增加hist…