




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
二.教學講點1.C語言的基本構成和格式#include“stdio.h”main()(inta,b,sum;/*定義變量*/a=10; /*把整數10賦值給變量a*/b=20; /*把整數20賦值給變量b*/sum=a+b;/*把兩數之和賦值給變量sum*/printf(<la=%d,b=%d,sum=%d\n”,a,b,sum);/*輸出計算結果*/)⑴.C程序由函數組成,一個程序必須且只能有一個主函數(main。),C程序總是從主函數開始執行,在主函數中結束。.定義函數時函數名后必須有一對小括號,函數體必須放在一對花括號內,在函數體中,函數體有兩個部分:定義部分和執行部分。定義語句必須出現在執行語句之前,我們先定義了a,b,sum,然后才給它們賦值。.C語言中每條語句都以分號“;”結束,分號時C語句的一部分。即使是程序的最后一個語句也不例外。分號是語句結束的標志。.一行可以寫多條語句,一條語句也可以分在多行上寫,但是,不能將一個整體分開。例如:int是錯誤的,而int正確。.C語言的注釋必須放在“/*”和“*/”之間,和“*”之間不允許有空格。“/*”和“*/”之間不允許再插入“/*”或注釋可以出現在程序中的任意位置。注釋部分不被執行。.C語言程序書寫格式自由,語句可以從任一列開始書寫,一行內可以寫多個語句。但是過于“自由”的程序書寫格式往往使人們很難讀懂程序,初學者應該從一開始就養成好的習慣,是程序便于閱讀。.標識符(1)標識符只能由字母、數字和下劃線組成。(2)標識符的第一個字符必須是字母或下劃線。(3)標識符的大小寫字母是有區別的,如abc和ABC是兩個完全不同的標識符。(3)標識符的分類:關鍵字:關鍵字是具有特定的含義的、專門用來說明C語言特定成分的一類標識符。詳細的查閱附錄二。預定義標識符:在C語言中它也有特定的含義。預定義標識符可以用位“用戶表標識符”使用,只是這將使這些標識符失去了原來的意義。用戶標識符:由用戶根據需要定義的標識符被成為用戶標識符。用戶標示符用來給變量、函數、數組或者指針等命名。.C語言的數據類型數據可以分為常量和變量。常量是指在程序執行中不變的量,常量分為:整型常數、實型常數、字符常量、字符串常量。整型數據:進制間的轉換二、八、十六進制轉為十進制規則:“按權相加”十進制轉為二、八、十六進制規則:整數部分:基數除取余,逆序排列小數部分:基數乘取整,順序排列二進制轉為八、十六進制規則:三(四)合一,按序相拼(整數部分,從右向左取,小數部分從左向右取,位數不足補零)。八、十六進制轉為二進制規則:一分三(四),按序相拼數據在內存中的存放形式字節=8位,lByte=8bit字長:指CPU能同時處理的二進制位數。由CPU的型號而定。如:16位微機的字長就是16位或2字節。1GB=1O24MB,1MB=1O24KB,1KB=1O24BB:表示字節,字節是表示存儲容量的最小單位。位(bit):是計算機中信息表示的最小單位。負整數在內存中用“補碼”形式存放。取補碼的步驟:(1)忽略負號,求出原碼。(2)將原碼按位取反(0、1互摭。(3)在第二步的基礎上加1.如:取-5的補碼。 |o|o|o|o|o|o|o|o|o|o|o|o|o|i|o|in⑵ I1I1I1I1I111IIILIIII111111o111oI 1I1I1I1I1I1I1I1I1I1I1I1I1I0I1I1-將補碼轉換成相應的整藪的步驟:(1)將補碼按位取反加lo(2)將步驟1得到的二進制數轉換成十進制數,然后加上負號即可。例如: |i|o|o|o|o|o|o|o|o|o|o|o|o|o|o|(H按位取反加1
加負號:-32768幾個特殊的帶符號整數:1000000000000000 -327680111111111111111 327671111111111111111 -1無符號整數:只有正整數,沒有負整數,最高位不表示符號位,每一位均參與轉換。二進制帶符號整數無符號整數1111111111111111-1655351000000000000000-3276832768例2-12:若有:inta="l;unsignedb=65535;則printf(tt%d,%u,%d,%u,,,a,a,b,b);輸出結果是:-1,65535,-1,65535數據益出問題:例2-13:若有inta=32767;則a=a+l的結果是:-32768例2-14:若有unsignedb=65536;則b的值是:0分析:32767:01111111111111111+1100000000000000將100000000000000按照帶符號數轉為十進制為-3276865535:1111111111111111+11111111111111111+1 1J00000000|0000000065536unsignedb=655536;而b屬于無符號整型,在內存中只占兩字節,所以只能包括16位。標準C沒有具體要求規定各類型數據所占內存的字節數,現以這次考試標準viusalc++6.0為類型所占位數所占字節數類型所占位數所占字節數short162unsignedint324int324unsignedlong324Long324Float324unsignedshort162Double648例,說明各類型變量所占的位數。3.3實型數據(浮點數)實型常量⑴小數形式:由數字和小數點組成,必須有小數點,小數點的某一側可以沒有數字。如:.23,123,876,123.⑵指數形式:用“e”或“E”后接一個整數,表示以10為底的賽數。注意:“e”或"E”之前之后必須有數字,且之后的數字必須是整數。他們和前后的數字之間不能有空格。例如:例2-15:下列合法的常量是().A.-32169 B.0128C.OXDEFGD.13E0.5例2/6:下列合法的實型常量是()o(A)OXff(B)124E(C)1.23E5.0(D)3.E2(E)1.25E+2(F).23e+02實型變量單精度型float占4字節雙精度型double占8字節長雙精度longdouble占16字節(較少用).表達式與運算符算術運算符及其表達式:+-*/%%:(求余運算)注意:(1)%兩邊必須是整型數據。12.0%3表達式是錯誤的。(2)求余(%)的方法是:忽略符號,求出余數,再將所得余數的符號定為與被除數相同。例如:17%3結果是:217%-3結果是:2,-17%3結果是:-2,-17%-3結果是:-2強制類型轉換強制類型表達式:(類型名)表達式注意:類型名(表達式)這種形式是C++的強制類型表達方式。.賦值運算符及其表達式賦值運算符=格式:變量名=表達式功能:將表達式的值賦給左邊的變量。注:(1)賦值運算符左邊只能是一個變量,不能是常量,也不能是表達式。a+b=3 4=3是非法的表達式a=6a+(b=3)都是合法的表達式a=b=20a=(b=10)/(c=2)都是合法的表達式(2)實型數據賦給整型變量時,小數部分被舍去,整型數據賦給實型變量時,系統自動將整型數據轉換為實型數據。例如:floata;intb;表達式a=10%3的值是1.0表達式b=a=10%3的值是1?=?=/=%=&=1=?=?=/=%=&=1=例如:a+=3相當于a=a+3,a/=b+4相當a/=(b+4)或a=a/(b+4)例:若a=12,則執行表達式a+=a-=a+a后a的值是多少?分析:a+=a-=(a+a)/*a的值是12*/a+=a-=24 /*a的值是12*/a+=a=a-24 /*a的值是12*/a+=a=-12 /*a的值是12*/a+=-12 /*a的值是-12*/a=a+(-12) /*a的值是-12*/a=-24 /*a的值是-24*/自增、自減運算符及其表達式++-注意:(1)只能用于變量,不能用于常量和表達式。如:6++(a+b)—都是錯誤的。⑵當它們用于變量名前時,表達式的值為變量的值加一或減一。當位于變量名后時,表達式的值為變量原來的值。不論位于變量名前還是變量名后,只要進行了自增、自減運算,變量的值都會在原來的基礎上加1或減lo如:a=3則a++表達式的值是3運算之后變量的值是4a=3則++a表達式的值是4之后變量的值是4a=3則a?表達式的值是3之后變量的值是2a=3則--a表達式的值是2之后變量的值是2(3)口訣:j=i++;這個表達式是先引用后增值。即:先把i的初始值給變量j,然后i再自加1。j=++i;這歌表達式是先增值后引用。即:i先自加1,然后再將我們自加后的值賦值給變量八但是記住它們是一起執行的,就是說:例如j=i++先引用后增值實際上是一起執行的,它們之間不存在先后關系,我們只是位了好記才用到了上面的方法。老師在上課的時候先不要說,但是你們必須知道。j=i-j=,,i和上面j=i++j=++i的方法是一樣。5.4逗號運算符及其表達式.格式:表達式1,表達式2,…,表達式n注意:1.逗號表達式的值是整個逗號表達式中最后一個表達式的值。.求值順序是從左到右依次求解。例如:a=(3,b=l)的值是1運算結束后a的值是Lb的值是E三.相關試題1.2008年4月相關試題(11)以下敘述中正確的是A)C程序中的注釋只能出現在程序的開始位置和語句的后面B)C程序書寫格式嚴格,要求一行內只能寫一個語句C)C程序書寫格式自由,一個語句可以寫在多行上D)用C語言編寫的程序只能放在一個程序文件中(12)以下選項中不合法的標識符是A)printB)FORC)&aD)_00(13)以下選項中不屬于字符常量的是A)'CB)"C"C)'\xCCO'D)'\072'(14)設變量已正確定義并賦值,以下正確的表達式是A)x=y*5=x+zB)int(15.8%5)C)x=y+z+5,++yD)x=25%5.0填空(7)設變量已正確定義為整型,貝IJ表達式n=i=2,++i,i++的值為[7]02.2007年9月相關試題(11)C語言源程序名的后綴是A).exe B).C C).obj D).cp(12)可在C程序中用作用戶標識符的一組標識符是A)and B)Date C)HiD)case_2007 y-m-d Dr.TomBigl(13)以下選項中,合法的一組C語言數值常量是A)028 B)12. C).177D)0x8A.5e-3 0Xa23 4el.510,000-Oxf 4.5e0 Oabc3.e5(14)以下敘述中正確的是A)C語言程序將從源程序中第一個函數開始執行B)可以在程序中由用戶指定任意一個函數作為主函數,程序將從此開始執行C語言規定必須用main作為主函數名,程序將從此開始執行,在此結束main可作為用戶標識符,用以命名任意一個函數作為主函數(16)以下關于long、int和short類型數據占用內存大小的敘述中正確的是A)均占4個字節 B)根據數據的大小來決定所占內存的字節數C)由用戶自己定義 D)由C語言編譯系統決定(17)若變量均已正確定義并賦值,以下合法的C語言賦值語句是x=y==5;B)x=n%2.5;C)x+n=i;D)x=5=4+l;3.2007年4月相關考題(12)下列敘述中錯誤的是(D)A)計算機不能直接執行用C語言編寫的源程序C程序經C編譯程序編譯后,生成后綴為.obj的文件是一個二進制文件C)后綴為.obj的文件,經連接程序生成后綴為.exe的文件是一個二進制文件D)后綴為.obj和.exe的二進制文件都可以直接運行(13)按照C語言規定的用戶標識符命名規則,不能出現在標識符中的是(B)A)大寫字母B)連接符C)數字字符D)下劃線(14)以下敘述中錯誤的是(C)A)C語言是一種結構化程序設計語言B)結構化程序有順序、分支、循環三種基本結構組成C)使用三種基本結構構成的程序只能解決簡單問題D)結構化程序設計提倡模塊化的設計方法(15)對于一個正常運行的C程序,以下敘述中正確的是(A)A)程序的執行總是從main函數開始,在main函數結束B)程序的執行總是從程序的第一個函數開始,在main函數結束C)程序的執行總是從main函數開始,在程序的最后一個函數中結束D)程序的執行總是從程序的第一個函數開始,在程序的最后一個函數中結束(19)有以下程序,其中%u表示按無符號整數輸出(B)main(){unsignedintx=OxFFFF;/*x的初值為十六進制數*/printf(“%u\n”,x);}/*注意:x是占兩個字節*/程序運行后的輸出結果是A)-1B)65535C)32767D)OxFFFF第二章順序結構一.教學重點、難點知識點所占分值考核幾率專家點評C語句分類0-130%簡單識記字符輸出函數putcharO1-270%難度適中,重點掌握字符輸入函數getcharO1-270%難度適中,重點掌握格式輸入函數printf()3-4100%難度適中,重點理解重點掌握格式輸出函數scanf()3-4100%難度適中,重點理解重點掌握二.教學內容.語句C語句共分為5類:控制語句函數調用語句:printf("thisisacstatementw);表達式語句每一個合法的表達式后加上分號(;)就構成了表達式語句。++a;i+j;語句和表達式的區別:表達式有唯一確定的值,而語句沒有值。賦值語句格式:賦值表達式;i=l,j=2是逗號表達式i=l;j=2;是兩條賦值語句i++;i—;++i;-i;都是賦值語句等價于i=i+l;sSi=i-l;空語句:只有一個單獨的分號構成的語句。如:;就是一條空語句。復合語句:用一對{)將若干語句括起來構成一條復合語句。.輸入輸出語句在使用庫函數時必須先用預編譯命令#include(頭文件名〉或#include“頭文件名”將相應的頭文件包含到源程序中。如:#include<stdio.h>printf()函數格式:printf(“格式控制”,輸出列表);功能:按格式控制指定的格式輸出數據。注意:格式控制包括以%開頭的“格式說明符”和原樣輸出的普通字符。如:printf("a=%d,a+b=%d”,30,4+7);輸出結果是:a=30,a+b=ll(l)d格式%d:按實際長度輸出十進制整數。%md:輸出占m列,若小于m列,左邊補空格,若大于m列,按實際輸出。%-md:輸出占m列,若小于m列,右邊補空格,若大于m列,按實際輸出。%Id:輸出長整型數據,輸入輸出長整型數據時必須用該格式。例如:printf(u%d,%6d,%-6d,%Id”,386,1234,3456,12345L);輸出結果:386,1234,3456,12345printf(“%2d”,12345);輸出結果:12345u格式%u:以無符號十進制形式輸出整數。printf(“%u”,-l);65535ptintf(“%u”,,32768);32768o格式%。:以無符號八進制形式輸出整數,不輸出前導符0。printf(M-1,177777(4)x或X格式%x或%X以無符號十六進制形式輸出整數。不輸出前導符Ox或0X,小寫對小寫,大寫對大寫。printf(“%d,%x,%X,%x”,HOxabc,OXAbc);-l,ffff,ABC,abc注:若要輸出十六進制和八進制的前導符,則要用%#。和%#x、%#X格式。printf(u%#o,%#x,% ,OxaBc);0177777,Oxfffi;OXABC(5)c格式%c用來輸出一個字符,不輸出單引號定界符。%c和%d可以相互轉換。printf(“%c,%d”,'a','a');a,97printf(<4%c,%d^,100,100);d,100(6)s格式用來輸出一個字符串,不輸出雙引號和字符串結束符。%s:輸出字符串的有效字符。printf("%s","china\Oyunnan'');china%ms:輸出占m列,若小于m列,左邊補空格,大于m列,按實際輸出。printfC4%5s,%-5s,%2s”,"swfc”,”swfc","swfc");swfc,swfc,swfc%m.ns:輸出占m列,只輸出字符串的左n個字符到m列的右端。如:printf(u%7.5sM;,yunnann);yunna(7)f寤式:按小數形式輸出實型數據。%f:默認輸出6位小數。如:printf(u%f,%F,,543.12,5.4312e+2);543.120000,543.120000%111.11£:輸出占111歹!],其中有n位小數。若超過m歹力確保n位小數后按實際輸出。注意四舍五入問題。如:primf(“%7.3f,%-7.3f,%4.2產,3.1415726,3.1415926314.5926);3.142,3.142,314.59(8)e格式以指數形式輸出一個實數。小數點前只有一位非零數,5位小數,3位指數。如:printf(t<%e,%e,,,123.4,123.45e-7);234000e+002,l.234500e-005(9)g格式自動在%f和%e中選擇較短的一種輸出,對于小數部分不輸出無意義的0o如:printf(M%g,%g,,,123.45,123.45e-2);123.45,1.2345priMf(“%g”,123000000.0);23e+08小結:⑴%%表示輸出一個%。如:printfC4%%d=%d,,,10,10);%d=10⑵除了x,e,g大小寫均可外,其它都只能小寫。如:printf(u%d=%D,,,20,20);20=%D⑶輸出格式說明符所能操作的數據類型必須與輸出項的類型一致。如:printf(“%d”,1.234);/*出錯*/scanf()函數格式:scanf(“格式控制”,地址列表);注意:(1)可指定數據所占的列數,輸入后由系統自動截取相應的位數。如:scanf(u%3d%2d,,,&a,&b);若輸入:3863018則:a的值是:386b的值是:30若輸入:3863a的值是:386b的值是:3scanf(u%3c%2d,,,&ch,&c);若輸入:3863018則:ch的值是:3b的值是:30(2)%*md:表示跳過m列不讀。如:scanf(“%*3d%3d%4d”,&a,&b);若輸入:123456則:a的值是:456b的值是:原來的值。(3)不能在scanf()函數中指定輸入數據的小數位數。如:scanf(“%7.5P,&a);/*出錯*/在scanf()函數中,輸入時普通字符原樣輸入。如:scanf(“a=%d,b=%d”,&a,&b);若要給a賦值5,b賦值10,正確的輸入是:a=5,b=10scanf(“%d*,%d#,%d“,&a,&b,&c);若要讓a,b,c分別得到1,2,3,正確的輸入是:1*,2#,3〈回車〉若兩個格式說明符之間沒有其它字符,則在輸入數據時,兩數據之間要用回車或空格分隔,回車或空格可以是多個。但是,%c格式除外。如:scanf(“%d%d”,&a,&b);若想讓a的值為5,b的值為10。則正確的輸入是:5空格10〈回車〉或5〈回車〉10<回車〉或5空格空格空格10<回車〉(6)多個%c格式之間沒有其它字符,仍然不能用回車或空格來分隔。如:scanf(u%c%c%c,,,&a,&b,&c);若輸入:a空格b空格c<回車〉a的值是,alb的值是空格,c的值是小二(7)格式說明符所能操作的數據類型必須與對應變量的類型相同。如:inta;scanf("%P',&a);/*出錯*/總結:L普通字符原樣輸入,原樣輸出。.對于%d格式,指定寬度小于輸出寬度,原樣輸出。.%#o,%#x,%#X表示要輸出八進制的前導符數字0,和十六進制的前導符Ox,OXo.%x,%X格式,小寫對小寫,大寫對大寫。.%*md:表示跳過相應的輸入項。.注意進制間的轉換,以及無符號數和帶符號數之間的轉換。.在scanf()函數中,給double類型變量輸入數據時,應該使用%If類型說明符,而輸出時,可以用%If,也可以用%If。三.試題分析1.2008年4月試題分析(16)有以下程序段charch;intk;ch=,a,;k=12;printf(n%c,%d/\ch,ch,k);printf(Hk=%d\n*\k);己知字符a的ASCH十進制代碼為97,則執行上述程序段后輸出結果是A)因變量類型與格式描述符的類型不匹配輸出無定值B)輸出項與格式描述符個數不符,輸出為零值或不定值C)a,97,12k=12D)a,97,k=12
2.2007年9月試題分析(15)若在定義語句:inta,b,c,*p=&c;之后,接著執行以下選項中的語句,則能正確執行的語句是A)scanf(H%d'\a,b,c); B)scanf(H%d%d%dn,a,b,c);C)scanf(n%df\p); D)scanf(n%dH,&p);(18)有以下程序段intj;floaty;charname[50];scanf(H%2d%f%sH,&j,&y,name);當執行上述程序段,從硬盤上輸入555667777abe后,y的值為A)55566.0B)566.0 C)7777.0D)566777.0填空(6)執行以下程序時輸入1234567<CR>,則輸出結果是16】。#include<stdio.h>main(){inta=l,b;scanf(H%2d%2dn,&a,&b);printf(H%d%d\nH,a,b);3.2007年4月試題分析(16)設變量均已正確定義,若要通過scan(u%d%c%d%c,,,&al,&cl,&a2,&c2);語句為變量al
和a2賦數值10和20,為變量cl和c2賦字符X和Y。以下所示的輸入形式中正確的是(注:□代表空格字符)(D)10aXa20nY〈回車)空格字符)(D)10aXa20nY〈回車)C)10dX20aY填空(6)main(){inta=10;〈回車)
〈回車〉10oX20nY〈回車)D)10X〈回車〉20Y〈回車〉執行以下程序后的輸出結果是a=(3*5,a+4);printf(“a=%d\n”,a);I第三章選擇結構.教學重點、難點知識點所占分值考核幾率專家點評關系運算符及優先次序0-140%簡單識記關系表達式0-150%簡單,屬重點識記知識點邏輯運算符及優先級1-250%簡單識記邏輯表達式1-250%簡單,屬重點識記知識點if語句的幾種形式1-2100%簡單識記if語句的嵌套1-2100%難度適中,重點掌握條件運算符0-1100%難度適中,重點掌握switch語句2-4100%簡單,重點掌握重點理解
語句標號0-110%偏難,不是重點goto1-210%簡單識記二.教學內容.關系運算與邏輯運算邏輯值真(非零值) 假(零)關系運算符及其表達式<<=>>===!=關系運算符優先級別低于算術運算符,高于賦值運算符。(<<=>>=)優先級別高于(==!=)如:a>b+c等價于a>(b+c)a==b<c等價于a==(b<c)a=b<c等價于a=(b<c)4==4表達式的值為“真4=4表達式不合法關系表達式的值只有1和0,其中1表示“真”,0表示“假”。邏輯運算符及其表達式&&邏輯“與”II邏輯“或”!邏輯“非”優先級別:!》&&》II運算規則:邏輯&&:遇假則假邏輯II:遇真則真邏輯!:真假互換邏輯表達式的值:1真)、0(假)例如:3>4結果是:03&&4結果是:1!3&&4結果是:00113結果是:1注意:在求解邏輯與(&&)表達式時,若&&運算符左邊表達式的值為0(假),則不再進行&&右邊表達式的運算,且將整個&&表達式的值定為0;在求解邏輯或(II)表達式時,若II左邊表達式的值為非0值(真),則不再進行II右邊表達式的運算,且將整個邏輯II表達式的值定為1(真o2.if語句2)2(表達式)2)2(表達式)
語句1;1)if(表達式)語句1;else語句2稱為:全if 單if注意:if后的表達式必須用()括起,else后沒有表達式。if和else都只能控制緊跟它的一條語句,若要控制多條語句,必須用一對{}括起構成一條復合語句。2.2執行方式:2.21if語句的執行方式:首先判斷表達式的值是否為“真”,若“真”,則執行語句部分。如果表達式的值為“假”,則“跳過”語句部分執行if語句后面的其它語句。2.22if-else語句的執行方式:首先判斷表達式的值是否為“真”,若“真”,則執行語句部分。如果表達式的值為"假",則執行else語句后面的語句。例1:main(){intm=5;if(m++>5)printf(“m=%(T,m);elseprintf(um=%dn,m-);)例2:main(){intm=5;if(++m>5)printf(um=%d,\m);elseprintf("m=%d\n'',m??);printf(“m=%d”,m);)2.3if語句的嵌套if(表達式1)if(表達式2)語句1;else 語句2;elseif(表達式3)語句3;else 語句4;else總是與前面最近的且未配對的if語句配對,組成一對if-else語句。if(表達式1)if(表達式2)語句1;elseif(表達式3)語句2;else 語句3;第一個else語句有的同學會把它誤以為和第一個if配對,但是實際的情況是和第二個if語句配對,即:if(表達式1)if(表達式2)語句1:elseelse語句3;else例1.請分析下列程序的輸出結果。main(){ints,t,a,b;sanf(u%d%dn,&a,&b);s=l;t=l;if(a>0)s=s+l;if(a>b)t=s+l;elseif(a==b)t=s;elset=2*s;printf(“%d\n”,t);)若運行時輸入510回車,則程序的執行結果是?main(){ints,t,a,b;sanf(“%d%d”,&a,&b);s=l;t=l;if(a>0){s=s+l;if(a>b)t=s+l;}elseif(a==b)t=s;elset=2*s;printf("%d\n”,t);}若運行時輸入510回車,則輸出結果是?例2.分析下列程序的輸出結果main(){inta=4,b=3,c=5,t=0;if(a<b)t=a;a=b;b=t;if(a<c)t=a;a=c;c=t;printf(u%d%d%d\n”,a,b,c);)main(){inta=4,b=3,c=5,t=0;if(a<b){t=a;a=b;b=t;}if(a<c){t=a;a=c;c=t;}printf(u%d%d%d\n”,a,b,c);)聯想交換的思想:若要交換a和b的值,通常的做法是:{t=a;a=b;b=t;}3.條件運算符和條件表達式條件運算符:?:是唯一一個三目運算符。優先級別高于賦值運算,結合方向自右向左。格式:表達式1?表達式2表達式3執行方式:先求“表達式1”的值,若其值為“真”,求出“表達式2”的值作為整個條件表達式的值;若其值為“假。求出“表達式3”的值作為整個表達式的值。例如:max=a>b?a:b;相當于:if(a>b)max=a;elsemax=b;a>b?a:c>d?c:d相當于a>b?a:(c>d?c:d)注意:表達式1、2、3的值不要求具有相同的類型,最后結果的類型為表達式2、3中較高類型的一種。如:(x=6)>(y=5)?l:1.5表達式的值是1.0而不是1。4.switch語句格式:switch(表達式){case 常量表達式1:語句1; break;case 常量表達式2:語句2; break;case 常量表達式n:語句n; break;default :語句n+1;break;)說明:switch、case、default、break都是關鍵字。花括號里面的語句叫做switch語句體。Switch語句體中可以沒有break語句和default部分。Switch語句的圓括號中表達式的值必須是整型或是字符型,不能為實型。case后的表達式可以是求得整型量的常量表達式,但是常量表達式中不能含有變量。(3)執行Switch語句時,首先計算Switch后圓括號的表達式的值,然后將這個值與語句體中case后的常量表達式的值相比較,如果某個常量表達式的值與之相等,則執行該case后的語句塊;如果沒有任何一個常量表達式的值與之相等,則執行default后的語句塊。(4)在執行的時候如果遇到break語句,則跳出switch語句。如果執行完一個case或者default語句塊后沒有遇到break,則繼續順序往下執行,知道遇到break語句或者語句體被執行完畢為止。(5)default最多只能有一個,通常出現在switch語句的最后部分,但也可以出現在case之間或所有的case之前。四.試題分析1.2008年4月試題分析:(17)已知字母A的ASCII代碼值為65,若變量kk為char型,以下不能正確判斷出kk中的值為大寫字母的表達式是A)kk>='A'&&kk<='Z'B)!(kk>='A'llkk<='Z')C)(kk+32)>='a'&&(kk+32)<='z'D)isalpha(kk)&&(kk<91)
(18)當變量c的值不為2、4、6時,值也為“真”的表達式是A)(c==2)II(c==4)II(c==6)B)(c>=2&&c<=6)II(c!=3)II(c!=5)C)(c>=2&&c<=6)&&!(c%2)D)(c>=2&&c<=6)&&(c%2!=1)(19)若變量已正確定義,有以下程序段inta=3,b=5,c=7;if(a>b)a=b;c=a;if(c!=a)c=b;printf(H%d,%d,%d\nn,a,b,c);其輸出結果是A)程序段有語法錯B)3,5,3C)3,5,5D)3,5,7(20)有以下程序#include<stdio.h>main(){intx=1,y=O,a=O,b=O;switch(x){case1:switch(y){case0:a++;break;b++;break;)a++;b++;break;a++;b++;}printf(“a=%d,b=%d\n”,a,b);)程序的運行結果是A)a=l>b=0B)a=2,b=2C)a=l,b=lD)a=2,b=l2.2007年9月試題分析(20)有以下計算公式(x>0)(x<0)(x>0)(x<0)若程序前面已在命令行中包含math.h文件,不能夠正確計算上述公式的程序段是A)if(x>=0)y=sqrt(x); B)y=sqrt(x);elsey=sqrt(-x); if(x<0)y=sqrt(-x);C)if(x>=0)y=sqrt(x); D)y=sqrt(x>=O?x:-x);if(x<0)y=sqrt(-x);(21)設有條祥表達式:(EXP)?i++:卜,則以下表達式中與(EXP)完全等價的是A)(EXP==O)B)(EXP!=O)C)(EXP==1)D)(EXP!=1)(23)已有定義:charc;,程序前面已在命令行中包含ctype.h文件。不能用于判斷c中的字符是否為大寫字母的表達式是A)isupper(c) B)'A'v=cv=ZC)'A'<=c&&c<=Z* D)c<=(,z,-32)&&(,a,-32)<=c(7)以下程序的功能是:輸出a、b、c三個變量中的最小值。請填空。#include<stdio.h>main()inta,b,c,tl,t2;scanf(''%d%d%d'',&a,&b,&c);tl=a<b?17];t2=c<tl?18】;printf("%d\n",t2);3.2007年4月試題分析(20)設變量x和y均已正確定義并賦值,以下if語句中,在編譯時將產生錯誤信息的是(C)if(x++); B)if(x>y&&y!=0);C)if(x>y)x-- D)if(y<0){;}elsey++; elsex++;(21)以下選項中,當x為大于1的奇數時,值為0的表達式()A)x%2==lB)x/2C)x%2!=0D)x%2==0(22)以下敘述中正確的是(C)A)break語句只能用于switch語句體中continue語句的作用是:使程序的執行流程跳出包含它的所有循環break語句只能用在循環體內和switch語句體內D)在循環體內使用break語句和continue語句的作用相同(23)有以下程序()main(){intk=5,n=0;do{switch(k){easel:case3:n+=l;break;default;n=0;k-;easel:case4:n+=2;k—;break;)printf(“%d”,n);}while(k>0&&n<5);)程序運行后的輸出結果是A)235B)0235C)02356D)2356第四章循環結構.教學重點、難點知識點所占分值考核幾率專家點評while語句2-3100%重點理解重點掌握do...while語句2-3100%重點理解重點掌握for語句5-7100%重點理解重點掌握循環嵌套4-6100%重點理解重點掌握循環比較0-120%簡單識記break語句2-370%難度適中,重點掌握continue語句2-350%難度適中,重點掌握注意:循環在這一章中的知識點比較少,但是它貫穿了整個的C語言的章節中,老師在教學中一定要把它它當做重點中的重點來抓!二.教學內容.while語句格式:while(表達式)(循環體語句1注意:while是C語言的關鍵字。L2.while后必須有小括號將表達式括起,里面的表達式是C語言中任意的表達式,作用是控制循環。其值為“真”(非0)則執行循環體語句,否則跳出while循環。L3.while語句也只能控制緊跟它的一條語句。若需要控制多條語句,必須用()括起,構成一條復合語句。圓括號內的表達式不能省略。循環體中的可以由一條空語句構成,表示循環體部分不做任何的操作。如:while(表達式);_/*;是循環體,它是一條空語句*/例如:分析下列程序的輸出結果。執行過程:(1)計算圓括號中表達式的值。若為非0則執行循環體語句,若為0則跳出循環。(2)執行完循環體語句后重復過程(Domain(){inti=Lsum=0;while(i<=100){sum=sum+I;i++;}printf(usum=%d",sum);)這是學習C語言基礎循環的最好的練習,老師讓學生練習的時候可以把i控制在10以內,讓學生知道什么是循環..d0-while語句格式:do循環體while(表達式)注意:do是C語言的關鍵字,需要和while一起搭配使用。while后必須有小括號將表達式括起,里面的表達式是C語言中任意的表達式,作用是控制循環。其值為“真”(非0)則執行循環體語句,否則跳出while循環。while語句也只能控制緊跟它的一條語句。若需要控制多條語句,必須用{)括起,構成一條復合語句。圓括號內的表達式不能省略。循環體中的可以由一條空語句構成,表示循環體部分不做任何的操作。如:do{;}while(表達式);_/*;是循環體,它是一條空語句*/由于do-while循環結構整個語法上也是C語言語句,因此最后的分號必不可少,它同樣表示語句的結束。執行過程:(1)執行循環體語句。(2)計算圓括號中表達式的值。若為非0則重復(1),否則跳出循環。.for語句格式:for(表達式1;表達式2;表達式3)循環體for是C語言的關鍵字.or之后的藁號內一共有三個表達式,以分號“;”隔開。一般情況下,表達式I的作用是賦初值;表達式2的作用是控制循環;表達式3的作用是賦值。for語句也只能控制緊跟它的一條語句。若需要控制多條語句,必須用{}括起,構成一條復合語句。表達式1、2、3均可以省略,若省略表達式2,則認為表達式2的值始終為真。而兩個分號絕不能省。行過程:(1)計算表達式1;(2)計算表達式2,若其值為非0,轉步驟(3);若其值為0則轉步驟(5);(3)執行一次for循環體。(4)計算表達式3,轉步驟(2).(5)結束循環,執行for語句后面的語句。.循環結構的嵌套在一個循環體內,又包含另一個循環。三種循環語句可以相互嵌套。main(){intij;for(i=l;i<3;i++)for(j=l;jv4<++) |printf("\ni=%dj=%d”,ij);]printfC<\ni=%dj=%d”,iJ);}for(i=l;;i++)printf(“%d”,i);/*表達式2的值始終為真,這是死循環*/.break和continue語句break語句用于結束循環或switch結構。continue語句用于結束本次循環,跳過循環中continue后尚未執行的語句,繼續進行下一次循環條件的判斷。注意:break語句只能控制直接包含它的switch結構或循環。continue語句只能控制直接包含它的循環。例1:main(){inti,sl=0,s2=0,s3=0;for(i=l;i<=10;i++){switch(i%5){casel:sl++;case2:s2++;break;case3:s3++;contiune;}sl++;}printf(“%d,%d,%d”,sl,s2,s3);)例2:把l~100之間能被4整除的數輸出。(老師一定要教會學生這中方法!)main()(inti;for(i=l;i<=100;i++)(if(i%4!=0)continue;printf(w%3d”,i);三.試題分析1.2008年4月試題分析(21)有以下程序#include<stdio.h>main(){intx=8;for(;x>0;x-){if(x%3){printf(u%d/\x-);continue;}printf(u%d;\-x);}}程序的運行結果是A)7,4,2B)8,7,5,2C)9,7,6,4D)8,5,4,2(22)以下不構成無限循環的語句或者語句組是A)n=0;B)n=0;do{++n;}while(n<=0);while(l){n++;}C)n=10;D)for(n=0,i=l;;i++)n+=i;while(n);{n—;}(31)有以下程序#include<stdio.h>main(){ints[12]={l,2,3,4,4,3,2,l,l,l,23},c[5]={0},i;for(i=0;i<12;i++)c[s[i]]++;for(i=l;i<5;i++)printf(“%d”,c[i]);)程序的運行結果是A)1234B)2344C)4332D)1123(32)有以下程序#include<stdio.h>voidfun(int*s,intnl,intn2){intij,t;i=nl;j=n2;while(i<j){t=s[i];s[i]=s[j];s[j]=t;i++;j-;)}main(){inta[10]={l,2,3,4,5,6,7,8,9,0},k;fun(a,0,3);fun(a,4,9);fun(a,0,9);for(k=0;k<10;k++)printf(u%d,\a[k]);printf(“\n”);)程序運行的結果是A)0987654321B)432109876505678901234D)0987651234(33)有以下程序#include<stdio.h>#include<string.h>voidfun(char*s[],intn){char*t;intij;for(i=0;i<n-l;i++)for(j=i+l;j<n;j++)if(strlen(s[i])>strlen(s[j])){t=s[i];s[i]=s[j];s[j]=t;})main(){char*ss口={“bcc”,“bbcc“】xy”】aaaacc”,"aabcc”};fun(ss,5);printf(“%s,%s\nn,ss[0],ss[4]);)程序的運行結果是A)xy,aaaaccB)aaaacc,xyC)bcc,aabccD)aabcc,bcc(35)有以下程序#include<stdio.h>voidfun(char*a,char*b){while(*a==,*,)a++;while(*b=*a){b++;a++;}}main(){char*s="****a*b****‘‘,t[80];fun(s9t);puts(t);}
程序的運行結果是A)*****a*bB)a*bC)a*b****D)ab(8)若有定義:intk;,以下程序段的輸出結果是[8】。for(k=2;k<6;k++,k++)printf(44##%d”,k);⑼以下程序段的定義語句中,x[l]的初值是【9】,程序運行后輸出的內容是【10】。#include<stdio.h>main(){intx[]=(l^,3,4^,6,7,8,9,10,ll,12,13,14,15,16),*p[4]4;for(i=0;i<4;i++){p[i]=&x[2*i+l];printf(“%d”,p[i][0]);}2007年9月試題分析(19)若變量已正確定義,有以下程序段i=0;doprintf("%d,",i);while(i++);printf("%d\n",i);其輸出結果是A)0,0B)0,1C)1,1(22)有以下程序#include<stdio.h>main(){inty=9;for(;y>0;y-)if(y%3==0)printf("%d",-y);}程序的運行結果是A)741B)963C)852(24)有以下程序#include<stdio.h>main(){intij,m=55;for(i=l;i<=3;i++)for(j=3;j<=i;j++)m=m%j;printf("%d\n",m);)程序的運行結果是A)0 B)1 C)2(34)有以下程序D)程序進入無限循環D)875421D)3#include<stdio.h>voidfun(int*a,intn)/*fun函數的功能是將a所指數組元素從大到小排序*/{intt,i,j;for(i=0;i<n-l;i++)for(j=i+l;j<n;j++)if(a[i]<a|j]){t=a[i];a[i]=a[j];a[j]=t;}main(){intc[10]={l,2,3,4,5,6,7,8,9,0},i;fun(c+4,6);for(i=0;i<10;i++)print*”%d,”,c[i]);printf("\n");)程序的運行結果是A)1,23,4,5,6,7,8,9,0, B)0,9,8,7,6,5,1,2,3,4,C)0,9,8,7,6,5,43,2,1, D)1,23,4,9,8,7,6,5,0,(8)以下程序的輸出結果是[9Lo#include<stdio.h>main(){intn=12345,d;while(n!=0){d=n%10;printf("%d",d);n/=10;})(9)有以下程序段,且變量已正確定義和賦值for(s=1.0,k=l;k<=n;k++)s=s+1.0/(k*(k+l));printf("s=%f\n\n",s);請填空,使下面程序段的功能與之完全相同s=1.0;k=l;while(【10]){s=s+1.0/(k*(k+l));【H】;}printf(ns=%f\n\nH,s);(10)以下程序的輸出結果是【121o#include<stdio.h>main(){inti;for(i='a';iv'f';i++,i++)printf(H%cH,i- +'A');printf(,,\nH);}2007年4月試題分析(22)以下敘述中正確的是(C)break語句只能用于switch語句體中continue語句的作用是:使程序的執行流程跳出包含它的所有循環break語句只能用在循環體內和switch語句體內D)在循環體內使用break語句和continue語句的作用相同(23)有以下程序()main(){intk=5,n=0;do{switch(k){easel:case3:n+=l;break;default;n=O;k-;case2:case4:n+=2;k-;break;}printf(“%d”,n);}while(k>0&&n<5);}程序運行后的輸出結果是A)235B)0235C)02356D)2356(24)有以下程序mian(){intij;for(i=l;i<4;i++){for(j=i;j<4;j++)printf(“%d*%d=%d",ij,i*j);printf(“\n”);}}程序運行后的輸出結果是()A)1*1=11*2=21*3=3B)1*1=11*2=21*3=32*1=222*1=22*2=43*1=3C)1*1=11*2=22*2=41*3=32*3=63*3=9D)1*1=12*1=22*2=43*3=9 3*1=33*2=63*3=9(7)當執行以下程序時,輸入1234567890〈回車〉,則其中while循環體將執行一次。#include<stdio.h>main(){charch;While((ch=getchar())==,0,)printf(“#");第五章字符型數據位運算一.教學內容.字符型數據字符常量:用一對單引號括起的一個字符。例如:'ALWJ6,是合法的字符型常量。“a”「ab'A,5,'12’都是不合法的字符型常量。L2轉義字符常量:必須以一個反斜杠“\"開頭.常見的轉義字符見表5-1。\n:回車換行\t:橫向跳格\v:豎向跳格\b:退格\r:回車\f:換頁\ddd:ddd表示最多可以有三位8進制數。\xhh:hh表示最多可以有二位16進制數。注意:三位8進制數不一定以0開頭,只要是0?7之間的數字即可。例:下列字符常量中合法的是()A.\027B.,\028,C.,\xl2,D/XOxlfE.''1234'F.'Xxffh'G'AB'H.'123'L,\12,J.”A"K:\kV例:下列字符常量中合法的是()A.'/'B.7f C.''' D.,,,,E.,\b,F.'\' G'\\' H:/P I,''"字符型變量關鍵字:char,字符型變量在內存中占1字節。例:chara=,5,;宣字符的ASCII碼值是97字符的ASCII碼值是65(小大)同一字母的大小寫之差是32,那么我們要把小寫字母變成大寫字母就相應的字母減去32即可,同樣大寫字母加上32后就變成了與其相對應的小寫字母。數字,對應的ASCII碼值是48-57o.字符數據的輸入輸出putchar()和printf()格£:putchar(字符),printf(u%c,,,ch);功能:輸出一個字符,但不輸出單引號。其中“字符”可以是一切合法的字符型或整型數據。它會自動將整型數據轉換為相應的字符輸出。putchar('a');a printf(u%c,,,,a,);aputchar(65);A printf("%c",65);Acharch='g';putchar(ch);輸出:gcharch='g5;printf(<<%c,,,ch);輸出:ggetchar()格式:getchar()功能:接收一個從鍵盤輸入的字符。注意:1.它可以接收從鍵盤上輸入的任何字符,包括回車符、空格符等。2.任何輸入都是在回車后方按順序送入內存中,即才被函數接收。如:chara,b;a=getchar();b=getchar();若輸入:1〈回車>則變量a的值為字符'了變量b的值為回車符。2.3.scanf函數輸入數據:在進行字符數據輸入的時候,空格符、回車、橫向跳格都是合法有效的字符,都將被讀入并賦值給相應的變量。3.位運算(詳細的見課本52頁)二.試題分析1.2008年試題分析(13)以下選項中不屬于字符常量的是A)C*B)nCHOXxCCO*D)'\072,(16)有以下程序段charch;intk;ch=*a*;k=12;printf(M%c,%d/\ch,ch,k);printf(Hk=%d\nH,k);己知字符a的ASCH十進制代碼為97,則執行上述程序段后輸出結果是A)因變量類型與格式描述符的類型不匹配輸出無定值B)輸出項與格式描述符個數不符,輸出為零值或不定值C)a,97,12k=12D)a,97,k=12(17)已知字母A的ASCII代碼值為65,若變量kk為char型,以下不能正確判斷出kk中的值為大寫字母的表達式是A)kk>='A'&&kk<='Z'B)!(kk>='A'||kk<='Z')C)(kk+32)>='a'&&(kk+32)<=,z'D)isalpha(kk)&&(kk<91)(38)變量a中的數據用二進制表示的形式是01011101,變量b中的數據用二進制表示的形式是11110000。若要求將a的高4位取反,低4位不變,所要執行的運算是A)aAbB)albC)a&bD)a?42.2007年9月試題分析(23)已有定義:charc;,程序前面已在命令行中包含ctype.h文件。不能用于判斷c中的字符是否為大寫字母的表達式是A)isupper(c) B)'A'<=c<='Z'C)'A'<=c&&c<='Z' D)c<=('z'-32)&&('a'-32)<=c(26)已知字符W的ASCII代碼值是65,字符變量cl的值是,Alc2的值是,DI執行語句printf("%d,%d",cl,c2-2);后,輸出結果是A)A,BB)A,68 C)65,66 D)65,68#include<stdio.h>main(){inti;for(i='a';i<T;i++,i++)printf("%c",i-'a'+'A');printf("\n");3.2007年4月試題分析(25)以下合法的字符型常量是()A)'\xl3'B)<\018,C)'65'D)'\n'(27)已知大寫字母A的ASCII碼是65,小寫字母aASCH碼是97,以下不能將變量c中大寫字母轉換為對應小寫字母的語句是()A)c=(c-A)%26+'a' B)c=c+32C)c=c-'A'+'a' D)c=('A'+c)%26-<a,(7)當執行以下程序時,輸入1234567890〈回車〉,則其中while循環體將執行次。#include<stdio.h>main(){charch;While((ch=getchar())=='0')printf(“#");}第六章函數一.教學重點、難點知識點所占分值考核幾率專家點評庫函數1-260%簡單,重點識記知識點函數的定義0-150%簡單,重點識記知識點形參和實參及函數調用2-380%難度適中,重點理解重點掌握函數調用的一般形式和調用方式2-390%偏難,重點掌握重點理解函數的說明及其位置0-160%簡單識記函數的嵌套調用1-390%偏難,重點掌握重點理解函數的遞歸調用1-280%偏難,重點掌握重點理解二.教學內容函數是C程序的基本單位。.函數的定義:函數返回值的類型名函數名(類型名1形參名1,類型名2形參名2,....)(說明部分語句部分說明:一個C程序可以由一個或多個源程序文件組成。一個源程序文件可以由一個或多個函數組成。C程序>源程序>函數函數返回值的類型名缺省時,返回值類型默認為int型,而不是沒有返回值。若沒有返回值的時候應該為void.函數名是用戶自定義標識符,唯一且獨有,不得與同一程序中其他函數相同。主函數的函數名必須是maino函數后面的括號是必不可少的,括號中的為形式參數列表。形式參數用于數據的傳遞,同樣是用戶標識符。在同一函數內形式參數必須是唯一的。如果函數不帶形式參數,則形式參數列表可以省略。函數體部分的一對花括號必不可少。函數之間的關系是相互平行、獨立的,不是相互隸屬的。函數不能嵌套定義,不能在一個函數體內定義另一個函數。函數可以相互調用,但不能調用main。函數。函數的分類:.從形式分:無參函數:如:main()getchar()帶參函數:如:strlen("abc").從用戶使用的角度分標準函數(庫函數):如:getchar()用戶自定義函數:doubleadd(inta,intb){函數體}
1.10函數的定義的比較類1.10函數的定義的比較類型名函數名(類型名{函數體}intmin(intx,inty){函數體}/*現代方式*/形參1,類型名形參2,…)/*函數首部*/intmin(x,y)intx,y;{函數體)/*傳統方式*例如:floatfun(intx9inty)floatfun(x,y){ } intx;inty;{)以上函數的定義是合法的。intfun(intx,y){…}intfun(intx;inty){...)intfun(intx,y)inty;intfun(x,y){intx,y;}intfun(x,y)intx,y,z;{...}以上函數的定義均是非法的。.函數的參數和函數值函數的參數可以分為:形式參數和實際參數。形參:函數定義時函數名后小括號內的參數。實參:函數調用時函數名后小括號內的參數。注意:⑴形參只有在該函數被調用時才占內存單元,即該變量才可用;函數調用結束時形參所占的內存單元被釋放,即不可用。⑵實參和形參的數據類型應該對應相同。否則,必須將函數的定義放在函數調用之前或在調用之前對函數作原型聲明。例如:voidsum(intx,inty)〃函數定義,x,y是被調用函數的參數,我們叫它形參(printf(“%d”,x+y);}main()sum(3,5);〃函數調用,這里的3和5是調用函數的參數,我們叫為實參}/*類型對應不相同*/函數值:函數的返回值即函數值。return語句的格式:retrun表達式;或return(表達式);功能:將表達式的值作為函數值返回給主調函數,并結束本函數的執行。注意:函數值應通過return語句返回,一個函數中可以有多條return語句,只要執行其中任何一條return語句,該函數立即結束執行,并將該retrun后表達式的值返回。例如:intmax(intapntb)(if(a>b)returna;elsereturnb;}函數值的類型保持與函數定義時所指定的類型相同,而與retrun后表達式的值的類型無關。若定義函數時不指定函數的類型,則默認是int。max(floata,floatb) intmax(floata,floatb){returna/b;} {returna/b;}為了明確函數無返回值,可將函數指定為空類型(void)。例如:voidfun(inta)(printf(u%d,,,a);.函數調用調用格式:函數名(實參)無參調用格式:函數名Oclrscr();帶參調用格式:函數名(實參列表)調用函數時,函數名必須一致。函數名是唯一區別函數的標志。實參和形參的類型匹配,個數一致,形式上一一對應。一般情況下,函數應該先定義后調用。函數可以直接或者間接調用自己,稱為遞歸調用。例如:voidswap(inta,intb)/*函數定義*/(a=a+b;b=a-b;a=a-b;}main()(inta=2,b=5;swap(a,b);/*函數調用*/printf(ua=%d,b=%d,,,a,b);.函數的原型聲明格式:函數類型函數名(形參類型1,形參類型2,…);或函數類型函數名(形參類型1形參名1,形參類型2形參名2…);對上例中的swap函數作原型聲明的格式:voidswap(intjnt);voidswap(intajntb);voidswap(intxjnty);注意:若被調函數定義在主調函數之前時,可以不作原型聲明。若被調函數定義在主調函數之后,則在調用前應作原型聲明。例如:voidswap(inta9intb)/*函數定義*/{a=a+b;b=a-b;a=a-b;}main(){inta=2,b=5;swap(a,b);/*函數調用*/printf(ua=%d,b=%d”,a,b);main(){inta=2,b=5;voidswap(intjint);/*原型聲明*/swap(a,b);/*函數調用*/printf(ua=%d,b=%d”,a,b);}voidswap(inta,intb)/*函數定義*/{a=a+b;b=a-b;a=a-b;}如果在程序文件的開始就對函數作外部原型聲明,則在各主調函數中不必再作原型聲明。例:voidswap(int,int);/*外部原型申明*/main(){intx=l,y=2;swap(x,y);swap(x+l,y+l);)voidswap(inta,intb){?…}補充:若果形參中有數組,則作原型聲明時數組的中括號不能省略。例如:floatfun(doubleb[])()可以用以下方式原型聲明:floatfun(double[]);floatfun(doublea[]);而以下的聲明方式是錯誤的:floatfun(doubleb);.函數的嵌套調用和遞歸調用嵌套調用:在一個函數內調用另一個函數。遞歸調用:在一個函數內直接或間接調用它本身。若在函數A內直接調用函數A稱為直接遞歸。若函數A調用函數B,函數B又調用函數A則稱為間接遞歸調用。例1:longfun(intk)(if(k==lllk==2)return1;elsereturnfun(k-l)+fun(k-2);Imain()(intn;scanf(“%d”,&n);printf(“%ld”,fun(n));}例2:intfunc(inta,intb)(return(a+b);}main()(intx=2,y=5,z=8,r;r=func(func(x,y),z);printf(u%d\n,\r);).函數的參數傳遞C語言中,函數參數之間的數據傳遞僅僅通過實參向形參的單向數據傳遞,即'“值傳遞不能我們不能通過形參的改變來改變實參。總紀(1)數據只能從實參向形參單向傳遞。(2)到目前為止,函數之多能返回一個值。就是return帶回來的值。例如:voidswap(intal9intbl)/*函數定義*/(inttl;t=al;al=bl;bl=t;)main(){inta=2,b=5;swap(a,b);/*函數調用*/printf(ua=%d,b=%d”,a,b);voidswap(int*a3,int*b3){intt2;t2=*a3;*a3=*b3;*b3=t;)main(){inta2=29b2=5;swap(&a2,&b2);/*函數調用*/printf(ua2=%d,b2=%d,\a2,b2);地址值變量10002a10025b1004al1006bl10081010101210141016用地址表來講解這些問題比較好。三.試題分析1.2008年4月試題分析(34)有以下程序#include<stdio.h>intf(intx){inty;if(x==0llx==l)return(3);y=x*x-f(x-2);returny;)main(){intz;z=f(3);printf(“%d\n”,z);}程序的運行結果是A)0B)9C)6D)8(12)以下程序的輸出結果是【13】。#include<stdio.h>voidfun(intx){if(x/2>0)fun(x/2);printf(“%d”,x);}main(){fun(3);printfC^);}2007年9月試題分析(25)若函數調用時的實參為變量時,以下關于函數形參和實參的敘述中正確的是A)函數的實參和其對應的形參共占同一存儲單元B)形參只是形式上的存在,不占用具體存儲單元C)同名的實參和形參占同一存儲單元D)函數的形參和實參分別占用不同的存儲單元(27)以下敘述中錯誤的是A)改變函數形參的值,不會改變對應實參的值B)函數可以返回地址值C)可以給指針變量賦一個整數作為地址值D)當在程序的開頭包含頭文件stdio.h時,可以給指針變量賦NULL2007年4月試題分析(8)以下程序的運行結果是—ointk=0;voidfun(intm){m+=k;k+=m;printf("m=%d\nk=%d”,m,k++);}main(){inti=4;fun(i++);printf(“i=%dk=%d\n,,,i,k);I第七章指針.教學重點、難點知識點所占分值考核幾率專家點評指針變量的定義和引用2-360%簡單識記指針變量作為函數參數2-390%簡單,重點掌握指向數組元素的指針3-4100%難度適中,重點掌握重點理解用數組名作為函數參數2-390%難度適中,重點掌握指向多維數組的指針3-4100%偏難,重點理解返回指針值的函數1-280%簡單,重點掌握二.教學內容.變量的地址內存中的每一個字節都有一個唯一的編號,這個編號就是該字節的地址。inta=15,b=20;叵20012020022020032004變量的地址:是對應存儲單元的首地址(起始地址)。那么a的地址就是2001,b的地址是2003..指針變量指針:變量的地址就是該變量的“指針”,(指針就是地址,地址就是指針)。指針變量:用于存放變量地址的變量稱為指針變量。指針變量的定義格式:類型名*指針變量名;如:int*p;inta,*q;例1:int*p,a=20;p=&a;因為變量P存放了a的地址,所以p是指向a的指針變量。例2:int*p=20;/*出錯*/inta=20,*p=a;/*出錯,指針變量只能用于存放地址值*/指向指針變量的定義:格式:類型名**指向指針變量名如:int**q;例:int*p,**q,a=5;/*我們定義了一個int型的指針變量、一個int型的指向指針變量和一個int型的變量*/指針變量的賦值:int*p,a=20;或inta=20,*p=&a;p=&a; /*這兩種賦值是等價的,第二種是定義的時候賦值,第一種形式是先定義后賦值,學生會對第二種形式有些模糊,老師一定要講到位*/int*p,**q,a=5;或inta=5,*p=&a,**q=&p;p=&a,q=&p;/*我們必須知道,指針變量只能存取變量的地址或是和它相同類型指針的值。指向指針只能存取指針變量的地址。學生在學習的時候一定要讓他們知道變量間的賦值必須是相同類型的才可以真確的賦值成功。*/給指針變量賦“空值”P=NULL;NULL是在stdio.h頭文件中的預定義符,因此在使用NULL時,應該在程序前面寫上:#include"stdio.h"NULL的代碼值是0,所以等價:p=o;或p=\(r;注意:當P指向NULL時候,p并不是指向地址為0的存儲單元,而是具有一個確定的值“空”,如果通過一個空指針去訪問一個存儲單元,將會得到一個出錯的信息。.對指針的操作31弓[用存儲單元除了取地址運算符與指針變量有關外,C語言還有一個指針運算符(也叫間接訪問運算符)也與指針變量有關。inta=20,*p=&a;那么a=*p,a++等價與(*p)++。這里*p意味著取指針變量指向變量的內容。(1)指針變量定義中的“*”和間接訪問運算符“*”有本質的區別。當定義一個指針變量的時候,“*”是說明一個變量是指針變量,而“*”作為間接訪問運算符的時候意味著取指針變量
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 租賃經營市場營銷策略實施方案考核試卷
- 纖維板企業的市場競爭力分析與提升策略考核試卷
- 缺點的初一語文作文
- 名勝古跡頤和園初三語文作文
- 玻璃熔化與成型技術考核試卷
- 電視設備智能生物藥品產業國際企業融資渠道與資本運作技術考核試卷
- 糖果行業發展趨勢預測考核試卷
- 生態保護與大氣污染防治技術考核試卷
- 畜糞有機肥制備與質量檢測技術考卷考核試卷
- 皮革服裝生產中的智能化生產線設計考核試卷
- 汽車維修場所安全管理協議書
- 《廣西壯族自治區房屋建筑和市政基礎設施工程質量安全手冊實施細則(試行)》
- JJF(陜) 016-2019 呼吸器綜合檢測儀校準規范
- 接觸網高空作業安全培訓
- 三角堰流量計算公式
- 砌體工程事故及事故分析
- 《改善患者就醫體驗》課件
- 《產科超聲之科普講》課件
- 用電安全及防雷防靜電知識考核試卷
- 服務機器人的智能導航與定位考核試卷
- 化驗室培訓課件
評論
0/150
提交評論