C語言程序設計課件03 C程序基本-沈高峰_第1頁
C語言程序設計課件03 C程序基本-沈高峰_第2頁
C語言程序設計課件03 C程序基本-沈高峰_第3頁
C語言程序設計課件03 C程序基本-沈高峰_第4頁
C語言程序設計課件03 C程序基本-沈高峰_第5頁
已閱讀5頁,還剩71頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第3章C程序基本結構

本章知識要點

C語言程序的流程控制及簡單程序設計標準庫函數的分類及使用常用數學函數以及標準的輸入輸出函數使用隨機函數rand()和srand()3.1簡單程序設計

3.1.1流程控制概述流程控制是指程序中語句執行的順序,在1960年末,理論上已經證明了任何復雜的算法都可以由順序結構、選擇結構和循環結構三種基本的流程控制結構組成。對于所有的程序而言,流程控制其實都是順序結構,也就是說程序語句總體來看就是一條接著一條按照其在程序中的位置順序執行的。C語言提供了多種語句來實現程序結構,程序的執行部分是由語句組成,功能也是由執行語句實現。C語句可分為:表達式語句、函數調用語句、控制語句、復合語句、空語句與類.介紹這些基本語句及其在順序結構中的應用,可以使讀者對C程序有一個初步的認識,為以后的學習打下基礎(1)表達式語句:表達式語句由表達式加上分號“;”組成,運行結果可以得到表達式的值。其一般形式為:表達式;例如:x=y+z;賦值語句;i++;自增1語句,i值增1(2)函數調用語句:由函數名、實際參數加上分號“;”組成。其一般形式為:函數名(實際參數表);函數語句的執行就可以調用函數體并把實際參數賦予函數定義中的形式參數,然后執行被調函數體中的語句(在后面函數中再詳細介紹)。例如:printf("thisisaCProgram");調用庫函數,輸出字符串。(3)控制語句:控制語句用于控制程序的流程,C語言由特定的語句定義符定義9種控制語句。可以實現程序的各種結構方式。它們可分成3類:條件判斷語句:if語句、switch語句。循環執行語句:do…while語句、while語句、for語句。轉向語句:break語句、goto語句、continue語句、return語句。(4)復合語句:把一組語句用括號{}括起來組成的一個語句稱復合語句。在程序中把復合語句看成一個整體,相當于是單條語句,而不是多條語句。例如:{x=y+z;a=b+c;printf("%d%d",x,a);}是一條復合語句。復合語句內的各條語句都必須以分號“;”結尾,在右大括號“}”外不能加分號。(5)空語句:只由分號“;”組成的語句稱為空語句。其形式為;,不產生任何操作運算,只作為形式上的語句。例如:while(getchar()!='\n');本語句的功能是,只要從鍵盤輸入的字符不是回車則重新輸3.1.2簡單程序設計舉例一個簡單的程序僅包含一個main()函數并且程序流程是順序結構,程序的執行部分通常包含3種基本的語句:輸入語句、輸出語句、賦值語句,或用于計算的其他表達式語句。例3-1輸入三角形的三邊長,求三角形面積。分析:已知三角形的三邊長a,b,c,則該三角形的面積公式為:其中s=(a+b+c)/2,所以只需要輸入三個邊,就可以得到三角形的面積。#include<math.h>#include<stdio.h>intmain(){floata,b,c,s,area;scanf("%f,%f,%f",&a,&b,&c);/*輸入邊長a,b,c*/s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));/*計算三角形面積*/printf("a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n",a,b,c,s);printf("area=%7.2f\n",area);/*輸出三角形面積*/return0;}程序的運行情況為:請輸入三角形邊(如3,5,6):3,4,5a=???3.00,b=???4.00,c=???5.00,s=???6.00area=???6.00例3-2將字符'C'、'h'、'i'組成的字符串Chi加密(將每位字符ASCII值加6后變成其他字符的ASCII值)后輸出并顯示。分析:利用字母的ASCII碼值可以進行加減運算特性,在ASCII碼運算后再進行輸出即可將字母進行加密轉換。本例題是將每位字符ASCII值加6后變成其他字符的ASCII值,然后利用printf()進行輸出。#include<stdio.h>intmain(){/*定義字符型變量,并給它們賦初值*/charc1,c2,c3,c4,c5,c6,c7;c1='C';c2='h';c3='i';/*輸出原碼*/printf("原碼是:%c%c%c\n",c1,c2,c3);/*對字符進行譯碼運算*/c1=c1+6;c2=c2+6;c3=c3+6;/*輸出譯碼結果*/printf("密碼是:%c%c%c\n",c1,c2,c3);return0;}運行情況如下原碼是:Chi密碼是:Ino3.2C語言標準庫函數

C源程序是由函數組成的。雖然在前面程序中都只有一個主函數main(),但實際使用程序往往由多個函數組成。函數是C源程序的基本模塊,相當于其他高級語言的子程序。C程序的全部工作都是由各式各樣的函數完成的,所以通常也會把C語言稱為函數式語言。C語言提供了極為豐富的庫函數(如TurboC,MircosoftC都提供了三百多個庫函數),庫函數由C編譯環境提供,用戶無須定義,只需在程序的首部使用預處理命令#include包含有該函數原型的頭文件,即可在程序中直接調用,3.2.1C標準庫函數的分類C語言豐富的庫函數,從功能角度分為以下7類。(1)數學函數。此類函數主要功能是用于數學函數計算。數學函數原型在頭文件math.h,使用此類函數前,必須在程序首部將math.h頭文件包含進來方可使用。本章3.2.2節常用數學庫函數將詳細講解該類函數,在此不再贅述。(2)字符判斷和轉換函數。此類函數用于對字符按ASCII碼分類為:字母、數字、控制字符、分隔符、大小寫字母等,也可以使用字符轉換函數將參數轉換為需要的大小寫格式。所有的字符函數都包含在ctype.h頭文件中,使用字符函數前都必須在程序的首部將頭文件ctype.h包含到程序中。(3)輸入輸出函數。此類函數主要功能是用于完成數據輸入輸出功能。函數原型都在頭文件stdio.h中,使用此類函數前,必須在程序的首部將頭文件stdio.h包含到程序中。本章3.2.3節、3.2.4節將詳細講解該類函數,在此不再贅述。(4)字符串函數。此類函數主要功能是用于字符串操作和處理。字符串函數原型都在頭文件string.h中,使用此類函數前,必須在程序的首部將頭文件string.h包含到程序中進來方可使用。(5)動態存儲分配(內存管理)函數。此類函數主要功能是用于內存管理。內存管理函數原型在頭文件alloc.h,使用此類函數前,必須在程序首部將alloc.h頭文件包含進來方可使用。后面第9章指針的高級章節將詳細講解該類函數,在此不再贅述。(6)日期和時間函數。此類函數主要功能是獲得系統時間或對得到的時間進行格式轉化等操作。日期和時間函數原型在頭文件time.h,使用此類函數前,必須在程序首部將time.h頭文件包含進來方可使用。(7)其他函數。此類函數主要功能是用于其他各種功能。其他函數原型在頭文件stdlib.h,使用此類函數前,首先必須在程序頭部使用預處理命令#include<stdlib.h>將頭文件包含進來方可使用。可以利用此類函數中的rand()函數和srand()函數來取得隨機數,本章3.2.6節具體講解隨機函數使用方法。注意:在C語言程序中用預處理命令將頭文件包含到程序的形式有兩種,例如,針對頭文件stdio.h來說預處理命令的形式可以為#include<stdio.h>或#include"stdio.h",使用尖括號表示編譯時會先在系統的include目錄里查找,若找不到才會到源代碼所在目錄進行搜索;使用雙引號則相反。建議對系統提供的頭文件使用尖括號,自己編寫的頭文件使用雙引號。3.2.2常用數學庫函數C語言提供的數學庫函數可以解決一些只用算術運算符不能完成的問題。數學函數原型都包含在math.h頭文件中。除了簡單的數學函數,程序開發常用的三角函數和對數函數如表3-1所示。表3-1常用三角函數、對數數學庫函數函數名函數和形參類型功能返回值說明sindoublesin(x)doublex;計算sinx的值計算結果x的單位為孤度cosdoublecos(x)doublex;計算cos(x)的值計算結果x的單位為孤度expdoubleexp(x)doublex;求ex的值計算結果logdoublelog(x)doublex;求logex,即lnx計算結果x>0log10doublelog10(x)doublex;求log10x計算結果x>0powdoublepow(x,y)doublex,doubley計算xy的值計算結果pow10doublepow10(x)intx計算10x的值計算結果例3-5打印出三角函數和對數函數的結果。

#include<math.h>#include<stdio.h>intmain(){printf("三角函數:\n");printf("三角函數cosineof1is%.3f\n",cos(1));printf("三角函數sineof1is%.3f\n",sin(1));printf("三角函數tangentof1is%.3f\n",tan(1));printf("\n");printf("\n");printf("對數函數:\n");printf("對數函數e的1次方is%.3f\n",exp(1));printf("2的自然對數函數is%.3f\n",log(2));printf("2的以10為底的對數函數is%.3f\n",log10(2));return0;}例3-6用pow()函數和pow10()函數,分別求10的3次冪的值。#include<math.h>#include<stdio.h>intmain(){doublep=3.0;printf("pow()函數10^%lfis%lf\n",p,pow(10,p));/*pow()函數輸出10的3次方的值*/printf("pow10函數10^%lfis%lf\n",p,pow10(p));/*pow10()函數輸出10的3次方的值*/return0;}運行結果:pow()函數10^3.000000is1000.000000pow10()函數10^3.000000is1000.0000003.2.3標準輸出函數一般C語言程序可分為:數據輸入、計算處理和輸出處理結果3部分,其中數據的輸入與輸出是程序的重要組成部分,是程序與用戶之間交互的界面如圖3-1所示運算輸入輸出用戶其他的高級語言都提供了輸入與輸出語句,而C語言本身沒有輸入和輸出語句,為實現數據的輸入和輸出,其庫函數提供了一組輸入和輸出函數,函數scanf()和printf()來完成數據的格式輸入和輸出操作,其作用是向默認的輸入設備(鍵盤)和輸出設備(終端或顯示器)輸入或輸出若干個任意類型的數據。1.printf()函數的功能printf()函數稱為格式輸出函數,最末一個字母f即為“格式”(format)之意,格式輸出函數printf()的一般調用形式為:printf("格式控制字符串",輸出項表列);如:printf("a=%d,b=%d\n",a,b);printf("格式控制字符串",輸出項表列);

printf()函數功能是按用戶所指定“格式控制字符串”的格式,將指定的輸出項表列數據輸出到標準輸出設備(通常為顯示器)。格式控制字符串是使用一對雙引號括起來的字符串,格式字符串用于指定后面各個輸出項的輸出格式。輸出項表列用于指定輸出內容,它通常由一個或多個輸出項構成,當有多個輸出項時,輸出項之間應使用逗號“,”分隔,輸出項可以是常數、變量或表達式。2.輸出格式輸出格式由格式控制字符串加以規定,將輸出項表列相對應的輸出項以指定的格式進行輸出。格式控制字符串有“格式字符”和“普通字符(包括轉義字符序列)”兩種字符組成,普通字符串在輸出時原樣輸出(或執行),普通字符主要是在顯示中起提示作用。格式字符形式為:%[附加格式說明符]格式字符例如,%d,%10.2f等。(1)格式字符。最簡單的格式說明符是以%開頭后面跟上一個特定的字母,用來與輸出項的數據類型相匹配如:“%d”表示按十進制整型輸出。“%ld”表示按十進制長整型輸出。“%c”表示按字符型輸出一個字符。“%s”表示按實際寬度輸出一個字符串表3-2格式說明符格式字符功能d輸出帶符號10進制形式整數(正數不輸出符號)o輸出無符號8進制形式整數(不輸出前綴0)x,X輸出無符號16進制形式整數(不輸出前綴Ox)u輸出無符號10進制形式整數f輸出單、雙精度小數形式實數(6位小數)c輸出單個字符s輸出一串字符串e,E以指數形式輸出單、雙精度實數(尾數含1位整數,6位小數,指數至多3位)g,G以%f或%e中輸出寬度較小的格式輸出單、雙精度實數,不輸出無意義的01)整型數據格式輸出。%d:輸出十進制基本整型數據。例如,設整型數據a=12;b=13;printf("%d,%d",a,b);%ld:輸出十進制長整型數據。例如,longinta=1234567;printf("%ld",a);%u(或%lu):輸出無符號十進制基本整型數據(或長整型數據)。%o(或%lo):以無符號八進制格式輸出整型數據(或長整型數據)。%x(或%lx):以無符號十六進制格式輸出整型數據(或長整型數據)。②實型格式格式輸出C語言程序的浮點數有10進制小數和科學計數法兩種輸出形式,對于單精度和雙精度浮點數來說,它們的格式說明符完全相同。%f:以10進制小數形式輸出單精度、雙精度浮點數。%e:以科學計數法形式輸出單精度、雙精度浮點數。%g:根據浮點數的大小,自動選用%f或%e格式中輸出寬度較短的一種格式,且不輸出無意義的零。【例3.7】以10進制小數形式輸出單精度、雙精度浮點數#include<stdio.h>intmain(){doublex=3.1415;floaty=15.725;printf("x=%f,y=%f\n",x,y);printf("x=%e,y=%e\n",x,y);printf("x=%f,x=%e,x=%g"x,x,x);return0;}程序運行結果為x=3.141500,y=15.725000x=3.141500e+000,y=1.572500e+001x=3.141500,x=3.141500e+000,x=3.1415③字符型格式說明符%c:輸出一個字符。.charc;c=’s’;printf("%c,",c);則程序輸出結果為:s④字符串格式說明符%s:按實際寬度輸出一個字符串。printf("%s","hello);輸出結果為:hello(2)轉義字符轉義字符作為格式控制字符串中的非格式字符,由“\”和一個特定的字母組成,用于輸出某些特殊字符和不可見字符。常用的轉義字符符如表3-3所示。表3-3轉義字符轉義字符形式功能\n換行\t橫向跳格(即跳到下一個輸出區-占8列)\v豎向跳格\b退格(不換行)\r回車\f走紙換頁\\反斜杠字符“\”\’單引號(撤號)字符\dddl到3位8進制數所代表的字符\xdd1到2位16進制數所代表的字符(3)附加格式說明符在%和格式符之間的附加格式說明符,用于指定輸出時的對齊方向、輸出數據的寬度、小數部分的位數等要求,附加格式說明符可以是其中之一或多個字符的組合。常用的附加說明符如表3-4所示。表3-4附加格式說明符附加說明符意義m(m為正整數)為域寬描述符,數據輸出寬度為m,若實際位數多于定義的寬度,則按實際位數輸出,若實際位數少于定義的寬度則補以空格或0.n(n為正整數)為精度描述符,對實數,n為輸出的小數位數,若實際位數大于所定義的精度數,則截去超過的部分;對于字符串,表示輸出n前各字符,。l表示整型按長整型量輸出如%ld,%lx,%lo,對實型按雙精度型量輸出如%lf,%le。h表示按短整型量輸出,如%hd,%hx,%hdo,%hu-數據左對齊輸出,右邊填空格,無-時默認右對齊輸出+輸出符號(正號或負號)0表示數據不足最小輸出寬度時,左補零;空格輸出值為正時冠以空格,為負時冠以負號#對c,s,d,u類無影響;對o類,在輸出時加前綴o;對x類,在輸出時加前綴0x;對e,g,f類當結果有小數時才給出小數點對于整型格式說明符其附加格式說明符一般形式為:其一般形式為:%[-]][m]整型格式說明符.-:依然表示數據輸出時左對齊;m.:m表示整個數據的輸出最小寬度。例如:設整型數據intx=18,y=-1;printf("%-5d,%4d\n",x,y);printf("%15o,%-10x\n",y,y);上面printf函數輸出結果為:18???,??-1????37777777777,ffffffff??對于浮點數格式說明符,其附加格式說明符一般形式為:"%[-][m.n]浮點格式說明符"。-:依然表示數據輸出時左對齊;m.n:m表示整個數據的輸出寬度,n表示小數部分輸出的位數。【例3.8】以指定的格式輸出10進制小數形式單精度浮點數#include<stdio.h>intmain(){ doublepi=3.1415; printf("%f,%6.2f,%.2f,%-6.2f\n",pi,pi,pi,pi);return0;}程序輸出結果為:3.141500,??3.14,3.14,3.14??對于字符型格式說明符,其附加格式說明符一般形式為:"%mc":以寬度m輸出一個字符,若m>1,則在輸出字符前面補m-1個空格。例如:charc;c=’s’;printf("%3c",c);輸出結果為:??s對于字符串格式說明符,其附加格式說明符一般形式為:"%[-]ms"或"%[-]m.ns"。其中%[-]ms表示輸出的字符串占m列,若字符串本身長度超過m列,則按實際寬度輸出;若字符串長度小于m列,若m前有負號“-”,字符串左對齊,右補空格,否則字符串右對齊,左補空格。%[-]m.ns表示輸出的字符串占m列,但只取字符串中左端n個字符。若m>n,若m前有負號“-”時,這n個字符左對齊,右補空格,當m前沒有負號“-”時,這n個字符右對齊,左補空格;若m<n,則m自動取n值,以保證n個字符正常輸出。【例3.9】以指定的格式輸出字符串。#include<stdio.h>intmain(){printf("%s,%3s,%8s,%-8s,%8.3s","hello","hello","hello","hello","hello");return0;}程序輸出結果為:hello,hello,???hello,hello???,?????hel(4)普通字符格式控制字符串”中,除了以上三項字符以外的其他字符都是普通字符,在進行輸出時在顯示屏幕上將按原樣輸出顯示。例如:inta=7,b=8;printf("輸出a=%d,輸出b=%d\n",a,b);上述程序段中,printf函數的“格式控制字符串”中,除了兩個“%d”以外的其它字符均為普通字符,其中“輸出a=,輸出b=”是可打印字符,它們將在顯示屏幕上原樣輸出,最后一個字符’\n’是一個轉義字符,表示“換行符”,輸出時光標將在屏幕上另起一行顯示。上述程序段的輸出結果為輸出a=7,輸出b=8

(光標另起一行閃爍)3、函數說明在使用格式輸出函數時,需要注意以下問題。(1)整個格式控制字符串必須用雙引號括住,如果有輸出項目,則格式控制字符串與第一個輸出項之間一定要用一個逗號隔開;(2)格式控制中的各格式說明符與輸出項表列數量、順序、類型等必須一一對應,否則會產生意想不到的后果;(3)格式說明符除一些大寫字母具有特殊含義外,均要用小寫字母,如%d不能寫成%D;(4)數值范圍在0-255之間的整數也可以用字符形式輸出,首先將整數轉換成相應的ASCII碼字符,然后進行輸出。反之,也可以將一個字符型數據轉換為相應的ASCII碼數值以整數形式輸出。intx=83;chary='s';printf("x=%d,%c\n",x,x);printf("y=%d,%c\n",y,y);程序運行結果為:x=83,sy=83,s(5)若要輸出符號“%”,應連用兩個“%”。例如:printf("x=%f%%",1.0/3);輸出結果為:0.333333%3.2.4標準輸入函數C語言并沒有配備專門輸入語句來實現輸入,所有的輸入操作都是通過函數調用實現的。本節介紹標準的輸入函數scanf()默認的標準輸入設備通常為鍵盤,scanf()函數定義在頭文件“stdio.h”中來完成,因此在使用這些函數之前應該使用預編譯命令#include<stdio.h>將庫函數包含到C程序中。1.scanf()函數的功能格式輸入函數其一般調用形式如下:scanf("格式控制字符串",參數列表);scanf("格式控制字符串",參數列表);

scanf()函數的功能就是按照指定的格式(通常是鍵盤)輸入數據,并將數據存入內存地址表所對應的內存單元中格式控制字符串由“%”和格式說明符組成,不同的格式說明符規定用不同的格式輸入數據給相應的輸入項;參數列表是接收輸入數據的變量地址或字符串的首地址,而不是變量本身;列表中至少有一個輸入項,每個輸入項必須是變量名前加地址運算符“&”表示(如&x,&y分別表示變量x,y的變量地址),這與printf函數完全不同,多個地址輸入項之間需要用逗號“,”分隔。

1.整型格式說明符格式輸入函數的整型格式說明符及其含義如表3.5所示

表3.5scanf函數的整型格式說明符整型格式符意義%d輸入10進制基本整型數據%ld輸入10進制長整型數據%u輸入無符號10進制基本整型數據%lu輸入無符號10進制長整型數據%o(%lo)輸入8進制基本(長)整型數據%x(%lx)輸入16進制基本(長)整型數據%hd輸入10進制短整型數據%ho輸入8進制短整型數據%hx輸入16進短整型數據%m整型格式說明符按整數m指定的寬度輸入一個整型數據【例3.11】格式輸入函數scanf()輸入的整型格式數據。#include<stdio.h>intmain(){ inta,b,c; scanf("%d%d",&a,&b); c=a*a+b*b; printf("c=%d\n",c);return0;}程序運行時按如下方式輸入a、b的值:4?5↙(輸入a、b的值)z=41(輸出z的值)利用鍵盤輸入整型數據時,當格式說明符中沒有寬度說明時應注意以下問題:(1)如果格式說明符之間沒有其它字符,例如上述例3.6程序的scanf函數:scanf("%d%d",&a,&b);“%d”之間沒有其它字符則輸入時,數據之間用“空格”、“Tab”或“回車”來分隔;例如,上述例3.6程序在執行scanf函數時,按下面形式輸入數據是正確的。①3?4↙②3↙4↙③3<按Tab鍵>4↙但按下面形式輸入數據都是不合法的。①3,4↙②3、4↙③3;4↙(2)如果格式說明符之間包含有其它普通字符,則輸入時,普通字符將按原樣輸入。例如,上述例3.6程序的scanf函數若改為如下形式scanf("a=%d,b=%d",&a,&b);則執行時,應按如下形式輸入a、b的值a=3,b=4↙

普通字符,按原樣輸入2.實型格式說明符格式輸入函數的單精度、雙精度浮點數(實型數)的格式說明符不相同,這與格式輸出函數printf略有差別。表3.6scanf函數的實型格式說明符實型格式符意義%f、%e用于輸入單精度實型數據%lf、%le用于輸入雙精度實型數據注意:實型數據輸入時輸入的數據可以是整數(不帶小數點)、帶小數點的定點數或者指數形式(如3e-4,5.4e3)表示的實數;在輸入函數scanf()沒有%m.nf這種規定輸入數據的精度格式。例如:Scanf(“%6.3f”,&y);是非法的,不能用此語句輸入小數為3位的實數,當輸入數據123456不能使得y的值為123.456。一般在執行scanf函數前,先執行printf函數,在顯示屏幕上輸出一行提示信息,然后光標在提示信息之后閃爍等待用戶通過鍵盤輸入數據。這種程序風格具有良好的用戶界面,值得借鑒。例如下面程序段:

doublex,y,z; printf("請輸入直角三角形邊x,y:"); scanf("%lf,%lf",&x,&y); c=sqrt(x*x+y*y); printf("直角三角形邊長z=%f\n"z);程序運行效果如下:請輸入直角三角形邊x,y:3.0,4.0↙(前邊為提示信息,后邊為輸入數據)直角三角形邊長z=5.000000(輸出第三條邊c的邊長)注意:變量x、y為雙精度浮點類型,因此scanf函數相應的格式說明符只能用“%lf”,而不能用“%f”。另外,“%lf,%lf”中的逗號“,”是普通字符,在輸入時應按原樣輸入。3.字符型格式說明符用于輸入字符型數據的格式說明符為:“%c”

或“%mc”m為整型數據,表示輸入字符數據時的寬度。【例3.12】#include<stdio.h>intmain(){ charc; scanf("%c",&c); printf("%c,%d\n",c,c);return0;}程序運行時須輸入一個字符型數據給變量cB↙(輸入字符‘B’給變量c)B,66(輸出變量c的值)4.字符串格式說明符用于輸入字符串數據的格式說明符為:“%s”,輸入的字符串不必加雙引號,但遇到空格、制表符或換行將終止接收,詳細情況將在后面章節討論。下面就scanf函數使用說明幾點:

(1)與printf函數一樣,scanf函數的格式控制中的各格式說明符與內存地址表中的變量地址在個數、次序、類型方面必須一一對應。(2)參數列表中必須是變量地址,而不應是變量名。例如scanf("%d%d",x,y);是不對的,應將x,y,應為&x,&y。這是C語言特點,需要重點注意。(3)在%與格式說明符之間可以加上一個附加說明符星號“*”,如%*d,使對應的輸入數據不賦給相應變量。(4)當整型或字符型格式說明符中有寬度說明時,按寬度說明截取數據。(5)在“格式控制字符串”中除了格式控制外還有其它非格式字符的普通字符,則在輸入數據時按原樣輸入。(6)在使用“%c”輸入字符時,空格和轉義字符都作為有效字符輸入。3.2.5字符的輸出和輸入格式化輸入輸出函數scanf()和prinf()

可以完成單個字符的輸入和輸出,但是由于C語言程序中經常用到單個字符的輸入和輸出,所以專門提供了對單個字符的輸入輸出函數getchar()和putchar(),函數原型在頭文件stdio.h中,所以使用它們前應用預處理命令#include<stdio.h>將文件包含到程序文件中。1.單個字符輸出函數putchar()調用格式:putchar(ch);參數說明:ch為字符型常量或者變量;也可以是整型數據。功能說明:當參數ch為字符型數據時,putchar函數在顯示屏幕的光標閃爍處顯示ch所表示的字符;當參數ch為整型數據時,則顯示以整數ch為ASCII碼值的字符。Putchar()函數除了能輸出普通字符外,也可以輸出控制字符和轉義字符,如:‘\n’、‘\t’等。【例3.13】#include<stdio.h>intmain(){charc1,c2,=’h’,c3,c4,c5;c1=c2-5-32;/*c2-5是小寫字母c,c2-5-32是大寫字母c*/c3=c2+1;/*c2+1是小寫字母i*/c4=c2+6;/*c2+6是小寫字母n*/c5=c2-7;/*c2-7是小寫字母a*/putchar(c1);putchar('\n');putchar(c2);putchar('\n');putchar(c3);putchar('\n');putchar(c4);putchar('\n');putchar(c5);putchar('\n');return0;}putchar(‘\n’)輸出一個換行符,因此上面程序執行時,在輸出每個變量所代表的字符后,緊接著輸出一個換行符,所以程序運行結果為China另外,也可以將變量的值直接用字母的對應的ASCII碼來賦值,若將上述程序的4個賦值語句改為:c1=67;c3=105;c4=110;c5=97;則putchar函數執行時,將分別顯示以相應整型數據為ASCII碼值的字符,因此運行結果與例3.8相同。2.單個字符輸入函數getchar()調用格式:getchar();功能說明:接收從標準輸入設備中讀入一個字符,并返回該字符,getchar函數沒有參數。下面程序段:charch1;printf("請輸入一個字符::"); /*提示用戶輸入一個字符*/ch1=getchar();/*讀入一個字符*/putchar(‘\n’)printf("輸入的字符為:");/*將字符回顯出來*/putchar(ch1);putchar(ch1+32);putchar(‘\n’) return0;}程序運行結果為:請輸入一個字符:A↙(輸入‘A’后,按“回車”鍵,字符才能送到內存)輸入的字符為:Aa若程序運行時從鍵盤輸入字符ABCD并按“回車”:請輸入一個字符:ABCD↙(輸入ABCD后,按“回車”鍵)輸入的字符為:A(只接收到首字符‘A’并且賦值給變量ch1,然后輸出)由此可見,執行字符輸入函數時,盡管可以從鍵盤輸入多個字符,但getchar只能接收一個字符。getchar函數與putchar函數一次只能輸入、輸出一個字符。而格式化輸入、輸出函數scanf和printf可以按照指定格式輸入、輸出若干個任意類型數據。3.2.6隨機函數在進行程序設計時有時需要隨機輸入一些數,這時調用隨機函數可以完成此功能。在C語言中要使用隨機函數rand()和srand()時,必須包含以下頭文件。#include<stdio.h>#include<stdlib.h>#include<time.h>/*需引用的頭文件*/其中隨機函數rand()函數和srand()函數包含在頭文件stdlib.h中,需要在程序頭部包含頭文件stdlib.h。rand()函數原型:intrand(void);功能是返回0到rand_max之間的隨機整數,rand_max至少是32767,C語言預生成一組隨機數,每次調用隨機函數時從指針所指向的位置開始取值,因此使用rand()重復運行程序產生的隨機數都是相同的,可以通過srand()函數來改變指針位置。srand()函數原型:voidsrand(unsignedseed);功能:初始化隨機數發生器,可以使隨機數發生器rand()函數產生新的隨機序列,一般配合time(NULL)函數使用,因為時間每時每刻都在改變,產生的seed值都不同,srand((unsigned)time(NULL));產生隨機種子,因而程序頭部應包含time.h頭文件。利用隨機函數要產生指定范圍的隨機數,其通常為公式"intx=1+(int)rand()%n;"可以生成1到n之間的隨機數,如1+rand()%100表達式將產生1-100之間的數字,也可以使用公式a+(int)rand()%(b-a+1)來產生a~b之間的數字;還有一種比較好公式為:j=1+(int)(n*rand()/(RAND_MAX+1.0))產生一個1到n之間的隨機數,這兩者都可以實現產生指定范圍的數字。【例3.14】利用隨機函數rand()和srand()來產生一期體育彩票的中獎號碼

分析:彩票號碼是需要隨機產生的,但是彩票號碼的產生又要求在一定的范圍內,所以此函數需要使用隨機函數rand()。體育彩票要求6個紅球為介于1到33的隨機數值和藍球為1到16間的隨機數值#include<stdio.h>#include<stdlib.h>/*需引用的頭文件*/intmain(){ /*產生本期中獎號碼:其中紅球6個范圍為1-33,藍球1個范圍為1-16*/ inthq1,hq2,hq3,hq4,hq5,hq6,lq1; hq1=1+(int)rand()%33;/*產生1-33之間的紅球*/ hq2=1+(int)rand()%33; hq3=1+(int)rand()%33; hq4=1+(int)rand()%33; hq5=1+(int)rand()%33; hq6=1+(int)rand()%33; lq1=1+(int)rand()%16;;/*產生1-16之間的藍球*/ /*輸出本期中獎號碼:其中紅球6個范圍為1-33,藍球1個范圍為1-16*/ printf("本期中獎號碼是:\n紅球%02d%,%02d

溫馨提示

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

評論

0/150

提交評論