#C語言基礎知識
一、簡單程序的的一般形式? #include//標準輸入輸出文件,讓當前文件有文件的功能
//main函數是程序的入口,一個程序有且只有一個main函數
二、基本數據類型
1、整型
(1)short 短整數類型,占兩個字節(jié),取值范圍,五位數
1)無符號類型(不包含負整數)
2)有符號類型(包含負整數)
(2)int 整數類型,占四個字節(jié),取值范圍,十位數
(3)long 長整型,32位的系統(tǒng)占四個字節(jié),64位的系統(tǒng)占八個字節(jié),取值范圍,超過十位數
2、浮點型
(1)float 單精度浮點數類型,占四個字節(jié),6位有效數字
(2)double 雙精度浮點類型,占八個字節(jié),15位有效數字
注:系統(tǒng)默認類型是double類型,在使用float類型時,需要在數字后面加f
3、字符型
(1)char占一個字節(jié),單引號括起來
(2)用以存儲字符或標點等字符
(3)字符在計算機中采用二進制的ASCII碼存儲,字符可以通過對應的ASCII碼值來比較大小
4、總結
(1)整型有四種類型,short兩個字節(jié),五位數 int四個字節(jié),十位數 long超過十位數
(2)浮點型有兩種,float四個字節(jié),6位有效數字 double8個字節(jié),15位有效數字(系統(tǒng)默認的是double類型)
(3)char用于存儲字符及標點
三、常量、變量
1. 常量:程序運行期間值不能被改變的值
比如:
3
5
2.3
'R'
2. 變量:程序運行期間值能被改變的值
1) 變量代表一個存儲區(qū)域
2) 存儲區(qū)域內存儲的內容就是變量的值
3) 變量的值可以在程序運行期間改變
3. 變量的定義
1) 變量定義
格式
數據類型 變量名 = 初始值;
int age = 25;
int 指整數類型
age 指變量名
=? 指將后面的初始值賦給變量
25? 指初始值
;? 指語句結束
2) 變量、常量命名規(guī)則
1. 只能由數字、字母、下劃線組成,并且不能以數字開頭
2. 不可以與系統(tǒng)保留字同名
3. 見名知意
4. 不能使用重復的變量名
5. 駝峰命名法(myTom)
四、運算符
1. 賦值運算符
用于給變量賦值,將等號右邊的值賦給等號左邊的變量
練習:如何交換兩個int型變量的值
int a=1,b=2,c;
c=a;
a=b;
b=c;
2. 算術運算符
+? -? *? /? %
1) 除號右邊的數字不能為0
2) 取余運算符兩邊必須都是整數
3) 兩個整數相除,得到的是整數
4) 小數和整數相除,得到的小數
++? --
1) ++或--在前,先執(zhí)行++或--,后運算(先加后用)
2) --或++在后,先運算,后執(zhí)行++或--(先用后加)
3. 復合運算符
+=? -=? *=? /=? %=
1) a += b; ==> a = a+b;
2) a -= b; ==> a = a-b;
....
4. 條件運算符
格式: 條件表達式 ? 真結果表達式 : 假結果表達式
比如:
int a = 3;
int b = 5;
int c = 0;
c = a > b ? a : b;
附加:
int a=1; (char result;)
(char)result =a == 1 ? 'b' : 'c';
printf("%c\n",result+a);
5. 總結:必須掌握的內容
1) =? ? +=
2) ++? --
3) 條件運算符
4) == 兩個等號是判斷
五. 表達式
1. 常量、變量、運算符的組合
2. 每個表達式都會有運算結果
3. 例如: 3+5, a+b
4. 語句,用結束處的一個分號表示,語句是程序執(zhí)行的最小單位
六. 輸入、輸出函數
1. 輸出函數 printf()
1) printf函數被設計用于顯示格式串,并在該串中的指定位置插入可能的值
2) 格式:
printf("格式串",表達式1,表達式2,...);
3) 格式串中包含普通字符和轉換說明
1. 轉換說明以字符%開頭。是用來表示打印過程中待填充的占位符,如果后面跟的是d,表明打印時要在這個位置打印出一個整形數據。
2. 普通字符,會將普通字符完整的打印出來
4) 轉換說明符
%d 整型
%hd 短整型
%ld 長整形
%f 單、雙精度浮點數
%c 字符
5) 格式轉換控制
printf("%04d",12) 最小字段占四個位置,不足用0補齊,如果不加0試試效果
printf("%-4d",112);最小字段寬度占四個位置,左對齊
printf("%4.2f",1.2345);
最小字段寬度占四個位置,保留小數點后兩位
注:
\n換行 %與d之間的數字,表明打印的這個數字要占相應的位數
int a=1;? ? char result;
result = a == 1 ? 'b' : 'c';
printf("%-3c\n",result);
//在float類型中,%與d之間的數字,整數部分代表總共占的位數,小數點后面的代表小數所占得位數
float a = 1.6f;
printf("%4.1f\n",a);
6) 轉義序列
\n? 回車符
\\? 打印\
%%? 打印%
\‘? 打印’
2. 輸入函數 scanf()
1) scanf以回車確定輸入結束,并且只接受大鍵盤的回車,不接受小鍵盤的回車
2) scanf("%d,%d",&num1,&num2); 輸入的時候兩個整型數之間必須有『,』,格式串中除了轉換說明的其他字符都要從控制臺輸入
3) 不要在格式串后面加『\n』字符,會抵消掉人工輸入的回車
#分支語句(布爾類型、關系運算符、邏輯運算符、if語句分支、switch語句、枚舉)
一.布爾類型 ? ? ? ??
1.只有兩種真和假? ??
?2.賦值true和非0的值 為真? ??
?3.賦值0 為假 (只有0和false為假)? ??
4.Xcode默認沒有布爾類型,需要導入文件,需要導入<stdboll.h>頭文件
例:
//? ? bool k = false;
//? ? printf("k = %d\n",k);
二.關系運算符
> >= < <= == !=
他們最終結果一般使用布爾類型的變量來接收
例:
//? ? bool result = 5==6;
//? ? printf("result = %d\n",result);
三.邏輯運算符
邏輯與 && (全真為真)
邏輯或 || (一真為真)
邏輯非 !? (取反值)
例:
//? ? bool result = 8>6 && 6>3;
//? ? printf("result = %d\n",result);
//
//? ? bool result1 = true;
//? ? result1 = !result1;
//? ? printf("result1 = %d\n",result1);
四.if語句分支
if(判斷條件){
執(zhí)行語句;(條件為真時執(zhí)行語句)
}
else if(判斷條件){
執(zhí)行語句;
}
else
執(zhí)行語句;
例:
char a = ' ';
printf("輸入一個字符:");
scanf("%c",&a);
if (48 <= a && a <= 57) {
printf("This is a number\n");
}
else if (97 <= a && a <= 122) {
printf("This is a lower\n");
}
else if (65 <= a && a <= 90) {
printf("This is a upper\n");
}
else{
printf("no know\n");
}
switch語句
/*
多重選擇,比if-else判斷條件多
格式:switch(表達式){
case 可能的值:{
執(zhí)行語句:
}break;
case 可能的值:{
執(zhí)行語句:
}break;
default:{
}break;
}
五.switch語句
多重選擇,比if-else判斷條件多
格式:switch(表達式){
case 可能的值:{
執(zhí)行語句:
}break;
case 可能的值:{
執(zhí)行語句:
}break;
default:{
}break;
}
六.枚舉
1.枚舉目的:提高程序的可讀性
2.枚舉一般放在頭文件下面,屬于全局常量
3.enum 枚舉名{ 枚舉值 = 0/a,枚舉值(默認1或b),枚舉值(默認2或c),枚舉值(默認3或d),}
例:
enum season{ sp=1, su, au, wi};
int a = 0;
printf("輸入一個數字:");
scanf("%d",&a);
switch (a) {
case sp :
printf("spring 春天\n");
break;
case su :
printf("summer 夏天\n");
break;
case au :
printf("autumn 秋天\n");
break;
case wi :
printf("winter 冬天\n");
break;
default:
printf("不知道是哪天\n");
break;
#.循環(huán)語句(while循環(huán)、do...while循環(huán)、break,continue、for循環(huán))
循環(huán):滿足條件時,反復執(zhí)行的某一動作
while(較常用)
do..while (不常用)
for (最常用)
1.while循環(huán)
格式:
while(判斷條件){
循環(huán)語句;
}
只要條件成立,循環(huán)體會一直執(zhí)行
循環(huán)體執(zhí)行結束,會重新判斷條件是否成立
例:
int a = 0;
scanf("%d",&a);
while (a > 6) {
printf("never give up");
}
2.do...while循環(huán) (直到型循環(huán))
先執(zhí)行一次循環(huán)體,再進行判斷,成立會繼續(xù)執(zhí)行
格式:
do{
循環(huán)體;
}while(判斷條件);
例:
輸出1到100
int i = 1;
do {
printf("%3d",i);
i++;
} while (i<=100);
3.break,continue
break: 跳出while循環(huán) (結束的是整個循環(huán),不再往下執(zhí)行)
continue: 結束本次循環(huán) (結束的是這次循環(huán),continue下面未執(zhí)行的循環(huán)語句也結束,重新判斷條件)
例:
int i = 0;
while (1) {
if (i==100) {
break;//結束整個循環(huán)
} i++;
if (i==9) {
continue;//結束的是本次循環(huán),及i=9時這次循環(huán)
}
printf("%d\n",i);
}
4.for循環(huán)
for(初始值;判斷條件;讓初始值自加或自減)
{
循環(huán)語句;
}
1.首先確定初始值,確定循環(huán)的起始點
2.看判斷條件,條件成立,執(zhí)行循環(huán)體;不成立,直接跳出for循環(huán)
3.循環(huán)體結束后,看自加或自減
4.自加或自減后,判斷條件是否成立;成立,執(zhí)行循環(huán)體,不成立,跳出循環(huán)
例:
打印9x9乘法表
外層循環(huán)i表示要打印多少行,內層循環(huán)j表示每行要打印多少個
for (int i = 1; i<10; i++) {
for (int j = 1; j<=i; j++) {
printf("%d*%d=%-3d ",j,i,i*j);
}
printf("\n");
}
例:S(n)=a+aa+aaa+aaaa+...+aaaa..(n個a)
int? a = 0, n = 0,S = 0,b = 0;
printf("輸入n和a的值:");
scanf("%d,%d",&n,&a);
for (int i = 1; i <=n;i++)
{
b = 10*b + a;
S +=b;
}
printf("%d",S);
printf("\n");
#一維數組,隨機數,宏定義,冒泡排序
1.一維數組
數組:能夠存放多個同類型的數值,相當于一個存放數值的容器
格式:int list[4] = {1,2,3,4};
數據類型 數組名 [數組容量] = {賦初值};
例:
通過for循環(huán)改變下標,從而有順序的輸出數組中的值
? int ageOfAll[6] = {1,2,3,4,5,6};
// int ageOfAll002 = ageOfAll[1];
ageOfAll[1] = 9;
//? printf("年齡是:%d\n",ageOfAll[1]);
for (int i =0; i<6; i++) {
int temp =ageOfAll[i];
printf("%d",temp);
}
例:
//創(chuàng)建一個數組,存放班里所有人的工號
? ?int number[12]={0};
printf("工號是:");
for (int i=0;i<12;i++) {
number [i]=i+1;
}
for (int i=0;i<12;i++) {
printf("%03d ",number[i]);
}
printf("\n");
2.宏定義
編譯時,系統(tǒng)會將宏定義的新值給宏定義的名字
格式:
#define 宏定義名字 宏定義要替代的內容
例:
#define NUMBER 9 (NUMBER 指代的內容就是9)
無參數的宏定義:
#define NUMBER 9
有參數的宏定義:
#define ADD(A,B) A+B
例:
#define TEST 90
#define? ADD(A,B) A+B
int a = TEST;
int sum = ADD(1,2);
printf("%d %d\n",a,sum);
3.隨機數? ? ?? ?
#define A 3? ??
int a[A] = {};? ??
printf("輸入數組a中的第一個值:");? ??
scanf("%d",&a[0]);? ??
printf("數組a中的第一個值是%d\n",a[0]);? ? ? ? ? ??
printf("輸入數組a中的第二個值:");? ??
scanf("%d",&a[1]);? ??
printf("數組a中的第二個值是%d\n",a[1]);? ? ? ??
printf("輸入數組a中的第三個值:");? ??
scanf("%d",&a[2]);? ??
printf("數組a中的第三個值是%d\n",a[2]);?
//通過for循環(huán)改變下標,往數組里面依次輸入值? ? ? ? ??
#define A 3? //(宏定義)
int a[A] ={};
for (int index =0; index<A;index++){
printf("輸入第%d個值:",index+1);
scanf("%d",&a[index]);
}
//依次輸出數組里面的值
for (int index =0; index<A;index++) {
printf("第%d個值是:%d\n",index+1,a[index]);
}
#include<stdlib.h>//隨機數頭文件
例:
在數組a中放10個0-9的隨機數
產生10隨機數,并打印出最大值
#define A 10? //(宏定義)
int a[A] ={};
//往數組里面放隨機值
for (int i=0; i<A;i++){
a[i] = arc4random()%10;
}
//找到數組中的最大值
int max =0;? ?
?for (int i =0; i<A;i++){
if (a[i]>max){
max=a[i];
}
}
//打印出數組
for (int i =0; i<A;i++){
printf("%4d",a[i]);
}
printf("\n最大值是:%d\n",max);