




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
基本輸入輸出和順序程序設計
輸入和輸出是以計算機為主體而言的。輸入就是由計算機的輸入設備(如鍵盤、鼠標、磁盤和光盤、掃描儀等)向計算機輸入數據;而輸出是由計算機向輸出設備(如顯示器、打印機、磁盤和光盤等)。
C語言本身沒有提供輸入輸出語句,它的輸入輸出是C語言中標準函數庫中標準輸入輸出庫函數提供的,其對應的頭文件為“stdio.h”。這樣做的目的總的說來有兩個好處:既可以使C語言的內核比較精煉,也可以使C語言程序具有可移植的性能。3.1數據輸入輸出的概念3.2.1putchar函數(字符輸出函數)函數功能:向標準的輸出設備輸出一個字符。調用格式:
putchar(c);其中c為任一參數,可以是字符型常/變量和整型常/變量以及表達式。當c為字符型常/變量時,它輸出的是參數c的值;當c為整形常/變量以及表達式時,它輸出的是ASCII碼值等于c的字符。使用本函數必須用文件包含命令:3.2字符數據的輸入輸出使用本函數必須用文件包含命令:#include<stdio.h>或#include"stdio.h"【例3.1】輸出單個字符#include<stdio.h>main(){
inti=97,j=98,k=99;
charch=‘A’;
putchar(i);/*輸出字符'a'*/
putchar(j);/*輸出字符'b'*/
putchar(k);/*輸出字符'c'*/
putchar(\n);/*輸出一個換行符*/
putchar(ch);/*輸出字符'A'*/}程序運行后結果為:abcA3.2.2getchar函數(字符輸入函數)函數功能:從輸入設備輸入一個字符。調用格式:
getchar();
函數值可以賦給一個字符變量,也可以給一個整型變量。記住,字符輸入函數是沒有參數的。【例3.2】輸入單個字符#include<stdio.h>main(){charc;
c=getchar();
putchar(c);
}運行結果:A↙(輸入‘A’,按回車鍵,字符‘A’才送入內存)A注意:
getchar()只能接受一個字符(包括控制符)。使用getchar()輸入字符后,要按回車鍵,程序才會響應輸入。使用getchar()函數也必須在前面加上文件包含命令:#include<stdio.h如果想同時輸入輸出多種數據和字符串的話,我們就要用到格式輸出/輸入函數了,這兩種函數不僅可以輸入輸出各種類型的數據,還可以控制數據的輸入輸出格式。3.3格式輸入輸出3.3.1printf()函數(格式輸出函數)函數功能:向輸出設備輸出一個或多個任意類型的數據。調用格式:printf("格式控制",輸出列表)一.格式控制格式控制也稱“格式控制字符串”,是由雙引號括起來的字符串,用于指定輸出格式。它一般是由以下三部分組成:
1.格式說明由“%”字符開始,后面跟有各種格式字符,用來說明各個輸出數據的類型、形式、長度、小數位,截取幾個有效字符等。(1)d格式符:用來輸出有符號的十進制整數。有以下幾種用法:例如:printf("%d",456)運行后結果為:456(2)u格式字符:用來輸出無符號的十進制整數。注意:有符號的整數也可以用無符號的形式進行輸出,無符號的整數也可以用有符號整數的形式來輸出。例如:inta=-1;printf("%u",a)運行后結果如下:65535因為-1在內存中以16個1的形式存在,不帶符號的話,直接轉換成十進制后結果為65535。(3)o格式字符:用來輸出無符號的八進制整數。例如:inta=-1;printf("%o",a)運行后結果如下:17777與上題一樣,它只是將十六個一轉換成了無符號的八進制就是這樣的結果。
(4)x格式字符:用來輸出無符號的十六進制整數。例如:inta=-2;printf("%x",a)運行后結果如下:fffe-2在計算機中表示為1111111111111110,所以四位為一位換成無符號十六進制后就是這樣表示的。(5)c格式字符:用來輸出一個字符。因為字符變量在計算機中是占一個字節的,而整型變量則占兩個字節,所以整型變量在可輸出的范圍內(ASCII碼0~255之間的字符)是可以與字符數據相互轉換的。例如:inta=98;charch='a';printf("%c,%c",a,ch)運行后結果如下:b,a(6)s格式字符:用來輸出一個字符串。例如:main()printf("%s","string")運行后結果如下:string(7)f格式字符:以小數的形式來輸出實數(float,double),默認輸出小數點后六位數,但并非全部的數字都是有效的,按它們的精度進行控制。例如:floatx,y;x=1111.11111y=1111.11111printf("%f",x+y);運行后結果如下:2222.222715(前七位有效,后三位是無意義的)(8)e格式字符:以指數的形式來輸出實數。有的C編譯系統自動指定小數點前必須有一個非零的數,小數點后指定6位小數,指數部分占5位,即“e”占一位,指數符號占1位,指數占3位。例如:printf("%e",10256.7)運行后結果如下:1.025670e+004(9)g格式字符,用來輸出實數,且根據數值的大小,自動選取f格式或e格式,并不輸出無意義的零。例如:printf("%f,%e,%g",123.456,123.456,123.456)運行后結果如下:123.456000,1.234560e+002,123.456以上為9種格式字符。2.普通字符普通字符即字符是按原樣進行輸出的,其作用是作為輸出時數據的間隔,在顯示中起提示的作用。例如:printf("a=%x",10)
中的a=就是普通字符。此語句運行后結果為:
a=103.轉義字符如上章所講的作用,常用的有‘\t’,‘\n’等。二.輸出列表項輸出列表項由若干個表達式組成,它們之間用逗號連接,但并不是逗號表達式,計算的順序是自右向左進行的。注意:格式字符串中的格式字符和各輸出項在數量和類型上應該一一對應。三.附加說明符在格式說明中,在%和格式字符間還可以插入幾種附加說明符,如表3.1所示。表3.1printf附加格式說明字符字符說明l用于指定長整型,可加在的前面m只能為整數,指定數據輸出時所占的列數,當實際的長度小于時,若為正,則左補空格,若為負,則右補空格;當實際長度大于時,按實際輸出。n只能為正整數,對于實數來說,可以指定小數點后幾位小數,對于字符串來說是指定截取字符的個數?!纠?.3】格式輸出函數使用舉例。
main(){inta=45;floatb=123.456;charc='a';printf("a=%d,a=%u,a=%o,a=%f\n",a,a,a,a);printf("b=%f,b=*%9.2f,b=%-9.2f*\n",b,b,b);printf("c=%c,c=%3s,c=%7.2s,c=%-5.3s","string","string","string","string");}運行結果為:a=45,a=45,a=55,a=2db=123.45600,b=*︺︺︺123.46,b=123.46︺︺︺*string,string,︺︺︺︺︺st,str︺︺注意:除了x、e、g外,其他格式字符都不能大寫,如%d一定不能寫成%D。格式符d可以用I代替,這是因為d和I作為格式符用時,兩者作用是一致的(3)上面介紹的d、o、x、u、c、f、e和g如果前未加%,可當成普通字符使用。例如:printf("x=%fs,y=%fg",123.456,7.8954)運行后結果為x=123.456000s,y=7.895400g(4)如果想輸出%,可用%%來表示即可例如:printf("x=26%%")運行結果為:x=26%(5)在使用“%f”格式符輸出實數時,并非全部數字都是有效數字。單精度實數的有效位數一般是7位,雙精度實數的有效位一般是16位。例如:已知雙精度類型的兩個變量x=1111111111111.1111111,y=2222222222222.2222222,那么這條語句:printf("%f,%f",x,y);運后結果為:3333333333333.333156從這上面我們可以看出只有前面16位是有效的,后面的數字在這里是沒有意義的。3.3.2scanf(格式輸入函數)函數功能:從鍵盤按照“格式控制字符串”中規定的格式輸入若干個數據,按“變量地址表列”中變量的順序,依次存入對應的變量中。函數調用格式:scanf("格式控制字符串",變量地址表列)格式控制字符串1.它是由雙引號括起來的字符串,和我們上面所講的格式輸出函數的“格式控制字符串”含義相同,其中的格式說明,也和格式輸出函數的格式說明相類似,都是以“%”開始。2.變量地址表列變量地址是由地址運算符“&”后跟變量名所組成,各個變量地址之間用“,”分隔?!纠?.4】格式輸入函數使用,分別給整型變量a,b,x,y賦值。main(){
int
a,b,x,y;
scanf("%d,%d,%d,%d",&a,&b,&x,&y);
printf("a=%d,b=%d,x=%d,y=%d",a,b,x,y);}運行時假設輸入的是:1,2,3,4運行的結果為:a=1,b=2,x=3,y=4在以上這個程序中,&a,&b,&x,&y分別表示變量a,變量b,變量x,變量y的地址。這個地址就是編譯時系統在內存中給變量a,變量b,變量x,變量y分配的地址。關于地址的概念,在本書的第8章會作詳細介紹,這里大家只要了解就行了。3.輸入格式字符輸入格式字符歸納為表3.2所示表3.2格式字符的說明格式字符
說明d、i用來輸入有符號的十進制整數u用來輸入無符號的十進制整數o用來輸入無符號的八進制整數X、x用來輸入無符號的十六進制整數c
用來輸入單個字符s用來輸入字符串,并將字符串送到一個字符數組中,在輸入時以非空格字符開始,遇到回車或空格字符就結束f
用來輸入實數,可以用小數形式或指數形式進行輸入E、e、G、g與f作用相同,所以e、f、g可以替換使用。注意:(1)如果在“格式控制字符串”中除了格式說明符以外還有其他字符,則在輸入數據時,在對應位置要輸入與這些字符相同的字符。例如:①scanf(“%d,%d”,&a,&b);則輸入時應該這樣進行輸入;7,87和8之間的逗號,是與“格式控制字符串”里面的逗號相對應的。②scanf("%d%d",&a,%b);則輸入時應該這樣進行輸入;787和8之間的空格,可以是一個或多個,也可以用回車鍵來代替,它是與“格式控制字符串”里面的空格相對應的③scanf("%d:%d",&a,%b);則輸入時應該這樣進行輸入;7:87和8之間的分號與“格式控制字符串”里面的分號相對應的④scanf("a=%d,b=%d",&a,&b);則輸入時應該這樣進行輸入;a=7,b=8(2)可以指定數據所占的列度,系統會自動按它的大小來截取所需的數據。但不能像格式輸出函數一樣來規定輸入時的精度,這樣做是不合法的。例如:
scanf("%3d,%2d",&a,&b);若輸入:
45678
則系統會自動把456賦給變量a,78賦給變量b。(3)輸入數據時,遇到以下幾種情況認為本數據輸入結束。遇到空格、回車或Tab符;取完指定的寬度,如上面所舉“%3d”,只取了3列;遇到非法的輸入等。(4)在使用“%c”格式輸入字符時,空格字符和以前所講的“轉義字符”全部作有效字符輸入。例如:
①scanf("%c%c%c",&x,&y,&z);若輸入:abc則實際上在這個程序中,第一個字符‘a’給了變量x,而變量y則得到字符‘’,字符‘b’給了變量z。這是因為一個%c只能讀入一個字符,后面的空格作為一個字符送給了變量y。②scanf("%c%c%c",&x,&y,&z);若輸入:abc那么就可以得到實際上,我們這個‘a’在這里的話就被賦給了變量x,同樣的這里的‘b’就賦給了變量y,‘c’就被賦給了變量z。③如果在格式控制字符串中加入空格作為間隔,則輸入時各數據之間可加空格。
Scanf("%c%c
%c",&x,&y,&z);輸入為:abc回車(在a,b后各有一個空格),這樣做的后果就會實現實際上‘a’給了變量x,‘b’就賦給了變量y,‘c’就被賦給了變量z。注意以上各種輸入時的不同。【例3.5】格式輸入函數使用舉例。main(){charc1,c2;
intn1,n2;
floatf1,f2;scanf("%c,%c",&c1,&c2);
scanf("%d,%d",&n1,&n2);
scanf("%f,%f",&f1,&f2);
printf("c1=%c,c2=%c\n",c1,c2);printf("n1=%d,n2=%d\n",n1,n2);printf("f1=%f,f2=%f\n",f1,f2);}運行時,若要使字符型變量c1的值為‘A’,字符型變量c2的值為‘B’,整型變量n1的值為123,整型變量n2的值為-123,單精度類型變量f1的值為4.56,單精度類型變量f1的值為-4.56,那么在這個程序中應如下正確的輸入。AB123,-1234.56,-4.56若根據此數據輸入,程序運行后結果為:c1=A,c2=Bn1=123,n2=-123,f1=4.560000,f2=-4.5600
到這里我們就學會了一些基本的輸入/輸出函數,其中前面所學的字符輸入/輸出函數一定要包含頭文件“stdio.h”,“stdio.h”實際上的意思也就是標準輸入/輸出頭文件的意思。3.4.1數學函數常用的數學函數有許多,它們的原型說明以及有關的信息均包含在一個頭文件“math.h”中,所以我們只要在程序中如果要用到數學函數的時候,就應該在這對應的源文件中使用以下的文件包含命令:#include<math.h>也可以寫成是:#include"math.h"下面,我們就這個數學函數來看幾個例子。3.4常用函數的使用
【例3.6】一些常用的數學函數使用舉例。
#include<math.h>main(){inta=-23,b=30;floatx=9,y=2.5,p=-12.3,q=12.3;printf("abs(%d)=%d\n",a,abs(a));/*求整型數a的絕對值*/printf(“fabs(-6.8)=%f\n”,fabs(-6.8));/*求實型數-6.8的絕對值*/printf("sqrt(%.0f)=%f\n",x,sqrt(x));/*求實型數x的平方根值*/printf("%1f^3=%f\n",y,pow(y,3));/*求y的三次方*/printf("sin(%d)=%f\n",30,sin(b*3.14159/180));/*求30.0正弦值,函數的參數以弧度為單位*/printf(“floor(%1f)=%f\n”,p,floor(p));/*求不大于p的最小值*/printf(“floor(%1f)=%f\n”,q,floor(q));/*求不大于q的最小值*/}如果這個程序運行后結果為:abs(-23)=23fabs(-6.8)=6.800000sqrt(9)=3.0000002.5^3=15.625000sin(30)=0.500000floor(-12.3)=-13.000000floor(12.3)=12.000000注意,這里面真正起作用的是雙引號后面使用的那個函數名,而在雙引號里面出面的函數名只是相當于提示作用,作為普通字符來輸出的,但沒有實際用到?!纠?.7】使用隨機數函數出一道數值不超過百位的算術題。#include<stdlib.h>#include<math.h>main(){
int
x,y;
randomize();
x=rand()%100;y=rand()%100;printf("%d+%d=\n",x,y);}運行后結果為(因為是隨機產生的,這個程序運后大家的答案可能會不同):13+87=注意:1.rand()是一個隨機數函數,它返回的是一個只要是介于0到32767之間的整數。2.只要程序中提及到要調用動態分配函數和隨機數函數的話,要求就要在源文件夾中包含頭文件“stdlib.h”。3.初始化隨機數函數rnadomize()產生一個隨機數的種子,使每次運行程序時所得到的隨機數不同。3.4.2字符處理函數常用的字符處理函數見附錄D,它們的原型說明用有關信息均包含在頭文件“ctype.h”中,使用字符函數時,應該在源文件中使用以下的文件包含命令行:#include<ctype.h>#include"ctype.h"isalpha(x):判斷參數x中存放的是否是英文字母,函數返回1(真),否則返回0(假)。2.
islower(x):判斷參數x中存放的是否小寫字母(a~z),若是英文小寫字母,返回1(真),否則返回0(假)3.
toupper(x):若參數x中存放的字符是小寫字母,將其轉換成大寫字母并返回,否則返回x本身4.
toascii(x):將參數x中存放的字符轉換成對應的ASCII的值?!纠?.8】字符函數的應用。#include<stdio.h>#include"ctype.h"main(){charch1,ch2,c,d;
int
a,b;ch1=getchar();
ch2=getchar();
/*判斷參數ch1中存放的是否是英文字母,函數返回1(真),否則返回0(假)*/a=isalpha(ch1);/*判斷參數ch2中存放的是否小寫字母(a~z),若是英文小寫字母,返回1(真),否則返回0(假)*/b=islower(ch2);/*若參數ch1中存放的字符是小寫字母,將其轉換成大寫字母并返回,否則返回ch1本身*/c=toupper(ch1);
d=toascii(ch2);/*將參數ch2中存放的字符轉換成對應的ASCII的值*/
printf("a=%d,b=%d,c=%c,d=%d\n"a,b,c,d);}運行時,如果輸入:ab那么該程序的結果就如下:a=1,b=1,c=A,d=983.4.3基本圖形函數基本圖形函數包括畫點、畫線及其他的一引起基本圖形函數。它們均包括在頭文件“graphics.h”中,使用圖形函數時,應該在該源文件中使用以下的文件包含命令:#include<graphics.h>也可以寫成是:#include"graphics.h"基本圖形函數見表3.5所示函數名函數原型功能返回值putpixel
(int
x,int
y,intcolor);用指定的像素畫一個按color所指定的顏色的點getpixel
getpixel(int
x,inty);求當前點的顏色值求當前點的顏色值getmaxx
intfargetmaxx();求x軸地最大值x軸地最大值getmaxy
intfargetmaxy();求y軸地最大值y軸地最大值getx
intfargetx();功能是返回游標在x軸地位置游標在x軸地位置gety
intfargety();功能是返回游標在y軸地位置游標在y軸地位置moveto
intfarmoveto(int
x,inty);移動游標到(x,y)點,不是畫點,在移動過程中不畫點moverelintfarmoverel(int
dx,int
dy);從現在的位置(x,y)移動游標到(x+dx,y+dy)的位置在移動過和中不畫點lineline(intx1,inty1,intx2,inty2);畫一條從點(x1,y1到(x2,y2)的直線linerellinerel(int
dx,int
dy);畫一條從當前游標(x,y)到相對增量點(x+dx,y+dy)的直線circlecircle(inx,inty,intradius);以(x,y)為圓心,以radius為半,畫一個圓3.5基本圖形函數【例3.9】圖形函數的應用#include<stdio.h>#include<graphics.h.main(){
int
gdriver,gmode;
gdriver=DETECT;
initgraph(&gdriver,&gmode,"");/*圖形初始化*/
setbkcolor(BLUE);/*設置背景色為藍色*/
setcolor(RED);/*設置圖形顏色為紅色*/
line(2,3,6,9);/*畫一紅色的直線*/
getch();
colsegraph();}程序運行后,我們可以看到在屏幕上坐標為(2,3)和(6,9)兩點之間畫出了一條紅色的直線。順序結構是最簡單的一種程序結構?!纠?.10】以下程序由終端輸入兩個整數給變量x和y,然后輸出x和y,在交換x和y中的值后,再輸出x和y,驗證兩個變量中的數是否正確地進行了交換。#include"stdio.h"main(){int
x,y,t;printf("Enterx&y:\n");3.5順序結構程序設計舉例
scanf("%d,%d",&x,&y);
printf("x=%d,y=%d",x,y);
t=x,x=y,y=t;
printf("x=%d,y=%d",x,y);}以下是程序運行情況:Enterx&y
(由第4行的printf輸出)123,456(從鍵盤輸入兩個整數,回車)x=123,y=456(由第6行的printf輸出)x=456,y=123(由第8行的printf輸出)【例3.11】
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 動物基因表達研究
- 創新驅動:產品設計全流程管控體系構建與實踐
- 交通事故和解協議書正式版-1
- 及時如實報告生產安全事故是誰的責任
- 通信網絡建設安全管理體系與實施細節
- 莫言的小說與戲劇的評論
- 優惠框架效應-洞察及研究
- 生態文明建設新思路
- 政策補貼對谷物增產影響-洞察及研究
- 安全工作總結15
- GB/T 28733-2012固體生物質燃料全水分測定方法
- 數與代數課件
- 工會審計實務課件
- 預防艾滋病、梅毒和乙肝母嬰傳播相關報表、上報流程和要求
- 食用油儲存期品質變化的太赫茲光譜無損識別
- 胎盤早剝預案演練腳本
- 五山文學全集第一卷
- 聚磷腈功能高分子材料的合成及應用
- 中國鐵路總公司《鐵路技術管理規程》(高速鐵路部分)2014年7月
- 鈣加維生素Dppt課件(PPT 14頁)
- TRD深基坑止水帷幕施工方案(22頁)
評論
0/150
提交評論