一些關(guān)鍵字
常量:程序運(yùn)行時(shí)不會(huì)變化的量,包括整型、實(shí)型、字符和字符串型。
變量:與常量相對(duì),程序運(yùn)行時(shí)可以變化的量。
變量名以一個(gè)名字代表一個(gè)對(duì)應(yīng)的存儲(chǔ)單元地址。
#define PI 3.14
//表示程序內(nèi)出現(xiàn)的PI都為3.14
4.2 整型變量int i;
//利用int定義一個(gè)變量即為整型變量
5 浮點(diǎn)型數(shù)據(jù)e代表10的冪次 eg:300e-3 即為 0.300
//3. 浮點(diǎn)型
//浮點(diǎn)常量(包括小數(shù)和指數(shù))
//b = 300e-3; //e的用法,e代表10的冪次
//浮點(diǎn)變量
float b;
printf("b = %f\n", b);
printf("b_size = %d\n", sizeof(b));//float占用4個(gè)字節(jié)
6 字符型數(shù)據(jù)ASCII碼表
//4. 字符型常量
// 以“\”開頭表示轉(zhuǎn)義字符
// 'A'字符常量以單引號(hào)括起來(lái)
//
//5. 字符串型常量以雙引號(hào)括起來(lái)
//"helloworld"
//ASCII碼
//一個(gè)字符型常量占用1字節(jié)大小的空間
//輸出 %c 時(shí)輸出字符,若是 %d 輸出數(shù)字
char c = 'A';
printf("c+32 = %c\n", c + 32);
printf("%d\n", c+32);
7 字符串型常量8 printf()函數(shù)printf()為輸出函數(shù)。
8.1 混合運(yùn)算強(qiáng)制類型轉(zhuǎn)換
//強(qiáng)制類型轉(zhuǎn)換
int i = 5;
int j = i / 2;
//float k = i / 2;//若這樣寫輸出的是2.00000
//要想輸出2.5
float k = float(i) / 2;
printf("j=%d\n", j);
printf("j=%.1f\n", k);
8.2 printf函數(shù)原理是printf先把輸出的數(shù)據(jù)轉(zhuǎn)化為字符串,再放入標(biāo)準(zhǔn)緩沖區(qū),再輸出結(jié)果。
語(yǔ)法:
printf默認(rèn)右對(duì)齊,%5d說(shuō)明輸出五位字符且右對(duì)齊輸出,%-5d就是左對(duì)齊
//printf函數(shù)
int age = 20;
printf("Hello %s,you are %d\n", "Bob", age);
//printf()函數(shù)中所有的輸出都是右對(duì)齊,左對(duì)齊要設(shè)置
int aa = 2021, bb = 2022;
printf("right_output %5d\nleft__output %-5d\n", aa, bb);
float score = 99.9;
printf("score=%5.2f\n", score);
9 scanf()函數(shù)通過(guò)函數(shù)庫(kù)讀取標(biāo)準(zhǔn)輸入,再通過(guò)對(duì)應(yīng)的函數(shù)將結(jié)果打印到屏幕上。
//scanf函數(shù) 一定要取地址&&&&
int ii = 10;
char cc;
//多種數(shù)據(jù)混合讀入,寫在同一個(gè)scanf中,空格隔開
scanf("%d %c", &ii,&cc);
//scanf("%d", &ii);//若輸入一個(gè)按回車,則第二個(gè)因?yàn)槭?c就會(huì)讀取并輸出換行
printf("%d\n", ii);
//fflush(stdin); //清空標(biāo)準(zhǔn)輸入緩沖區(qū)
//如果在這清空的話,第二個(gè)scanf是可以被阻塞的,因?yàn)榍蹇樟司彌_區(qū)的‘\n’,所以下一個(gè)scanf不會(huì)讀入
//%c不會(huì)忽略任何內(nèi)容
//這樣寫第二個(gè)scanf會(huì)讀取上一個(gè)回車%c,如果是 %d 可以正常輸出
//scanf("%c", &cc);
printf("cc = %d\n", cc);
二、運(yùn)算符和表達(dá)式fflush(stdin);清空標(biāo)準(zhǔn)輸入緩沖區(qū)
1 算術(shù)運(yùn)算符單目運(yùn)算符:! 非,因?yàn)橹劣谝?![變量]
雙目運(yùn)算符:[左變量] 運(yùn)算符 [右變量]
三目運(yùn)算符:[條件] ? [結(jié)果1] : [結(jié)果2] 。?理解為條件是否成立,條件成立為結(jié)果1,否則為結(jié)果2。
//算術(shù)運(yùn)算符 + - * / %
int result = 4 + 5 * 2 - 3 / 2 + 10 % 3;
printf("result = %d\n", result);
2 關(guān)系運(yùn)算符0表示假,1表示真
//關(guān)系運(yùn)算符 >< == >=<= !=
//關(guān)系運(yùn)算符優(yōu)先級(jí)小于算術(shù)運(yùn)算符
int a;
//若想停止while運(yùn)算輸入一個(gè)非整數(shù)即可,例如一個(gè)字符
while (scanf("%d", &a)) {if (a >3 && a< 10) { //如果寫 if(33 為真,為真時(shí)是1,為假時(shí)是0;
//若輸入 -2 ,則 -2<3 為假,為假時(shí)是0,0小于10;
printf("a在3~10之間\n");
}
else { printf("not\n");
}
}
3 邏輯運(yùn)算符//邏輯運(yùn)算符 !非(單目運(yùn)算符) &&與 ||或
//!的優(yōu)先級(jí)高于算術(shù)運(yùn)算符,&& || 的優(yōu)先級(jí)低于關(guān)系運(yùn)算符
int year;
while (scanf("%d", &year)) {//判斷閏年
if ((year % 4 && year % 100 != 0) || (year % 400 == 0)) { printf("it is a leap year\n");
}
else { printf("it is not a leap year\n");
}
}
int k = 100;//!從右到左結(jié)合,因?yàn)?k=0,!!k = 1
int j = !!k;
printf("!k = %d,j = %d", !k,j);
//短路運(yùn)算
int i = 1;
i&& printf("u can see me!\n");//如果i為真輸出,如果i為假不輸出
i|| printf("u can see me!\n");//如果i為真不會(huì)執(zhí)行后面的語(yǔ)句
if (i) {printf("u can see me!\n");
}
4 賦值運(yùn)算符復(fù)合賦值運(yùn)算符:+= -= *= /=
//賦值運(yùn)算符 右邊的值賦給左邊
int num1 = 1, num = 1, num2 = 100;
num = num + 1;
num += 1;//也有 *= -= /=
num2 /= 30;
printf("%d", num2);
5 求字節(jié)運(yùn)算符sizeof() 是一個(gè)運(yùn)算符,并非是函數(shù)。sizeof()求常量或變量所占空間大小
//求字節(jié)數(shù)運(yùn)算符
int i;
printf("i_size=%d", sizeof(i));
6 運(yùn)算符優(yōu)先級(jí)為了if-else的對(duì)應(yīng)關(guān)系更清楚,最好是每個(gè)執(zhí)行語(yǔ)句都使用 { } 括起來(lái)
if判斷條件為真就執(zhí)行某個(gè)語(yǔ)句,為假不執(zhí)行或執(zhí)行else中的語(yǔ)句
if-else可以嵌套使用,也可以同時(shí)使用作為多分支語(yǔ)句
//1.if-else //注意{}的使用
int i;
scanf("%d", &i);
//一個(gè)if-else
if (i >0) {printf("xixi\n");
}
else {printf("haha\n");
}
//并行使用,多分支語(yǔ)句
int j,cost;
scanf("%d", &j);
if (j >0 && j< 100)cost = 0.15;
else if (j >100 && j< 200)cost = 0.5;
else cost = 1;
//嵌套使用,
if (i >1) {if (i< 10) { printf("i>1&&i<10\n");
}
}//若沒有這組{},else的字句屬于它最近的if,遵循就近原則,但括起來(lái)以后下面的else屬于第一個(gè)if
else
printf("No\n");
2 while循環(huán)“當(dāng)型”循環(huán)結(jié)構(gòu)
語(yǔ)法形式: while(表達(dá)式) {語(yǔ)句} ,表達(dá)式的值為真時(shí),執(zhí)行while內(nèi)嵌語(yǔ)句,為假跳出循環(huán)
//2. 循環(huán)while
int sum1 = 1, total = 0;
while (sum1<= 10) {total += sum1;
sum1++;
}//使用{}括起來(lái),程序更清晰
printf("%d\n", total);
3 for循環(huán)語(yǔ)法: for(表達(dá)式1 ; 表達(dá)式2 ; 表達(dá)式3) {語(yǔ)句} //注意用‘;’隔開
表達(dá)式1通常為初值,也可以省略
表達(dá)式2通常為終止循環(huán)條件
表達(dá)式3為運(yùn)算形式
eg:for(int i=0;i<10;i++) {}
//3.for循環(huán)
for (int i = 0; i< 10; i++) {printf("%d ", i);
}
printf("\n");
4 continue語(yǔ)句continue語(yǔ)句主要是跳出當(dāng)前循環(huán),繼續(xù)下一層循環(huán)
//4.continue 終止當(dāng)前層的循環(huán),繼續(xù)下一層循環(huán)
for (int i = 0; i< 10; i++) {if (i % 2 == 0)
continue; //偶數(shù)跳過(guò),輸出的只是奇數(shù)
//for循環(huán)跳出后去執(zhí)行了i++,所以可以繼續(xù)執(zhí)行
printf("%d ", i);
}
printf("\n");
//while循環(huán)使用continue
int sum1 = 1, total = 0;
scanf("%d", &sum1);
while (sum1<= 10) {if (sum1 % 2 == 0) { sum1++;//while中要小心使用continue,如果沒有改變sum1的值,直接跳出循環(huán)了
continue;//while中如果跳出當(dāng)前循環(huán)說(shuō)明sum1為偶數(shù),但是若沒有對(duì)sum1進(jìn)行修改,一直都是偶數(shù),再次進(jìn)到if語(yǔ)句,又會(huì)跳出,所以循環(huán)終止
}
total += sum1;
sum1++;
}
printf("%d\n", total);
5 break語(yǔ)句break語(yǔ)句是跳出循環(huán)
//5.break
int i = 0, j = 100;
for (i = 0,j = 100; i< 10; i++) { j += 10;
if (j >= 1000) { break;//跳出整個(gè)循環(huán),若執(zhí)行break,就直接輸出i的值
}
}
printf("%d\n", i);
三、數(shù)組
1 一維數(shù)組數(shù)組實(shí)際就是可以進(jìn)行進(jìn)行索引的數(shù)據(jù)類型
數(shù)組定義規(guī)則:
//1.一維數(shù)組
//數(shù)組定義
int a[10] = {0 };//數(shù)組范圍要表示出來(lái),對(duì)數(shù)組初始化
以下形式最新C標(biāo)準(zhǔn)支持,但是不建議
//int n;
//scanf("%d", &n);
//int a[n];
//一維數(shù)組初始化
//①每個(gè)元素賦初值
int aa[5] = {0,1,2,3,4 };
//不可以這樣寫
// int aa[5]; aa[5] = { 0,1,2,3,4 };
//②給部分元素初始化,其余默認(rèn)為0
int b[5] = {0,1,2 };
//③全部賦值為0
int c[5] = {0 };
//④若給全部元素賦值,可以不指定數(shù)組的長(zhǎng)度
int d[] = {1,2,3,4,5 };
//循環(huán)讀入數(shù)組
int a[5];
for (int j = 0; j< 5; j++)
scanf("%d", &a[j]);//int型加取地址符
for (int k = 0; k< 5; k++)
printf("%d", a[k]);
2 數(shù)組訪問(wèn)越界//2.數(shù)組訪問(wèn)越界,會(huì)造成數(shù)據(jù)異常
int arr[5] = {1,2,3,4,5 };
int i = 10;
int j = 20;
arr[5] = 6;
arr[6] = 7;
printf("%d\n", j);//這里的j輸出7(CLion環(huán)境)
//因?yàn)檩斎隺rr[5]以后,數(shù)組占用了5個(gè)位置,給i和j賦值,此時(shí)i的位置是6,j的位置是7
//因此再給arr[5]arr[6]賦值的時(shí)候他們兩個(gè)位置也分別是6,7,相當(dāng)于arr[6]再第七個(gè)位置覆蓋了之前的j
3 數(shù)組傳遞#define _CRT_SECURE_NO_WARNINGS
#include//定義一個(gè)函數(shù)
//數(shù)組傳遞到子函數(shù)后,其接受到的數(shù)組的起始地址,并不能傳遞數(shù)組長(zhǎng)度
void print(int a[],int n) {//傳入數(shù)組和數(shù)組長(zhǎng)度
for (int i = 0; i< sizeof(a)/sizeof(int); i++) {//這里不能利用sizeof(a)來(lái)得到大小,因?yàn)榇颂幍膫鬟M(jìn)來(lái)的a是數(shù)組名,實(shí)際上是指針,這樣輸出的結(jié)果是錯(cuò)誤的,可以在主函數(shù)獲取長(zhǎng)度
printf("%d ", a[i]);
}
a[4] = 20;//在子函數(shù)中修改數(shù)組的值
printf("\n");
}
int main() {//3.數(shù)組傳遞
//在函數(shù)中調(diào)用時(shí)直接輸入數(shù)組名
int arr[5] = {1,2,3,4,5 };
//可以通過(guò)sizeof計(jì)算數(shù)組長(zhǎng)度 sizeof(a)/sizeof(int)
int len = sizeof(arr) / sizeof(int);
print(arr, len);//傳入的是數(shù)組名
printf("%d", arr[4]);
return 0;
}
4 字符數(shù)組存入字符的數(shù)組
//4.字符數(shù)組
char arr[6] = {'H','E','L','L','O' };
//
char arr1[6] = "Hello";//如果這樣寫arr1[5]的話,要寫arr1[6],因?yàn)楹竺孢€有'\0'也要有一個(gè)位置
printf("%s\n", arr1);
//%s 讀取到'\0'結(jié)束。此時(shí)若hello后面會(huì)輸出亂碼,因?yàn)閿?shù)組大小并沒有預(yù)存'\0'的位置,數(shù)組大小開大一位給'\0'留位置即可
printf("%s\n", arr);
//在while循環(huán)中輸出字符數(shù)組
int i = 0;
while (arr[i]) {//表明遇到結(jié)束符時(shí)就停止循環(huán)
printf("%c ", arr[i]);
i++;
}
printf("\n");
//scanf讀取字符數(shù)組,和讀取別的的類似
//scanf讀取字符串時(shí),會(huì)自動(dòng)往字符數(shù)組中放入結(jié)束符
char arr2[5];
char arr3[5];
//scanf通過(guò)%s讀取字符串,%s讀取字符串時(shí)忽略空格和回車。%c比較特殊
scanf("%s", arr2);//字符數(shù)組存儲(chǔ)了數(shù)組的起始地址,不需要取地址
printf("%s\n", arr2);
scanf("%s", arr3);
printf("%s\n", arr3);
scanf("%s %s", arr2,arr3);//
printf("%s %s\n", arr2,arr3);
5 一些字符函數(shù)(str函數(shù))int main() {//①gets()函數(shù)
char a[20];
//gets可以接受空格
gets_s(a);//放入數(shù)組名即可//VS中需要寫gets_s
printf("%s\n", a);
//②puts可以直接輸出一個(gè)字符串,傳入字符數(shù)組名
puts(a);
//③strlen函數(shù),求字符串長(zhǎng)度,實(shí)際上就是讀取到'\0'時(shí)停止
char b[20];
gets_s(b);
int num1 = strlen(b);//頭文件為string
int num2 = mylen(b);//自己寫的計(jì)算數(shù)組長(zhǎng)度函數(shù)
printf("%d %d\n", num1, num2);
//④strcat函數(shù),拼接兩個(gè)字符串
char a1[20];
char a2[20];
char a3[20];
gets_s(a1);
gets_s(a2);
strcat(a1, a2);// 把a(bǔ)2的拼接到a1后面,相當(dāng)于擴(kuò)充a1
puts(a1);
//⑤strcpy函數(shù),copy字符串
strcpy(a2, a1);//表示把a(bǔ)1的字符串復(fù)制給a1
puts(a2);
//⑥strcmp函數(shù),比較字典序大小
//輸出一個(gè)常量,若為0相等,若為-1 后者大于前,若為1 前者大于后者
//是按ascii碼比較的
char c[20];
char d[20];
gets_s(c);//he
gets_s(d);//ae
//比如 h的ascii碼大于 a的ascii碼,就會(huì)輸出整數(shù)
int num3 = strcmp(c, d);
printf("%d\n", num3);
return 0;
}
6 二維數(shù)組假設(shè)是數(shù)組a[5][5],可以理解成這個(gè)數(shù)組的每一個(gè)元素又是一個(gè)數(shù)組
即數(shù)組的元素還可以是數(shù)組,構(gòu)造出數(shù)組的數(shù)組
#includeint main()
{//①二維數(shù)組初始化
//int arr[3][4] = { 1,2,3,4,5,6,7,8,9,10,11,12 };//二維數(shù)組的初始化
//int arr[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} }
int arr[3][4] = {0 };//初始化為0
for (int i = 0; i< 3; i++) {for (int j = 0; j< 4; j++) { scanf("%d", arr[i][j]);
}
}
int brr[4][3] = {};
//②將arr[3][4]轉(zhuǎn)化成arr[4][3]
for (int i = 0; i< 3; i++)
{for (int j = 0; j< 4; j++)
{ brr[j][i] = arr[i][j];
}
}
for (int i = 0; i< 4; i++)
{for (int j = 0; j< 3; j++)
{ printf("%d ", brr[i][j]);
}
printf("\n");
}
}
四、函數(shù)
1 聲明與定義指子函數(shù),寫在主函數(shù)外部,可以在主函數(shù)中調(diào)用,一般用來(lái)實(shí)現(xiàn)某一個(gè)常用的功能。
函數(shù)間的調(diào)用關(guān)系
//
//func.h
#include#includeint printstar(int i);//函數(shù)聲明
void print_msg();
//main.c
#define _CRT_SECURE_NO_WARNINGS
#include"func.h"http://這里引用自己設(shè)置的頭文件,用""表示,標(biāo)準(zhǔn)庫(kù)用<>int main() {int a;
scanf("%d", &a);
a = printstar(a);
print_msg();
printstar(a);
return 0;
}
//func.c
#include"func.h"
//函數(shù)定義
int printstar(int i) {printf("***********************\n");
printf("printstar %d\n", i);
return i + 3;
}
void print_msg() {//可以調(diào)用printstar
printf("how are u\n");
printstar(3);
}
2 分類與調(diào)用3 遞歸調(diào)用用戶角度:
① 標(biāo)準(zhǔn)函數(shù):庫(kù)函數(shù),比如scanf,printf
②自定義的函數(shù):比如上面的printstar函數(shù)形式:
①無(wú)參函數(shù):不需要傳遞參數(shù)的函數(shù),比如print_msg
②有參函數(shù):需要傳遞參數(shù)的函數(shù),比如printstar
遞歸:函數(shù)調(diào)用自身的操作,沒有結(jié)束條件的話會(huì)產(chǎn)生死循環(huán)
#define _CRT_SECURE_NO_WARNINGS
#include//遞歸 求階乘
//調(diào)用自己
int f(int n) {//上臺(tái)階的問(wèn)題,需要尋找最后的條件,要想到達(dá)第n個(gè)臺(tái)階,要么從n-1,要么從n-2向上走
//②確定結(jié)束條件
if (1 == n) {return 1;
}
else if (n == 2) {return 2;
}
//最主要是找到一個(gè)合適的輸出結(jié)果和前面一步的關(guān)系
return f(n - 1) + f(n - 2);// ①確定與下一個(gè)式子的關(guān)系
}
int main() {int n, result;
scanf("%d", &n);
result = f(n);
printf("%d", result);
return 0;
}
4 變量和參數(shù)
4.1 全局變量、局部變量全局變量簡(jiǎn)單理解就是放在主函數(shù)外定義的變量,任何函數(shù)都可見。也稱作外部變量(定義在函數(shù)外部)
局部變量就是一個(gè)函數(shù)范圍內(nèi)的變量,只在一個(gè)函數(shù)內(nèi)可用。也稱作內(nèi)部變量(一個(gè)函數(shù)內(nèi)部)
若全局變量和局部變量同名,采取就近原則,即實(shí)際獲取和修改的就是局部變量的值,因?yàn)榫植孔兞勘热肿兞扛?/p>
實(shí)參:調(diào)用時(shí)傳遞給函數(shù)的參數(shù). 實(shí)參可以是常量、變量、表達(dá)式、函數(shù)等, 無(wú)論實(shí)參是何種類型的量,在進(jìn)行函數(shù)調(diào)用時(shí),它們都必須具有確定的值, 以便把這些值傳送給形參。 因此應(yīng)預(yù)先用賦值,輸入等辦法使實(shí)參獲得確定值。
形參(parameter):
形參:不是實(shí)際存在變量。是在定義函數(shù)名和函數(shù)體的時(shí)候使用的參數(shù),目的是用來(lái)接收調(diào)用該函數(shù)時(shí)傳入的參數(shù).在調(diào)用函數(shù)時(shí),實(shí)參將賦值給形參。因而,必須注意實(shí)參的個(gè)數(shù),類型應(yīng)與形參一一對(duì)應(yīng),并且實(shí)參必須要有確定的值。
#define _CRT_SECURE_NO_WARNINGS
#includeint global_i;//此變量為全局變量
int f(int a) {//這里a是形參,調(diào)用時(shí)才會(huì)分配空間
//②確定結(jié)束條件
if (1 == a) {return 1;
}
else if (a == 2) {return 2;
}
return f(a - 1) + f(a - 2);// ①確定與下一個(gè)式子的關(guān)系
}
int main() {int n, result;//局部變量
scanf("%d", &n);
result = f(n);//此處的n是實(shí)參
printf("%d", result);
return 0;
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
名稱欄目:【C語(yǔ)言基礎(chǔ)】基礎(chǔ)知識(shí)、循環(huán)、數(shù)組、函數(shù)-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://jinyejixie.com/article24/cshgce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、域名注冊(cè)、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容