#C語言基礎(chǔ)知識
一、簡單程序的的一般形式? #include//標(biāo)準(zhǔn)輸入輸出文件,讓當(dāng)前文件有文件的功能
//main函數(shù)是程序的入口,一個(gè)程序有且只有一個(gè)main函數(shù)
二粒没、基本數(shù)據(jù)類型
1、整型
(1)short 短整數(shù)類型簇爆,占兩個(gè)字節(jié)癞松,取值范圍,五位數(shù)
1)無符號類型(不包含負(fù)整數(shù))
2)有符號類型(包含負(fù)整數(shù))
(2)int 整數(shù)類型入蛆,占四個(gè)字節(jié)响蓉,取值范圍,十位數(shù)
(3)long 長整型哨毁,32位的系統(tǒng)占四個(gè)字節(jié)厕妖,64位的系統(tǒng)占八個(gè)字節(jié),取值范圍挑庶,超過十位數(shù)
2、浮點(diǎn)型
(1)float 單精度浮點(diǎn)數(shù)類型软能,占四個(gè)字節(jié)迎捺,6位有效數(shù)字
(2)double 雙精度浮點(diǎn)類型,占八個(gè)字節(jié)查排,15位有效數(shù)字
注:系統(tǒng)默認(rèn)類型是double類型凳枝,在使用float類型時(shí),需要在數(shù)字后面加f
3跋核、字符型
(1)char占一個(gè)字節(jié)岖瑰,單引號括起來
(2)用以存儲字符或標(biāo)點(diǎn)等字符
(3)字符在計(jì)算機(jī)中采用二進(jìn)制的ASCII碼存儲,字符可以通過對應(yīng)的ASCII碼值來比較大小
4砂代、總結(jié)
(1)整型有四種類型蹋订,short兩個(gè)字節(jié),五位數(shù) int四個(gè)字節(jié)刻伊,十位數(shù) long超過十位數(shù)
(2)浮點(diǎn)型有兩種露戒,float四個(gè)字節(jié)椒功,6位有效數(shù)字 double8個(gè)字節(jié),15位有效數(shù)字(系統(tǒng)默認(rèn)的是double類型)
(3)char用于存儲字符及標(biāo)點(diǎn)
三智什、常量动漾、變量
1. 常量:程序運(yùn)行期間值不能被改變的值
比如:
3
5
2.3
'R'
2. 變量:程序運(yùn)行期間值能被改變的值
1) 變量代表一個(gè)存儲區(qū)域
2) 存儲區(qū)域內(nèi)存儲的內(nèi)容就是變量的值
3) 變量的值可以在程序運(yùn)行期間改變
3. 變量的定義
1) 變量定義
格式
數(shù)據(jù)類型 變量名 = 初始值;
int age = 25;
int 指整數(shù)類型
age 指變量名
=? 指將后面的初始值賦給變量
25? 指初始值
;? 指語句結(jié)束
2) 變量荠锭、常量命名規(guī)則
1. 只能由數(shù)字旱眯、字母、下劃線組成证九,并且不能以數(shù)字開頭
2. 不可以與系統(tǒng)保留字同名
3. 見名知意
4. 不能使用重復(fù)的變量名
5. 駝峰命名法(myTom)
四删豺、運(yùn)算符
1. 賦值運(yùn)算符
用于給變量賦值,將等號右邊的值賦給等號左邊的變量
練習(xí):如何交換兩個(gè)int型變量的值
int a=1,b=2,c;
c=a;
a=b;
b=c;
2. 算術(shù)運(yùn)算符
+? -? *? /? %
1) 除號右邊的數(shù)字不能為0
2) 取余運(yùn)算符兩邊必須都是整數(shù)
3) 兩個(gè)整數(shù)相除甫贯,得到的是整數(shù)
4) 小數(shù)和整數(shù)相除吼鳞,得到的小數(shù)
++? --
1) ++或--在前,先執(zhí)行++或--叫搁,后運(yùn)算(先加后用)
2) --或++在后赔桌,先運(yùn)算,后執(zhí)行++或--(先用后加)
3. 復(fù)合運(yùn)算符
+=? -=? *=? /=? %=
1) a += b; ==> a = a+b;
2) a -= b; ==> a = a-b;
....
4. 條件運(yùn)算符
格式: 條件表達(dá)式 渴逻? 真結(jié)果表達(dá)式 : 假結(jié)果表達(dá)式
比如:
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. 總結(jié):必須掌握的內(nèi)容
1) =? ? +=
2) ++? --
3) 條件運(yùn)算符
4) == 兩個(gè)等號是判斷
五. 表達(dá)式
1. 常量疾党、變量、運(yùn)算符的組合
2. 每個(gè)表達(dá)式都會有運(yùn)算結(jié)果
3. 例如: 3+5惨奕, a+b
4. 語句雪位,用結(jié)束處的一個(gè)分號表示,語句是程序執(zhí)行的最小單位
六. 輸入梨撞、輸出函數(shù)
1. 輸出函數(shù) printf()
1) printf函數(shù)被設(shè)計(jì)用于顯示格式串雹洗,并在該串中的指定位置插入可能的值
2) 格式:
printf("格式串",表達(dá)式1,表達(dá)式2,...);
3) 格式串中包含普通字符和轉(zhuǎn)換說明
1. 轉(zhuǎn)換說明以字符%開頭。是用來表示打印過程中待填充的占位符卧波,如果后面跟的是d,表明打印時(shí)要在這個(gè)位置打印出一個(gè)整形數(shù)據(jù)时肿。
2. 普通字符,會將普通字符完整的打印出來
4) 轉(zhuǎn)換說明符
%d 整型
%hd 短整型
%ld 長整形
%f 單港粱、雙精度浮點(diǎn)數(shù)
%c 字符
5) 格式轉(zhuǎn)換控制
printf("%04d",12) 最小字段占四個(gè)位置螃成,不足用0補(bǔ)齊,如果不加0試試效果
printf("%-4d",112);最小字段寬度占四個(gè)位置查坪,左對齊
printf("%4.2f",1.2345);
最小字段寬度占四個(gè)位置寸宏,保留小數(shù)點(diǎn)后兩位
注:
\n換行 %與d之間的數(shù)字,表明打印的這個(gè)數(shù)字要占相應(yīng)的位數(shù)
int a=1;? ? char result;
result = a == 1 ? 'b' : 'c';
printf("%-3c\n",result);
//在float類型中偿曙,%與d之間的數(shù)字氮凝,整數(shù)部分代表總共占的位數(shù),小數(shù)點(diǎn)后面的代表小數(shù)所占得位數(shù)
float a = 1.6f;
printf("%4.1f\n",a);
6) 轉(zhuǎn)義序列
\n? 回車符
\\? 打印\
%%? 打印%
\‘? 打印’
2. 輸入函數(shù) scanf()
1) scanf以回車確定輸入結(jié)束望忆,并且只接受大鍵盤的回車覆醇,不接受小鍵盤的回車
2) scanf("%d,%d",&num1,&num2); 輸入的時(shí)候兩個(gè)整型數(shù)之間必須有『朵纷,』,格式串中除了轉(zhuǎn)換說明的其他字符都要從控制臺輸入
3) 不要在格式串后面加『\n』字符,會抵消掉人工輸入的回車
#分支語句(布爾類型永脓、關(guān)系運(yùn)算符袍辞、邏輯運(yùn)算符、if語句分支常摧、switch語句搅吁、枚舉)
一.布爾類型 ? ? ? ??
1.只有兩種真和假? ??
?2.賦值true和非0的值 為真? ??
?3.賦值0 為假 (只有0和false為假)? ??
4.Xcode默認(rèn)沒有布爾類型,需要導(dǎo)入文件落午,需要導(dǎo)入<stdboll.h>頭文件
例:
//? ? bool k = false;
//? ? printf("k = %d\n",k);
二.關(guān)系運(yùn)算符
> >= < <= == !=
他們最終結(jié)果一般使用布爾類型的變量來接收
例:
//? ? bool result = 5==6;
//? ? printf("result = %d\n",result);
三.邏輯運(yùn)算符
邏輯與 && (全真為真)
邏輯或 || (一真為真)
邏輯非 !? (取反值)
例:
//? ? bool result = 8>6 && 6>3;
//? ? printf("result = %d\n",result);
//
//? ? bool result1 = true;
//? ? result1 = !result1;
//? ? printf("result1 = %d\n",result1);
四.if語句分支
if(判斷條件){
執(zhí)行語句;(條件為真時(shí)執(zhí)行語句)
}
else if(判斷條件){
執(zhí)行語句;
}
else
執(zhí)行語句;
例:
char a = ' ';
printf("輸入一個(gè)字符:");
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(表達(dá)式){
case 可能的值:{
執(zhí)行語句:
}break;
case 可能的值:{
執(zhí)行語句:
}break;
default:{
}break;
}
五.switch語句
多重選擇,比if-else判斷條件多
格式:switch(表達(dá)式){
case 可能的值:{
執(zhí)行語句:
}break;
case 可能的值:{
執(zhí)行語句:
}break;
default:{
}break;
}
六.枚舉
1.枚舉目的:提高程序的可讀性
2.枚舉一般放在頭文件下面,屬于全局常量
3.enum 枚舉名{ 枚舉值 = 0/a谎懦,枚舉值(默認(rèn)1或b),枚舉值(默認(rèn)2或c)溃斋,枚舉值(默認(rèn)3或d)界拦,}
例:
enum season{ sp=1, su, au, wi};
int a = 0;
printf("輸入一個(gè)數(shù)字:");
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):滿足條件時(shí),反復(fù)執(zhí)行的某一動作
while(較常用)
do..while (不常用)
for (最常用)
1.while循環(huán)
格式:
while(判斷條件){
循環(huán)語句;
}
只要條件成立,循環(huán)體會一直執(zhí)行
循環(huán)體執(zhí)行結(jié)束,會重新判斷條件是否成立
例:
int a = 0;
scanf("%d",&a);
while (a > 6) {
printf("never give up");
}
2.do...while循環(huán) (直到型循環(huán))
先執(zhí)行一次循環(huán)體梳侨,再進(jì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) (結(jié)束的是整個(gè)循環(huán),不再往下執(zhí)行)
continue: 結(jié)束本次循環(huán) (結(jié)束的是這次循環(huán),continue下面未執(zhí)行的循環(huán)語句也結(jié)束,重新判斷條件)
例:
int i = 0;
while (1) {
if (i==100) {
break;//結(jié)束整個(gè)循環(huán)
} i++;
if (i==9) {
continue;//結(jié)束的是本次循環(huán),及i=9時(shí)這次循環(huán)
}
printf("%d\n",i);
}
4.for循環(huán)
for(初始值;判斷條件;讓初始值自加或自減)
{
循環(huán)語句;
}
1.首先確定初始值,確定循環(huán)的起始點(diǎn)
2.看判斷條件,條件成立,執(zhí)行循環(huán)體;不成立,直接跳出for循環(huán)
3.循環(huán)體結(jié)束后,看自加或自減
4.自加或自減后,判斷條件是否成立;成立,執(zhí)行循環(huán)體,不成立,跳出循環(huán)
例:
打印9x9乘法表
外層循環(huán)i表示要打印多少行,內(nèi)層循環(huán)j表示每行要打印多少個(gè)
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個(gè)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");
#一維數(shù)組,隨機(jī)數(shù)走哺,宏定義蚯嫌,冒泡排序
1.一維數(shù)組
數(shù)組:能夠存放多個(gè)同類型的數(shù)值,相當(dāng)于一個(gè)存放數(shù)值的容器
格式:int list[4] = {1,2,3,4};
數(shù)據(jù)類型 數(shù)組名 [數(shù)組容量] = {賦初值}丙躏;
例:
通過for循環(huán)改變下標(biāo)择示,從而有順序的輸出數(shù)組中的值
? 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)建一個(gè)數(shù)組,存放班里所有人的工號
? ?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.宏定義
編譯時(shí)晒旅,系統(tǒng)會將宏定義的新值給宏定義的名字
格式:
#define 宏定義名字 宏定義要替代的內(nèi)容
例:
#define NUMBER 9 (NUMBER 指代的內(nèi)容就是9)
無參數(shù)的宏定義:
#define NUMBER 9
有參數(shù)的宏定義:
#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.隨機(jī)數(shù)? ? ?? ?
#define A 3? ??
int a[A] = {};? ??
printf("輸入數(shù)組a中的第一個(gè)值:");? ??
scanf("%d",&a[0]);? ??
printf("數(shù)組a中的第一個(gè)值是%d\n",a[0]);? ? ? ? ? ??
printf("輸入數(shù)組a中的第二個(gè)值:");? ??
scanf("%d",&a[1]);? ??
printf("數(shù)組a中的第二個(gè)值是%d\n",a[1]);? ? ? ??
printf("輸入數(shù)組a中的第三個(gè)值:");? ??
scanf("%d",&a[2]);? ??
printf("數(shù)組a中的第三個(gè)值是%d\n",a[2]);?
//通過for循環(huán)改變下標(biāo)栅盲,往數(shù)組里面依次輸入值? ? ? ? ??
#define A 3? //(宏定義)
int a[A] ={};
for (int index =0; index<A;index++){
printf("輸入第%d個(gè)值:",index+1);
scanf("%d",&a[index]);
}
//依次輸出數(shù)組里面的值
for (int index =0; index<A;index++) {
printf("第%d個(gè)值是:%d\n",index+1,a[index]);
}
#include<stdlib.h>//隨機(jī)數(shù)頭文件
例:
在數(shù)組a中放10個(gè)0-9的隨機(jī)數(shù)
產(chǎn)生10隨機(jī)數(shù),并打印出最大值
#define A 10? //(宏定義)
int a[A] ={};
//往數(shù)組里面放隨機(jī)值
for (int i=0; i<A;i++){
a[i] = arc4random()%10;
}
//找到數(shù)組中的最大值
int max =0;? ?
?for (int i =0; i<A;i++){
if (a[i]>max){
max=a[i];
}
}
//打印出數(shù)組
for (int i =0; i<A;i++){
printf("%4d",a[i]);
}
printf("\n最大值是:%d\n",max);