第04章 基本輸入、輸出和順序程序設計-清華大學C語言_第1頁
第04章 基本輸入、輸出和順序程序設計-清華大學C語言_第2頁
第04章 基本輸入、輸出和順序程序設計-清華大學C語言_第3頁
第04章 基本輸入、輸出和順序程序設計-清華大學C語言_第4頁
第04章 基本輸入、輸出和順序程序設計-清華大學C語言_第5頁
已閱讀5頁,還剩43頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第4章基本輸入、輸出和順序程序設計制作人:王敬華第4章:基本輸入輸出和順序程序設計

學習的意義

程序對數據的處理流程:程序的主要功能就是對數據的處理,其整個流程主要包括數據的輸入、數據的處理、數據的輸出。語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C數據處理數據輸入數據輸出C程序中如何實現數據輸入?C程序中如何實現數據輸出?

程序的結構:

寫文章有文章的結構建房子有房子的結構制造機械產品由機械產品的結構

………

那么編寫程序是否有程序的結構呢?學習的意義

程序結構順序結構選擇結構循環(huán)結構YES!本章討論第5章討論第6章討論語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C格式化輸出printf

格式化輸入scanf

字符數據的非格式化輸入、輸出程序的控制結構順序程序設計舉例

本章小結學習目標

掌握各種類型數據的格式化輸入輸出方法;掌握字符數據的非格式化輸入輸出方法;理解三種程序控制結構的流程圖;學會簡單順序程序的設計;養(yǎng)成良好的程序設計習慣;

學習內容

語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C4.1格式化輸出printf一般格式printf("格式控制字符串",表達式1,表達式2,…,表達式n);功能按照“格式控制字符串”的要求,將表達式1,表達式2,…,表達式n的值顯示在計算機屏幕上。

說明格式控制字符串用于指定輸出格式。它包含兩類字符:

常規(guī)字符:包括可顯示字符和用轉義字符表示的字符。

格式控制符:以%開頭的一個或多個字符,以說明輸出數據的類型、形式、長度、小數位數等。其格式為:%[修飾符]格式轉換字符例:

longintx=0x8AB6;

printf(“TheValueofxis%ld\n”,x);常規(guī)字符常規(guī)字符(轉義符)格式控制符(修飾符)格式控制符(格式轉換符)語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C

printf使用時的注意事項(1)格式控制字符串可以不包含任何格式控制符。(2)當格式控制字符串中既含有常規(guī)字符,又包含有格式控制符時,則表達式的個數應與格式控制符的個數一致。此時,常規(guī)字符原樣輸出,而格式控制符的位置上輸出對應的表達式的值,其對應的順序是:從左到右的格式控制符對應從左到右的表達式。(3)

如果格式控制字符串中格式控制符的個數多于表達式的個數,則余下的格式控制符的值將是不確定的。(4)不同類型的表達式要使用不同的格式轉換符,同一表達式如果按照不同的格式轉換符來輸出,其結果可能是不一樣的。

printf(“howareyou?\n”);//只有一個字符串參數,輸出為:howareyou?printf(“howoldareyou?\n”,20);//帶有兩個參數,20沒有意義,輸出為:howoldareyou?已知:

inta=2;函數調用:

printf("a*a=%d,a+5=%d\n",a*a,a+5);實際輸出:

a*a=4,a+5=7

printf("5+3=%d,5-3=%d,5*3=%d",5+3,5-3);

輸出結果將是:5+3=8,5–3=2,5*3=-28710輸出隨機charch='A';printf("ch=%c",ch);//輸出結果:ch=A

(以字符形式輸出)printf("ch=%d",ch);//輸出結果:ch=65

(以'A'字符的ASCII碼形式輸出)語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C

printf函數中的格式轉換字符及其含義

格式轉換符含義對應的表達式數據類型%d或%i以十進制形式輸出一個整型數據。例如:inta=20;printf("%d",a);//輸出20有符號整型%x,%X以十六進制形式輸出一個無符號整型數據。例如:inta=164;printf("%x",a);//輸出a4printf("%X",a);//輸出A4無符號整型%o(字母o)以八進制形式輸出一個無符號整型數據。例如:inta=164;printf("%o",a);//輸出244無符號整型%u以十進制形式輸出一個無符號整型數據。例如:inta=-1;printf("%u",a);//BC下輸出65535,VC下4294967295無符號整型%c輸出一個字符型數據。例如:charch='A';printf("%c",ch);//輸出A字符型語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C

printf函數中的格式轉換字符及其含義

格式轉換符含義對應的表達式數據類型%s輸出一個字符串。例如:printf("mynameis%s","wangjinghua");//輸出mynameiswangjinghua字符串%f以十進制小數形式輸出一個浮點型數據。例如:floatf=-12.3;printf("%f",f);//輸出-12.300000浮點型%e,%E以指數形式輸出一個浮點型數據。例如:floatf=1234.8998;printf("%e",f);//輸出1.234900e+003printf("%E",f);//輸出1.234900E+003浮點型%g,%G按照%f或%e中輸出寬度比較短的一種格式輸出。浮點型%p以主機的格式顯示指針,即變量的地址。例如:inta=2;printf(“%p”,&a);//BC下輸出FFD8,

VC下0012FF7C指針類型語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C1.整數的輸出

有符號整數的輸出

一般形式:

[]:表示可選項,可缺省。

-:表示輸出的數據左對齊,缺省時是右對齊。

+:輸出正數時,在數的前面加上+號。

數字0:右對齊時,如果實際寬度小于width,則在左邊的空位補0。

width:無符號整數,表示輸出整數的最小域寬(即占屏幕的多少格)。若實際寬度超過了width,則按照實際寬度輸出。

.precision:無符號整數,表示至少要輸出precision位。若整數的位數大于precision,則按照實際位數輸出,否則在左邊的空位上補0。

字母l:如果在d的前面有字母l(long),表示要輸出長整型數據。

字母h:如果在d的前面有字母h(short),表示要輸出短整型數據。說明:%[-][+][0][width][.precision][l][h]d輔助格式控制字符(修飾符)

語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C【例】有符號整數的格式化輸出

#include<stdio.h>

voidmain(){

inta=123;longL=65537;

printf("12345678901234567890\n");

printf("a=%d--------(a=%%d)\n",a);

printf("a=%6d-----(a=%%6d)\n",a);

printf("a=%+6d-----(a=%%+6d)\n",a);

printf("a=%-6d-----(a=%%-6d)\n",a);

printf("a=%-06d-----(a=%%-06d)\n",a);

printf("a=%+06d-----(a=%%+06d)\n",a);

printf("a=%+6.6d----(a=%%+6.6d)\n",a);

printf("a=%6.6d-----(a=%%6.6d)\n",a);

printf("a=%-6.5d-----(a=%%-6.5d)\n",a);

printf("a=%6.4d-----(a=%%6.4d)\n",a);

printf("L=%ld------(L=%%ld)\n",L);

printf("L=%hd----------(L=%%hd)\n",L);}

12345678901234567890a=123--------(a=%d)a=123-----(a=%6d)a=+123-----(a=%+6d)a=123-----(a=%-6d)a=123-----(a=%-06d)a=+00123-----(a=%+06d)a=+000123----(a=%+6.6d)a=000123-----(a=%6.6d)a=00123-----(a=%-6.5d)a=0123-----(a=%6.4d)L=65537------(L=%ld)L=1----------(L=%hd)運行結果:L是一長整型數65537,其值為十六進制0X00010001,所以要將其轉換成短整型,即取低16位0x0001,將其輸出,故輸出為1。Why?語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C1.整數的輸出

無符號整數的輸出

一般形式:

[]:表示可選項,可缺省。

|:表示互斥關系。

#:表示當以八進制形式輸出數據(%o)時,在數字前輸出0;當以十六進制形式輸出數據(%x或%X)時,在數字前輸出0x或0X。

.precision的含義與前面介紹的相同,但要注意,在TC和BC下,precision所指定的位數也包含了0x或0X所占的位數,可在VC下,則不包含0x或0X所占的位數。其它字段的含義與前面介紹的相同。

說明:%[-][#][0][width][.precision][l][h]u|o|x|X輔助格式控制字符(修飾符)

語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C【例】無符號整數的格式化輸出

#include<stdio.h>voidmain(){

inta=-1;unsignedu=32767;unsignedlongL=-32768;

printf("a=%d,a=%u---(a=%%d,a=%%u)\n",a,a);

printf("a=%hx,a=%X---(a=%%hx,a=%%X)\n",a,a);

printf("u=%o,u=%X------(u=%%o,u=%%X)\n",u,u);

printf("u=%#010X---------(u=%%#010X)\n",u);

printf("u=%#10.10X-------(u=%%#10.10X)\n",u);

printf("L=%lX-----------(L=%%lX)\n",L);

printf("L=%-#14.10X-----(L=%%-#14.10X)\n",L);}

a=-1,a=65535---(a=%d,a=%u)a=ffff,a=FFFF---(a=%hx,a=%X)u=77777,u=7FFF------(u=%o,u=%X)u=0X00007FFF---------(u=%#010X)u=0X00007FFF-------(u=%#10.10X)L=FFFF8000-----------(L=%lX)L=0X00008000-----(L=%-#14.10X)運行結果(在BC3.1下):a=-1,a=4294967295---(a=%d,a=%u)a=ffff,a=FFFFFFFF---(a=%hx,a=%X)u=77777,u=7FFF------(u=%o,u=%X)u=0X00007FFF---------(u=%#010X)u=0X0000007FFF-------(u=%#10.10X)L=FFFF8000-----------(L=%lX)L=0X00FFFF8000-----(L=%-#14.10X)運行結果(在VC6.0下):111111111111111111111111111111111111111111111111寬度包含0X寬度不包含0X11111111011111111111111101111111000000000000000000000000100000001111111111111111000000001000000011111111111111110000000010000000111111111111111100000000100000001111111111111111語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C2.實數的輸出

一般形式:

[]:表示可選項,可缺省。

|:表示互斥關系。

#:必須輸出小數點。

.precision:規(guī)定輸出實數時,小數部分的位數。

l:輸出double型數據(缺省時也是輸出double型數據)。

L:輸出longdouble型數據。其它字段的含義與前面介紹的相同。說明:%[-][+][#][0][width][.precision][l|L]f|e|E|g|G輔助格式控制字符(修飾符)

語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C【例】實數的格式化輸出

#include<stdio.h>voidmain(){doublef=2.5e5;

printf("12345678901234567890\n");

printf("f=%15f--------(f=%%15f)\n",f);

printf("f=%015f--------(f=%%015f)\n",f);

printf("f=%-15.0f--------(f=%%-15.0f)\n",f);

printf("f=%#15.0f--------(f=%%#15.0f)\n",f);

printf("f=%+15.4f--------(f=%%+15.4f)\n",f);

printf("f=%15.4E--------(f=%%15.4E)\n",f);}

12345678901234567890f=250000.000000--------(f=%15f)f=00250000.000000--------(f=%015f)f=250000--------(f=%-15.0f)f=250000.--------(f=%#15.0f)f=+250000.0000--------(f=%+15.4f)f=2.5000E+005--------(f=%#15.4E)運行結果:語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C3.字符和字符串的輸出

一般形式:

[]:表示可選項,可缺省。

.precision:表示只輸出字符串的前precision個字符。其它字段的含義與前面介紹的相同。說明:輸出字符:

%[-][0][width]c

輔助格式控制字符(修飾符)

輸出字符串:

%[-][0][width][.precision]s輔助格式控制字符(修飾符)

語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C【例】字符及字符串的格式化輸出

#include<stdio.h>voidmain(){charch='A';

printf("12345678901234567890\n");

printf("ch=%c-----------(ch=%%c)\n",ch);

printf("ch=%4c--------(ch=%%4c)\n",ch);

printf("ch=%-4c--------(ch=%%-4c)\n",ch);

printf("ch=%04c--------(ch=%%04c)\n",ch);

printf("st=%s--------(st=%%s)\n","CCNU");

printf("st=%6s------(st=%%6s)\n","CCNU");

printf("st=%06.3s------(st=%%06.3s)\n","CCNU");}

12345678901234567890ch=A-----------(ch=%c)ch=A--------(ch=%4c)ch=A--------(ch=%-4c)ch=000A--------(ch=%04c)st=CCNU--------(st=%s)st=CCNU------(st=%6s)st=000CCN------(st=%06.3s)運行結果:語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C4.輔助格式控制符(修飾符)小結

修飾符功能例子width輸出數據域寬,數據長度<width,補空格;否則按實際輸出%4d:表示輸出至少占4格.precision對于整數:表示至少要輸出precision位,當數據長度小于precision,左邊補0%6.4d:表示至少要輸出4位數對于實數:指定小數點后位數(四舍五入)%6.2f:表示輸出2位小數對于字符串:表示只輸出字符串的前precision個字符%.3s:表示輸出字符串前3個字符-輸出數據在域內左對齊(缺省右對齊)%-16d:表示輸出數據左對齊+輸出有符號正數時,在其前面顯示正號(+)%+d:表示輸出整數的正負號0輸出數值時,指定左邊不使用的空格自動填0%08X:表示輸出十六進制無符號整數,不足8位時左補0語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C4.輔助格式控制符(修飾符)小結

修飾符功能例子#對于無符號數:在八進制和十六進制數前顯示前導0,0x或0X%#X:表示輸出的十六進制前顯示前導0X對于實數:必須輸出小數點%#10.0f:表示輸出的浮點數必須輸出小數點h在d、o、x、u前,指定輸出為短整型數%hd:表示輸出短整型數l在d、o、x、u前,指定輸出為longint型%ld:表示輸出長整型數在e、f、g前,指定輸出精度為double型(缺省也為double)%lf:表示輸出為double型數L在e、f、g前,指定輸出精度為longdouble型%Lf:表示輸出為longdouble型數此外,在使用printf函數時還要注意以下幾點:格式控制字符串后面表達式的個數一般要與格式控制字符串中的格式控制符的個數相等。格式轉換符中,除了X、E、G以外,其它均為小寫。表達式的實際數據類型要與格式轉換符所表示的類型相符,printf函數不會進行不同數據類型之間的自動轉換。象整型數據不可能自動轉換成浮點型數據,浮點型數據也不可能自動轉換成型數數據

語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C【例】錯誤的格式化輸出

#include<stdio.h>voidmain(){

inta=10,b=100;floatf=2;

printf("a=%d,b=%d\n",f,b);

printf("a=%f,b=%d\n",a,b);

printf("a=%ld,b=%d\n",120,b);}a=2.000000,b=100a=10.000000,b=100a=120,b=100期望的運行結果:a=0,b=0a=0.000000,b=-192a=6553720,b=-28770實際的運行結果(BC3.1下):a=0,b=1073741824a=0.000000,b=2012780960a=120,b=100實際的運行結果(VC6.0下):Why?輸出float型數據f,卻使用了%d,a的不正常輸出會影響到下一個表達式的正常輸出輸出int型數據a,卻使用了%f

,a的不正常輸出會影響到下一個表達式的正常輸出

輸出int型數據120,卻使用了%ld。在BC3.1下,因為整型和長整型所占內存單元的大小不同(整型占2字節(jié),長整型占4字節(jié)),整型不會自動轉換成長整型,所以不會正常輸出120,同時也會影響到下一個表達式的輸出。但在VC6.0下,因為整型和長整型所占內存單元的大小相同(均占4字節(jié)),且都是整型數據,數據類型基本是相同的,所以輸出的結果正確

如何修改?printf("a=%f,b=%d\n",f,b);printf("a=%f,b=%d\n",(float)a,b);printf("a=%ld,b=%d\n",120L,b);或printf("a=%d,b=%d\n",120,b);語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C4.2格式化輸入scanf一般格式scanf

(“格式控制字符串”,變量1的地址,變量2的地址,…,變量n的地址);功能第一個參數格式控制字符串的控制下,接受用戶的鍵盤輸入,并將輸入的數據依此存放在變量1、變量2、……、變量n中

。

inta;scanf("%d",&a);取地址運算符(與按位“與”同符號),只能作用于變量!

格式控制符與后續(xù)參數中的變量地址的對應關系

已知:

inta,b;函數調用:

scanf("%d%d",&a,&b);假設輸入:

10□20↙變量的值:a的值是10,b的值是20語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C

scanf函數的格式控制符

%[*][width][l|h]Type一般形式:說明:

[]:表示可選項,可缺省。|表示互斥關系。

width:指定輸入數據的域寬,遇空格或不可轉換字符則結束。

Type:各種格式轉換符(參照printf)。*:抑制符,輸入的數據不會賦值給相應的變量。

l:用于d、u、o、x|X前,指定輸入為long型整數;用于e|E、f前,指定輸入為double型實數。

h:用于d、u、o、x|X前,指定輸入為short型整數。語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C使用scanf函數注意事項

(1)如果相鄰兩個格式控制符之間,不指定數據分隔符(如逗號、冒號等),則相應的兩個輸入數據之間,至少用一個空格分隔,或者用Tab鍵分隔,或者輸入一個數據后,按回車,然后再輸入下一個數據。

(2)格式控制字符串中出現的常規(guī)字符(包括轉義字符),務必原樣輸入。

(3)為改善人機交互性,同時簡化輸入操作,在設計輸入操作時,一般先用printf()函數輸出一個提示信息,再用scanf()函數進行數據輸入。

(4)當格式控制字符串中指定了輸入數據的域寬width時,將讀取輸入數據中相應的width位,但按需要的位數賦給相應的變量,多余部分被舍棄。例如:

scanf("%d%d",&num1,&num2);

假設給num1輸入12,給num2輸入36,則正確的輸入操作為:

12□36↙

或者

12↙36↙

使用“↙”符號表示按回車鍵操作,在輸入數據操作中的作用是,通知系統(tǒng)輸入操作結束。例如:

scanf("%d:%d:%d",&h,&m,&s);

假設給h輸入12,給m輸入30,給s輸入10,正確的輸入操作為:

12:30:10↙

例如:

scanf("num1=%d,num2=%d\n",&num1,&num2);

假設給num1輸入12,給num2輸入36,正確的輸入操作為:

num1=12,num2=36\n↙例如:將scanf("num1=%d,num2=%d\n",&num1,&num2);改為:

printf("num1=");scanf("%d",&num1);

printf("num2=");scanf("%d",&num2);例如:

scanf("%3c%3c",&ch1,&ch2);

假設輸入abcdefg↙,則系統(tǒng)將讀取的“abc”中的'a'賦給變量ch1;將讀取的"def"中的'd'賦給變量ch2。語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C使用scanf函數注意事項

(5)當格式控制字符串中含有抑制符‘*’時,表示本輸入項對應的數據讀入后,不賦給相應的變量(該變量由下一個格式指示符輸入)。

(6)使用格式控制符%c輸入單個字符時,空格和轉義字符均作為有效字符被輸入。

(7)輸入數據時,遇到以下情況,系統(tǒng)認為該數據結束:

遇到空格,或者回車鍵,或者Tab鍵。

遇到輸入域寬度結束。例如“%3d”,只取3列。

遇到非法輸入。比方說,在輸入數值數據時,遇到字母等非數值符號。

(8)當一次scanf調用需要輸入多個數據項時,如果前面數據的輸入遇到非法字符,并且輸入的非法字符不是格式控制字符串中的常規(guī)字符,那么,這種非法輸入將影響后面數據的輸入,導致數據輸入失敗。例如:

scanf("%2d%*2d%3d",&num1,&num2);

printf("num1=%d,num2=%d\n",num1,num2);

假設輸入123456789↙

輸出結果為:num1=12,num2=567。

例如:

scanf("%c%c%c",&ch1,&ch2,&ch3);

假設輸入:A□B□C↙,則系統(tǒng)將字母'A'賦值給ch1,空格'□'賦值給ch2,字母'B'賦值給ch3。

例如:

scanf("%d",a);

如果輸入為:12a3↙,a的值將是12。例如:

scanf("%d,%d",&a,&b);

如果輸入為:12a34↙,那么a的值將是12,b的值將無法預測。正確的輸入是:12,34↙

語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C【例】數據的格式化輸入

輸入一學生的學號(8位數字)、生日(年-月-日)、性別(M:男,F:女)及三門功課(語文、數學、英語)的成績,現要求計算該學生的總分和平均分,并將該學生的全部信息輸出(包括總分、平均分)。#include<stdio.h>voidmain(){unsignedlongno;//學號

unsignedintyear,month,day;//生日(年、月、日)

unsignedcharsex;//性別

floatchinese,math,english;//語文、數學、英語成績

floattotal,average;//總分、平均分

printf("inputthestudent'sNO:");

scanf("%8ld",&no);

printf("inputthestudent'sBirthday(yyyy-mm-dd):");

scanf("%4d-%2d-%2d",&year,&month,&day);

fflush(stdin);

//清除鍵盤緩沖區(qū)

printf("inputthestudent'sSex(M/F):");

scanf("%c",&sex);

printf("inputthestudent'sScores(chinese,math,english):");

scanf("%f,%f,%f",&chinese,&math,&english);total=chinese+math+english;//計算總分

average=total/3;//計算平均分

printf("\n===NO=======birthday==sex==chinese==math==

english==total==average\n");

printf("%08ld%4d-%02d-%02d%c%-5.1f%-5.1f

%-5.1f%-5.1f%-5.1f\n",no,year,month,day,sex,

chinese,math,english,total,average);}假設輸入:inputthestudent'sNO:20040101↙inputthestudent'sBirthday(yyyy-mm-dd):1987-9-8↙inputthestudent'sSex(M/F):M↙inputthestudent'sScores(chinese,math,english):90,80,90↙輸出結果

:===NO=======birthday==sex==chinese==math==english==total==average200401011987-09-08M90.080.090.0260.086.7語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C4.3字符數據的非格式化輸入、輸出

1.字符數據的非格式化輸入int

getchar(void);

//應包含的.h文件為stdio.h

與輸入字符數據有關的常用庫函數主要有:

getchar、getc、getche、getch等。

getchar

功能:從鍵盤讀一字符

返值:正常,返回讀取字符的ASCII碼值;出錯,返回EOF(-1)。

說明:以回車符為輸入結束條件;輸入多個字符時,返回第一個字符的值;輸入字符回顯。語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C【例】利用getchar輸入字符

#include<stdio.h>#include<conio.h>voidmain(){charch1,ch2;

inta;ch1=getchar();ch2=getchar();

scanf("%d",&a);

printf("ch1=%c,ch2=%c\n",ch1,ch2);

printf("a=%d\n",a);}ch1=1,ch2=2a=34運行結果(假設輸入為:1234↙):

語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計Cint

getc(FILE*stream);

//應包含的.h文件為stdio.h

getc

功能:從流文件stream中讀取一個字符信息,它的返回值是所讀取字符的ASCII碼。

返值:正常,返回讀取字符的ASCII碼值;出錯,返回EOF(-1)。

說明:該函數帶有一個參數stream,它是一文件指針(第12章介紹),表示流文件,當流文件是stdin時,getc函數的功能與getchar函數的功能完全相同。也就是說,gtec(stdin)與getchar()是等價的。語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計Cint

getche(void);

//應包含的.h文件為conio.h

getche

功能:與getchar的功能基本相同。

返值:正常,返回讀取字符的ASCII碼值;出錯,返回EOF(-1)。

說明:直接從鍵盤獲取鍵值,不等待用戶按回車鍵;輸入字符回顯。

getch

int

getch(void);

//應包含的.h文件為conio.h

功能:與getche的功能基本相同。

返值:正常,返回讀取字符的ASCII碼值;出錯,返回EOF(-1)。

說明:直接從鍵盤獲取鍵值,不等待用戶按回車鍵;輸入字符不回顯。語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C【例】getch與getche的差異

#include<stdio.h>#include<conio.h>voidmain(){charch1,ch2;

printf("pleasepresstwokey\n");ch1=getche();//回顯

ch2=getch();//不回顯

printf("\nyou'vepressed%cand%c\n",ch1,ch2);}pleasepresstwokeyayou’vepressedaandb運行結果(假設依此按下a鍵和b鍵):

語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C庫函數名功能函數原型所在頭文件getchar接受一字符輸入,以回車鍵結束,回顯stdio.hgetc從輸入流中接受一字符,以回車鍵結束,回顯stdio.hgetche接受一字符輸入,輸入字符后就結束,回顯conio.hgetch接受一字符輸入,輸入字符后就結束,不回顯conio.h與輸入字符數據有關的庫函數功能比較:

語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C2.字符數據的非格式化輸出int

putchar(intc);

//應包含的.h文件為stdio.h

與輸出字符數據有關的常用庫函數主要有:

putchar、putc、puts等。

putchar

功能:在顯示器上輸出字符c。

返值:正常,返回字符的代碼值;出錯,返回EOF(-1)。

說明:該函數帶有一個參數c,它為要顯示字符的ASCII碼值,有一個int型返回值

。語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C

putc

int

putc(intc,FILE*stream);

//應包含的.h文件為stdio.h

功能:將字符c輸出到流文件stream。如果流文件為stdout,則功能與putchar完全相同,所以putc(c,stdout)等價于putchar(c)

返值:正常,返回字符的代碼值;出錯,返回EOF(-1)。

putsintputs(char*string);

//應包含的.h文件為stdio.h

功能:將字符串string的所有字符輸出到屏幕上,輸出時將自動回車換行。語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C【例】利用字符輸出函數輸出字符

#include<stdio.h>voidmain(){

inta=65;charb='B';

putchar(a);//不自動回車

putchar('\n');puts(“isasgoodas”);//自動回車

putc(b,stdout);}AisasgoodasB運行結果:

語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C4.4程序的控制結構

1.算法的基本概念程序=數據結構+算法。算法:簡而言之,就是解決問題的方法與步驟。

程序設計語言:是程序開發(fā)工具,即是將算法轉化為程序的開發(fā)工具。

程序:算法的具體實現。

學習C語言,不僅要熟練掌握其語言本身的特點、語法規(guī)則等意外,更重要的就是掌握分析問題、解決問題的方法,就是鍛煉分析、分解,最終歸納整理出算法的能力。語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C2.設計算法舉例

【例1】輸入三個數,然后輸出其中最大的數。

總體思路:

首先,得先有個地方裝這三個數,我們定義三個變量A、B、C,將三個數依次輸入到A、B、C中,另外,再準備一個MAX裝最大數。由于計算機一次只能比較兩個數,我們首先把A與B比,大的數放入MAX中,再把MAX與C比,又把大的數放入MAX中。最后,把MAX輸出,此時MAX中裝的就是A、B、C三數中最大的一個數。

具體步驟:

(1)輸入A、B、C。

(2)A與B中大的一個放入MAX中。

(3)把C與MAX中大的一個放入MAX中。

(4)輸出MAX,MAX即為最大數。其中的(2)、(3)兩步仍不明確,無法直接轉化為程序語句,可以繼續(xù)細化:

(2)把A與B中大的一個放入MAX中,若A>B,則MAX←A;否則MAX←B。

(3)把C與MAX中大的一個放入MAX中,若C>MAX,則MAX←C。

算法最后可以寫成:

(1)輸入A,B,C。

(2)若A>B,則MAX←A;否則MAX←B。

(3)若C>MAX,則MAX←C。

(4)輸出MAX,MAX即為最大數

語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C2.設計算法舉例

【例2】猴子吃桃問題:有一堆桃子不知數目,猴子第一天吃掉一半,覺得不過癮,又多吃了一只,第二天照此辦理,吃掉剩下桃子的一半另加一個,天天如此,到第十天早上,猴子發(fā)現只剩一只桃子了,問這堆桃子原來有多少個?

總體思路:

假設第一天開始時有a1只桃子,第二天有a2只,……,第9天有a9只,第10天是a10只,在a1,a2,……,a10中,只有a10=1是知道的,現要求a1,而我們可以看出,a1,a2,……,a10之間存在一個簡單的關系:

a9=2*(a10+1)a8=2*(a9+1)┇a1=2*(a2+1)

也就是:ai

=2*(ai+1+1)i=9,8,7,6,…,1

這就是此題的數學模型。再考察上面從a9,a8直至a1的計算過程,這其實是一個遞推過程,這種遞推的方法在計算機解題中經常用到。另一方面,這九步運算從形式上完全一樣,不同的只是ai的下標而已。由此,我們引入循環(huán)的處理方法,并統(tǒng)一用a0表示前一天的桃子數,a1表示后一天的桃子數。算法最后可以寫成:

(1)a1=1{第10天的桃子數,a1的初值}

i=9{計數器初值為9}

(2)a0=2*(a1+1){計算當天的桃子數}

(3)a1=a0

{將當天的桃子數作為下一次計算的初值}

(4)i=i-1(5)若i>=1,轉(2)(6)輸出a0的值其中(2)~(5)步為循環(huán)

語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C3.算法的描述方法

自然語言描述語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C如前面表示的那樣,自然語言就是人們日常使用的語言,可以是漢語、英語,或其他語言。

優(yōu)點:用自然語言表示通俗易懂;

缺點:

(1)文字冗長,容易出現歧義性。自然語言表示的含義往往不太嚴格,要根據上下文才能判斷其正確含義。假如有這樣一句話:“張先生對李先生說他的孩子考上了大學”。請問是張先生的孩子考上了大學還是李先生的孩子考上了大學呢?光從這句話本身難以判斷。

(2)用自然語言來描述包含分支和循環(huán)的算法,不很方便。

因此,除了那些很簡單的問題以外,一般不用自然語言描述算法。3.算法的描述方法

流程圖起止框判斷框輸入、輸出框注釋框處理框連接點流程線_____常見流程圖符號語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C流程圖是一種傳統(tǒng)的算法表示法,利用幾何圖形的框來代表各種不同性質的操作,用流程線來指示算法的執(zhí)行方向。由于其簡單直觀,所以應用廣泛,特別是在早期語言設計階段,只有通過流程圖才能簡明地表述算法,流程圖成為程序員們交流的重要手段,直到結構化的程序設計語言出現,對流程圖的依賴才有所降低【例2】的算法的流程圖開始i=9a1=1i≥1i=i-1a0=2*(a1+1)a1=a0輸出a0結束T【例1】的算法的流程圖MAX←AMAX←BA>B輸入A,B,C開始MAX←C輸出MAX結束C>MAXTTFF3.算法的描述方法

NS結構化流程圖描述語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C

NS結構化流程圖是美國學者I.Nassi和B.Schneiderman于1973年提出的,NS圖就是以這兩位學者名字的首字母命名的。它的最重要的特點就是完全取消了流程線,這樣算法被迫只能從上到下順序執(zhí)行,從而避免了算法流程的任意轉向,保證了程序的質量。與傳統(tǒng)流程圖相比,NS圖的另一個優(yōu)點就是既形象直觀,又比較節(jié)省篇幅,尤其適合于結構化程序的設計。

輸入A,B,CA>BTFMAX←AMAX←BC>MAXTFMAX←C輸出MAX【例1】的算法的NS流程圖i←9a1←1當i>1a0←2*(a1+1)a1←a0i←i-1輸出a0【例2】的算法的NS流程圖3.算法的描述方法

偽碼描述語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C

偽碼是指介于自然語言和計算機語言之間的一種代碼,是幫助程序員制定算法的智能化語言,它不能在計算機上運行,但是使用起來比較靈活,無固定格式規(guī)范,只要寫出來自己或別人能看懂即可,由于它與計算機語言比較接近,因此易于轉換為計算機程序。用偽碼描述【例1】的算法

inputA,B,CifA>Bthen

MAX=Aelse

MAX=BifC>MAXthen

MAX=CprintMAX用偽碼描述【例2】的算法

i=9

a1=1

LOOP:whilei>1

a0=2*(a1+1)

a1=a0

i=i–1

gotoLOOP

printa0

4.算法的基本結構

(1)順序結構ABCA條件ABTF(2)分支結構條件TF(3)循環(huán)結構ATF條件A條件TF語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C4.5順序程序設計舉例

【例1】任意從鍵盤輸入一個三位整數,要求正確地分離出它的個位、十位和百位數,并分別在屏幕上輸出。

程序設計的分析:本例要求設計一個從三位整數中分離出它的個位、十位和百位數的算法。例如,輸入的是456,則輸出的分別是4、5、6,最低位數字可用對10求余的方法得到,如456%10=6,最高位的百位數字可用對100整除的方法得到,如456/10=4,中間位的數字既可通過將其變換為最高位后再整除的方法得到,如(456-4*100)/10=5,也可通過將其變換為最低位再求余的方法得到,如(456/10)%10=5。根據以上的分析,這個程序應這樣設計:

(1)定義一個整型變量x,用于存放用戶輸入的一個三位整數;再定義三個整型變量b0、b1、b2,用于存放計算后個位、十位和百位數。

(2)調用scanf函數輸入該三位整數。

(3)利用上述計算方法計算該數的個位、十位和百位數。

(4)輸出計算后的結果。語言程序設計教程第二版

第四章基本輸入輸出和順序程序設計C#include<stdio.h>voidmain(){

intx,b0,b1,b2;//變量定義

printf("pleaseinputanintegerx:");//提示用戶輸入一個整數

scanf("%d",&x);//輸入一個整數

b2=x/100;//用整除方法計算最高位

b1=(x-b2*100)/10;//計算中間位

b0=x%10;//用求余數法計算最低位

printf

溫馨提示

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

評論

0/150

提交評論