![二級C語言各章的知識點 (2)_第1頁](http://file4.renrendoc.com/view/1d1920ae6e487a4523e61164b790dcb5/1d1920ae6e487a4523e61164b790dcb51.gif)
![二級C語言各章的知識點 (2)_第2頁](http://file4.renrendoc.com/view/1d1920ae6e487a4523e61164b790dcb5/1d1920ae6e487a4523e61164b790dcb52.gif)
![二級C語言各章的知識點 (2)_第3頁](http://file4.renrendoc.com/view/1d1920ae6e487a4523e61164b790dcb5/1d1920ae6e487a4523e61164b790dcb53.gif)
![二級C語言各章的知識點 (2)_第4頁](http://file4.renrendoc.com/view/1d1920ae6e487a4523e61164b790dcb5/1d1920ae6e487a4523e61164b790dcb54.gif)
![二級C語言各章的知識點 (2)_第5頁](http://file4.renrendoc.com/view/1d1920ae6e487a4523e61164b790dcb5/1d1920ae6e487a4523e61164b790dcb55.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、各章的知識點第一章(略-給學生們在書上畫一下)第二章C程序基礎知識(以下列舉的知識點給學生在書上畫一畫,有的可以寫在書上的空白地方或寫在本上)1 簡單的C語言程序的構成(1)一個C程序只有一個main()-稱為主函數(shù),main要小寫,程序的執(zhí)行是從主函數(shù)開始并在主函數(shù)中 結束,一個完整的C程序是由一個主函數(shù)和若干個子函數(shù)構成的。(2)函數(shù)內部稱為函數(shù)體,由一對大括號括起來,在里,前面必須是定義各種所需的變量,后面才是各種語句,二者不能顛倒,并且一個語句結束必須有分號;下面是例子:#include”stdio.h” /* 或寫成#include嵌入頭文件 ,注意前面要有#號,后面沒有;號 ,所以
2、它不是語句*/main()int a,b,c; /* 定義三個整型變量 */a=2; /*以下三句是賦值語句,注意每個語句都有分號; */b=3;c=a+b;printf(“%d”,c); /* 把變量C的值在電腦屏幕上顯示-稱為輸出語句 */把這個程序領著學生在VC6里演示一下,讓學生會運行程序,并且會看輸出結果。2 關于/* .*/-稱為注釋,它不運行把從/*開始到*/結束的語句行都作為注釋(記住注釋是不運行的)-老師在投影上舉一例說明。不能嵌套注釋,如:/*/*.*/*/3 關于給變量起名的問題,也就是變量名的命名規(guī)則由字母az、AZ、09、_(下劃線)組成由字母或下劃線開頭大、小寫的字
3、母是不同的變量不能使用C語言的關鍵字(關鍵字是小寫的)老師在此可以舉例說明4 在C語言中經??梢杂玫侥男╊愋偷淖兞亢统A康膯栴}(1)若有f(x)=2x2 +5 ,其中X是變量,5是常量,那么X的取值范圍是什么 呢?是有符號整型?無符號整型?短整型?長整型?單精度浮點型?雙精度浮點型等等,這個問題在C語言的程序設計中對變量X的取值范圍規(guī)定的比較清楚。下面就介紹一下在C語言中對變量X 是如何規(guī)定它的取值范圍的。呵呵! int x(signed int x或signed x)-稱為普通整型,它規(guī)定了X的取值范圍是下列類型(注意:這里的變量X 是用4個字節(jié)來存放的) 十進制的-正整數(shù)、負整數(shù)、0,如:
4、25、-36等 八進制的-正整數(shù),如:065等,-065(不允許 ) 十六進制的-正整數(shù),如:0 x2c,0Xa6等,-0 xa1(不允許) short int x(short x)-稱為短整型,它規(guī)定的X的取值范圍和int x基本一樣,只不過取的數(shù)要比int x要小而已,因為它是用兩個字節(jié)來存放X的(-32768+32767)。而上面的是用 四個字節(jié)來存放X的。long int x(long x)-稱為長整型,其規(guī)定的X取值范圍和int x一樣,也是用四個字節(jié)來存放X的(輸入時要用%ld、%Ld)。unsigned int x(unsigned x)-稱為無符號整型,它規(guī)定了X只能取正整數(shù),
5、也是用四個字節(jié)來存放X的。unsigned short int x-稱為無符號短整形,其十進制的 取值范圍喂065535char x-稱為字符型,用一對單引號括起來的任意字符,包括字母字符、數(shù)字字符、轉義字符等如:a、3、n等分析:a、A 、2、 2 、ab 、123float x-單精度浮點型,小數(shù)點后默認保留6位小數(shù)如:0.123、.123、123.等1.23e+2、1.23e2、1.23E2、.123e-2等(指數(shù)形式)用指數(shù)形式表示浮點數(shù)要注意三點:、e或E前后必須有數(shù) 、e或E后面必須是整數(shù) 、e或E的前后以及數(shù)字之間不得插入空格double x-雙精度浮點型(輸入時要用%lf或%L
6、f,輸出可用%f、%lf、%Lf)(2)關于常量(整數(shù)、小數(shù)、字符型數(shù)據(jù))5-可以認為是int型、short int、unsigned int都可以5L或5l-是long int型5h或5H-是short int型1.23-是double型a-97A-652-50123-(3)關于類型的強制轉換問題-即把一個類型強制轉換成其他類型如:#include”stdio.h”main()int x=5; /* 給變量X初始化*/float y,z;z=2.56; /*給變量Z賦值 */y=(float)x; /*對變量X的值進行強制轉換 ,而X的類型和值都不改變 */printf(“%d,%fn”,x
7、,y); /*5,5.000000 */x=(int)z; (或寫成x=z) /* 對變量Z的值進行強制轉換,且不進行四舍五入*/printf(“%d”,x); /* 2 */分析:a=(float)b+c;和a=(float)(b+c);有什么區(qū)別?關于強制轉換要注意兩點:一是待轉換的類型一定要用小括號括起來;二是對后面變量的值進行轉換,不改變原來變量的類型和值,并且不進行四舍五入。5 常用的算術運算符+、-、*、/、%、+=、-=、*=、/=、+、-、,等下面把需要特殊注意的運算符加以說明:/-除號, 若分子和分母都是整型,其結果也是整型(不進行四舍五入) 若分子或分母至少有一個是浮點型,
8、其結果就是浮點型。%-取余,注意%的前后都必須是整型的,且結果的符號與被除數(shù)相同.舉例:把兩個兩位的正整數(shù)按要求組成一個新數(shù)a=45,b=32,要求組成一個新數(shù)C=4325#include”stdio.h”main()int a=45,b=32,c;c=a/10*1000+b/10*100+b%10*10+a%10;printf(“%d”,c);分析:如何取出1234的每個位上的數(shù)?(使用算術符%和 /)+=、-=、*=、/=-稱為復合運算符(注意:兩個符號不能分開)如:a=a+b;可以寫成a+=b;a+=b-c 和a-=b+c可以寫成什么呢?(由學生來回答)a+=a-=a+a (假設a=9)
9、,最后a=?(-18)(由老師來講解)+、-稱為自增自減運算符(單目的),很重要如:a+ 先用a,然后再把a加1+a 先把a加1,然后再用aa- 先用a,然后再把a減1-a 先把a減1,然后再用a舉例:見如下程序#include”stdio.h”main()int a=3,b=6,c,d,e,f;c=b+a+;d=a+(-b);e=-a+;f=a+b+c;printf(“a=%d,b=%d,c=%d,d=%d,e=%d,f=%dn”,a,b,c,d,e,f);答案:a=5,b=5,c=9,d=9,e=-4,f=19 , 逗號-稱為逗號運算符,由逗號運算符構成逗號表達式,逗號表達式最后一項的值就
10、是逗號表達式的值,逗號運算符的優(yōu)先級最低。如:a=3,b=4,c=5;x=(a,b,c); 問:x=?(5),逗號表達式的值=?(5)x=a,b,c; 問:x=?(3),逗號表達式的值=?(5)x=(a+,-b,a+b); 問:x=?(7),逗號表達式的值=?(7)x=a+,-b,a+b; 問:x=?(3),逗號表達式的值=?(7)x=(a+,-b,a+b+c+); 問:x=?(12),逗號表達式的值=?(12)6 關于數(shù)據(jù)溢出問題,看下面例子:int a=-3;unsigned short x;x=a; 問:x=?(65533)7 分析:int a=b=c=1;對不? 領學生做書后的習題第三
11、章順序結構程序設計1 關于輸出函數(shù)的使用 使用的格式: printf(“各種字符及漢字等”);/*printf要小寫 */ 這種使用就是在屏幕上顯示雙引號中的內容 printf(“輸出格式控制”,待輸出的變量列表);這種使用就是在屏幕上以何種形式輸出變量的值要重點掌握輸出格式控制都有哪些?格式符:%d 以普通整型輸出(不可以寫成%D)%md 以普通整型輸出,數(shù)據(jù)占m位,右對齊%+md 以普通整型輸出,數(shù)據(jù)占m位,右對齊(正數(shù)的前面有+號)%-md 以普通整型輸出,數(shù)據(jù)占m位,左對齊%hd 以短整型輸出%ld(或%Ld) 以長整型輸出%u 以無符號整型輸出%o 以八進制形勢輸出%x(或%X) 以
12、十六進制形勢輸出%f 以單精度小數(shù)形勢輸出,點后6位小數(shù)%lf(或%Lf或%f) 以雙精度小數(shù)形勢輸出,%m.nf 以單精度小數(shù)形勢輸出,點后n位小數(shù),且進行四舍五入%.nf 以單精度小數(shù)形勢輸出,點后n位小數(shù),且進行四舍五入%c 以字符形式輸出%s 以字符串形式輸出說明:以上的常用格式符必須和后面的變量一一對應,并且后面的 變量是什么類型前面就必須用相應的格式符例:int a=-2;unsigned int b=30;float c=3.1456;printf(“%d%u%5.2f”,a,b,c); 問:輸出結果是什么?(-230 3.15)普通字符普通字符原樣輸出,它不控制變量的輸出。pr
13、intf(“a=%d,b=%u,c=%5.2f”,a,b,c); 問:輸出結果是什么?轉義字符n 回車且換行r 回車但不換行b 退一個字符t 走一個制表位(8個字符) 轉譯成 轉譯成” 轉譯成”% 轉譯成%ddd 轉譯成13位八進制所對應的ascii碼值所代表的字符xdd 轉譯成12位十六進制所對應的ascii碼值所代表的字符 老師舉例子說明如:printf(“a=%d,b=%u,c=%5.2fn”,a,b,c); printf(“%cn%cn”,56,x2a);問:以上輸出結果是什么?答案:int a=1,b=3;printf(“%d”,a,b);輸出結果是什么?(1)printf(“%d”
14、,(a,b); 輸出結果是什么?(3)2 關于輸入函數(shù)的使用格式:scanf(“輸入格式控制”,變量地址列表);重點掌握都有哪些輸入格式?(有格式符和普通字符,沒有轉義字符)格式符:%d 以普通整型輸入%ld(%Ld) 以長整型輸入%hd 以短整形輸入%md 取整型的m位%u 以無符號型輸入%o 以八進制輸入%x(%X) 以十六進制輸入%f 以單精度小數(shù)輸入%lf(%Lf) 以雙精度小數(shù)輸入%mf 以單精度小數(shù)輸入(但是不能規(guī)定它的精度。如:%5.2f )%c 以字符型輸入%s 以字符串型輸入如:int a;float b;double c;long d;scanf(“%d%f%lf%ld”,
15、&a,&b,&c,&d);假設讓 a=23,b=2.6,c=12.66,d=12345問:在鍵盤上應如何輸入?普通字符普通字符不影響輸入,只是在輸入時原樣打上就 行如:把上例改為:scanf(a=%d,b=%f,c=%lf,d=%ld);那么應該如何輸入?關于混合輸入問題如:假設讓a=23,b=k,c=12.5,d=pscanf(“%d%c%f%c”,&a,&b,&c,&d);問:如何輸入?(23k 12.5p或23k12.5p)關于跳過某個輸入項的問題如:scanf(“%d%*d%f”,&x,&y);假設輸入如下:20 30 2.5回車問:x=? (20) y=?(2.5)按照給定的長度輸入
16、如:scanf(“%3d%2d”,&x,&y);假設輸入如下:2345678回車問:x=? (234) y=?(56)下面舉三個綜合的 例子:(讓學生自己寫寫看行不?)例1:從鍵盤輸入兩個兩位的正整數(shù),第一個數(shù)的十位作為千位,個位作為十位;第二個數(shù)的十位作為百位,個位作為個位,組成一個新的數(shù)輸出。#include”stdio.h”main()int a,b,c; scanf(“%d%d”,&a,&b); c=a/10*1000+b/10*100+a%10*10+b%10;printf(“nc=%d”,c);例2:從鍵盤輸入兩個數(shù),然后把這兩個數(shù)交換并輸出#include”stdio.h”mai
17、n()int a,b,t; scanf(“%d%d”,&a,&b); t=a;a=b;b=t;printf(“n%d,%d”,a,b);例3:輸入一個double型數(shù),保留兩位小數(shù),第三位小數(shù)進行四舍五入,然后輸出。#include”stdio.h”main()double x,y; scanf(“%lf”,&x); y=(int)(x*100+0.5)/100.0;printf(“ny=%.2f”,y);最后領學生做做書后習題第四章 選擇(分支)結構程序設計1 在C語言中真和假的概念 真-若一個表達式成立則稱為真;若值為非0也稱為真。2關系運算符和關系表達式C語言提供六種關系運算符: = =
18、 (等于) !=(不等于)注意幾點:由兩個符號組成的關系運算符不能分開前四個運算符優(yōu)先級相同且高于后兩個關系符低于算術運算符,但高于賦值運算符(=) 如:a+b=c相當于(a+b)=c關系表達式的值:一個是真(用1來表示);另一個是假(用0來表示)注意“=“和”=“的區(qū)別 0 x-5&x0&xy邏輯表達式,如xy&yz算術表達式,如x+y賦值表達式,如x=y變量,如x常量,如-5+ 或出現(xiàn)在條件里,如x+y如果語句1或語句2是一條語句,則一對花括號可以省略 if.else 是一條語句,else 不能單獨出現(xiàn),要注意else 與 if的搭配問題(既:else與其上面最近的且沒使用的if搭配)下面
19、舉幾個例子來說明:例1:從鍵盤輸入一個整數(shù),判斷其是奇數(shù)還是偶數(shù)?#include”stdio.h”main()int x,y;scanf(“%d”,&x);if(x%2=0) printf(“偶數(shù)”); else printf(“奇數(shù)”);例2:下面程序的輸出結果是什么?#include”stdio.h”main()int a=2,b=-1,c=2;if(ab) if(b0) c=0; else c+=1;printf(“%d”,c);答案:2例3:下面程序的輸出結果是什么?#include”stdio.h”main()int a=2,b=-1,c=2;if(ab) if(b0) c=0;
20、else c+=1;printf(“%d”,c);答案:3例4:下面程序的輸出結果是什么?#include”stdio.h”main()int a=2,b=-1,c=2;if(a+b) if(b0) c=0; else c+=1;printf(“%d,%d”,c,a);答案:2,3分析:可以把條件a+b分成三個步驟來執(zhí)行:第一步:先判斷ab是真?還是假?第二步:把a加1,既a=a+1第三步:根據(jù)第一步的判斷情況來決定程序的執(zhí)行方向請同學們考慮:若改為+ab呢?例5:下面程序的輸出結果是什么?#include”stdio.h”main()int a=2,b=-1,c=2;if(a=b) if(b
21、b?a:b; 問:y=?(2)y=ab?a:ac?c:a; 問:y=?(1)用switch開關語句來實現(xiàn)程序的分支格式:switch() case 常量表達式1:語句; case 常量表達式2:語句; case 常量表達式3:語句; 。 。 。 default :語句 注意以下幾點:switch和case是關鍵字,要小寫switch后面括號里可以是以下內容: 整型常量或變量、字符常量或變量、關系表達式、邏輯表達式、整型的算術表達式,總之是整數(shù)case要和后面的常量表達式用空格分開,且這個常量表達式必須是整型常量或字符常量,不是變量。default可以放在任何位置,不一定在最后,也可以沒有可以用
22、break 語句跳出switch舉幾個例子:例1:程序輸出結果是什么?#include”stdio.h”main()int x=0,y=2,z=3;switch(x) case 0:printf(“*”); case 1:printf(“#”);break; default: printf(“!”); 答案:*#例2:程序輸出結果是什么?#include”stdio.h”main()int x=0,y=2,z=3;switch(x) case 0:switch(y=2)case 1: printf(“*”);break case 2:printf(“%”);break; case 1:prin
23、tf(“#”);break; default: printf(“!”); 答案:*#領學生做書后習題第五章循環(huán)結構程序設計如何計算1+2+3+4+。+100?這就需要用到循環(huán),C語言有三種循環(huán)結構,既:while()、 dowhile;、for()#include”stdio.h”main()int i,sum=0; /* 定義所需的變量,并給變量sum初始化為0 */i=1;while(i0);或寫成while(x0);請說出循環(huán)條件和循環(huán)體?dowhile()循環(huán)格式:do 循環(huán)體 while(循環(huán)條件);既:先執(zhí)行循環(huán)體中的語句,執(zhí)行完后再去判斷循環(huán)條件,若為真,則繼續(xù)執(zhí)行循環(huán)體,否則退
24、出循環(huán)。注意以下幾點:do和 while是關鍵字,都要小寫循環(huán)至少執(zhí)行一次while()后面要有分號;for循環(huán)格式:for(表達式1;表達式2;表達式3) 循環(huán)體執(zhí)行過程:先執(zhí)行表達式1,然后判斷表達式2是否為真?,若為假則退出循環(huán);若為真則執(zhí)行循環(huán),再執(zhí)行表達式3,然后再去判斷表達式2是否為真?,若為真則繼續(xù)執(zhí)行循環(huán)體,再執(zhí)行表達式3,直到表達式2為假注意以下幾點:三個表達式可有可無,但分號;必須有三個表達式的含義如下: 表達式1:一般是給變量賦值的表達式2:是循環(huán)條件表達式3:是變量的變化重點弄明白循環(huán)條件是什么?循環(huán)體是誰?如何結束循環(huán),兩種方式:一是正常結束(既不滿足循環(huán)條件了)二是
25、中途結束(用break語句)用dowhile()循環(huán) 和for()循環(huán)來改寫上面的例子:1 用dowhile()循環(huán)#include”stdio.h”main()int i,sum=0; /* 定義所需的變量,并給變量sum初始化為0 */i=1;dosum+=i; i+;while(i100); /* 注意后面的分號一定要有 */printf(“%d”,sum);2 用for()循環(huán)#include”stdio.h”main()int i,sum=0; /* 定義所需的變量,并給變量sum初始化為0 */for(i=1;i=100;i+)sum+=i;printf(“%d”,sum);大家比
26、較一下哪種循環(huán)更簡練?若把for(i=1;i=100;i+)改成如下形式,其余的語句不動會是什么結果呢?for(i=1;i0) y=x%2;printf(“%2d,”,y);x/=2;上面程序用for()循環(huán)怎么改?例2:用=1-+-+公式求 的近似值,直到最后一項的絕對值小于10-6為止#include”stdio.h”#include”math.h”main()float n,t,pi;int s;s=1; /* 用變量s來改變正和負 */n=1.0; /* 用n代表分母 */t=1.0; /* 用t代表公式中的某一項 */pi=0; /* 用pi代表各項的和*/while(fabs(t)
27、=1e-6) /* fabs(t)就是t的絕對值 */ pi+=t; n+=2;s=-s;t=s/n;pi=pi*4;printf(“pi=%fn”,pi);(4)break語句和 continue語句的含義 如果遇到break語句,則無條件退出循環(huán)如果遇到continue語句,其含義是結束本次循環(huán),繼續(xù)下一次循環(huán)。下面再舉幾個例子:例1:從鍵盤輸入一個正整數(shù),判斷它是否為素數(shù)(質數(shù))?(用兩種算法來寫)判斷一個正整數(shù)x是素數(shù)的三種方法:x被2 x-1來除,若都除不開,則x就是素數(shù)x被2 x/2來除,若都除不開,則x就是素數(shù)x被2 來除,若都除不開,則x就是素數(shù)解法1:(標志變量法)#incl
28、ude”stdio.h”main()int x,i,f=1; /* f是標志變量 */scanf(“%d”,&x);for(i=2;ix;i+)if(x%i=0) f=0;break;if(f=1) printf(“是素數(shù)”); else printf(“不是素數(shù)”);解法2:(判斷循環(huán)是如何退出的辦法)#include”stdio.h”main()int x,i;scanf(“%d”,&x);for(i=2;ix;i+)if(x%i=0) break;if(i=x) printf(“是素數(shù)”);/* 如果i等于x的話,說明循環(huán)是正常退出的 */ else printf(“不是素數(shù)”);例2:
29、輸出2100以內的所有素數(shù)(1即不是素數(shù),也不是非素數(shù))#include”stdio.h”main()int x,i;for(x=2;x=100;x+) for(i=2;ix;i+) if(x%i=0) break; if(i=x) printf(“%d,”,x);思考:用另一種判斷素數(shù)的算法怎么改寫上面的程序?參考答案:#include”stdio.h”main()int x,i,k;for(x=2;x=100;x+) k=1;for(i=2;ix;i+) if(x%i=0) k=0;break; if(k=1) printf(“%d,”,x);由學生來完成:求出大于整數(shù)K(K由鍵盤輸入),
30、且緊靠K的5個素數(shù)參考答案:#include”stdio.h”main()int k,m,i,n=0;scanf(“%d”,&k);for(m=k+1;n5;m+) for(i=2;im;i+) if(m%i=0) break; if(i=m) printf(“%d,”,m);n+;例3:編程找出1000以內所有完數(shù)(例如:6的 因子為1、2、3,而6=1+2+3)?#include”stdio.h”main()int i,x,sum; for(x=1;x=1000;x+) sum=0;for(i=1;ib) c=b; /* 用變量c放a和b小的數(shù) */ else c=a; while(a%c
31、!=0|b%c!=0) c-; max=c;/* 求最小公倍數(shù) */if(ab) c=a; /* 用c來放 a和b大的數(shù) */ else c=b;while(c%a!=0|c%b!=0)c+;min=c;/* 輸出最大公約數(shù)和最小公倍數(shù) */printf(“max=%d,min=%dn”,max,min);解法2(輾轉相除法):#include”stdio.h”main()int a,b,c,t,m,max,min;/* 用max來放最大公約數(shù),用 min放最小公倍數(shù) */scanf(“%d%d”,&a,&b);t=a*b; /* 把a和b的乘積放在變量t中 */if(ab) m=a;a=b;
32、b=m; /* 讓a放a和b間大的數(shù)*/c=a%b;while(c!=0) a=b; b=c; c=a%b;max=b;/* b的值就是最大公約數(shù) */min=t/max;printf(“max=%d,min=%dn”,max,min);例5:編寫程序求e的值 e1+(1)用for循環(huán)計算前50項的和(2)用while循環(huán),要求直到最后一項的值小于10-6解1:#include”stdio.h”main()double sum=1,t=1;/* 定義sum變量為和,t為某項 */int k;for(k=1;k=1e-6) sum+=t; k+; t/=k; printf(“%f”,sum);分
33、析:若把t/=k;放到sum+=t;的前面會如何?(結果就不對了)例6:下面程序的輸出結果是什么?#include”stdio.h”main()int i;for(i=1;i=5;i+) if(i%2) printf(“*”);else continue; printf(“#”);printf(“$n”);答案:*#*#*#$例7:下面程序的輸出結果是什么?#include”stdio.h”main()int x=3; do printf(“%3d”,x-=2);while(!(-x);#include”stdio.h”main()int i,j; for(i=1;i=4;i+) for(j=
34、1;j=4-i;j+) printf(“ “); for(j=1;j=2*i-1;j+) printf(“%c”,*); printf(“n”);for(i=1;i=3;i+) for(j=1;j=i;j+) printf(“ “); for(j=1;j100) s/=100;t=s%10 +t*10;其余部分不變main()long s,t,sl=10;scanf(“%ld”,&s); s/=10; t=s%10;while(s0) s/=100;t=s%10*sl+t;sl*=10;printf(“%ld”,t);說明:若是求偶數(shù)位上的呢?(531)只需把s/=10;刪除即可。若是把S逆過
35、來呢?#include stdio.h main()long s,t;scanf(%ld,&s); t=s%10;while(s10) s/=10;t=t*10+s%10;printf(%ld,t);第六章字符型數(shù)據(jù)1 什么是字符型數(shù)據(jù)和字符串型數(shù)據(jù)?a-就是字符型數(shù)據(jù),它的值就是a的ASCII值97,而abc是非法的.3-也是字符型數(shù)據(jù),它的值就是字符3的ASCII值51注意:3與3的 區(qū)別;3-0=3;3+0=3; 也就是說用一對單引號括起來的必須是一個字符那么一起來分析一下n呢?由于n是轉義字符,記住轉義字符就是一個字符,但看起來象兩個或多個字符.123-看起來象4個字符,其實這也是轉義
36、字符,那么它到底轉義成了什么字符呢?x2a呢?又會是什么情況呢? “a12”-就是字符串型數(shù)據(jù),它沒有值“a”-也是字符串型數(shù)據(jù)注意 :a與”a”的 區(qū)別 既:用一對雙引號括起來的就是字符串型數(shù)據(jù).2 什么是字符型變量定義一個變量,用這個變量來存放字符型數(shù)據(jù).格式:char c,d=1;c=a; /* 或寫成c=97; */字符型和int型在一定范圍內的通用問題:如果int型的數(shù)據(jù)在0-255范圍內則char 與int通用。(既在一個字節(jié)范圍內通用)如:int k=321;char ch;ch=k;printf(“%d,%c”,ch,ch);/* 輸出結果是:65,A */3 如何在屏幕上輸出
37、字符?char c=a;printf(“%c,%d”,c,c); /* 或putchar(c); */4 如何從鍵盤輸入一個字符給某個字符型變量?char c;scanf(“%c”,&c);/* 或c=getchar(); */注意混合輸入的問題:如:int a1,a2;char c1,c2;scanf(“%d%c%d%c”,&a1,&c1,&a2,&c2);假設使a1=20,a2=30,c1=d,c2=c應如何如輸入數(shù)據(jù)?(20d 30c或20d30c)5 綜合舉例例1:從鍵盤輸入任意字符,統(tǒng)計其中字母、數(shù)字、空格的個數(shù),以#結束輸入#include”stdio.h”main()int n1
38、=0,n2=0,n3=0;char c;whiel(c=getchar()!=#); /* 注意 寫法 */ if(c=a&c=A&c=0&cb)?a:b; /* 以下是語句部分 */ return c; /* 把變量c的值返回給調用者 */ main()int x,y,z; scanf(“%d,%d”,&x,&y);z=max(x,y);printf(“z=%dn”,z);說明以下幾點:子函數(shù)可以放在主函數(shù)(main)的上面和下面,但不可以放在主函數(shù)或其他函數(shù)的內部.函數(shù)的存儲類別可以是extern(開放型的) 和static(封閉型的),若不寫,則默認是extern函數(shù)返回值的類型很多,它
39、可以是C語言的所有數(shù)據(jù)類型,若不寫,則默認是int型.形式參數(shù)的類型和個數(shù)必須和調用者一致,而且多個形式參數(shù)必須分別定義.不能寫成int a,b用return 表達式; 或return (表達式);語句返回一個值給調用者(只能返回一個值,分析一下:return c,d;是什么含義?若寫成return c;return d;又是什么含義?),如果寫成return ;則函數(shù)返回一個不確定的值.如果return語句后面要返回值的類型和函數(shù)首部的” 函數(shù)返回值的類型”不一致時,以”函數(shù)返回值的類型”為主.如果”函數(shù)返回值的類型”和調用者所要求的返回值的類型不一致時,以調用者為主.如果不需要返回值時,則
40、”函數(shù)返回值的類型”用void,這是就不能有return語句了.關于參數(shù)的傳遞:單向值傳遞,而且是由調用者傳給子函數(shù),調用者的參數(shù)稱為實參,子函數(shù)的參數(shù)稱為形參,并且主函數(shù)和子函數(shù)中 的變量可以同名(雖然同名但不是同一個變量),子函數(shù)中的變量只有在被調用時才建立,并且調用結束后子函數(shù)中的變量也不存在了(除了靜態(tài)局部變量和全局變量-后面會講到)如何調用子函數(shù):直接寫子函數(shù)的名字就行.(直接喊名)子函數(shù)的聲明:如果子函數(shù)在主函數(shù)的下面,則需要對其下面的子函數(shù)作個基本介紹(聲明),假如上面的例子中,子函數(shù)max()是在主函數(shù)的下面,可用如下的聲明語句,這個語句可以放在主函數(shù)的上面,也可以放在主函數(shù)的
41、內部,int max(int a,int b);或int max(int ,int);子函數(shù)的調用過程講解(由老師結合上面的例子演示)下面舉幾個例子:例1:在主函數(shù)中輸入一個正整數(shù),然后在子函數(shù)中求出各個位上的 數(shù)字之和,然后在主函數(shù)里輸出#include”stdio.h”int aa(int x) /* 定義子函數(shù) */int sum=0; while(x0) sum+=x%10; x/=10;return sum; /* 把sum的值返回給調用者 */main()int x,y; scanf(“x=%d”,&x);y=aa(x); /* 調用子函數(shù),并把子函數(shù)的返回值給y */printf
42、(“y=%d”,y);例2:在主函數(shù)中輸入一個正整數(shù),然后在子函數(shù)中把這個數(shù)從低位開始重新組合,然后在主函數(shù)里輸出,如:假設這個數(shù)是654321,則重新組合為642(既:從低位開始把奇位上的數(shù)進行重組)#include”stdio.h”long cz(long x)long y=0; int k=1; x/=10;while(x0) y=y+x%10*k;k*=10;x/=100;return y;main()long x,y;scanf(“%ld”,&x);y=cz(x);printf(“%ld”,y);分析:若把本題改為重新組合為246呢?程序怎么改?long cz(long x)long
43、 y=0;int k=1; x/=10;while(x0) y=y*k+x%10;k*=10;x/=100;return y;分析:若把本題改為重新組合為531呢?程序怎么改?(只需把x/=10;去掉即可)由學生來做:把一個整數(shù)每位上的數(shù)是偶數(shù)的重新組合成一個新數(shù),如653892,重新組合成一個新數(shù)是682。參考答案:#includestdio.hlong cz(long x)long y=0;int k=1;while(x0) if(x%2=0) y=y+x%10*k;k*=10;x/=10;return y;main()long x,y;scanf(%ld,&x);y=cz(x);prin
44、tf(%ld,y);例3:在主函數(shù)中輸入一個正整數(shù),然后在 子函數(shù)中判斷其是否為素數(shù)?參考答案:#includestdio.hint cz(int x)int i; for(i=2;ix;i+) if(x%i=0) break;if(i=x) return 1; else return 0;main()int x,y;scanf(%d,&x);y=cz(x);if(y=1) printf(%d 是素數(shù),x); else printf(%d 不是素數(shù),x);例4:驗證任意偶數(shù)為兩個素數(shù)之和#include”stdio.h”main()int x,i,f;int isprime(int);/* 子
45、函數(shù)聲明 */scanf(“%d”,&x);for(i=2;i=x/2;i+) if(isprime(i)if(isprime(x-i) printf(“%d,%d,%dn”,x,i,x-i);break;int isprime(int a)int i;for(i=2;ia;i+) if(a%i=0) break; if(i=a) return 1; else return 0;例5:在主函數(shù)中輸入兩個變量,在子函數(shù)中把這兩個變量的值交換過來(看 看能否交換 過來)#include”stdio.h”void swap(int x,int y)/* 不能寫成int x,y */int t; t=
46、x;x=y;y=t; /* 注意:在子函數(shù)中不能有return語句了 */main()int x,y;scanf(“%d,%d”,&x,&y);swap(x,y);printf(“x=%d,y=%dn”,x,y);第八章 地址和指針1 地址和指針的概念首先了解一下1GB內存的含義:見下圖定義任何一個變量,都要給它分配房間,如int型的變量需要給它分配連續(xù)的四個房間,short 型的變量需要給它分配兩個連續(xù)的房間,等等,這樣分配給它的第一個房間的房間號就是這個變量的地址,由于每個房間的房間號是不同的,是變化的,這樣我們可以定義一個特殊的變量,用這個變量來存放某個房間的房間號,那么這個特殊的變量就
47、稱為指針型變量,或簡單稱為“指針”。假設有int a=5;可用 下圖形象說明 2 關于指針型變量的定義、初始化、賦值、使用的說明指針指向某個變量的含義:如果一個指針變量的值等于某個變量的地址,則稱為指針指向這個變量,或者說指向這個單元(房間)。float *p; /* 定義一個指針型變量p,p所指的單元放的是float型的數(shù)據(jù) , 但變量p占2個字節(jié)*/那么int *q;是什么含義呢?double *a,*b;呢? a,b,p,q四個指針變量具體 指向哪個單元?float x=5.3; float *p=&x;/* 讓指針變量p指向變量x(初始化) ,符號&是取變量x的地址*/也可以把上面兩句
48、寫成一句: float x=5.3,*p=&x;但不能 寫成float *p=&x,x=5.3;分析:如果寫成float *p=1000H;行不?(不行,不能直接把一個數(shù)賦給指針變量)寫成float *p=0;或float *p=NULL; 或float *p=0呢?(行,p=0說明這個指針不指向任何單元)float x,*p;x=5.3;p=&x;/* 使p指向x,注意不能寫成*p=&x;*/指針變量的 使用要注意:指針變量必須先有指向,然后才可以使用*有三種含義:用于定義變量如:int *p;用于從指針所指的單元讀出數(shù)據(jù)如:x=*p;用于把一個數(shù)寫到指針所指的單元如 *p=x;例子:如何把
49、兩個變量的值交換?#include”stdio.h”main()int a=3,b=5,t,*pa,*pb; pa=&a;pb=&b;t=a;a=b;b=t; /*不用指針*/t=*pa;*pa=*pb;*pb=t; /* 使用指針*/printf(“a=%d,b=%dn”,a,b);/*或寫成printf(“a=%d,b=%dn”,*pa,*pb)*/關于*、+、-在一起使用的問題*、+、-三者優(yōu)先級相同,自右向左結合*p=*p+1;*p+=1;+*p;(*p)+;四個語句的含義是一樣 的,*p+是什么含義?重點掌握:是指針+(或-)還是指針里的內容+(或-)?,是先用后加還是先加后用 ?關
50、于指針的移動、比較、運算問題指針的移動、比較、運算一般和數(shù)組聯(lián)合使用,如:int a5,*p=a,*q=&a4;p+;/* 說明p指向了a1-指針移動 */pq;/* 兩個指針比較大小,實際上就是比較地址的大小*/q-p;/* q-p=4,就是兩個指針之間元素的個數(shù),注意:只能進行減法 */用指針做函數(shù)的參數(shù)指針也可以作為實參或形參,它傳遞的是 地址。關于二級指針就是定義一個變量,用來指向一個指針,這個變量就稱為二級指針,如:int a=5,*p=&a,*q=&p;printf(“%d,%d,%d”,a,*p,*q);舉例在主函數(shù)中輸入兩個變量,在子函數(shù)中把這兩個變量的值交換過來#includ
51、e”stdio.h”void swap(int *x,int *y)/* 不能寫成int *x,*y */int t; t=*x;*x=*y;*y=t; /* 注意:在子函數(shù)中不能有return語句了 */main()int x,y;scanf(“%d,%d”,&x,&y);swap(&x,&y);printf(“x=%d,y=%dn”,x,y);通過 這個例子可以 看出:子函數(shù)的 返回值有直接返回(用return語句返回)和間接返回(通過指針)。而且直接返回只能返回一個值,間接返回可以返回多個值。第九章 數(shù)組1 數(shù)組的概念:數(shù)組是個變量,屬于復雜變量。假設程序需要10個int型的變量,如何定
52、義呢?int a1,a2,a3,a4.這樣定義是不是很麻煩?如果定義成如下形式:int a10;和上面的比較一下哪個簡單?說明:a就是數(shù)組變量,也就是數(shù)組的名字 這10個變量分別是a0、a1、a2.a9 0、1、2等是下標,注意數(shù)組的下標是從0開始的 這10個變量在位置上是相鄰的,看下圖表示:2 數(shù)組變量的初始化(定義變量的同時就給它值)float b3;/*沒有初始化 */float b3=1.2,6,2.6;/*全部初始化 */float b3=1.2,6;/*部分初始化 */float b=1.1,2.2,3.3; /*省略下標 */請同學們分析一下float b3=0;?注意:不能寫成
53、float b=1.2,6,2.6;也不能寫成b;3 給數(shù)組變量賦值(先定義變量,然后用”=”進行賦值)int a3;a0=3;a1=6;a2=9;4 如何使用(或引用)數(shù)組中的變量(很重要)假設有int a5,*p=a;/* 數(shù)組名字代表數(shù)組里首元素(首變量)的地址,而且是常量 */想讓a3的值等于6,可以有如下寫法:a3=6;*(a+3)=6;*(p+3)=6;p3=6;p+=3;*p=6;或寫成p0=6;分析:能否寫成:a+=3;*a=6;? 假設指針p已經指向a3,有如下兩個語句: p-1=3;p1=9;請說出它們的含義?5 如何從鍵盤輸入數(shù)給數(shù)組中的變量假設:int a5,*p=a;
54、for(i=0;i5;i+) scanf(“%d”,&ai);注意:&ai可以換成:a+i、p+i,p+6 如何輸出數(shù)組元素的值假設:int a5,*p=a;for(i=0;i5;i+) printf(“%d,”,ai);注意:ai可以換成:*(a+i)、*(p+i)、pi、*p+綜合舉例:(都用子函數(shù)來實現(xiàn))例1:分析如下程序的輸出結果:#include”stdio.h”main()int a5=3,2,7,6,8,*p=a; int i;for(i=0;i5;i+) printf(“%d,”,*p+);printf(“%d”,a0);/* 輸出結果:3,2,7,6,8,3 */分析:把*p
55、+改為(*p)+、*(p+)、+*p、*+p、*p輸出結果各是什么?例2:將數(shù)組中的數(shù)顛倒過來#include”stdio.h”#define N 5 /* 注意后面不要有分號*/void dd(int bb,int n)/* int bb可以寫成int bbN、int *bb */int i,t;for(i=0;in/2;i+) t=bbi;bbi=bbn-i-1;bbn-i-1=t;main()int aaN=1,2,3,4,5,i;/*分析:int i,ai;行不? */ dd(aa,N);/*aa可以寫成&aa0 */for(i=0;iN;i+) printf(“%5d”,aai);由
56、學生來做:用另外一種算法怎么實現(xiàn)?(參考答案如下:)只需改動子函數(shù)部分:void dd(int *bb,int n)int i=0,j=n-1,t;while(ij) t=bbi;bbi=bbj;bbj=t; i+;j-;例3:已知存放在a數(shù)組中的數(shù)不相重,在a數(shù)組中查找和x值相同的元素的位置(下標),若找到則輸出該值和該值在a數(shù)組中的位置,若找不到則輸出相應信息。#include”stdio.h”#define N 5int serch(int *p,int x)int i,f=-1;/* f是要找的數(shù)的下標 */for(i=0;iN;i+) if(pi=x) f=i;break;retur
57、n f;main()int aaN=1,2,3,4,5,x,f; /* f是要找的數(shù)的下標 */ scanf(“%d”,&x);f=serch(aa,x);if(f=-1) printf(“not found!”); else printf(“%d,%d”,f,aaf);例4:w數(shù)組中存放N個數(shù),編寫函數(shù)刪除下標為k的元素#include”stdio.h”#define N 5void del(int *p,int k)int i; for(i=k+1;iN;i+) pi-1=pi;main()int aaN=1,2,3,4,5,i;del(aa,2);for(i=0;iN-1;i+) pri
58、ntf(“%3d”,aai);/* 輸出結果:1 2 4 5 */練習:把上例數(shù)組的第一個數(shù)挪到最后(參考答案如下:)#include”stdio.h”#define N 5void del(int *p,int k)int i,t; t=p0; for(i=1;iN;i+) pi-1=pi;pN-1=t;main()int aaN=1,2,3,4,5,i;del(aa,N);for(i=0;i0) pi+=x%2;/* 變八進制時把x%2改為x%8*/ x/=2; /* 變八進制時把x/2改為x/8*/return i;main()int a20,x,i,y;scanf(“%d”,&x);y
59、=kk(a,x);for(i=y-1;i=0;i-) printf(“%3d”,ai);例6:編程找出數(shù)組中最大的元素及所在的下標#include”stdio.h”#define N 5void max_value(int p,int *q)int i,j,max;/* max放最大數(shù),j放最大數(shù)的下標 */ max=p0;j=0;for(i=1;imax) max=pi;j=i;*q=j;main()int aN=3,2,7,6,3,x; max_value(a,&x);printf(“%d,%d”,x,ax);/*輸出結果:2,7 */例7: 找出一維數(shù)組中的最大數(shù)和次最大數(shù),并分別和a0
60、,a1對換#include”stdio.h”#define N 10 fun(int *a,int n) int i,k,m,t; for(i=0;i2;i+) m=i; for(k=i;kam) m=k;t=ai;ai=am;am=t;例8:用折半法找出一維數(shù)組(有序的)中指定的數(shù)是否存在,若有返回其下標,若無返回-1#include”stdio.h”#define N 10fun(int *a,int n)int low=0,high=N-1,mid;while(lown) high=mid-1; else low=mid+1; return -1;例9:隨機產生20個不大于50的數(shù)放在數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2031年中國跳舞燈行業(yè)投資前景及策略咨詢研究報告
- 2025至2030年中國鐵餅推車數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國聚酯瓶吹瓶機數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國精密零部件自動檢測與分選設備數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國水管道式空調數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國橡膠大紅LC數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國對-硝基苯甲酰氯數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國人工繡花背心數(shù)據(jù)監(jiān)測研究報告
- 2025年中國貫流風幕市場調查研究報告
- 2025年中國耐火纖維管市場調查研究報告
- 二零二五年度大型自動化設備買賣合同模板2篇
- 江西省部分學校2024-2025學年高三上學期1月期末英語試題(含解析無聽力音頻有聽力原文)
- GA/T 2145-2024法庭科學涉火案件物證檢驗實驗室建設技術規(guī)范
- 2025內蒙古匯能煤化工限公司招聘300人高頻重點提升(共500題)附帶答案詳解
- 2025年中國融通資產管理集團限公司春季招聘(511人)高頻重點提升(共500題)附帶答案詳解
- 寵物護理行業(yè)客戶回訪制度構建
- 電廠檢修管理
- 《SPIN銷售法課件》課件
- 機動車屬性鑒定申請書
- 2024年中考語文試題分類匯編:非連續(xù)性文本閱讀(學生版)
- 2023年廣州金融控股集團有限公司招聘筆試題庫及答案解析
評論
0/150
提交評論