廣州網(wǎng)站建設(shè) 八爪魚搜索引擎優(yōu)化的簡(jiǎn)稱
?
目錄
?
零:移步
一.修煉必備
二.問(wèn)題思考(先思考)
三.問(wèn)題解答
零:移步
? CSDN由于我的排版不怎么好看,我的有道云筆記相當(dāng)?shù)拿烙^,請(qǐng)移步有道云筆記
一.修煉必備
?1.入門必備:VS2019社區(qū)版,下載地址:Visual Studio 較舊的下載 - 2019、2017、2015 和以前的版本 (microsoft.com)
?2.趁手武器:印象筆記/有道云筆記
?3.修煉秘籍:??途W(wǎng) - 找工作神器|筆試題庫(kù)|面試經(jīng)驗(yàn)|實(shí)習(xí)招聘內(nèi)推,求職就業(yè)一站解決_??途W(wǎng) (nowcoder.com)
?4.雷劫必備:leetcode?力扣(LeetCode)官網(wǎng) - 全球極客摯愛的技術(shù)成長(zhǎng)平臺(tái)?
?注:遇到瓶頸怎么辦?百度百科_全球領(lǐng)先的中文百科全書 (baidu.com)
二.問(wèn)題思考(先思考)
?注:所有問(wèn)題需代碼證明
?1.短路運(yùn)算符的特點(diǎn)
?2.%操作符和/操作符的特點(diǎn)
1)%的特點(diǎn)
2) /的特點(diǎn):a.整數(shù)除法? b.小數(shù)除法 ?【觀察結(jié)果得出結(jié)論】
?3.?逗號(hào)表達(dá)式的特點(diǎn)
?4.當(dāng)函數(shù)的返回值沒有寫的時(shí)候,默認(rèn)返回的是int
?5.字符串或數(shù)組在進(jìn)行傳參的時(shí)候把數(shù)組名傳過(guò)去,形參中接收到的是什么?
?6.建議:當(dāng)指針的內(nèi)容無(wú)需改變的時(shí)候,加const,const使指針指向的內(nèi)容不能改變(即加上const后具有健壯性)
?7.怎么證明數(shù)據(jù)在內(nèi)存中存儲(chǔ)的是補(bǔ)碼?
?8.既然內(nèi)存中存儲(chǔ)的是補(bǔ)碼,那么在控制臺(tái)上打印的數(shù)值是補(bǔ)碼嗎?為什么?
?9.補(bǔ)碼變成原碼的兩種形式
?10.正整數(shù)和負(fù)整數(shù)的二進(jìn)制表示形式?
1)整數(shù)的表示形式是原碼、反碼、補(bǔ)碼
2)正整數(shù)的表示形式均相同3)負(fù)整數(shù)的表示形式:原碼;反碼 = 原碼符號(hào)位不變 + 其他位按位取反
?11.正/負(fù)整數(shù)的原碼、反碼、補(bǔ)碼規(guī)則
?12.說(shuō)說(shuō)C語(yǔ)言中#include <stdio.h>是什么意思
?13.為什么long型的數(shù)據(jù)類型明明比int型的數(shù)據(jù)類型大,為什么兩者的所占的字節(jié)數(shù)相等?
?14.求出C語(yǔ)言中各個(gè)數(shù)據(jù)類型所占的字節(jié)空間
?15.全局變量和局部變量的區(qū)別?
?16.全局變量和局部變量的作用域和生命周期?
?17.C語(yǔ)言中常量的種類及它們的使用形式?
?18.scanf()和printf()函數(shù)的返回值是什么類型?并查看它們的函數(shù)模型
?19.C語(yǔ)言中的字符串結(jié)束標(biāo)志是什么?如何查看一個(gè)字符串中是否有結(jié)束標(biāo)志?
?20.代碼驗(yàn)證:為什么C語(yǔ)言中0表示假,非0表示真
三.問(wèn)題解答
?1.短路運(yùn)算符的特點(diǎn)
&&:如果第一個(gè)操作符為假,則不執(zhí)行后面的代碼
||:如果第一個(gè)操作符為真,則不執(zhí)行后面的代碼
#include <stdio.h>
int main()
{int a = 0, b = 1, c = 2;//int d = a++ && b++ && c;//a=0為假,后置++先使用再++//printf("a=%d,b=%d,c=%d,d=%d\n", a, b, c, d);//1,1,2,0int d = a++ || b ++ || c++;//a為0,為假,b=1為真printf("a=%d,b=%d,c=%d,d=%d\n", a, b, c, d);//1,2,2,1return 0;
}
?2.%操作符和/操作符的特點(diǎn)
1)除法的特點(diǎn):
? ? ? a.整數(shù)除法:得到的結(jié)果是整數(shù),舍棄了小數(shù)部分
? ? ? b.小數(shù)除法:得到的結(jié)果是小數(shù),兩個(gè)操作數(shù)中必有一個(gè)浮點(diǎn)數(shù)
2)%的特點(diǎn):只能進(jìn)行整數(shù)之間的取模,浮點(diǎn)數(shù)之間不能進(jìn)行取模
#include <stdio.h>
int main()
{int a = 9;int b = 2;int c = a / b;//整數(shù)除法double d = a / 2.0;//小數(shù)除法,有一方為浮點(diǎn)數(shù)printf("%d %lf\n", c, d);int e = a % b;//整數(shù)能進(jìn)行取模運(yùn)算//int f = a % 3.0;//浮點(diǎn)數(shù)不能進(jìn)行取模運(yùn)算return 0;
}
?3.逗號(hào)表達(dá)式的特點(diǎn)
? ——當(dāng)運(yùn)算中有多個(gè)逗號(hào)隔開的表達(dá)式,最后一個(gè)表達(dá)式是結(jié)果
#include <stdio.h>
int main()
{int a = 1;int b = 1;int num = (a++, b++, a);//最后一個(gè)表達(dá)式a為結(jié)果printf("%d\n", num);//2return 0;
}
?4.當(dāng)函數(shù)的返回值沒有寫的時(shí)候,默認(rèn)返回的是int
#include <stdio.h>
swap()
{int num = 10;//當(dāng)沒有寫返回值的時(shí)候,結(jié)果返回的是隨機(jī)值return num;
}
int main()
{int res = swap();printf("%d\n", res);//10return 0;
}
?5.字符串或數(shù)組在進(jìn)行傳參的時(shí)候把數(shù)組名傳過(guò)去,形參中接收到的是什么?
? ——形參收到的是數(shù)組或字符串的首元素地址
#include <stdio.h>
void test1(char* ch)
{//查看形參的地址printf("%p\n", ch);
}void test2(int* arr)
{//查看形參的地址printf("%p\n", arr);
}int main()
{char ch[100] = "abcdef";int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };//形參的地址和字符串/數(shù)組首元素的地址進(jìn)行比較test1(ch);printf("ch[0] = %p\n", &ch[0]);test2(arr);printf("arr[0] = %p\n", &arr[0]);return 0;
}
?6..建議:當(dāng)指針的內(nèi)容不需要改變的時(shí)候,加上const,const使指針指向的內(nèi)容不能改變(即加上const后具有健壯性)
#include <stdio.h>
void test(const char* arr)
{//*arr = 'a';//錯(cuò)誤,加上const后不能修改arr的值
}int main()
{char arr[100] = "abcdfhgeh";test(arr);return 0;
}
?7.怎么證明數(shù)據(jù)在內(nèi)存中存儲(chǔ)的是補(bǔ)碼?
使用負(fù)數(shù)證明,把補(bǔ)碼中存儲(chǔ)的值按照十六進(jìn)行打印
注:我們還可以使用調(diào)試來(lái)查看a在內(nèi)存中的存儲(chǔ)
#include <stdio.h>
int main()
{int a = -1;//10000000 00000000 00000000 00000001 原碼//11111111 11111111 11111111 11111110 反碼//11111111 11111111 11111111 11111111 補(bǔ)碼//四個(gè)二進(jìn)制位是一個(gè)16進(jìn)制位//ffffffffprintf("%x\n", a);//ffffffffreturn 0;
}
?8.內(nèi)存中存儲(chǔ)的是補(bǔ)碼,那么在控制臺(tái)上打印的數(shù)值是補(bǔ)碼嗎?為什么?
? ——不是,打印是十進(jìn)制數(shù),補(bǔ)碼需要轉(zhuǎn)化為原碼,在由原碼轉(zhuǎn)化為十進(jìn)制
#include <stdio.h>
int main()
{int a = -1;//10000000 00000000 00000000 00000001 原碼//11111111 11111111 11111111 11111110 反碼//11111111 11111111 11111111 11111111 補(bǔ)碼printf("%d\n", a);//-1//注意:若是按照十六進(jìn)制打印,則打印的補(bǔ)碼(因?yàn)?x是打印無(wú)符號(hào)數(shù),原碼、反碼、補(bǔ)碼均相同)return 0;
}
?9.補(bǔ)碼變成原碼的兩種形式
1)-1,取反
2)取反,+1
#include <stdio.h>
int main()
{int a = -2;//11111111 11111111 11111111 11111110 補(bǔ)碼//變回原碼:法一//11111111 11111111 11111111 11111110 補(bǔ)碼//11111111 11111111 11111111 11111101 反碼//10000000 00000000 00000000 00000010 原碼 -2//法二// 11111111 11111111 11111111 11111110 補(bǔ)碼// 10000000 00000000 00000000 00000001 取反// 10000000 00000000 00000000 00000010 +1 -2return 0;
}
?10.整數(shù)的二進(jìn)制表示形式?
?11.正/負(fù)整數(shù)的原碼、反碼、補(bǔ)碼規(guī)則
1)整數(shù)的表示形式是原碼、反碼、補(bǔ)碼;
2)正整數(shù)的表示形式均相同;
3)負(fù)整數(shù)的表示形式:原碼;反碼 = 原碼符號(hào)位不變 + 其他位按位取反
#include <stdio.h>
int main()
{int a = 1;//00000000 00000000 00000000 00000001 補(bǔ)碼printf("%x\n", a);//%x把補(bǔ)碼按照十六進(jìn)制打印 :1int b = -1;//10000000 00000000 00000000 00000001 原碼//11111111 11111111 11111111 11111110 反碼//11111111 11111111 11111111 11111111 補(bǔ)碼//ffffff --> 十六進(jìn)制形式printf("%x\n", b);//ffffffffreturn 0;
}
?12.說(shuō)說(shuō)C語(yǔ)言中#include 是什么意思
1)#include 是預(yù)處理指令
2)stdio : standard input output --> 標(biāo)準(zhǔn)輸入輸出
3).h表示這是一個(gè)頭文件?
?13.為什么long型的排名明明在int型的后面,為什么兩者的所占的字節(jié)數(shù)相等??
? ——C語(yǔ)言標(biāo)準(zhǔn)下: sizeof(long) >= sizeof(int)
#include <stdio.h>
int main()
{//int的值最大值是2147483647int a = 2147483647;long b = 2147483647;//注:兩者的最大值均是2^31-1;printf("%d\n", a);return 0;
}
?14.求出C語(yǔ)言中各個(gè)數(shù)據(jù)類型所占的字節(jié)空間
#include <stdio.h>
int main()
{printf("%d\n", sizeof(char));//1printf("%d\n", sizeof(short));//2printf("%d\n", sizeof(int));//4printf("%d\n", sizeof(long));//4printf("%d\n", sizeof(long long));//8printf("%d\n", sizeof(float));//4printf("%d\n", sizeof(double));//8return 0;
}
?15.全局變量和局部變量的區(qū)別?
1)全局變量具有全局性,在源程序中均可使用全局變量
2)局部變量具有局部性,即局限于一個(gè){}中,只能在{}中使用
3)注:當(dāng)局部變量和全局變量名字相同時(shí),在使用時(shí),優(yōu)先使用局部變量
#include <stdio.h>
int num = 10;
int main()
{{int num = 20;printf("%d\n", num);//20}printf("%d\n", num);//10return 0;
}
?16.全局變量和局部變量的作用域和生命周期?
1)作用域
? a.全局變量:全局變量的作用域在整個(gè)工程內(nèi),即整個(gè)工程內(nèi)那點(diǎn)均可使用
? b.局部變量:在自己的{}中
2)生命周期
? a.全局變量:全局變量的生命周期和整個(gè)工程的生命周期一樣
? b.局部變量:出了{(lán)}后沒有作用
#include <stdio.h>
int main()
{{int num = 10;}//printf("%d\n", num);//錯(cuò)誤,num的變量的作用域和生命周期在自己所在{}中return 0;
}
//注:我們不推薦大量使用全局變量,因?yàn)槿肿兞咳菀妆桓淖?#xff0c;一不小心就會(huì)使程序崩潰
?17.C語(yǔ)言中常量的種類及它們的使用形式?
1)字面常量:3,5,'a',"abcd"
2)const定義的常變量:const int a = 10; a不可在改變
3)#define定義的標(biāo)識(shí)符常量 : #define MAX 10
4)枚舉常量: enum Grade{ A,B,C,D};
注:常量一般需要使用大寫字面表示
#include <stdio.h>
int main()
{//字面常量3, 5, "agcgs";//const定義的常變量const int num = 10;//num = 11;//不可改變//#define定義的標(biāo)識(shí)符常量
#define MAX 10printf("%d\n", MAX);//10//枚舉常量enum Grade{A,//0B,//1C,//2D//3};printf("%d\n", A);//0printf("%d\n", B);//1printf("%d\n", C);//2printf("%d\n", D);//3return 0;
}
?18.scanf()和printf()函數(shù)的返回值是什么類型?并查看它們的函數(shù)模型
? ——scanf()和printf()函數(shù)的返回類型是int
#include <stdio.h>
int main()
{int num = 0;int ret = scanf("%d", &num);int res = printf("%d\n", num);printf("%d %d\n", ret, res);//1 2return 0;
}
?函數(shù)模型:
?
?19.C語(yǔ)言中的字符串結(jié)束標(biāo)志是什么?如何查看一個(gè)字符串中是否有結(jié)束標(biāo)志?
? ——結(jié)束標(biāo)志:'\0'
#include <stdio.h>
int main()
{char str[100] = "abcdhdde";return 0;
}
? 調(diào)式過(guò)程:
?20.?代碼驗(yàn)證:為什么C語(yǔ)言中0表示假,非0表示真
#include <stdio.h>
int main()
{int a = 0;int b = -1;int c = 1;if (a){printf("haha\n");}if (!a){printf("hehe\n");}if (b){printf("hihi\n");}if (c){printf("hoho\n");}return 0;
}
? !!!恭喜,成功突破至筑基八層!!!