主頁 > 軟體設計 > 【C語言基礎學習筆記】一、初始C語言(2)

【C語言基礎學習筆記】一、初始C語言(2)

2021-04-05 10:40:38 軟體設計

C語言基礎學習筆記內容簡單說明:初始c語言部分只是大概了解一下c語言的內容,很多地方不會深入探究,因為后面的章節會進行詳細的講解,
說明:我是一個初學c語言的小白,很多地方都不是很理解,所以就會自己動手敲代碼進行相應的推理驗證,希望可愛的你在看到這些步驟時,不要嫌棄我啰嗦,(比如吐槽:這作者咋這樣呀,這么簡單的還要敲代碼驗證,真菜呀!…我:好吧,我不裝了,我攤牌了,我確實菜,真的菜,咋滴啦,還不允許初學者菜呀!)
內心獨白:上一篇文章發布后,沒想到閱讀和支持的小可愛那么多,真的是非常感謝大家!也希望我的博客文章可以真正的幫助到每一個還在編程路上探索,摸爬滾爬…摸爬勒塔…摸爬滾摸…滾塔…滾勒…摸了摸…摸它滾塔…摸爬!摸爬滾塔!…摸爬滾打,(這普通話可真燙嘴QAQ…)


4.常量

c語言中的常量分為以下4種:
字面常量、const修飾的常變數、#define定義的識別符號常量、列舉常量
①字面常量:1 100 3.14 22 A 等等…
②const修飾的常變數
變數是可以變化的值,但是被const修飾后,這個變數就不能變了
在這里插入圖片描述
在這里插入圖片描述
雖然被const修飾的變數叫做常變數,具有常屬性,但其本質仍然是變數,而不是常量,所以不能放到陣列的方括號[]中
在這里插入圖片描述
在這里插入圖片描述
③#define定義的識別符號常量 舉例: #define Max 10
在這里插入圖片描述
④列舉常量 列舉:一一列舉 例如 性別:男、女、保密
三原色:紅、黃、藍 星期:周一……周日
列舉關鍵字 enum
例如

enum Sex
{
	male,
	female,
	secert
};

其中male,female,secert就是列舉常量,列舉常量實際是有值的,我們可以將其值列印出來如下: enum Sex s 是列舉型別變數
在這里插入圖片描述


5.字串 + 轉義字符 + 注釋

①字串
“hallo world” 這種由雙引號引起來的一串字符稱為字串字面值,簡稱字串
“” – - 空字符
注意:字串的結束標志是一個 \0的轉義字符,在計算字串長度的時候\0是結束標志,不算做字串的內容
用陣列存盤字串的時候,陣列的長度需要將\0計算上,只是單獨計算字串長度時不計算\0

int main()
{
	char arr1[] = "abc";
	char arr2[] = { 'a','b','c' };
	printf("%s\n", arr1);
	printf("%s\n", arr2);
	return 0;
}

在這里插入圖片描述

#include<stdio.h>
#include<string.h>
int main()
{
	char arr1[] = "abc";
	char arr2[] = { 'a','b','c' };
	int a1 = 0;
	int a2 = 0;
	a1 = sizeof(arr1) / sizeof(arr1[0]);
	a2 = sizeof(arr2) / sizeof(arr2[0]);
	printf("%s\n", arr1);
	printf("%s\n", arr2);
	printf("a1 = %d\n", a1);
	printf("a2 = %d\n", a2);
	printf("Length of arr1 :%d\n", strlen(arr1));
	printf("Length of arr2 :%d\n", strlen(arr2));//沒有結束標志,隨機值
	return 0;
}

在這里插入圖片描述
用F10(或Fn + F10)除錯,打開監視視窗查看陣列arr1,arr2
在這里插入圖片描述
這里我們看到’a’前面有一個值97,這個是a的ASCII值
在這里插入圖片描述
②轉義字符
轉義:轉變原本含義 使其具有其他含義 一個轉義字符的長度為1,例如\t 長度為一,不能計算成2,另外\0不計算到字串的長度當中,僅當作字串結束的標志,

#include<stdio.h>
int main()
{
	printf("c:\code\test,c\n");
	return 0;
}

在這里插入圖片描述
除錯:轉義
在這里插入圖片描述
在這里插入圖片描述
③注釋
注釋有兩種風格
/* */ c語言風格 缺陷:不能嵌套注釋
// c++語言風格 (推薦)


6.選擇陳述句

在我們的生活中,會有各種各樣的選擇,不同的選擇,往往帶來不同的結果,
在我們的人生中,也會遇到各種各樣的選擇,不同的選擇會決定我們今后不同的人生軌跡,

#include<stdio.h>
//選擇陳述句,人生會遇到各種各樣的選擇,選擇不同,人生道路也會有所不同
int main()
{
	int a;
	printf("你會好好學習編程嗎?:(1:會 0:不會)>>\n");
	scanf("%d", &a);
	if (a == 1)
		printf("好offer\n");
	else
		printf("loser\n");
	return 0;
}

在這里插入圖片描述
if (條件判斷) { 執行陳述句 }
else { 執行陳述句 }


7.回圈陳述句

很多事情需要一直去做,比如老師需要日復一日,年復一年去教學,學習編程需要每天都去敲代碼,

#include<stdio.h>
int main()
{
	int line = 0;
	while (line <= 100000)
	{
		printf("敲一行代碼\n");
		line++;
	}
	if (line > 100000)
		printf("你可以得到一個好offer\n");
	return 0;
}

在這里插入圖片描述
while(條件判斷)
{
回圈體
}


8.函式

簡化代碼,代碼復用,分為自定義函式、庫函式

int Add(int x, int y)
{
	int z = x + y;
	return z;
}
int main()
{
	int a = 10;
	int b = 30;
	int sum = 0;
	int num1 = 100;
	int num2 = 200;
	sum = Add(a, b);
	printf("sum = %d\n", sum);
	sum = Add(num1, num2);
	printf("sum = %d\n", sum);
	return 0;
}

在這里插入圖片描述
函式回傳型別 函式名(函式引數型別 函式引數1,函式引數型別 函式引數2…)
{
函式體
}


9.陣列

用于存放一組相同資料型別的資料變數,陣列的下標[]從0開始計算,a[0]代表第一個元素,具有n個元素的陣列,其下標最大為n - 1,

#include<stdio.h>
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int i = 0;
	while (i < 10)
	{
		printf("%d ", arr[i]);
		i++;
	}
	return 0;
}

在這里插入圖片描述


10.運算子

(1)算術運算子
加法運算子 + 雙目運算子 使兩個數相加 1 + 2 = 3
減法運算子 - 雙目運算子 使兩個數相減 2 - 1 = 1
乘法運算子 * 雙目運算子 使兩個數相乘 2 * 3 = 6
除法運算子 / 雙目運算子 使兩個數相除,得到商 5 / 2 = 2
取模運算子 % 雙目運算子 使兩個數相除,得到余數 5 % 2 = 1
/ 兩端均為整數的時候,執行整數除法;
兩端只要有一個是小數,則執行小數除法,

#include<stdio.h>
int main()
{
	int a = 2;
	int b = 5;
	int c = b % a;
	printf("a+b = %d\n", a + b);
	printf("b-a = %d\n", b - a);
	printf("a*b = %d\n", a * b);
	printf("b/a = %d\n", b / a);
	printf("b%%a = %d\n", c);
	return 0;
}

在這里插入圖片描述
(2)移位運算子:針對的是二進制的操作
左移:二進制左邊丟棄,右邊補0
例如:十進制的5 二進制為00000000 00000000 00000000 00000101
左移2位后變成:00000000 00000000 00000000 00010100 十進制為20
右移:跟左移類似,但是要注意右移后其正負號不變,也就是二進制最高位不變
十進制的5 二進制為00000000 00000000 00000000 00000101
右移2位后變成:00000000 00000000 00000000 00000001 十進制為1

#include<stdio.h>
int main()
{
	int a = 5;
	int b = 0;
	int c = 0;
	b = a << 2;//a本身的值并不會變
	c = a >> 2;
	printf("a<<2 = %d\n", b);
	printf("a>>2 = %d\n", c);
	return 0;
}

在這里插入圖片描述

(3)位運算子 二進制運算子
c語言中0表示假,非0表示真
按位與 & 011 & 101 = 001 即3 & 5 = 1
按二進制位,一假則假,二真才真
按位或 | 011 & 101 = 111 即3 & 5 = 7
按二進制位,一真則真,二假才假
按位異或 ^ 011 & 101 = 110 即3 & 5 = 6
按二進制位,相同為假,相異為真

#include<stdio.h>
int main()
{
	int a = 3;
	int b = 5;
	printf("a&b = %d\n", a & b);
	printf("a|b = %d\n", a | b);
	printf("a^b = %d\n", a ^ b);
	return 0;
}

在這里插入圖片描述
(4)賦值運算子
賦值(等于) = 例如:a = 4; 給a賦值為4
[== 判斷是否相等 注意區分 = 與 == ]
加等于 += 例如 a += 3 等價于 a = a + 3
減等于 -= 例如 a -= 3 等價于 a = a - 3
乘等于 *= 例如 a *= 3 等價于 a = a * 3
除等于 /= 例如 a /= 3 等價于 a = a / 3
按位與等于 &= 例如 a &= 3 等價于 a = a & 3
按位異或等于 ^= 例如 a ^= 3 等價于 a = a ^ 3
按位或等于 |= 例如 a |= 3 等價于 a = a | 3
按位左移等于 >>= 例如 a >>= 3 等價于 a = a >> 3
按位右移等于 <<= 例如 a <<= 3 等價于 a = a << 3

#include<stdio.h>
int main()
{
	int a = 5;
	printf("a = 3--->%d\n", a = 3);
	printf("a += 3--->%d\n", a += 3);
	printf("a -= 3--->%d\n", a -= 3);
	printf("a *= 3--->%d\n", a *= 3);
	printf("a /= 3--->%d\n", a /= 3);
	printf("a &= 3--->%d\n", a &= 3);
	printf("a ^= 3--->%d\n", a ^= 3);
	printf("a |= 3--->%d\n", a |= 3);
	printf("a = 9--->%d\n", a = 9);
	printf("a >>= 3--->%d\n", a >>= 3);
	printf("a <<= 3--->%d\n", a <<= 3);
	return 0;
}

在這里插入圖片描述
(5)單目運算子
邏輯反操作 ! c語言中0為假 一切非0為真 對0進行邏輯反操作!0 = 1(真 固定值1) 對非0進行邏輯反操作 !2 = 0(假)
負值 - 得到負數 如 - 2 = -2 (負2) - ( - 2) = 2
正值 + 例如 2 實際為 + 2 只是一般 + 號省略了
取地址 & 得到一個變數相應的地址編碼
型別長度 sizeof()得到一個變數或者型別的長度,以位元組為單位
用sizeof來計算陣列元素個數 sizeof(a) / sizeof(a[0])
按位取反 ~對一個數的二進制按位取反
例如 1011 按位取反后為 0100 ,資料在計算機中存盤的是二進制的補碼,使用的是原碼 原碼按位取反(符號位不變) 得到反碼 反碼 + 1得到補碼 補碼 - 1 得到反碼 反碼按位取反(符號位不變)得到原碼
前置、后置-- --自減
前置、后置++ ++自增
解參考運算子 * 間接訪問運算子
強制型別轉換 (型別) 例如:(int)強制轉換為int型別 (char)強制轉換為char型別

#include<stdio.h>
		int main()
{
	int a = 2;
	double b = 4.11;
	int c = 97;
	printf("!a = %d\n", !a);
	printf("-a = %d\n", -a);
	printf("+a = %d\n", +a);
	printf("&a = %d\n", &a);
	printf("sizeof(a) = %d\n", sizeof(a));
	printf("~a = %d\n", ~a);
	printf("++a = %d\n", ++a);
	printf("a++ = %d\n", a++);
	printf("--a = %d\n", --a);
	printf("a-- = %d\n", a--);
	printf("*(&a)= %d\n", *(&a));
	printf("(int)b = %d\n", (int)b);
	printf("(char)a = %c\n", (char)c);
	return 0;
}

在這里插入圖片描述
(6)關系運算子
大于 > 用于判斷或測驗 大于
大于等于 >= 用于判斷或測驗 大于等于
小于 < 用于判斷或測驗 小于
小于等于 <= 用于判斷或測驗 小于等于
是否不相等 != 用于判斷或測驗 不相等
是否相等 == 用于判斷或測驗 相等
(7)邏輯運算子
邏輯與 && (運算式1) && (運算式2) 同真為真一假則假 舉例(1 < 2) && (2 > 3) 為假 (1 < 2) && (2 < 3) 為真
邏輯或 || (運算式1) || (運算式2) 同假為假一真則真 舉例(1 < 2) || (2 > 3) 為真 (1 > 2) || (2 > 3) 為假
(8)條件運算子
exp1 ? exp2 : exp3 運算式exp1 為真 則整個運算式exp1 ? exp2 : exp3的值為 exp2 否則為 exp3
(9)逗號運算式
exp1, exp2, exp3, ……expN
(10)下標參考、函式呼叫和結構成員
下標參考[] 比如陣列 a[0] 代表第一個元素
函式呼叫 () Add(a, b)
結構成員 .->Std.name Std->name Std是結構體變數

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/272535.html

標籤:其他

上一篇:【ArcGIS遇上Python】使用addin開發ArcGIS插件(1):工具介紹及安裝

下一篇:用OSPF進行vlan劃分

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more