日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言期末考试知识点总结

發(fā)布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言期末考试知识点总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

二.章節(jié)速覽

三.常用程序源碼:


標題一.C?語言總復習?

總體上必須清楚的:

1)程序結構是三種:?順序結構?,?循環(huán)結構?(三個循環(huán)結構),?選擇結構?(if??switch)

2)讀程序都要從main()入口,?然后從最上面順序往下讀(碰到循環(huán)做循環(huán),碰到選擇做選擇),直到主函數結束。

3)計算機的數據在電腦中保存是以 二進制的形式,數據存放的位置就是他的地址,地址是十六進制的.

4)bit是位 是指為0?或者1。?byte?是指字節(jié),?一個字節(jié)?=?八個位.

5)一定要記住 二進制 如何劃成 十進制。

6)描述算法有三種常用方法:偽代碼,流程圖或N-S圖,自然語句。

概念常考到的:?

1、編譯預處理不是C語言的一部分,不再運行時間。C語言編譯的程序稱為源程序,它以ASCII數值存放在文本文件中。

2、每個C語言程序中main函數是有且只有一個。

3、在函數中不可以再定義函數。

4、算法的是一定要有輸出的,他可以沒有輸入。

5、break可用于循環(huán)結構和switch語句。

6、運算符優(yōu)先級中,單目運算符>雙目運算符>三目運算符,算術運算符>關系運算符>邏輯運算符>賦值運算符,逗號運算符的級別最低。

二.章節(jié)速覽

第一章

1)合法的用戶標識符考查:

合法的要求是由字母,數字,下劃線組成。有其它元素就錯了。

并且第一個必須為字母或則是下劃線。第一個為數字就錯了。

關鍵字不可以作為用戶標識符號。main??define??scanf??printf?都不是關鍵字。迷惑你的地方If是可以做為用戶標識符。因為If中的第一個字母大寫了,所以不是關鍵字。

2)實型數據的合法形式:

2.333e-1?就是合法的,且數據是2.333×10-1。

考試口訣:e前e后必有數,e后必為整數。.

3)字符數據的合法形式::

?? '1'?是字符占一個字節(jié),"1"是字符串占兩個字節(jié)(含有一個結束符號)。

?'0'?的ASCII數值表示為48,'a'?的ASCII數值是97,'A'的ASCII數值是65。

4)字符型變量占1個字節(jié),整型占4個字節(jié),單精度浮點型占4個字節(jié),雙精度占8個。

5)轉義字符的考查:

???

轉義字符作用ASCII值
\a響鈴007
\b退格008
\f換頁012
\n換行010
\r回車013
\t水平制表009
\v垂直制表011
\\反斜杠092
\?問號字符063
\'單引號字符039
\"雙引號字符034
\0空字符000
\ddd任意字符三位八進制
\xhh任意字符二位十六進制

6)算術運算符號的優(yōu)先級別:

???同級別的有的是從左到右,有的是從右到左。

7)強制類型轉換:

??一定是 (int)a?不是??int(a),注意類型上一定有括號的。

???注意(int)(a+b)和(int)a+b?的區(qū)別。 前是把a+b轉型,后是把a轉型再加b。

8)表達式的考查:

???是表達式就一定有數值。

???賦值表達式:表達式數值是最左邊的數值,a=b=5;該表達式為5,常量不可以賦值。

???自加、自減表達式:假設a=5,++a(是為6),?a++(為5);

運行的機理:++a?是先把變量的數值加上1,然后把得到的數值放到變量a中,然后再用這個?++a表達式的數值為6?,而a++是先用該表達式的數值為5?,然后再把a的數值加上1為6,

再放到變量a中。 進行了++a和a++后在下面的程序中再用到a的話都是變量a中的6了。

??考試口訣:++在前先加后用,++在后先用后加。

逗號表達式:優(yōu)先級別最低 ;表達式的數值逗號最右邊的那個表達式的數值。

(2,3,4)的表達式的數值就是4。

9)位運算的考查:

 會有一到二題考試題目。

總的處理方法:幾乎所有的位運算的題目都要按這個流程來處理(先把十進制變成二進制再變成十進制)。

例1: char a = 6, b;

b = a<<2;??這種題目的計算是先要把a的十進制6化成二進制,再做位運算。

例2: 一定要記住,

例3: 在沒有舍去數據的時候,<<左移一位表示乘以2;>>右移一位表示除以2。

10)018的數值是非法的,八進制是沒有8的,逢8進1。?

11)%符號兩邊要求是整數。不是整數就錯了。

12) 取整丟小數的情況:

       1、int a =1.6;

??????????????2、(int)a;  

第二章

1)printf函數的格式考查:

???? %d對應整型);%c對應字符;%f對應單精度等等。寬度的,左對齊等修飾。

???? %ld對應?long int;%lf?對應double。

注:有時需要用到如:%3d,%.f,%-5等形式,在‘%’和‘d/c/f’前的數字代表輸出的數據占據幾個位置,而數字之前的負號表示讓輸出的數據多對齊,用這種方法能很好的實現輸出數據的美觀。

2)scanf函數的格式考察:

???注意該函數的第二個部分是?&a?這樣的地址,不是?a??

?? Scanf(“%d%d%*d%d”,&a,&b,&c);?跳過輸入的第三個數據。

注:若每個數據使用空格隔開,則%c之前的空格不可省略,否則發(fā)生錯誤。

3)putchar ,getchar?函數的考查:

?? char??a = getchar()?是沒有參數的,從鍵盤得到你輸入的一個字符給變量a。

?? putchar(‘y’)把字符y輸出到屏幕中。

4)如何實現兩個變量x?,y中數值的互換(要求背下來)

???不可以把?x=y ,y=x;?要用中間變量?t=x;x=y;y=t。

5)如何實現保留三位小數,第四位四舍五入的程序,(要求背下來)

???這個有推廣的意義,注意?x =?(int)x?這樣是把小數部分去掉。

第三章

特別要注意:c語言中是用非0表示邏輯真的,用0?表示邏輯假的。?

1)關系表達式:

???表達式的數值只能為1(表示為真),或0(表示假)

???當關系的表達是為真的時候得到1。如?9>8這個是真的,所以表達式的數值就是1;

2)邏輯表達式:

?????只能為1(表示為真),或0(表示假)

?????a)共有&&?? ||???! 三種邏輯運算符號。

?????b)!>&&>||??優(yōu)先的級別。

?????c)注意短路現象。考試比較喜歡考到。

?????d)要表示?x?是比0大,比10小的方法。?0<x<10是不可以的(一定記住)。是先計算0<x?得到的結果為1或則0;再用0,或1與10比較得到的總是真(為1)。所以一定要用?(0<x)&&(x<10)表示比0大比10小。?

3)if?語句

?? else?是與最接近的if且沒有else的相組合的。

4)條件表達式:

??? 表達式1??表達式2?:表達式3

??? 注意是當非0?時候是表達式2的數值,當為0?是就是表達式2的數值。

考試口訣:真前假后。

5)switch語句:

a)一定要注意 有break?和沒有break的差別,沒有break時候,只要有一個case匹配了,剩下的都要執(zhí)行,有break則是直接跳出了swiche語句。

?b)switch只可以和break一起用,不可以和continue用。

第四章

1)三種循環(huán)結構:

?? a)for() ;?while();?? do- while()三種。

?? b)for循環(huán)當中必須是兩個分號,千萬不要忘記。

?? c)寫程序的時候一定要注意,循環(huán)一定要有結束的條件,否則成了死循環(huán)。

?? d) do-while()循環(huán)的最后一個while();的分號一定不能夠丟。(當心上機改錯)

2) break?和??continue的差別

???記憶方法:

break:是打破的意思,(破了整個循環(huán))所以看見break就退出一層循環(huán)。

continue:是繼續(xù)的意思,(繼續(xù)循環(huán)運算),但是要結束本次循環(huán),就是循環(huán)體內剩下的語句不再執(zhí)行,跳到循環(huán)開始,然后判斷循環(huán)條件,進行新一輪的循環(huán)。

3)嵌套循環(huán)

? ?多個或者多種循環(huán)的嵌套使用,循環(huán)內還有循環(huán),外層循環(huán)執(zhí)行一次,內層循環(huán)執(zhí)行一輪。

4) while((c=getchar())!=’\n’) 和?while(c=getchar() !=’\n’)的差別

先看a = 3 != 2??和(a=3)!=2?的區(qū)別:

(!=號的級別高于=號?所以第一個先計算?3!=2)?第一個a的數值是得到的1;第二個a的數值是3。

考試注意點:?括號在這里的重要性。

第五章

函數:是具有一定功能的一個程序塊;

1)?函數的參數,返回數值(示意圖):

??main()

{

int a = 5,b=6,c;

??c =?add(a,b);

??printf(“%d”,c);

}

調用函數

a,b是實參

整個函數得到一個數值就是

Add函數的返回數值。

int add ( int x, int y)

{

int z;

??z=x+y;

??return z;

}

被調用函數

x,y是形式參數

函數返回數值是整型

z就是這個add函數計算后得到的結果,就是函數返回給主程序的返回數值。

程序是在從上往下順序執(zhí)行,當碰到了函數add后,把a,b的數值穿給調用函數,程序暫時中斷等待返回數值。當得到了返回數值后,再順序的往下執(zhí)行

2)一定要注意參數之間的傳遞

??實參和形參之間?傳數值,和傳地址的差別。(考試的重點)?

??????傳數值的話,形參的變化不會改變實參的變化。

??????傳地址的話,形參的變化就會有可能改變實參的變化。

3)函數聲明的考查:

一定要有:函數名,函數的返回類型,函數的參數類型。

不一定要有:形參的名稱。

4)遞歸:函數自己調用自己稱為遞歸,而兩個函數相互調用則稱為間接遞歸。

遞歸的謹慎使用:倘若不能夠熟練使用遞歸,最好不要使用,否則容易讓自己暈頭轉向,而且遞歸運算無論是時間還是空間占用也不小。

第六章

1一維數組的重要概念:

對a[10]這個數組的討論。

1、a表示數組名,是第一個元素的地址,也就是元素a[10]的地址。

2、a作為數組名,本質是地址,所以只要出現a++,或者是a=a+2賦值的都是錯誤的。

3、a是一維數組名,所以它是列指針,也就是說a+1是跳一列。 

對a[3][3]的討論。

1、a表示數組名,是第一個元素的地址,也就是元素a[3][3]的地址。

2、a作為數組名,本質是地址,所以只要出現a++,或者是a=a+2賦值的都是錯誤的。

3、a是二維數組名,所以它是行指針,也就是說a+1是跳一行。

4、a[0]、a[1]、a[2]也都是地址常量,不可以對它進行賦值操作,同時它們都是列指針,a[0]+1,a[1]+1,a[2]+1都是跳一列。

5、注意a和a[0]?、a[1]、a[2]是不同的,它們的基類型是不同的。前者是一行元素,后三者是一列元素。

二維數組做題目的技巧:

如果有a[3][3]={1,2,3,4,5,6,7,8,9}這樣的題目。

步驟一:把他們寫成矩陣形式:      

第一列 第二列 第三列  

a[0]à ?1?? ? 2? ? ??3???->第一行

a[1]à? ? ?4???? 5? ?6 ?—>第二行

a[2]à? ? ?7???? 8? ? ??9  ->第三行

步驟二:這樣作題目間很簡單:    

*(a[0]+1)我們就知道是第一行的第一個元素往后面跳一列,那么這里就是a[0][1]元素,所以是1。

*(a[1]+2)我們就知道是第二行的第一個元素往后面跳二列。那么這里就是a[1][2]元素,所以是6。

一定記住:只要是二維數組的題目,一定是寫成如上的格式,再去做題目,這樣會比較簡單。

數組的初始化,一維和二維的,一維可以不寫,二維第二個一定要寫

??????int a[]={1,2}?合法。?? int a[][4]={2,3,4}合法。???但int a[4][]={2,3,4}非法。

二維數組中的行指針???????int a[1][2];?

其中a現在就是一個行指針,a+1跳一行數組元素。??搭配(*)p[2]指針

???? a[0],a[1]現在就是一個列指針。a[0]+1?跳一個數組元素。搭配*p[2]指針數組使用

還有記住脫衣服法則:

?? a[2]??變成?? *(a+2)?? a[2][3]變成?*(a+2)[3]再可以變成?? *(*(a+2)+3)???這個思想很重要!

第七章

指針變量的本質是用來放地址,而一般的變量是放數值的。?

int??*p?中?? *p和p的差別:

*p可以當做變量來用;*的作用是取后面地址p里面的數值

p是當作地址來使用。

*p++?和 (*p)++的之間的差別:改錯題目中很重要

???????? *p++是 地址會變化。

?????????(*p)++?是數值會要變化。??????????????????

注:分清楚指針數組,數組指針,指針函數和函數指針,在這四種讓人暈頭轉向的名稱中,其實每一種的本質取決于他的第一個名詞,如指針數組int *p[4],其實它本質上是指針,不過以數組的形式存放,即數組的每個元素都是一個指針;數組指針:本質上是一個指針,指向一個數組;指針函數:本質是一個函數,返回值是指針;函數指針:本質是一個指針,指向一個函數。

其他:

三名主義:(考試的重點)

???數組名:表示第一個元素的地址。數組名不可以自加,他是地址常量名。(考了很多次)

???函數名:表示該函數的入口地址。

???字符串常量名:表示第一個字符的地址。

注意事項:1).數組下標不要越界;

? ? ? ? ? ? ? ? ? 2).函數的返回類型由函數類型決定而非變量類型決定;

? ? ? ? ? ? ? ? ? 3).運算符優(yōu)先級一定要記清楚;

? ? ? ? ? ? ? ? ? 4).寫程序是最好有注釋,這不但是個好習慣,也有助于程序美觀,增加程序可讀性。

三.常用程序源碼:


冒泡排序(為了確保程序簡單,照顧函數可能不太明朗的讀者,三個基礎排序程序均不使用自定義函數):

#define _CRT_SECURE_NO_WARNINGS #define N 10 #include <stdio.h> void main() {int a[N], i, j, t;for (i = 0; i < N; i++) //輸入N個數據{scanf("%d", &a[i]);}for (i = 0; i < N-1; i++) //外層循環(huán)控制輪數,只需要進行N-1輪{for (j = 0; j < N - 1 - i; j++) //內層循環(huán)遍歷后面每個數據(可以理解為數學中的握手問題,10數據分別需要9,8,7...2,1次。){if (a[j] > a[j+1]) //大小判斷{t = a[j]; //數據置換a[j] = a[j+1];a[j+1] = t;}}}for (i = 0; i < N; i++) //輸出{printf("%-3d", a[i]);} }

選擇排序:

#define _CRT_SECURE_NO_WARNINGS #define N 10 //定義N為10,即數組的長度 #include <stdio.h> void main() {int a[N] , t, i,j;for (i = 0; i < N; i++) //循環(huán)輸入N個數據scanf("%d", &a[i]); for (i = 0; i < N - 1; i++) //選擇排序需要進行N-1輪比較,外層循環(huán)控制輪數{for (j = i + 1; j < N; j++) //因為是a[i]同它之后的數據作比較,所以j從i+1開始,內層循環(huán)讓a[i]同它之后的每個數據進行比較{if (a[i] < a[j]) //判斷大小{ t = a[i]; //數據置換a[i] = a[j];a[j] = t;}}}for (i = 0; i < N; i++) //輸出{printf("%6d", a[i]);} }

插入排序:

#define _CRT_SECURE_NO_WARNINGS #define N 10 #include <stdio.h> void main() {int i, j, t,a[N];for (i = 0; i < N; i++) //輸入N個數據scanf("%d", &a[i]);for (i = 1; i < N; i++) //外層循環(huán)從第二數據開始{t = a[i]; j = i-1; //j從0開始while (j >= 0 && a[j] > t) //判斷大小并且保證下標不會越界{a[j + 1] = a[j]; //數據的置換j--;}a[j + 1] = t; }for (i = 0; i < N; i++) //循環(huán)輸出printf("%-3d", a[i]); }

蛇形矩陣:

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> void fun(int N, int r) //形參N,r {int f = 1, i;for (i = 1; i <= r; i++){f += i - 1; //f為每一行第一個數據的值}int t = f;int n = r + 1;for (i = 1; i < N - r + 1; i++){if (i < N - r + 1)printf("%d ", t); //不是每行最后一個數據則多數出一個空格elseprintf("%d", t); //每行最紅一個空格只輸出數據t += n; //t存放每次要輸出的數據n++; //n每次循環(huán)后自加} } void main() {int N, i;scanf("%d", &N); //輸入行數for (i = 1; i <= N; i++) //循環(huán)控制每行{fun(N, i); //實參對應自定義函數N,rprintf("\n"); //每行輸出結束后換行} }

函數遞歸之斐波那契:

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int Fib(int n) {if (n == 1 || n == 2) //斐波那契數列的第一二項均為1return 1;elsereturn Fib(n - 1) + Fib(n - 2); //遞歸調用 } void main() {int n,s; scanf("%d", &n); //輸入ns = Fib(n); //s存儲Fib函數的返回值printf("%d\n", s); }

函數遞歸之漢諾塔:

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> void fun(int n, int a, int b, int c) {if (n == 1)printf("%d->%d\n", a, c);else{fun(n - 1, a, c, b);printf("%d->%d\n", a, c);fun(n - 1, b, a, c);} } void main() {int n;scanf("%d", &n);fun(n, 1, 2, 3); }

最后附上一個我copy的表白程序,祝各位早日脫單,把握住:

#include<stdio.h> #include<math.h> #include<windows.h> int main() {printf("\t\t\t\t\t**我愛你\n\n");printf("\t\t\t\t綢繆束薪,\t\t三心在天。\n");printf("\t\t\t\t今夕何夕,\t\t見此良人。\n");printf("\t\t\t\t子兮子兮,\t\t如此良人何!\n");for (double y = 1.9; y > -1.2; y -= 0.1) {for (double x = -1.8; x < 2.6; x += 0.04) {if (x * x + (y - pow(x * x, 1.0 / 3)) * (y - pow(x * x, 1.0 / 3)) <= 1) printf("*");else if (x <= -1.4 && x >= -1.7 && y <= 1.6 && y >= -1.1) printf("*");else if (x >= 1.4 && x <= 1.6 && y <= 1.6 && y >= -1.1) printf("*");else if (x >= 2.3 && x <= 2.5 && y <= 1.6 && y >= -1.1) printf("*");else if (x >= 1.6 && x <= 2.3 && y <= -0.7 && y >= -1.1) printf("*");else printf(" ");}system("color 5c");printf("\n");}getchar();return 0; }

總結

以上是生活随笔為你收集整理的C语言期末考试知识点总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。