1.函數
首先對函數進行一下介紹
前面講了int main()是程式的主函數,也是一個程式的起點,但是一個程式所要完成的任務不能全部在主函數中完成,這就需要自己建立子函數來完成任務。
int這部分表示函數的返回值,需要返回什麼樣的數據型別,用不同的關鍵字表示,如果沒有返回值,用void來代替。
函數名可以根據自己的意願來命名,通常用與函數所完成任務有關的字元來命名,比如圖中的函數需要完成的工作是得到最大值,則函數名就用get_max來表示。
函數中的參數分爲兩種,在子函數中的函數,即int x,int y叫做形參,主要用於子函數中,而在主函數中使用子函數時傳遞的參數叫做實參,也就是實際參數。前面的int表示參數的數據型別,通常使用時傳遞的參數的數據型別要和定義的相同。
在這裏舉一個例子,在一個函數中求最大值
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int get_max(int x, int y);
int main()
{
int a = 0;
int b = 0;
scanf("%d%d", &a, &b);
int max = get_max(a, b);
printf("max=%d\n", max);
return 0;
}
int get_max(int x, int y)
{
if (x > y)
{
return x;
}
else
{
return y;
}
}
對於函數最重要的是其通用性,也就是說這個函數的使用場合不是單一的,可以用在其他不同的地方,這樣子這個函數纔是比較好的。
注意一個問題:就是建立函數的放置位置問題,有很多人有疑問,函數放在前面和後面有什麼區別?
a.如果想把函數的具體內容放在主函數的後面,要在前面進行宣告,也就是放在開頭,讓編譯器知道你要用到這個函數。
b.如果不想宣告,就把函數的具體內容放在需要用到的地方之前,使編譯器知道函數的用處。
如果不宣告就放在後面,編譯器就會發出警告,程式執行可能不會出錯,也有可能會出錯,這就是弊端。
2.陣列—一組數的集合
陣列是一組相同類型元素的集合
a.陣列的定義
int arr[10]={1,2,3,4,5,6,7,8,9,0};
這個是完整的初始化,也就是每一個元素在最開始都有對應的元素
int arr[10]={1,2,3,4,5};
這是不完整的初始化,只初始化了前5個元素,剩下的元素自動補0。
b.陣列的使用
陣列的第一個下標是從0開始的,而陣列的使用正是利用下標來完成的。
比如列印陣列中的每一個元素
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int i;
int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
for (i = 0; i < 10; i++)
printf("%d ", arr[i]);
return 0;
}
i從0開始遞增一直到9,arr[i]就是對陣列的使用,這樣子結果可以從陣列的第一個元素列印到最後一個元素。
3.算術操作符
這裏有一個注意的問題
printf("%d",7/2);
得到的結果爲3而不是3.5,這是爲什麼呢?
這是因爲7和2都是整數,得到的還是整數
那麼如果把%d改爲%f呢?
結果爲0.00000,這是因爲7和2是整數,結果只能時整數。
解決方法:把7/2寫成7.0/2或者7/2.0或者7.0/2.0,只要除數和被除數有一個爲小數,則結果就是小數。
4.移位元運算符
a>>1 把a的值向右移動一位,本質上移動的是a的二進制位
a<<1 把a的值向左移動一位,本質上移動的是a的二進制位
5.位元運算符
& 按(二進制)位與
^ 按(二進制)位互斥或
| 按(二進制)位或
6.單目操作符
7.關係操作符
8.邏輯操作符