C語言程序設計與應用(第2版)全套課件_第1頁
C語言程序設計與應用(第2版)全套課件_第2頁
C語言程序設計與應用(第2版)全套課件_第3頁
C語言程序設計與應用(第2版)全套課件_第4頁
C語言程序設計與應用(第2版)全套課件_第5頁
已閱讀5頁,還剩312頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

C語言程序設計

ProgrammingofTheCLanguage122025/3/8課時安排授課:32學時實驗:16學時作業(yè)要求(平時考核)獨立完成自己的工作,并進行抽查上課前收作業(yè),課后交者,按未做作業(yè)計實驗要求實驗報告要獨立書寫,互相抄襲者0分實驗要做實驗報告規(guī)定內(nèi)容課堂要求(平時考核)不允許遲到積極互動期末成績核算平時分:10%;實驗分:20%;反轉(zhuǎn)課堂:10%;期末考試:60%參考書C語言程序設計與應用張小東人民郵電出版社C語言程序設計教程譚浩強高等教育出版社C高級實用程序設計王士元清華大學出版社主要內(nèi)容1.掌握基本的語法知識,能夠跟計算機進行代碼級的交流2.能夠繼續(xù)學習程序設計,幫助拓展自己的專知識3.順利通過各專業(yè)考試,爭取好成績C語言程序設計計算性問題求解判定性問題求解同類型數(shù)據(jù)集合異構類型數(shù)據(jù)集合數(shù)據(jù)的永久性存儲排序算法設計與實現(xiàn)計算器設計與實現(xiàn)學生成績管理設計與實現(xiàn)上機實驗語言基礎程序設計實踐應用C語言詞法描述C語言的基本語法程序流程控制語句4第1章簡單的C程序設計

主要內(nèi)容C程序的構成C語言的入門知識簡單C程序的擴展繪制流程圖運算符的優(yōu)先級與結合性格式輸出輸入函數(shù)printf和scanf難點5第1章簡單的C程序設計

主要內(nèi)容C程序的構成C語言的入門知識簡單C程序的擴展IfIworkhardenough,therewillbethingsIcandotomorrowthatIcan'tdotoday62025/3/8===C程序的構成===注釋引入另一個文件主函數(shù)名

變量聲明語句

賦值語句

函數(shù)調(diào)用語句

返回值編寫一個程序打印出:你好,哈工大(威海)8第1章簡單的C程序設計

主要內(nèi)容C程序的構成C語言的入門知識簡單C程序的擴展9第1章簡單的C程序設計

主要內(nèi)容C語言的入門知識C語言常見的標識符號基本數(shù)據(jù)類型格式化輸出輸入函數(shù)C語言的書寫規(guī)則10===C語言的入門知識.標識符號===C語言常見的標識符號(1)關鍵字(32個)(2)標識符

系統(tǒng)預定義用戶自定義英文字母、數(shù)字和下劃線組成,英文字母或下劃線開頭不允許使用關鍵字作為標識符的名字標識符區(qū)分大小寫標識符命名應做到“見名知意”(3)分隔符(4)運算符+,-,*,/,%,=學習要點操作數(shù)個數(shù)優(yōu)先級別結合性(5)其它符號{}/**///全部雙目運算符操作數(shù)1運算符操作數(shù)2例:a+b表達式1運算符表達式2例:a*b+4/3雙目運算符變量=表達式

例:a=b*3431411第1章簡單的C程序設計

主要內(nèi)容C語言的入門知識C語言常見的標識符號基本數(shù)據(jù)類型格式化輸出輸入函數(shù)C語言的書寫規(guī)則12==C語言的入門知識.基本數(shù)據(jù)類型==數(shù)據(jù)類型的作用規(guī)定了數(shù)據(jù)的有效長度,即數(shù)據(jù)的取值范圍數(shù)據(jù)的運算規(guī)則數(shù)據(jù)類型(1)字符類型形如’a’、’b’、’c’……的數(shù)據(jù)(2)以ASCII碼存儲(3)變量定義

char變量名表;例:charcName;數(shù)據(jù)類型(4)賦值cName=‘a(chǎn)’;(5)轉(zhuǎn)義字符,如’\n’表示換行‘a(chǎn)’:110000113==C語言的入門知識.基本數(shù)據(jù)類型==數(shù)據(jù)類型[修飾符]整數(shù)類型關鍵字變量名;例如,intnOper;shortnsOper;signedshortnsOper;unsignedshortnsOper;(2)整數(shù)類型關鍵字:short(2字節(jié)byte)int(4字節(jié)byte)long(4字節(jié)byte)[signedunsigned]修飾符格式:取值范圍取值范圍11000011100001signedshort符號位‘a(chǎn)’:1100001Question:請總結一下整數(shù)類型家族計算機中的實數(shù)類型被稱為浮點類型14數(shù)據(jù)類型(3)浮點類型==C語言的入門知識.基本數(shù)據(jù)類型==單精度float:占4個字節(jié),取值范圍為-3.4×1038~3.4×1038雙精度double:占8個字節(jié),取值范圍為-1.7×10308~1.7×10308,有效位數(shù)是15位。浮點類型關鍵字

變量名;floatfNum;doubledNum;浮點類型關鍵字

變量名=初始值;floatfNum=1.0f;doubledNum=1.0;運算符與數(shù)據(jù)類型的關系?printf()函數(shù)的作用是按指定格式向標準化輸出設備(通常指屏幕)輸出數(shù)據(jù),其調(diào)用形式可以簡單表示為: printf("<格式化字符串>",<參量表>);15格式化輸出函數(shù)==C語言的入門知識.格式化輸入輸出==不帶參量帶參量,%charcValue=’c’;intnNum=5;floatfNum=6.8f;doubledNum=7.55;printf(“字符:%c;整數(shù):%d;單精度浮點型:%f;雙精度浮點型:%lf\n”,cValue,nNum,fNum,dNum);scanf()函數(shù)作用是按指定格式從標準化輸入設備(通常指鍵盤)讀入數(shù)據(jù),其調(diào)用形式可以簡單表示為: scanf("<格式化字符串>",<參量表>);16格式化輸入函數(shù)==C語言的入門知識.格式化輸入輸出==intnNum;floatfNum;scanf(“%d”,&nNum);

scanf(“%f”,&fNum);scanf(“%d%f”,&nNum,&fNum);不帶任何符號取地址符號17地址的小常識==C語言的入門知識.格式化輸入輸出==程序只有被調(diào)入到內(nèi)存中才能執(zhí)行。x0109程序(代碼)區(qū)變量區(qū)intmain(){inta,b=3;……}變量名地址ax0109bx010Dx0109x010D0011000000000000內(nèi)存輸出:變量名輸入:&變量名18C語句都是以分號作為結束標志的C程序的書寫格式比較自由(建議讀者一行只寫一條語句)。(3)C語言代碼劃分段落?!岸巍笔且浴皗}”來進行劃分的(4)為了對程序進行必要的說明,可以添加注釋,它有兩種方式/**/和//。nNumber=1;printf(“HelloClanguage”);C語言的書寫規(guī)則==C語言的入門知識.書寫規(guī)則==19第1章簡單的C程序設計

主要內(nèi)容C程序的構成C語言的入門知識簡單C程序的擴展基本功能設計三方面的功能規(guī)劃:字符定義及輸出整數(shù)的加、減、乘、除、取余實數(shù)/浮點數(shù)加、減、乘、除程序設計描述的方法==簡單C程序的擴展==21程序?qū)崿F(xiàn)/*purpose:ArithmeticalOperationauthor:XiaodongZhangcreated:2017/01/2116:28:08*/==簡單C程序的擴展==程序設計描述22常見錯誤分析變量聲明、使用、輸出必須保證語法的一致性inta,a,……; //聲明為整數(shù)類型scanf(“%d”,&a); //輸入為整數(shù)類型m=a%b;//求余—符合整數(shù)運算的算法printf(“……Mod:%d\n”,……,m);//以整數(shù)類型輸出,即%d聲明時不能出現(xiàn)連續(xù)賦值,即inta=b=2。未初始化的變量不代表0或空,而代表未知!可能出現(xiàn)的錯誤(1)語法錯誤指違反C語言所規(guī)定的詞法、語法錯誤,如關鍵字拼寫錯誤、未加分隔符或分隔符使用錯誤、標識符不符合命名規(guī)范等。(2)邏輯錯誤指由于設計錯誤或者代碼實現(xiàn)邏輯上所存在的一些問題,致使程序運行后沒有得到所要求的結果。23//錯誤1intnNum=2;printf(“%f”,nNum);//錯誤2shortnNum=32767;nNum=nNum+1;printf(“%d”,nNum);//錯誤3doubledNum=2.3;printf(“%f”,dNum);//錯誤4intnLNum=2,nRnum=3;printf(“%f”,nLNum/nRnum);//錯誤5floatfNum;scanf(“%f”,fNum);?24淺談編程風格25淺談編程風格非技術性風格要求

(1)程序代碼的布局,包括注釋和格式控制的使用;

(2)變量和函數(shù)的命名規(guī)則與標準;

(3)代碼書寫習慣等內(nèi)容;技術性風格要求

(1)程序結構的選擇

(2)程序語句的使用以及編程技巧等方面內(nèi)容262025/3/8本章小結知識層面C語言基本構成C語言常見的標識符號基本數(shù)據(jù)類型格式化輸出/輸入函數(shù)方法層面分析問題的方法編程風格的培養(yǎng)發(fā)現(xiàn)應用中的不足C語言程序設計

ProgrammingofTheCLanguage主講教師:張小東聯(lián)系方式:z_xiaodong7134@163.com答疑地點:宋健研究院514課堂助手:30:8083/download.htmlC4droid:30:8083/download.html27/spoc/course/HITWH-1001742016mooc:28第2章選擇控制結構及應用主要內(nèi)容選擇結構的基本運行符if-else選擇結構switch選擇結構應用實例復合運算符及復雜表達式多條件選擇結構難點29第2章選擇控制結構及應用人工智能IBM的DeepBlue

vs

國際象棋冠軍卡斯帕羅夫谷歌(Google)的AlphaGovs

圍棋九段李世石人工智能算法語言支撐之一—選擇結構是--1否--030第2章選擇控制結構及應用主要內(nèi)容選擇結構的基本運行符if-else選擇結構switch選擇結構應用實例312025/3/8===選擇結構的基本運行符===關系運算符及表達式優(yōu)先級別操作數(shù)個數(shù)結合性值運算次序例:inta=3,b=2,c=8,d=2;floatx=1.5f;a+b>c-d;x>3/2; 'a'+b>c;a!=(c==d);?表達式的值是由最后(優(yōu)先級最低)一次運算結果決定的1or0非0即真0為假??表達式1

關系運算符表達式2322025/3/8===選擇結構的基本運行符===邏輯運算符及表達式真值表表達式邏輯運算符表達式

邏輯運算符表達式單目“短路”原則:“&&”表達式,兩端任意一端值為0,則另一端將不被執(zhí)行!

“||”表達式,兩端任意一端值為1,則另一端將不被執(zhí)行!“短路”原則大大提升了C語言的運算效率,33第2章選擇控制結構及應用主要內(nèi)容選擇結構的基本運行符if-else選擇結構switch選擇結構應用實例342025/3/8===if-else選擇結構===if結構if(表達式){語句塊;}352025/3/8===if-else選擇結構===if結構[例2-1]編程實現(xiàn):任意輸入兩個整數(shù),輸出其中的大數(shù)。思考:如果有這樣一條輸入語句scanf("a=%d,b=%d",&a,&b),則用戶應該怎樣輸入呢?

練習:輸入兩個整型變量a、b,若a>b,則交換a和b的值,輸出交換后a和b362025/3/8===if-else選擇結構===if-else形式if(表達式){

語句塊1;}else{

語句塊2;}372025/3/8===if-else選擇結構===if-else形式[例2-2]輸入兩個實數(shù),請用if-else語句輸出其中的大數(shù)。

練習:輸入兩個整型變量a、b,若a>b,則交換a和b的值,否則輸出沒有交換發(fā)生,輸出交換后a和b382025/3/8===if-else選擇結構===if-else-if形式if(表達式1){語句塊1;}elseif(表達式2){語句塊2;}······elseif(表達式n){語句塊n;}else{語句塊n+1;}392025/3/8===if-else選擇結構===if-else-if形式[例2-3]按100分制輸入學生考試分數(shù),按A、B、C、D、E給出成績的等級。90分以上(包括90分)為A等,60分以下(不包括60分)為E等,中間每10分為一個等級,畫出流程圖。402025/3/8===if-else選擇結構===if語句的嵌套if(表達式){if(表達式){

語句;}}if(表達式){if(表達式){語句;}}else{if(表達式){語句;}}[例2-4]將“例2-3”改寫為if語句的嵌套形式。判斷輸入成績的合法性,再進行分檔。如何設計呢?412025/3/8===if-else選擇結構===if語句的嵌套思考:可以用右邊的程序來實現(xiàn)左邊的公式嗎?試畫出流程圖來分析。intmain(){intx,y=-1;scanf("%d",&x);if(x!=0)if(x>0)y=1;elsey=0;printf("y=%d\n",y);return0;}422025/3/8===if-else選擇結構===if結構中使用表達式的拓展思考:你知道這些程序的運行結果嗎?C語言允許所有合法的表達式作為條件表達式使用if(a+b){……}if(a%b){……}if(a){……}432025/3/8===if-else選擇結構===條件運算符、條件表達式及條件語句表達式1?表達式2:表達式3if(a>b)max=a;elsemax=b;max=(a>b)?a:b;?y=x>0?1:(x<0?-1:0)44第2章選擇控制結構及應用主要內(nèi)容選擇結構的基本運行符if-else選擇結構switch選擇結構應用實例switch功能:根據(jù)表達式的值來選擇所要執(zhí)行的語句switch作用:處理多分支選擇問題switch(表達式){

case

常量表達式1: 語句組1;[break;]

case

常量表達式2: 語句組2;[break;] ……

case

常量表達式n: 語句組n;[break;]

default: 語句組n+1;}必須用{}值為整數(shù)類型有空格類型相同值各不相同多條時不用{}可在任意位置break用來中斷switch語句===switch選擇結構===[例2-5]輸入一個1~7之間的數(shù)字,然后將其轉(zhuǎn)換成星期的英語單詞,并輸出。如輸入5,則輸出“Friday”===switch選擇結構===程序設計描述程序?qū)崿F(xiàn)intmain(void){intnDay;printf("inputintegernumber:");scanf("%d",&nDay);switch(nDay) /*判定表達式*/{ case1:printf("Monday\n");break; case2:printf("Tuesday\n");break; case3:printf("Wednesday\n");break; case4:printf("Thursday\n");break; case5:printf("Friday\n");break; case6:printf("Saturday\n");break; case7:printf("Sunday\n");break; default:printf("Error!\n");}return1;}if-else-if語句與switch語句===switch選擇結構===屬性語句

閱讀與書寫運行效率內(nèi)存空間消耗適用范圍可嵌套性可替換性if-else-if較難低低廣可以替換switch容易switch容易高高窄可以替換if-else-if難(1)閱讀與書寫(2)運行效率(3)內(nèi)存空間的消耗(4)適用范圍(5)可嵌套性(6)可替換性48第2章選擇控制結構及應用主要內(nèi)容選擇結構的基本運行符if-else選擇結構switch選擇結構應用實例程序設計描述[例2-6]編寫計算器程序。要求由用戶選擇運算功能,對任意輸入的兩個數(shù)進行計算,并輸出結果。===應用實例===if-elseswitchprintf#include<stdio.h>voidmain(void){doublel,r,t; intf; printf("--------------------------\n");printf("plus--------1\n");printf("substract--------2\n");printf("multiplication--------3\n");printf("divsion--------4\n");printf("--------------------------\n");printf("inputforchoice:

");50[例2-6]編寫計算器程序。程序?qū)崿F(xiàn)===應用實例===scanf("%d",&f);if(nFun<1||nFun>4)printf(“error!\n");else{printf("inputtwooperators:"); scanf("%lf%lf",&l,&r); switch(f){case1:t=l+r;break; case2:t=l-r;break;case3:t=l*r;break; default:if(0.0!=r) r=l+r; elseprintf(“error!Divisoris0\n"); break;}printf("result:%8.3lf\n",t); }}[例2-7]學生成績管理程序。要求:按百分制任意輸入某個學生的某科成績,將其存儲到變量fScore中,按優(yōu)、良、中、及格和不及格的等級輸出。===應用實例===問題分析用switch實現(xiàn)成績是實數(shù),switch只能整形判等低精度變量=(低精度數(shù)據(jù)類型)高精度數(shù)據(jù)變量強制類型轉(zhuǎn)換要丟失精度數(shù)據(jù)類型轉(zhuǎn)換機制:隱式與強制隱式:由低精度到高精度(自動)強制:均可(手動)chara='a';intb=12;floatc=11.23;doubled=123.12345;doublee; e=a+b*c+d;屠龍

刀類型轉(zhuǎn)換[例2-7]學生成績管理程序。要求:按百分制任意輸入某個學生的某科成績,將其存儲到變量fScore中,按優(yōu)、良、中、及格和不及格的等級輸出。===應用實例===問題分析用switch實現(xiàn)熱身:輸入一個浮點數(shù),分別取出它的小數(shù)部分與整數(shù)部分,然后輸出它們#include<stdio.h>intmain(){floata;intb;scanf(“%f”,&a);b=(int)a;printf(“%f;%d”,b,a-b);}[例2-7]學生成績管理程序。要求:按百分制任意輸入某個學生的某科成績,將其存儲到變量fScore中,按優(yōu)、良、中、及格和不及格的等級輸出。問題分析

基于強制類型轉(zhuǎn)換的范圍縮放技術:nLevel=(int)(95.5–50)/10=4nLevel=(int)(90.0–50)/10=4nLevel=(int)(89.5–50)/10=3程序設計描述===應用實例===nLevel=(int)(fScore–50)/10程序設計描述/*考試成績管理

purpose:輸入考試成績,判斷成績等級author:XiaodongZhangcreated:2017/01/3115:58:22*/#include<stdio.h>#include<stdlib.h>voidmain(void){floatfScore;intnLevel;printf("請輸入成績:");scanf("%f",&fScore); if(fScore>100.0||fScore<0.0){ printf("\n輸入成績錯誤!");}else{ nLevel=(int)(fScore-50.0)/10;switch(nLevel){case5:case4:printf("優(yōu)秀\n");break;case3:printf("良好\n");break;case2:printf("中等\n");break;case1:printf("及格\n");break;default:printf("不及格\n");}}}===應用實例===本章小結知識層面關系運算符與表達式、邏輯運算符與表達式if語句的三種語法形式三目運算符switch選擇結構--break語句方法層面多分支選擇結構的組織方式與設計方法--if-else-if和switch對switch結構中有無break語句的使用與設計技巧類型轉(zhuǎn)換

C語言程序設計

ProgrammingofTheCLanguage主講教師:張小東聯(lián)系方式:z_xiaodong7134@163.com答疑地點:宋健研究院514課堂助手:30:8083/download.htmlC4droid:30:8083/download.html56/spoc/course/HITWH-1001742016mooc:57第3章循環(huán)控制結構及應用主要內(nèi)容概述循環(huán)控制結構循環(huán)控制結構的設計應用實例復合運算符及復雜表達式循環(huán)的控制結構循環(huán)應用的設計難點1+2+3+4+…………+97+98+99+100100+99+98+97+…………+4+3+2+1=101+101+101+101+…………+101+101+101+101;58主要內(nèi)容概述循環(huán)控制結構循環(huán)控制結構的設計應用實例第3章循環(huán)控制結構及應用592025/3/8===概述===for循環(huán)語句while循環(huán)語句do-while循環(huán)語句goto循環(huán)語句定義:循環(huán)語句會根據(jù)條件反復執(zhí)行某程序段,在給定條件不成立時,循環(huán)就會停止。給定的條件稱為循環(huán)條件,反復執(zhí)行的程序段稱為循環(huán)體。循環(huán)中可能用到的運算符與表達式自增運算符++優(yōu)先級別:2單目運算符一般形式:++變量名;

變量名++;兩種形式的區(qū)別:變量值的使用先后不同作用:給變量的值增加1自減運算符--優(yōu)先級別:2單目運算符(減1)例如:intx=0,i=1,y=0;x=i++;//x為1=================intx=0,i=1,y=0;x=++i;//x為2序號復合運算符復合運算符的含義1+=相加并賦值2-=相減并賦值3*=相乘并賦值4/=相除并賦值5%=求模并賦值6&=按位AND并賦值7|=按位OR并賦值8^=按位XOR并賦值9<<=左移并賦值10>>=右移并賦值雙目復合賦值運算符復合賦值表達式的一般形式為:

表達式1Op=表達式2等價形式:

表達式1=(表達式1)Op(表達式2)例如:x+=y-3等價于x=x+(y-3),而不是x=x+y-3。逗號運算符,===概述===14如,a+b,c+d,a<cinti,k;i=3;k=2+i++;i=?K=?61主要內(nèi)容概述循環(huán)控制結構循環(huán)控制結構的設計應用實例第3章循環(huán)控制結構及應用for循環(huán)表達形式

for(表達式1;表達式2;表達式3) 語句組;循環(huán)變量初始化控制循環(huán)改變循環(huán)條件表達式2語句真(非0)假(0)求解表達式1求解表達式3For循環(huán)外的下一條語句必須有===循環(huán)控制結構===for循環(huán)===循環(huán)控制結構===

例3-1使用for循環(huán)求整數(shù)1加到100的值。#include<stdio.h>voidmain(void){intnS;inti;nS=0;for(i=1;i<101;i++){nS+=i;

}printf(“1+…+100=%d\n",nS);}分別去掉這三個表達式去掉三個表達式之后的等效形式for循環(huán)表達形式

for(表達式1;表達式2;表達式3) 語句組;可以省略循環(huán)變量初始化控制循環(huán)改變循環(huán)條件

表達式1省略,應在for循環(huán)之前對循環(huán)控制變量賦初值表達式2省略時,系統(tǒng)認為表達式2的值為真表達式3省略時,應在for循環(huán)體中修改循環(huán)控制變量===循環(huán)控制結構===for循環(huán)===循環(huán)控制結構===【例3-2】很多web網(wǎng)站限制登陸次數(shù),如果輸入的密碼在指定次數(shù)內(nèi)錯誤,就拒絕登陸。實現(xiàn)一個程序,模擬驗證密碼的過程,判斷用戶輸入密碼的次數(shù),若3次輸入密碼錯誤,則結束輸入。#include"stdio.h"

voidmain(void){intnPwd=0;/*用于保存輸入的密碼*/inti; /*循環(huán)控制變量*/intnF=1;/*密碼匹配成功的標志*//*默認設定密碼為87569,可以根據(jù)需要進行設定*/for(i=0;((nF=(87569!=nPwd))&&i<3);++i){printf("password:");

scanf("%d",&nPwd);}

if(0==nF)printf("right!\n");elseprintf("error!\n");}662025/3/8===循環(huán)控制結構===

例3-3使用循環(huán)輸出0-9這10個數(shù)字循環(huán)控制變量可增加,也可減小,且增減量可以不是1。for是一個入口條件循環(huán),即在執(zhí)行時要先判斷循環(huán)執(zhí)行的條件,然后決定是否可以執(zhí)行循環(huán)體語句;循環(huán)可能一次也不執(zhí)行。voidmain(void){inti;

for(i=0;i<10;printf("%d",i),i++);}672025/3/8===循環(huán)控制結構===while循環(huán)

while(條件判斷){語句1;語句2;……語句n;}682025/3/8===循環(huán)控制結構===while循環(huán)

例3-4用while循環(huán)實現(xiàn)從1加到100的計算。#include<stdio.h>

voidmain(void){intnSum;/*用于保存計算和*/inti=1;/*循環(huán)控制變量,參與運算*/nSum=0;while(i<101){nSum+=i;i++;/*改變循環(huán)控制變量的值*/}printf("1+2+3+……+99+100=%d\n",nSum);}692025/3/8===循環(huán)控制結構===dowhile循環(huán)do{

語句組;}while(表達式);先執(zhí)行我們是好哥倆!勿忘我再判斷表達式的值友情提示:

多條語句時用{}

在循環(huán)體中要有能使while表達式的值最終為0的條件存在702025/3/8===循環(huán)控制結構===dowhile循環(huán)

例3-5使用dowhile循環(huán)實現(xiàn)1到100的計算。#include<stdio.h>voidmain(void){intnS=0;inti=1;do{nSum+=i;i++;}while(i<101);printf(“Sum=%d\n",nS);}712025/3/8===循環(huán)控制結構===goto語句標號;goto循環(huán)label_23:printf(“thisisagotosentence!\n”);gotolabel_23;inti=1;label_23:printf(“thisisagoto

sentence!\n”);if(i<3){i++;

gotolabe_23;}722025/3/8===循環(huán)控制結構===

例3-6使用goto循環(huán)實現(xiàn)從1加到100的計算#include<stdio.h>voidmain(void){intnSum=0inti=1;label:nSum+=i;i++; if(i<101)gotolabel; printf(“Sum=%d\n",nSum);}goto循環(huán)73主要內(nèi)容概述循環(huán)控制結構循環(huán)控制結構的設計應用實例第3章循環(huán)控制結構及應用742025/3/8===循環(huán)控制結構的設計===(1)for(;;)(2)for(;;){……{……for(;;)while(){……}{……}…………}}(3)while()(4)do{……{……dowhile(){……{……}}while();…………}}while();循環(huán)的嵌套752025/3/8

[例3-7]在屏幕上輸出九九乘法表。循環(huán)的嵌套問題分析1*1=12*1=22*2=43*1=33*2=63*3=99*1=99*2=189*3=27……9*3=27===循環(huán)控制結構的設計===

762025/3/8循環(huán)的控制beak語句break;===循環(huán)控制結構的設計===

[例3-8]輸入多名學生有效的成績,如果數(shù)據(jù)輸入非法:包括字符、大于100或者小于0,則結束接收過程,輸出總成績和平均分。。問題分析(1)由于是多名學生成績的輸入,因此需要采用循環(huán)控制結構實現(xiàn)。(2)學生數(shù)量,只要有非法輸入立即結束接收,故而使用while循環(huán)更為合適。(3)剔除不滿足輸入范圍要求的數(shù)據(jù),將表示取值范圍的關系表達式置入if結構中,加上break語句跳出循環(huán)。程序流程跳出switch結構從循環(huán)體內(nèi)跳出,提前結束本層循環(huán)772025/3/8循環(huán)的控制--beak語句===循環(huán)控制結構的設計===

[例3-8]輸入多名學生有效的成績,輸出總成績和平均分。782025/3/8循環(huán)的控制continue語句continue;===循環(huán)控制結構的設計===結束本次循環(huán)體,進入下一輪循環(huán)

[例3-9]改造例3-8。792025/3/8無限循環(huán)===循環(huán)控制結構的設計===練習:求從1加到某個整數(shù)的和。設計算法完成這一功能,且能反復使用這一功能,每次使用前征詢用戶意見,用戶入’Y’繼續(xù),輸入’N’結束802025/3/8循環(huán)語句的選擇===循環(huán)控制結構的設計===81主要內(nèi)容概述循環(huán)控制結構循環(huán)控制結構的設計應用實例第3章循環(huán)控制結構及應用822025/3/8scanf函數(shù)===實例應用===格式:scanf(“格式控制串”,地址表)功能:按指定格式從鍵盤讀入數(shù)據(jù),存入地址表指定的存儲單元中,并按回車鍵結束返值:正常,返回輸入數(shù)據(jù)個數(shù)地址表:變量的地址,常用取地址運算符&或指針格式字符:d,i,o,x,u,c,s,f,e格式控制符格式:%[格式修飾符]格式字符例scanf(“%d”,&a);

輸入:10

則a=1083l修飾符功能hm*用于d,o,x前,指定輸入為short型整數(shù)用于d,o,x前,指定輸入為long型整數(shù)用于e,f前,指定輸入為double型實數(shù)指定輸入數(shù)據(jù)寬度,遇空格或不可轉(zhuǎn)換字符則結束抑制符,指定輸入項讀入后不賦給變量代表一個值例scanf(“%4d%2d%2d”,&yy,&mm,&dd);

輸入19991015

則1999yy,10mm,15dd例scanf(“%3c%2c”,&c1,&c2);

輸入abcde

則‘a(chǎn)’c1,‘d’c2取指定寬度跨指定寬度例scanf(“%3d%*4d%f”,&k,&f);

輸入12345678765.43則123k,8765.43f抑制指定寬度===實例應用===842025/3/8scanf函數(shù)===循環(huán)控制結構的設計===輸入數(shù)據(jù)時,遇以下情況認為該數(shù)據(jù)結束:遇空格、TAB、或回車遇寬度結束遇非法輸入例

scanf(“%d%c%f”,&a,&b,&c);

若輸入1234a123o.26

則1234a,‘a(chǎn)’b,123c852025/3/8scanf函數(shù)輸入分隔符缺?。嚎崭?、TAB、回車鍵指定:格式串中兩個格式符間字符例scanf(“%d%o%x”,&a,&b,&c);printf(“a=%d,b=%d,c=%d\n”,a,b,c);

輸入123123123輸出a=123,b=83,c=291例scanf(“%d:%d:%d”,&h,&m,&s);

輸入12:30:45則12h,30m,45s例scanf(“%d,%d”,&a,&b)

輸入3,4

則3a,4b例scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);

輸入a=12,b=24,c=36欺負仁!給出一個合理的設計吧?===實例應用===862025/3/8scanf函數(shù)字符輸入用“%c”格式符時,空格和轉(zhuǎn)義字符都是符輸入輸入函數(shù)留下的“垃圾”:解決方法:(1)消耗法:使用自定義分隔符或用字符輸入函數(shù)(2)抑制符“%*c”來“吃掉”如scanf(“%c%c%c”,&c1,&c2,&c3);

若輸入abc

則ac1,

c2,bc3例intx;charch;scanf(“%d”,&x);scanf(“%c”,&ch);printf(“x=%d,ch=%d\n”,x,ch);執(zhí)行:123

輸出:x=123,ch=10例intx;charch;scanf(“%d”,&x);scanf(“%c”,&ch);或scanf(“%*c%c”,&ch);===實例應用===872025/3/8計算器(1)循環(huán)菜單===實例應用===#include<stdio.h>voidmain(void){doublel,r,t,dS=0.0,dT=1.0,dA=0.0;

doublepi=3.14,dMin=0.000001,dD=0.0;intk=0,f; while(f!=9){printf("--------------------------\n");printf("plus-----------------1\n");printf("substract-----------2\n");printf("multiplication-----3\n");printf("divsion-------------4\n");printf("sin(x)---------------5\n");printf("--------------------------\n");printf("inputforchoice:

");scanf("%d",&f);……}882025/3/8計算器(2)求sinx值數(shù)學模型(Taylor)計算模型設:dD為輸入的x,轉(zhuǎn)換為弧度:dA=dD*pi/180;k為自然數(shù),表示第k項,若第1項k=1,

第2項,k=k+2=3……則奇數(shù)序列可表示為:k+=2(循環(huán))dT為數(shù)學模型中的某一項dT=dA;當k=1時

dT=(-1)*dT*dA*dA/((k-1)*k)當k>1且k+=2dS=dS+dT;栗子:第1項dT=dA;第2項k=3,dT=(-1)*dT*dA*dA/(2*3);//-x3/3!第3項k=5,dT=(-1)*dT*dA*dA/(6*4*5)//x5/5!===實例應用===892025/3/8計算器===循環(huán)控制結構的設計===(3)求sinx值doubledS=0.0,dT=1.0,dA=0.0; doublepi=3.14,dMin=0.000001,dD=0.0;intk=0;dS=0.0; scanf("%lf",&dD);dA=dD*pi/180; dT=dA; while(fabs(dT)>dMin){dS+=dT;k+=2; dT=(-1)*dT*dA*dA/(k*(k-1));}printf("sin(%f)=%lf\n",dD,dS);90===應用實例===計算器if(nFun<1||nFun>5)printf(“error!\n");else{printf("inputtwooperators:"); if(f!=5) scanf("%lf%lf",&l,&r); elsescanf("%lf",&dD); switch(f){case1:t=l+r;break; case2:t=l-r;break;case3:t=l*r;break; case4:if(0.0!=r) r=l+r; elseprintf(“error!Divisoris0\n"); break;case5:

sin(x)}printf("result:%8.3lf\n",t); }}912025/3/8學生成績檔案管理系統(tǒng)v1.3===循環(huán)控制結構的設計===功能擴充:

(1)實現(xiàn)錯誤數(shù)據(jù)的糾正功能,錄入錯誤后,允許重新錄入;(2)實現(xiàn)對三門功課成績的多次輸入,并分別求出平均成績。本章小結知識層面4種循環(huán)語句的基本forwhiledo-whilegoto復合賦值運算符掌握它們各自的含義、結合性以及運算的優(yōu)先級循環(huán)控制語句break語句、continue語句和goto語句方法層面如何跳離循環(huán)結構無限循環(huán)的用途循環(huán)語句的選擇應用的積累C語言程序設計

ProgrammingofTheCLanguage主講教師:張小東聯(lián)系方式:z_xiaodong7134@163.com答疑地點:宋健研究院514課堂助手:30:8083/download.htmlC4droid:30:8083/download.html93/spoc/course/HITWH-1001742016mooc:94第4章模塊化設計與應用主要內(nèi)容模塊化程序設計方法函數(shù)預處理應用實例函數(shù)的參數(shù)傳遞和返回值模塊化分難點95第4章模塊化設計與應用主要內(nèi)容模塊化程序設計方法函數(shù)預處理應用實例模塊化程序設計思想將整個系統(tǒng)進行分解成若干功能獨立的,能分別設計、編程和測試的模塊。特點:程序員能單獨地負責一個或幾個模塊的開發(fā)。開發(fā)一個模塊不需要知道系統(tǒng)其它模塊的內(nèi)部結構和編程細節(jié)。模塊之間的接口盡可能簡明,模塊應盡可能彼此隔離。具有可修改性具有易讀性具有易驗證性模塊化分方法:自上向下,逐步分解,分而治之===模塊化程序設計方法===模塊規(guī)劃實例

例4-1簡單計算器問題描述:完成一個簡單的計算器程序。要求能夠完成如下的常用運算:加、減、乘、除、取余、倒數(shù)、以e為底的對數(shù)、以10為底的對數(shù)、開平方、指數(shù)運算、正弦、余弦、正切、二、八、十、十六進制之間的相互轉(zhuǎn)換、位運算符運算、位段位運算、求pi()和階乘。

問題分析1.模塊分類2.模塊功能細化六則運算對數(shù)運算········以10為底的運算以e為底的運算········===模塊化程序設計方法===模塊規(guī)劃實例解決方案解決方案六則運算對數(shù)運算冪運算Pi階乘以e為底以10為底開方指數(shù)運算三角運算余弦正弦正切二轉(zhuǎn)八十十六八轉(zhuǎn)二十十六十轉(zhuǎn)二八十六十六轉(zhuǎn)二八十進制轉(zhuǎn)換位運算位運算符運算位段位運算簡單計算器===模塊化程序設計方法===

例4-2學生成績檔案管理問題描述:完成一個綜合的學生成績檔案管理系統(tǒng)。要求能夠管理N個學生的3門功課(英語、高數(shù)和C語言)的成績,需要實現(xiàn)以下功能:讀入/存儲學生信息、錄入/修改/刪除學生基本信息、錄入/修改成績、按學號/姓名查詢、排序、瀏覽、統(tǒng)計每門課的優(yōu)、良、中等、及格、不及格人數(shù)。

問題分析1.模塊分類2.模塊功能細化學生信息維護學生成績維護········學生信息錄入、修改、查詢等········===模塊化程序設計方法===

解決方案學生成績管理學生檔案管理查詢統(tǒng)計讀入學生信息錄入學生信息修改學生信息刪除學生信息錄入成績修改成績存儲學生信息按學號查詢按姓名查詢?yōu)g覽排序?qū)W生成績檔案管理===模塊化程序設計方法===101第4章模塊化設計與應用主要內(nèi)容模塊化程序設計方法函數(shù)預處理應用實例庫函數(shù);自定義函數(shù)函數(shù)的定義一般形式:

函數(shù)類型函數(shù)名(數(shù)據(jù)類型參數(shù)1,數(shù)據(jù)類型參數(shù)2,…){函數(shù)體}函數(shù)運行完畢后返回值的類型,無加void

函數(shù)的唯一標識符合標識符命名規(guī)則

參數(shù)表沒有加void

函數(shù)定義不允許嵌套===函數(shù)===intf(){intf1(){……}return0;}錯誤

問題分析(1)在計算機中只能求出近似值(2)通過截取所給公式的前n項來實現(xiàn)所要求的精度。n的大小由截取的條件決定,此處定為取到某一項的絕對值小于10-6為止

(3)正負號交替;分母依次相差為2;可以用循環(huán)結構實現(xiàn)求和運算

例4-3(a)定義一個函數(shù),實現(xiàn)用公式

求的值。

===函數(shù)===計算模型設fTerm表示數(shù)學模型中的某一項,fNumber表示第fNumber項fTerm,fPi表示累加值,則求解迭代式為:fNumber=1當只有一項時fTerm=1當只有一項時fPi+=fTermfNumber+=2fTerm=-1/fNumber

解決方案

程序?qū)崿F(xiàn)/*定義一個函數(shù)*//*

purpose:定義一個函數(shù),求Pi的近似值

author:gcy

created:2008/08/1214:58:22*/#include<math.h>floatSelPi(void)//求pi{

int

nSign=1;

float

fNumber=1.0,fTerm=1,fPi=0;

while(fabs(fTerm)>1e-6){

fPi=fPi+fTerm;

fNumber=fNumber+2;

nSign=-nSign;

fTerm=nSign/fNumber;}

return(4*fPi);}函數(shù)的調(diào)用(1)函數(shù)聲明函數(shù)類型函數(shù)名(數(shù)據(jù)類型參數(shù)名1,數(shù)據(jù)類型參數(shù)名2,…);

在主調(diào)函數(shù)之前,需對被調(diào)函數(shù)進行聲明以下三種形式可以不用函數(shù)聲明(1)當被調(diào)用函數(shù)的函數(shù)定義出現(xiàn)在主調(diào)函數(shù)之前時。(2)如果在所有函數(shù)定義之前,在函數(shù)外部預先對各個函數(shù)進行了聲明。(3)若被調(diào)用函數(shù)的函數(shù)類型為int型時。===函數(shù)===函數(shù)的調(diào)用(2)函數(shù)調(diào)用函數(shù)名(實參表列);#include<stdio.h>voidmain(){

floatSelPi(void);//函數(shù)聲明

printf("pi=%.5f\n",SelPi());}===函數(shù)===

調(diào)用函數(shù)的方式:函數(shù)表達式函數(shù)語句函數(shù)實參(3)函數(shù)的參數(shù)在主調(diào)函數(shù)和被調(diào)用函數(shù)之間進行數(shù)據(jù)傳遞

數(shù)據(jù)共享的一種形式

實參變量對形參變量的數(shù)據(jù)傳遞是單向傳遞

例4-5定義一個有兩個參數(shù)函數(shù)Swap,函數(shù)Swap能夠完成對這兩個參數(shù)的值的交換。

===函數(shù)===實際參數(shù)形式參數(shù)形實匹配

注意:實參表中包括多個參數(shù)表達式,計算過程因系統(tǒng)而異;實參和形參是完全不同的變量名稱一致return(返回表達式);(4)函數(shù)返回值return語句將被調(diào)函數(shù)中的一個確定值帶回主調(diào)函數(shù)中去。一般格式是:(1)return語句的功能:返回主調(diào)函數(shù),并帶值給主調(diào)函數(shù)。(2)函數(shù)可以有多個return語句,但只有一個起作用。(3)函數(shù)的返回值是確定的:類型確定和值確定。(4)調(diào)用函數(shù)中無return語句,并不是不返回一個值,而是一個不確定的值。(5)在定義函數(shù)時,對函數(shù)類型的說明,應與return語句中返回值表達式的類型一致。

函數(shù)的調(diào)用===函數(shù)===

例4-4用迭代公式為:,求

問題分析(1)從數(shù)學的角度來說,可以一直迭代下去。但用計算機求解則不可以,并且大多數(shù)情況下得到的都是近似值。(2)需要一個條件限制迭代次數(shù),這里采用前后兩次求出的的差的絕對值小于所給的精度10-6這一限制條件。(3)迭代公式是很容易用循環(huán)結構實現(xiàn)的。===函數(shù)===

解決方案===函數(shù)===

程序?qū)崿F(xiàn)

說明可以證明這個迭代公式對于任意初值x0>0都是收斂的。形參與實參fRadicand=fRadic(3)調(diào)用函數(shù)SelSquareRoot()。(4)函數(shù)聲明。(5)函數(shù)調(diào)用的執(zhí)行過程===函數(shù)===

函數(shù)的調(diào)用113第4章模塊化設計與應用主要內(nèi)容模塊化程序設計方法函數(shù)預處理應用實例4.3預處理預處理概念預處理命令是由ANSI統(tǒng)一規(guī)定的指令。不是C語言本身的組成部分,不能直接對它們進行編譯。編譯之前先根據(jù)預處理命令對程序作相應的處理,使程序不再包括預處理命令,再進行編譯處理,得到可執(zhí)行的目標代碼。作用使用預處理功能編寫的程序便于閱讀、修改、移植和調(diào)試,有利于模塊化程序設計。文件包含指令概念:指一個源文件將另外一個或多個源文件的全部內(nèi)容包含到本文件之中。其一般形式為:

#include"文件名"

#include<文件名>===預處理===把指定的文件插入該命令行位置取代該命令行,從而把指定的文件和當前的源程序文件連成一個源文件。(1)被包含的文件常放在在文件頭部,稱為“頭文件”或“標題文件”,常以“.h”為后綴(h為head的縮寫)。(2)一個#include命令只能指定一個被包含文件(3)文件包含允許嵌套宏定義用一個標識符來表示一個字符串,稱為“宏”。被定義為“宏”的標識符稱為“宏名”。在編譯預處理時,對程序中所有出現(xiàn)的“宏名”,都用宏定義中的字符串去替換,這稱為“宏替換”或“宏展開”?!昂辍狈譃橛袇?shù)和無參數(shù)兩種。1.不帶參數(shù)的宏定義一般格式

#define標識符字符串===預處理===#include“stdio.h”#definePprintf#defineD”%d\n”#defineF“%f\n”voidmain(){ intnNum1=5,nNum2=8,nNum3=11; FloatfNum1=3.8,fNum2=9.7,fNum3=21.08; P(DF,nNum1,fNum1); P(DF,nNum2,fNum2); P(DF,nNum3,fNum3);}printf(“%d\n””%f\n”,nNum1,fNum1);

1.僅為替換,如有definePprinft

不檢查

2.沒有;號3.在函數(shù)外面P(“D”,nNum1);

4.不替換5.宏定義允許嵌套,在宏定義的字符串中可以使用已經(jīng)定義的宏名。在宏展開時由預處理程序?qū)訉犹鎿Q。6.習慣上宏名用大寫字母表示,以便于與變量區(qū)別,但也允許用小寫字母。#definePI3.1415926#defineSPI*y*y===預處理===2.帶參數(shù)的宏定義#define宏名(形參表)字符串===預處理===#include"stdio.h"#defineSQR(y)(y)*(y)voidmain(){ intnNumber,nSq; printf("inputanumber:"); scanf("%d",&nNumber); nSq=SQR(nNumber+1); printf("nSq=%d\n",nSq);}#include"stdio.h"#defineSSSV(s1,s2,s3,v)s1=nN1*nN2;s2=nN1*nN3;s3=nN2*nN3;v=nN1*nN2*nN3;voidmain(){ intnN1=4,nN2=4,nN3=6,nSa,nSb,nSc,nVv; SSSV(nSa,nSb,nSc,nVv); printf("nSa=%d\nnSb=%d\nnSc=%d\nnVv=%d\n",nSa,nSb,nSc,nVv);}

1.不能有空格,即SQ(y)2.不分配內(nèi)存,與函數(shù)有區(qū)別帶參數(shù)的宏3.可以是表達式4.注意形參的括號5.表達式做為參數(shù),函數(shù)與宏有區(qū)別6.宏定義可以有多條語句===預處理===帶參數(shù)的宏===預處理===#include"stdio.h"#defineSQR(y)(y)*(y)voidmain(){intnNumber,nSq;printf("inputanumber:");scanf("%d",&nNumber);nSq=SQR(nNumber+1);printf("nSq=%d\n",nSq);}#include"stdio.h"#defineSQR(y)(y)*(y)voidmain(){intnNumber,nSq;printf("inputanumber:");scanf("%d",&nNumber);nSq=160/SQR(nNumber+1);printf("nSq=%d\n",nSq);}inputanumber:3nSq=?陷阱帶參數(shù)的宏與帶參的函數(shù)===預處理===#include"stdio.h"intSQ(inti){return((i)*(i));}voidmain(){inti=1;while(i<=5)printf("%5d",SQ(i++));}#include"stdio.h"#defineSQ(y)((y)*(y))voidmain(){inti=1;while(i<=5)printf("%5d",SQ(i++));}區(qū)別122第4章模塊化設計與應用主要內(nèi)容模塊化程序設計方法函數(shù)預處理應用實例例4-6簡單計算器:采用函數(shù)調(diào)用方式完成簡單計算器程序的六則運算模塊、冪運算、三角函數(shù)模塊和求pi。六則運算對數(shù)運算冪運算Pi階乘以e為底以10為底開方指數(shù)運算三角運算余弦正弦正切二轉(zhuǎn)八十十六八轉(zhuǎn)二十十六十轉(zhuǎn)二八十六十六轉(zhuǎn)二八十進制轉(zhuǎn)換位運算位運算符運算位段位運算簡單計算器===應用實例===功能設計第1級菜單第2級菜單以此為例例4-6簡單計算器===應用實例===菜單

例4-7學生成績檔案管理:(1)設計一個“主菜單”和三個“二級菜單”(2)輸入N個學生1門課程的成績,按課程統(tǒng)計各級別(優(yōu)、良、中、及格和不及格)人數(shù)并輸出。并要求按上面的“主菜單”選擇“統(tǒng)計模塊”可以得到統(tǒng)計數(shù)據(jù)。定義一個函

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論