第3章简单的C程序设计_第1页
第3章简单的C程序设计_第2页
第3章简单的C程序设计_第3页
第3章简单的C程序设计_第4页
第3章简单的C程序设计_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章键盘输入与屏幕输出内容提要C语句的分类字符输入输出函数格式输入输出函数C语言中的语句空语句;复合语句{t=x;x=y;y=t;}控制语句if()—else、for()、while()、do—whilecontinue、break、switch、goto、return函数调用语句由一次函数调用加一个分号构成printf(““);C语言中的语句变量声明语句intx,y;表达式语句i++;i=i+1;A=5我只是个表达式呀!A=5;我已经成为表达式语句了!复合语句在什么情况下使用复合语句?条件语句和循环语句在语法上只允许带一条语句当分支和循环中需要进行多项操作时{

t=x;x=y;y=t;}被当作一条语句来处理例3.1main(){

inta=0; {

inta=1;

printf("In:a=%d\n",a); }

printf("Out:a=%d\n",a);}In:a=1Out:a=0空语句空语句有什么作用?什么也不做,只表示语句的存在自顶向下程序设计时用在那些未完成的模块中延时用的空循环main(){DataInitialze();DataProcess();DataOutput();}DataInitialze(){;}字符输入输出操作的实现字符标准输入字符标准输出

C语言的输入、输出处理采用相应的函数实现,程序中需要将相应的文件头部加载。

stdio.h是标准输入输出库,是C语言默认链接的库文件。StdI/O:标准输入standardinput与标准输出output在计算机终端键盘上输入数据。在终端显示器上输出数据。例如:#include<stdio.h>字符输出函数putchar函数说明intputchar(c);输出一个字符到标准输出设备参数说明c

要输出的字符,是一个字符变量或常量,也可以是一个转义字符返回值▲该函数不能输出字符串若成功,返回输出字符的ASCII码值若失败,返回EOF

(EndofFile)注意:

putchar()必须带输出项,输出项可以是字符型常量、变量、表达式,但只能是单个字符而不能是字符串。函数putchar举例#include<stdio.h>

main()

chara,b,c;

a=‘B’;b=‘O’;c=‘Y’;

putchar(a);putchar(b);putchar(c);

putchar(‘\n’);

putchar(‘\101’);putchar(‘\\’);putchar(‘\x61’);

}程序的运行结果是∶

BOY

A\a字符输入函数getchar函数说明intgetchar(void);从标准输入设备输入一个字符▲该函数不能输入字符串需要输入回车后,函数才返回参数说明无参数返回值若成功,返回输入字符的ASCII码值若失败,返回EOF

(EndofFile)注意:(1)▲程序执行时,执行到该函数将暂停程序的运行等待从键盘输入数据(2)只有在按“回车”键之后输入的字符才有效.(3)此函数只接受一个字符,而非一串字符。字符可以是回车、tab键等特殊字符;例中若输入abcde,该函数也只接受第一个字符a。(4)getchar函数得到的字符可以赋给一个字符变量或整型变量,也可以不赋给任何变量而是作为表达式的一部分。函数getchar举例#include"stdio.h" main(){charch;printf("Pleaseinputtwocharacter:");ch=getchar(); /*输入1个字符并赋给ch*/putchar(ch);putchar('\n');putchar(getchar()); /*输入一个字符并输出*/putchar('\n');} Pleaseinputtwocharacters:ab↙ab该语句的作用是什么?格式输出函数格式输出函数printf(格式控制字符串,输出项表列);输出若干个任意类型的数据printf("a=%db=%d",a,b);格式说明普通字符输出结果

a=3b=4输出列表普通字符的输出普通字符即需要原样输出的字符。printf("a=%db=%d",a,b);普通字符设a,b分别为3和4,则有:a=3b=4输出列表举例“输出表列”是需要输出的一些数据,可以是表达式。可以有多项,也可以没有。printf("a=%da+b=%d",a,a+b);输出表列printf(“输出提示信息!");格式转换说明符格式说明是从“%”开始到其后第一个格式说明符。格式转换说明符:⑴d格式符⑵o格式符⑶x格式符⑷u格式符⑸c格式符⑹s格式符⑺f格式符⑻e格式符⑼g格式符相同的存储内容,不同类型其存储长度与格式不同对信息的解读不同。选择合适的数据类型!d格式符功能以带符号的十进制整形格式输出整数。格式%d按整形数据的实际长度输出%ld输出长整形数据a=3;b=24;printf("%d_%d",a,b);

3_24%md%0md按长度为m输出整形数据a=123;b=12345;printf("%4d,%05d,%d",a,a,b);

_123,00123,12345c格式符功能用来输出一个字符。格式%c%mccharc='a‘;printf("%c,%3c",c,c);a,△△a注:上行的%c和c的意义不同。其值在0—255内的整数,可用c或d输出。

intc=65;printf("%c,%d",c,c);

A,65一个字符,可用c或d输出。

charc='a‘;printf("%c,%d",c,c);

a,97s格式符输出字符串,直到遇到字符串结束标识\0为止。功能格式%s按字符串的实际长度输出。%ms输出的字符串占m列。%-ms输出的字符串占m列。%m.ns输出的字符串占m列%-m.ns输出的字符串占m列。printf("%s","china");chinaprintf("%3s,%7s","china","china");china,△△china1.当字符串实际长度>m,则按实际长度输出。2.当字符串实际长度≤m。则左端补空格。s格式符printf("%3s,%-7s","china","china");china,china△△1.当字符串实际长度>m,则按实际长度输出。2.当字符串实际长度≤m。则右端补空格。printf("%7.2s","china");△△△△△ch1.左端输出m-n个空格,右端输出字符串左n个字符。2.当字符串实际长度≤n。则n为字符串长度。s格式符printf("%-7.2s,%.4s","china","china");ch△△△△△,chin1.右端输出m-n个空格,左端输出字符串左n个字符。2.当字符串实际长度≤n。则n为字符串长度。3.当m没有时自动地m=n=4。f格式符以小数形式输出实数。功能格式%f以系统指定的形式输出实数。floatx,y;x=111111.111;y=222222.222;printf("%f",x+y);

333333.3281251.系统自动指定数据宽度,整数部分全部输出,小数部分输出6位。2.单精度数的有效位数为7位;双精度数用%lf输出时,有效位数为16位,小数位为6位。f格式符以小数形式输出实数。功能格式%m.nf按自定义格式输出实数。

floatx;x=123.456;printf("%f,%10f,%10.2f,%.2f",x,x,x,x);

123.456001,123.456001,

△△△△123.46,123.461.输出数据宽度为m,输出n位小数,n+1位小数四舍五入;实际小数位<n,则左端填0占位。2.输出m-n-1位整数。实际整数位<m-n-1,前端填空格占位,否则,按整数实际长度输出。%-m.nf按自定义格式输出实数。f格式符以小数形式输出实数。功能格式%m.nf按自定义格式输出实数。%-m.nf按自定义格式输出实数。floatx,y;x=123.456;printf("%-9.2f,%f",f,f);

123.46△△△,123.4559941.输出数据宽度为m,输出n位小数,n+1位小数四舍五入;实际小数位<n,则左端填0占位。2.输出m-n-1位整数。前端按整数实际长度输出,

当实际整数位<m-n-1,小数后端填空占位。e格式符以标准指数形式输出单、双精度实数。功能格式%e用系统指定的标准格式输出。printf(“%e”,123.456);1.234560e+0021.23456*1021.输出总宽度为13位。其中:数值位为8位,指数位为5位。2.数值部分为0,或小数点前必须且只有一位非0数字。e格式符以标准指数形式输出单、双精度实数。功能格式%m.ne用自定义格式输出。

floatf=123.456;printf("%e,%10e,%10.2e,%.2e",f,f,f,f);

1.234560e+002,1.234560e+002,△1.23e+002,1.23e+0021.输出总宽度为m位,数值部分小数为n位。2.当m>n+7,则在数字部分前加m-n-7个空格,否则按实际长度输出。e格式符以标准指数形式输出单、双精度实数。功能格式%-m.ne用自定义格式输出。

floatf=123.456;printf("%-10.2e,%e",f,f);

1.23e+002△,1.234560e+0021.输出总宽度为m位,数值部分小数为n位。2.当m>n+7,则在指数部分后加m-n-7个空格。d以带符号十进制整数输出o以八进制无符号整数输出(无前导0)x以十六进制无符号整数输出(无前导0x)u以十进制无符号整数输出c以字符形式输出单个字符s输出一个字符串f以小数形式输出浮点数(6位小数)e以标准指数形式输出(6位小数)g选用%f,%e中输出宽度较小的一种格式printf格式字符l

长整型整数,加在d、o、x、u前Llongdouble型数,加在f、e、g前m表示数据占用的最小宽度数据宽度大于m,按实际宽度输出数据宽度小于m时,补空格n对实数表示输出n位小数对字符串表示最多输出的字符个数-改变输出内容的对齐方式缺省为右对齐printf附加格式说明符printf函数使用说明1.有些系统要求格式字符要用小写字母。printf("%d,%f",a,f);√printf("%D,%F",a,f);×2.不同的系统实现输出时,输出结果会有小的差别。例如:e格式输出时,指数部分有5位(e+002)和4位(e+02)之分;数值部分有效位数有5位小数和6位小数之分。printf函数使用说明3.如输出字符%,则在“格式控制”字符串重用连续的两个%字符。printf("%f%%\n",1.0/3);输出:0.333333%4.可以在“格式控制”字符串内包含“转义字符”。例如:\n,\t,\b,\r,\f等。printf("%d,%f\n",a,f);转义字符转义字符功能\n换行(回车换行)\t横向跳格(跳向下一输出区)(8列)\v竖向跳格\b后退一格\r回车(回本行第一列)\f走纸换页\\输出反斜杠字符\ˊ输出单引号字符\ddd(d为数据)1到3位8进制数所代表的字符\xhh(x为数据)1到2位16进制数所代表的字符printf函数举例#include<stdio.h>main(){inta=29;longb=123456;doublex=123.456;charc=':';printf("1.a=%d,a=%4d,",a,a);printf("a=%-4d,a=%04d\n",a,a);printf("2.a=%o,a=%04o,",a,a);printf("a=%x,a=0x%x\n",a,a);printf("3.b=%ld,b=%8ld\n",b,b);printf("4.x=%f,x=%.2f",x,x);printf("x=%10.2f,x=%-10.2f\n",x,x);1.a=29,a=29,a=29,a=00292.a=35,a=0035,a=1d,a=0x1d3.b=123456,b=1234564.x=123.456001,x=123.46,x=123.46,x=123.46printf("5.x=%e,x=%.2e,x=%g\n",x,x,x);printf("6.%c%8s%c\n",c,"howareyou",c);printf("7.%c%15s%c\n",c,"howareyou",c);printf("8.%c%+10.3s%c\n",c,"howareyou",c);printf("9.%c%-10.3s%c\n",c,"howareyou",c);}5.x=1.234560e+02,x=1.23e+02,x=123.4560016.:howareyou:7.:howareyou:8.:how:9.:how:#include<stdio.h>main(){ floatf1=100.15799,f2=12.55,f3=1.7; intn1=123,n2=45,n3=6;

printf("printfWITHOUTwidthorprecision specifications:\n"); printf("%f\n%f\n%f\n",f1,f2,f3); printf("%d\n%d\n%d\n",n1,n2,n3); printf("printfWITHwidthandprecision specifications:\n"); printf("%5.2f\n%6.1f\n%3.0f\n",f1,f2,f3); printf("%5d\n%6d\n%3d\n\n",n1,n2,n3);}例3.8格式输入函数scanf功能:

该函数可按指定的格式输入多个不同类型的数据,并将输入数据存入地址参数所指定的地址单元。格式:scanf(格式控制,地址表列)格式控制:与printf的格式控制含义相同。输出表列:是由若干个地址组成的表列,可以是地址,或字符串首地址。&:取地址符,单目运算符格式:&变量名双目运算符,位与运算函数scanf使用说明“地址列表”中是变量的地址,而非变量scanf("%d",&i);关于输入格式格式字符串中的普通字符须按相应位置输入除字符型(%c)外,输入项之间用一个或多个空白字符分隔,包括空格、回车、制表符如规定了最大宽度,且输入数据超出宽度,则按宽度截取数据scanf的格式控制格式说明符:⑴d格式符⑵o格式符⑶x格式符⑷c格式符⑸s格式符⑹f格式符⑺e格式符scanf附加的格式说明字符:

lh域宽*scanf附加的格式说明字符字符说明l用于输入长整形数据(可用%ld、%lo、%lx),以及double型数据(用%lf或%le)h用于输入短整形数据(可用%hd、%ho、%hx)域宽(为以正整数)

指定输入数据所占宽度(列数)*表示本输入项在读入后,不赋给相应的变量。d格式符功能用来输入十进制整数。格式%d%md%*md①全用%d格式符:

inta1,a2,a3;scanf("%d%d%d",&a1,&a2,&a3);

输入格式:121231234结果:a1=12a2=123a3=1234注:数据必须用至少一个空格分开。d格式符功能用来输入十进制整数。格式%d%md%*md②全用%md、%*md格式符:

inta1,a2,a3;scanf("%2d%*3d%3d",&a1,&a2);

输入格式:1234567890结果:a1=12a2=678a3=无注:当指定域宽时,数据不用逗号或空格分开。后面参数是地址列表,不是变量列表。c格式符功能用来输入单个字符。注意输入格式!格式%c%mc%*mc①全用%c格式符:

chara1,a2,a3;scanf("%c%c%c",&a1,&a2,&a3);

输入格式:abc结果:a1='a'a2='b'a3='c'注:数据一定不要用逗号或空格分开。c格式符功能用来输入单个字符。注意输入格式!格式%c%mc%*mc②全用%mc、%*mc格式符:

chara1,a2,a3;scanf("%3c%*3c%3c",&a1,&a2);abcdefghijklmnopq结果:a1='a'a2='g'a3=无注:数据输入时一定不要用空格分开。f格式符功能用来以小数形式输入十进制实数。格式%f%mf%*mf①全用%f格式符:

floata1,a2,a3;scanf("%f%f%f",&a1,&a2,&a3);12.345123.4561234.567结果:a1=12.345a2=123.456a3=1234.567注:数据必须只能用至少一个空格分开。f格式符功能用来以小数形式输入十进制实数。格式%f%mf%*mf②全用%mf、%*mf格式符:——要慎用!

inta1,a2,a3;scanf("%5f%*4f%5f",&a1,&a2);12.345.678.9012345结果:a1=12.34a2=8.901a3=无注:浮点类型数据输入一般不要指定域宽!输入输出操作中常见的错误分析⑴格式化输入输出的数据类型与所用格式说明符不一致。floatf=123.456;scanf("%d",&f);printf("%d\n",f);输入输出操作中常见的错误分析⑵用scanf函数输入数据时,变量前忘记使用地址符&。intf;scanf("%d",f);×输入输出操作中常见的错误分析⑶用scanf函数输入数据时,数据的输入形式与格式要求不符。inta1,a2;scanf("%d,%d",&a1,&a2);input:34×3,4√scanf("%d%d",&a1,&a2);input:34√3,4×输入输出操作中常见的错误分析⑷若想在屏幕上输出一行提示信息,然后输入数据,下列语句错误。inta1,a2;scanf("inputa1,a2:%d,%d",&a1,&a2);×可采用下列语句:printf("inputa1,a2:");scanf("%d,%d",&a1,&a2);注:在scanf函数的格式化控制字符串中一般不要包括普通字符,也不要包括“\n”等转义控制符,所有输出信息必须用printf函数输出!输入输出操作中常见的错误分析⑸在输入数据时,遇以下情况时该数据认为本输入结束。①遇空格,或按“回车”或“跳”(TAB键)②遇宽度结束,如%3d,只取3列。

③遇非法输入。(6)在需要输入多个数据时,应使用一条scanf语句将多个输入合并在一起输入,尽量避免scanf语句的多次连续使用而出现越界错误。格式输入函数常见错误scanf("%d,%f\n”,&a,&b);scanf("%d,%f”,a,b);scanf("%7.2f",&a);#include<stdio.h>main(){

inta,b; printf("Pleaseinputaandb:"); scanf("%d%d",&a,&b); printf("a=%d,b=%d,a+b=%d\n",a,b,a+b);}Pleaseinputaandb:a=12,b=34,a+b=461234↙例遇空格、TAB键时结束#include<stdio.h>main(){

inta,b; printf("Pleaseinputaandb:"); scanf("%d%d",&a,&b); printf("a=%d,b=%d,a+b=%d\n",a,b,a+b);}Pleaseinputaandb:a=12,b=34,a+b=4612↙例遇回车键时结束34↙#include<stdio.h>main(){

inta,b; printf("Pleaseinputaandb:"); scanf("%2d%2d",&a,&b); printf("a=%d,b=%d,a+b=%d\n",a,b,a+b);}Pleaseinputaandb:a=12,b=34,a+b=461234↙例遇宽度时结束#include<stdio.h>main(){

inta,b; printf("Pleaseinputaandb:"); scanf("%2d%2d",&a,&b); printf("a=%d,b=%d,a+b=%d\n",a,b,a+b);}Pleaseinputaandb:a=12,b=3,a+b=15123a↙例遇非法输入时结束#include<stdio.h>main(){

inta,b; printf("Pleaseinputaandb:"); scanf("%d,%d",&a,&b); printf("a=%d,b=%d,a+b=%d\n",a,b,a+b);}Pleaseinputaandb:a=12,b=34,a+b=4612,34↙例这里逗号需要原样输入#include<stdio.h>main(){

inta,b; printf("Pleaseinputaandb:"); scanf("%2d%*2d%2d",&a,&b); printf("a=%d,b=%d,a+b=%d\n",a,b,a+b);}Pleaseinputaandb:a=12,b=56,a+b=68123456↙例3.9跳过一个输入项#include<stdio.h>main(){

inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);}问题1:当要求程序输出结果为

a=12,b=34时,用户应该如何输入数据?

1234↙输入数据的格式控制——例3.10#include<stdio.h>main(){

inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);}问题2:当限定用户输入数据以逗号为分隔符,即输入数据格式为:12,34↙时,应修改程序中的哪条语句?怎样修改?scanf("%d,%d",&a,&b);

输入数据的格式控制——例3.10#include<stdio.h>main(){

inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);}问题3:语句scanf("%d%d",&a,&b);修改为scanf("a=%d,b=%d",&a,&b);时,用户应该如何输入数据?a=12,b=34↙输入数据的格式控制——例3.10#include<stdio.h>main(){

inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);}

问题4:限定用户输入数据为以下格式为

1234↙

同时要求程序输出结果为a=12,b=34scanf("%2d%2d",&a,&b);输入数据的格式控制——例3.10#include<stdio.h>main(){

inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);}

问题5:限定用户输入数据为以下格式为12↙34↙

同时要求程序输出结果为a="12",b="34"scanf("%d%d",&a,&b);printf("a=\"%d\",b=\"%d\"\n",a,b);输入数据的格式控制——例3.10#include<stdio.h>main(){

inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b);}问题6:设计程序使得用户可以以任意字符(回车、空格、制表符、逗号、其它)作为分隔符进行数据的输入scanf("%d%*c%d",&a,&b);

输入数据的格式控制——例3.10#include<stdio.h>main(){

intdata1,data2,sum;

charop;

printf("Pleaseentertheexpression data1+data2\n"); scanf("%d%c%d",&data1,&op,&data2); printf("%d%c%d=%d\n",data1,op,data2,data1+data2);}Pleaseentertheexpressiondata1+data2

第1次测试12+3↙123129=3141C格式符存在的问题及其解决—例3.11#include<stdio.h>main(){

intdata1,data2,sum;

charop;

printf("Pleaseentertheexpression data1+data2\n"); scanf("%d%c%d",&data1,&op,&data2); printf("%d%c%d=%d\n",data1,op,data2,data1+data2);}Pleaseentertheexpressiondata1+data2

第2次测试123↙123=5C格式符存在的问题及其解决—例3.11#include<stdio.h>main(){

intdata1,data2,sum;

charop;

printf("Pleaseentertheexpression data1+data2\n"); scanf("%d%c%d",&data1,&op,&data2); printf("%d%c%d=%d\n",data1,op,data2,data1+data2);}Pleaseentertheexpressiondata1+data2

第3次测试12+3↙12+3=5C格式符存在的问题及其解决—例3.11#include<stdio.h>main(){

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); }Pleaseinputaninteger:希望得到的运行结果12↙Pleaseinputancharacter

:a↙Pleaseinputafloatnumber:3.5↙integer:12character

:afloatnumber:3.500000C格式符存在的问题及其解决—例3.12#include<stdio.h>main(){

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); }Pleaseinputaninteger:结果好像很奇怪嘛!12↙Pleaseinputancharacter

:a↙Pleaseinputafloatnumber:3.5↙integer:12floatnumber:3.500000C格式符存在的问题及其解决—例3.12#include<stdio.h>main(){

inta;

charb;

floatc;printf("Pleaseinputaninteger:");scanf("%d",&a);printf("integer:%d\n",a);prin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论