c語言第4章順序結(jié)構(gòu)程序設(shè)計(jì)_第1頁
c語言第4章順序結(jié)構(gòu)程序設(shè)計(jì)_第2頁
c語言第4章順序結(jié)構(gòu)程序設(shè)計(jì)_第3頁
c語言第4章順序結(jié)構(gòu)程序設(shè)計(jì)_第4頁
c語言第4章順序結(jié)構(gòu)程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第4章

順序結(jié)構(gòu)程序設(shè)計(jì)C語言語句概述數(shù)據(jù)輸入輸出的概念字符數(shù)據(jù)的輸入輸出格式數(shù)據(jù)的輸入輸出應(yīng)用實(shí)例本章小結(jié)主要內(nèi)容C語言語句概述C程序的函數(shù)執(zhí)行部分是由語句組成的,程序的功能就是由執(zhí)行語句來實(shí)現(xiàn)的。一個(gè)基本的語句以分號;結(jié)尾。C程序的執(zhí)行語句包括以下:聲明語句表達(dá)式語句控制語句復(fù)合語句空語句函數(shù)調(diào)用語句。變量聲明語句int

x,y;表達(dá)式語句(一個(gè)合法的表達(dá)式加上分號)i++;i=i+1;函數(shù)調(diào)用語句max(x,y);復(fù)合語句復(fù)合語句:用{…}括起來的一組語句一般形式:

{[數(shù)據(jù)說明部分;]

執(zhí)行語句部分;

}說明:語法上和單一語句相同,在任何使用單個(gè)語句的地方都可以使用復(fù)合語句。在什么情況下使用復(fù)合語句?條件語句和循環(huán)語句在語法上只允許帶一條語句當(dāng)分支和循環(huán)中需要進(jìn)行多項(xiàng)操作時(shí)此處無分號此處有分號#include<stdio.h>intmain(){

inty; y=100;

{

intx;

x=20;

printf("x=%d\n",x);

}

printf("y=%d\n",y);

printf("x=%d\n",x);

return0;}//編譯后能通過嗎?復(fù)合語句●在復(fù)合語句的嵌套結(jié)構(gòu)中,一個(gè)復(fù)合語句內(nèi)所進(jìn)行的說明只適合于本層中該說明語句以后的部分(包括其內(nèi)層的復(fù)合語句),在該復(fù)合語句外不起作用。#include<stdio.h>intmain(){

int

x,y; x=10; y=100;

{

x=20;

printf("y=%d\n",y);

printf("x=%d\n",x);

}

printf("x=%d\n",x); return0;}{

intx; x=20;

printf("y=%d\n",y);

printf("x=%d\n",x);}●在復(fù)合語句的嵌套結(jié)構(gòu)中,如果在內(nèi)層與外層作了相同的說明,則按照局部優(yōu)先的原則,內(nèi)層復(fù)合語句中的執(zhí)行結(jié)果不帶回到外層。空語句空語句有什么作用?什么也不做,只表示語句的存在自頂向下程序設(shè)計(jì)時(shí)用在那些未完成的模塊中延時(shí)用的空循環(huán)intmain(){

DataInitialze();

DataProcess();

DataOutput(); return0;}void

DataInitialze(){

;}讓程序暫停的語句#include<stdio.h>#include<stdlib.h>intmain(){

printf("\nHello\n");

system("pause"); return0;}此時(shí),按下任意鍵后,屏幕顯示如下:順序結(jié)構(gòu)程序設(shè)計(jì)的基本操作如何在程序中給變量賦值?賦值語句賦值表達(dá)式;如何進(jìn)行數(shù)據(jù)的輸入輸出?輸入:從標(biāo)準(zhǔn)輸入設(shè)備上輸入數(shù)據(jù)到計(jì)算機(jī)內(nèi)存輸出:將計(jì)算機(jī)內(nèi)存中的數(shù)據(jù)送到標(biāo)準(zhǔn)輸出設(shè)備C語言中輸入輸出操作通過調(diào)用標(biāo)準(zhǔn)庫函數(shù)來實(shí)現(xiàn)#include"stdio.h"在當(dāng)前目錄和TC指定的目錄中找該文件#include<stdio.h>在由TC指定的文件目錄中找該文件數(shù)據(jù)輸入輸出的概念所謂輸入輸出是以計(jì)算機(jī)為主體而言的。數(shù)據(jù)從外存或外設(shè)(如鍵盤、磁盤文件等)進(jìn)入或讀入計(jì)算機(jī)內(nèi)存(變量等為代表)為數(shù)據(jù)輸入;相反,數(shù)據(jù)從計(jì)算機(jī)內(nèi)存取出或?qū)懗龅酵獯婊蛲獠吭O(shè)備(如顯示器、磁盤文件等)為數(shù)據(jù)輸出。如圖4.1所示。圖4.1數(shù)據(jù)輸入輸出示意圖數(shù)據(jù)的輸入與輸出C語言提供了一組輸入輸出庫函數(shù)(這些都是函數(shù)調(diào)用語句,而并非C語言本身的語句。):對標(biāo)準(zhǔn)輸入設(shè)備和標(biāo)準(zhǔn)輸出設(shè)備讀寫。printf(寫格式化的數(shù)據(jù))scanf(讀格式化的數(shù)據(jù))getchar(輸入字符)putchar(輸出字符)gets(輸入字符串)puts(輸出字符串)格式輸出函數(shù)printfprintf

(格式控制字符串,輸出項(xiàng)表列);輸出若干個(gè)任意類型的數(shù)printf("a=%db=%f",a,b);函數(shù)名格式說明:%[修飾符]格式字符普通字符:原樣輸出輸出表列:要輸出的數(shù)據(jù)(可以沒有,多個(gè)時(shí)以","分隔)printf函數(shù)格式字符d,i十進(jìn)制整數(shù)x,X十六進(jìn)制無符號整數(shù)o八進(jìn)制無符號整數(shù)u不帶符號十進(jìn)制整數(shù)c單一字符s字符串e,E指數(shù)形式浮點(diǎn)小數(shù)f小數(shù)形式浮點(diǎn)小數(shù)ge和f中較短一種,且不輸出無意義的零%%百分號本身inta=567;printf("%d",a);567inta=255;printf("%x",a);ffinta=65;printf("%o",a);101inta=567;printf("%u",a);567chara=65;printf("%c",a);Aprintf("%s","ABC");ABCfloata=567.789;printf("%e",a);5.677890e+002floata=567.789;printf("%f",a);567.789001floata=567.789;printf("%g",a);567.789printf("%%");%//閱讀程序,寫出運(yùn)行結(jié)果#include<stdio.h>intmain(){

inta=3,b=4; unsignedu=65535;

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

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

printf("u=%u\n",u); return0;}34a=3,b=4u=65535格式輸出函數(shù)printfprintf附加格式說明符修飾符功能m.n-+0#l輸出數(shù)據(jù)域?qū)挘瑪?shù)據(jù)長度<m,左補(bǔ)空格;否則按實(shí)際輸出對實(shí)數(shù),指定小數(shù)點(diǎn)后位數(shù)(四舍五入)對字符串,指定實(shí)際輸出位數(shù)輸出數(shù)據(jù)在域內(nèi)左對齊(缺省右對齊)指定在有符號數(shù)的正數(shù)前顯示正號(+)輸出數(shù)值時(shí)指定左面不使用的空位置自動(dòng)填0在八進(jìn)制和十六進(jìn)制數(shù)前顯示前導(dǎo)0,0x在d,o,x,u前,指定輸出精度為long型在e,f,g前,指定輸出精度為double型附加格式說明符m.n#include<stdio.h>intmain(){

inta=1234; floatf=123.456; charch='a'; printf("%8d,%2d\n",a,a); printf("%f,%8f\n",f,f); printf("%8.1f,%.2f,%.2e\n",f,f,f); printf("%3c\n",ch); return0;}運(yùn)行結(jié)果:____1234,1234123.456001,123.456001___123.5,123.46,1.23e+002__a附加格式說明符m.nintmain(){ chara[]="Hello,world!"; printf("%s\n%15s\n%10.5s\n%2.5s\n%.3s\n",a,a,a,a,a); return0;}運(yùn)行結(jié)果:Hello,world!___Hello,world!_____HelloHelloHel

#include<stdio.h>intmain(){doublex=34.567;

printf("x=%f\n",x);

printf("x=%d\n",x);

printf("x=%d\n",(int)x);return0;}程序的實(shí)際運(yùn)行結(jié)果為x=34.567000x=1958505087x=34●顯然,這個(gè)程序中的第二個(gè)格式輸出語句輸出的結(jié)果是錯(cuò)誤的,這是因?yàn)樵诘诙€(gè)格式輸出語句中,格式說明符%d是基本整型格式說明符,而輸出項(xiàng)是雙精度型的數(shù)據(jù),它們是不匹配的。附加格式說明符-#include<stdio.h>intmain(){

inta=1234; floatf=123.456; charc[]="Hello,world!"; printf("%8d,%-8d\n",a,a); printf("%10.2f,%-10.1f\n",f,f); printf("%10.5s,%-10.3s\n",c,c); return0;}運(yùn)行結(jié)果:____1234,1234____123.46,123.5_____Hello,Hel

附加格式說明符0、+#include<stdio.h>intmain(){

inta=1234; floatf=123.456; printf("%08d\n",a); printf("%010.2f\n",f); printf("%0+8d\n",a); printf("%0+10.2f\n",f); return0;}運(yùn)行結(jié)果:00001234

0000123.46+0001234+000123.46附加格式說明符#、l#include<stdio.h>intmain(){

inta=123; longb=65536;

printf("%o,%#o,%X,%#X\n",a,a,a,a); printf("%d,%8ld\n",(short)b,b); return0;}運(yùn)行結(jié)果:173,0173,7B,0X7B0,___655360000

00

00

00

00

00010000

00

00

00

00

00

00scanf

(格式控制字符串,地址表列);按指定格式從鍵盤讀入數(shù)據(jù),存入地址表指定的存儲單元中,并按回車鍵結(jié)束返值:正常,返回輸入數(shù)據(jù)個(gè)數(shù)scanf("%d,%f",&a,&b);格式說明地址表列格式輸入函數(shù)scanf非格式字符scanf函數(shù)格式字符d以帶符號十進(jìn)制形式輸入整型數(shù)據(jù)o以八進(jìn)制無符號形式輸入(無前導(dǎo)0)x以十六進(jìn)制無符號形式輸入(無前導(dǎo)0x)c以字符形式輸入單個(gè)字符s輸入字符串,以非空字符開始,遇第一個(gè)空白字符結(jié)束f以小數(shù)形式輸入浮點(diǎn)數(shù)e以標(biāo)準(zhǔn)指數(shù)形式輸入scanf附加格式說明符修飾符功能lLhm*加在d、o、x前:輸入短整型加在d,o,x,u前,輸入長整型加在f,e前,輸入雙精度型指定輸入數(shù)據(jù)寬度,遇空格或不可轉(zhuǎn)換字符則結(jié)束抑制符,本輸入項(xiàng)在讀入后不賦給相應(yīng)的變量加在f、e前:輸入longdouble型scanf附加格式說明符常見錯(cuò)誤scanf("%d,%f\n",&a,&b);scanf("%d,%f",a,b);scanf("%7.2f",&a);scanf("%-5d",&b);輸入分隔符的指定#include<stdio.h>intmain(){ inta,b; printf("Pleaseinputaandb:"); scanf("%d%d",&a,&b); printf("a=%d,b=%d,a+b=%d\n",a,b,a+b); return0;}Pleaseinputaandb:a=12,b=34,a+b=461234↙遇空格、TAB、回車鍵時(shí)結(jié)束或12↙34↙輸入分隔符的指定#include<stdio.h>intmain(){ inta,b; printf("Pleaseinputaandb:"); scanf("%2d%2d",&a,&b); printf("a=%d,b=%d,a+b=%d\n",a,b,a+b); return0;}遇寬度時(shí)結(jié)束Pleaseinputaandb:a=12,b=34,a+b=461234↙輸入分隔符的指定#include<stdio.h>intmain(){ inta,b; printf("Pleaseinputaandb:"); scanf("%d,%d",&a,&b); printf("a=%d,b=%d,a+b=%d\n",a,b,a+b); return0;}這里逗號需要原樣輸入Pleaseinputaandb:a=12,b=34,a+b=4612,34↙輸入結(jié)束符#include<stdio.h>intmain(){ inta,b; printf("Pleaseinputaandb:"); scanf("%2d%2d",&a,&b); printf("a=%d,b=%d,a+b=%d\n",a,b,a+b); return0;}遇非法輸入時(shí)結(jié)束Pleaseinputaandb:a=12,b=3,a+b=15123a↙附加格式說明符#include<stdio.h>intmain(){ inta,b; printf("Pleaseinputaandb:"); scanf("%2d%*2d%2d",&a,&b); printf("a=%d,b=%d,a+b=%d\n",a,b,a+b); return0;}Pleaseinputaandb:a=12,b=56,a+b=68123456↙跳過一個(gè)輸入項(xiàng)#include<stdio.h>intmain(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b); return0;}問題1:要求輸出結(jié)果為a=12,b=34,用戶應(yīng)該如何輸入數(shù)據(jù)?1234↙#include<stdio.h>intmain(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b); return0;}問題2:當(dāng)限定用戶輸入數(shù)據(jù)的格式為:12,34↙時(shí),應(yīng)修改程序中的哪條語句?怎樣修改?scanf("%d,%d",&a,&b);#include<stdio.h>intmain(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b); return0;}問題3:語句scanf("%d%d",&a,&b);修改為scanf("a=%d,b=%d",&a,&b);

時(shí),用戶應(yīng)該如何輸入數(shù)據(jù)?a=12,b=34↙scanf("a=%d,b=%d",&a,&b);#include<stdio.h>intmain(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b); return0;}問題4:限定用戶輸入數(shù)據(jù)為以下格式為1234↙

,且要求程序輸出結(jié)果為a=12,b=34時(shí),應(yīng)修改程序中的哪條語句?怎樣修改?scanf("%2d%2d",&a,&b);#include<stdio.h>intmain(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b); return0;}問題5:限定用戶輸入數(shù)據(jù)的格式為12↙34↙,同時(shí)要求程序輸出結(jié)果為a="12",b="34"。應(yīng)修改程序中的哪條語句?怎樣修改?scanf("%d%d",&a,&b);printf("a=\"%d\",b=\"%d\"\n",a,b);字符輸入輸出函數(shù)字符輸出函數(shù)putchar(ch)輸出一個(gè)字符ch字符輸入函數(shù)getchar()無參數(shù)函數(shù)值為從輸入設(shè)備接收的字符#include<stdio.h>intmain(){

charch; printf("PressakeyandthenpressEnter:"); ch=getchar(); printf("Youpressed"); putchar(ch); putchar('\n'); return0;}運(yùn)行程序PressakeyandthenpressEnter:Youpressed_A↙A#include<stdio.h>intmain(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b); return0;}問題6:設(shè)計(jì)程序使得用戶可以以任意字符(回車、空格、制表符、逗號、其它)作為分隔符進(jìn)行數(shù)據(jù)的輸入scanf("%d%*c%d",&a,&b);C格式符存在的問題及其解決#include<stdio.h>intmain(){intdata1,data2,sum;charop;printf("Pleaseentertheexpressiondata1+data2\n");scanf("%d%c%d",&data1,&op,&data2);printf("%d%c%d=%d\n",data1,op,data2, data1+data2);return0;}第1次測試Pleaseentertheexpressiondata1+data212+3↙12-858993460=-858993448說明:用"%c"格式符時(shí),空格和轉(zhuǎn)義字符作為有效字符輸入C格式符存在的問題及其解決#include<stdio.h>intmain(){intdata1,data2,sum;charop;printf("Pleaseentertheexpressiondata1+data2\n");scanf("%d%c%d",&data1,&op,&data2);printf("%d%c%d=%d\n",data1,op,data2, data1+data2);return0;}第2次測試Pleaseentertheexpressiondata1+data2123↙123=15C格式符存在的問題及其解決#include<stdio.h>intmain(){intdata1,data2,sum;charop;printf("Pleaseentertheexpressiondata1+data2\n");scanf("%d%c%d",&data1,&op,&data2);printf("%d%c%d=%d\n",data1,op,data2, data1+data2);return0;}第3次測試Pleaseentertheexpressiondata1+data212+3↙12+3=15#include<stdio.h>intmain(){inta;charb;floatc;printf("Pleaseinputaninteger:");scanf("%d",&a);printf("integer:%d\n",a);printf("Pleaseinputacharacter:");scanf("%c",&b);printf("character:%c\n",b);printf("Pleaseinputafloatnumber:");scanf("%f",&c);printf("float:%f\n",c);return0;}希望得到的運(yùn)行結(jié)果Pleaseinputaninteger:integer:12Pleaseinputacharacter:character:aPleaseinputafloatnumber:floatnumber:3.50000012↙a↙3.5↙#include<stdio.h>intmain(){inta;charb;floatc;printf("Pleaseinputaninteger:");scanf("%d",&a);printf("integer:%d\n",a);printf("Pleaseinputacharacter:");scanf("%c",&b);printf("character:%c\n",b);printf("Pleaseinputafloatnumber:");scanf("%f",&c);printf("float:%f\n",c);return0;}結(jié)果好像很奇怪嘛!Pleaseinputaninteger:integer:12Pleaseinputacharacter:Pleaseinputafloatnumber:floatnumber:3.50000012↙character:3.5↙#include<stdio.h>intmain(){ inta; charb; floatc; printf("Pleaseinputaninteger:"); scanf("%d",&a); printf("integer:%d\n",a); printf("Pleaseinputacharacter:"); scanf("%c",&b); printf("character:%d\n",b); printf("Pleaseinputafloatnumber:"); scanf("%f",&c); printf("float:%f\n",c); return0;}結(jié)果好像很奇怪嘛!Pleaseinputaninteger:integer:12Pleaseinputacharacter:Pleaseinputafloatnumber:floatnumber:3.50000012↙character:10輸入函數(shù)留下的"垃圾"3.5↙#include<stdio.h>intmain(){ inta; charb; floatc; printf("Pleaseinputaninteger:"); scanf("%d",&a); printf("integer:%d\n",a); printf("Pleaseinputacharacter:"); getchar();/*第1種解決方案,吸收掉前面輸入數(shù)據(jù)后鍵入的回車符*/ scanf("%c",&b); printf("character:%c\n",b); printf("Pleaseinputafloatnumber:"); scanf("%f",&c); printf("float:%f\n",c); return0;}希望得到的運(yùn)行結(jié)果Pleaseinputaninteger:integer:12Pleaseinputacharacter

:character:aPleaseinputafloatnumber:floatnumber:3.50000012↙a↙3.5↙#include<stdio.h>intmain(){ inta; charb; floatc; printf("Pleaseinputaninteger:"); scanf("%d",&a); printf("integer:%d\n",a); printf("Pleaseinputacharacter:"); scanf("%1s",&b);/*第2種解決方案*/ printf("character:%c\n",b); printf("Pleaseinputafloatnumber:"); scanf("%f",&c); printf("float:%f\n",c); return0;}實(shí)際運(yùn)行結(jié)果Pleaseinputaninteger:integer:12Pleaseinputacharacter

:character:aPleaseinputafloatnumber:floatnumber:3.50000012↙a↙3.5↙#include<stdio.h>intmain(){ inta; charb; floatc; printf("Pleaseinputaninteger:"); scanf("%d",&a); printf("integer:%d\n",a); printf("Pleaseinputacharacter:"); scanf("%c",&b);/*第3種解決方案*/ printf("character:%c\n",b); printf("Pleaseinputafloatnumber:"); scanf("%f",&c); printf("float:%f\n",c); return0;}#include<stdio.h>intmain(){ inta; charb; floatc; printf("Pleaseinputaninteger:"); scanf("%d",&a); printf("integer:%d\n",a); printf("Pleaseinputacharacter:"); scanf("%*c%c",&b);/*第4種解決方案*/ printf("character:%c\n",b); printf("Pleaseinputafloatnumber:"); scanf("%f",&c); printf("float:%f\n",c); return0;}#include<stdio.h>intmain(){ inta; charb; floatc; printf("Pleaseinputaninteger:"); scanf("%d",&a); printf("integer:%d\n",a);

fflush(stdin);/*第5種解決方案*/ printf("Pleaseinputacharacter:"); scanf("%c",&b); printf("character:%c\n",b); printf("Pleaseinputafloatnumber:"); scanf("%f",&c); printf("float:%f\n",c); return0;}解決方法:(1)用getchar()清除(2)用"%1s"來限制(3)用格式串中的空格來"吃掉"(4)用"%*c"來"吃掉"(5)用函數(shù)fflush(stdin)清除全部剩余內(nèi)容C格式符存在的問題及其解決再回頭來看看前面的例子,以任意分隔符輸入加法算式,可能嗎?#include<stdio.h>intmain(){ intdata1,data2; charop; printf("Pleaseentertheexpressiondata1+data2\n"); printf("%d%c%d=%d\n",data1,op,data2,data1+data2); return0;}scanf("%d%1s%d",&data1,&op,&data2);12+3↙12+3↙12↙+↙3↙數(shù)據(jù)的非格式化輸入在輸入字符數(shù)據(jù)時(shí),scanf函數(shù)有個(gè)美中不足的地方:scanf函數(shù)必須等到用戶敲回車鍵后才返回程序有時(shí)并不想顯示所輸入的字符,scanf函數(shù)也做不到。下表列出了一些常用的和輸入字符數(shù)據(jù)有關(guān)的庫函數(shù):庫函數(shù)名功能頭文件getchar接收一字符輸入stdio.hgetche接收一字符輸入conio.hgetch接收一字符輸入conio.hgetche函數(shù)原型:int

getche(void);getche函數(shù)的功能與getchar功能相同。唯一的差別是:只要用戶按下一個(gè)鍵,getche就立即返回(不會等待用戶敲回車),并將用戶輸入的字符回顯在屏幕上,getche的返回值就是用戶所按鍵的ASCII碼。getch函數(shù)原型:int

getch

溫馨提示

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

評論

0/150

提交評論