c语言第4章顺序结构程序设计_第1页
c语言第4章顺序结构程序设计_第2页
c语言第4章顺序结构程序设计_第3页
c语言第4章顺序结构程序设计_第4页
c语言第4章顺序结构程序设计_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

第4章

顺序结构程序设计C语言语句概述数据输入输出的概念字符数据的输入输出格式数据的输入输出应用实例本章小结主要内容C语言语句概述C程序的函数执行部分是由语句组成的,程序的功能就是由执行语句来实现的。一个基本的语句以分号;结尾。C程序的执行语句包括以下:声明语句表达式语句控制语句复合语句空语句函数调用语句。变量声明语句int

x,y;表达式语句(一个合法的表达式加上分号)i++;i=i+1;函数调用语句max(x,y);复合语句复合语句:用{…}括起来的一组语句一般形式:

{[数据说明部分;]

执行语句部分;

}说明:语法上和单一语句相同,在任何使用单个语句的地方都可以使用复合语句。在什么情况下使用复合语句?条件语句和循环语句在语法上只允许带一条语句当分支和循环中需要进行多项操作时此处无分号此处有分号#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;}//编译后能通过吗?复合语句●在复合语句的嵌套结构中,一个复合语句内所进行的说明只适合于本层中该说明语句以后的部分(包括其内层的复合语句),在该复合语句外不起作用。#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);}●在复合语句的嵌套结构中,如果在内层与外层作了相同的说明,则按照局部优先的原则,内层复合语句中的执行结果不带回到外层。空语句空语句有什么作用?什么也不做,只表示语句的存在自顶向下程序设计时用在那些未完成的模块中延时用的空循环intmain(){

DataInitialze();

DataProcess();

DataOutput(); return0;}void

DataInitialze(){

;}让程序暂停的语句#include<stdio.h>#include<stdlib.h>intmain(){

printf("\nHello\n");

system("pause"); return0;}此时,按下任意键后,屏幕显示如下:顺序结构程序设计的基本操作如何在程序中给变量赋值?赋值语句赋值表达式;如何进行数据的输入输出?输入:从标准输入设备上输入数据到计算机内存输出:将计算机内存中的数据送到标准输出设备C语言中输入输出操作通过调用标准库函数来实现#include"stdio.h"在当前目录和TC指定的目录中找该文件#include<stdio.h>在由TC指定的文件目录中找该文件数据输入输出的概念所谓输入输出是以计算机为主体而言的。数据从外存或外设(如键盘、磁盘文件等)进入或读入计算机内存(变量等为代表)为数据输入;相反,数据从计算机内存取出或写出到外存或外部设备(如显示器、磁盘文件等)为数据输出。如图4.1所示。图4.1数据输入输出示意图数据的输入与输出C语言提供了一组输入输出库函数(这些都是函数调用语句,而并非C语言本身的语句。):对标准输入设备和标准输出设备读写。printf(写格式化的数据)scanf(读格式化的数据)getchar(输入字符)putchar(输出字符)gets(输入字符串)puts(输出字符串)格式输出函数printfprintf

(格式控制字符串,输出项表列);输出若干个任意类型的数printf("a=%db=%f",a,b);函数名格式说明:%[修饰符]格式字符普通字符:原样输出输出表列:要输出的数据(可以没有,多个时以","分隔)printf函数格式字符d,i十进制整数x,X十六进制无符号整数o八进制无符号整数u不带符号十进制整数c单一字符s字符串e,E指数形式浮点小数f小数形式浮点小数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("%%");%//阅读程序,写出运行结果#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格式输出函数printfprintf附加格式说明符修饰符功能m.n-+0#l输出数据域宽,数据长度<m,左补空格;否则按实际输出对实数,指定小数点后位数(四舍五入)对字符串,指定实际输出位数输出数据在域内左对齐(缺省右对齐)指定在有符号数的正数前显示正号(+)输出数值时指定左面不使用的空位置自动填0在八进制和十六进制数前显示前导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;}运行结果:____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;}运行结果: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;}程序的实际运行结果为x=34.567000x=1958505087x=34●显然,这个程序中的第二个格式输出语句输出的结果是错误的,这是因为在第二个格式输出语句中,格式说明符%d是基本整型格式说明符,而输出项是双精度型的数据,它们是不匹配的。附加格式说明符-#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;}运行结果:____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;}运行结果: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;}运行结果:173,0173,7B,0X7B0,___655360000

00

00

00

00

00010000

00

00

00

00

00

00scanf

(格式控制字符串,地址表列);按指定格式从键盘读入数据,存入地址表指定的存储单元中,并按回车键结束返值:正常,返回输入数据个数scanf("%d,%f",&a,&b);格式说明地址表列格式输入函数scanf非格式字符scanf函数格式字符d以带符号十进制形式输入整型数据o以八进制无符号形式输入(无前导0)x以十六进制无符号形式输入(无前导0x)c以字符形式输入单个字符s输入字符串,以非空字符开始,遇第一个空白字符结束f以小数形式输入浮点数e以标准指数形式输入scanf附加格式说明符修饰符功能lLhm*加在d、o、x前:输入短整型加在d,o,x,u前,输入长整型加在f,e前,输入双精度型指定输入数据宽度,遇空格或不可转换字符则结束抑制符,本输入项在读入后不赋给相应的变量加在f、e前:输入longdouble型scanf附加格式说明符常见错误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、回车键时结束或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;}遇宽度时结束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↙输入结束符#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;}遇非法输入时结束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↙跳过一个输入项#include<stdio.h>intmain(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b); return0;}问题1:要求输出结果为a=12,b=34,用户应该如何输入数据?1234↙#include<stdio.h>intmain(){ inta,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b); return0;}问题2:当限定用户输入数据的格式为:12,34↙时,应修改程序中的哪条语句?怎样修改?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);

时,用户应该如何输入数据?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:限定用户输入数据为以下格式为1234↙

,且要求程序输出结果为a=12,b=34时,应修改程序中的哪条语句?怎样修改?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:限定用户输入数据的格式为12↙34↙,同时要求程序输出结果为a="12",b="34"。应修改程序中的哪条语句?怎样修改?scanf("%d%d",&a,&b);printf("a=\"%d\",b=\"%d\"\n",a,b);字符输入输出函数字符输出函数putchar(ch)输出一个字符ch字符输入函数getchar()无参数函数值为从输入设备接收的字符#include<stdio.h>intmain(){

charch; printf("PressakeyandthenpressEnter:"); ch=getchar(); printf("Youpressed"); putchar(ch); putchar('\n'); return0;}运行程序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:设计程序使得用户可以以任意字符(回车、空格、制表符、逗号、其它)作为分隔符进行数据的输入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"格式符时,空格和转义字符作为有效字符输入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;}希望得到的运行结果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;}结果好像很奇怪嘛!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;}结果好像很奇怪嘛!Pleaseinputaninteger:integer:12Pleaseinputacharacter:Pleaseinputafloatnumber:floatnumber:3.50000012↙character:10输入函数留下的"垃圾"3.5↙#include<stdio.h>intmain(){ inta; charb; floatc; printf("Pleaseinputaninteger:"); scanf("%d",&a); printf("integer:%d\n",a); printf("Pleaseinputacharacter:"); getchar();/*第1种解决方案,吸收掉前面输入数据后键入的回车符*/ scanf("%c",&b); printf("character:%c\n",b); printf("Pleaseinputafloatnumber:"); scanf("%f",&c); printf("float:%f\n",c); return0;}希望得到的运行结果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;}实际运行结果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)用函数fflush(stdin)清除全部剩余内容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↙数据的非格式化输入在输入字符数据时,scanf函数有个美中不足的地方:scanf函数必须等到用户敲回车键后才返回程序有时并不想显示所输入的字符,scanf函数也做不到。下表列出了一些常用的和输入字符数据有关的库函数:库函数名功能头文件getchar接收一字符输入stdio.hgetche接收一字符输入conio.hgetch接收一字符输入conio.hgetche函数原型:int

getche(void);getche函数的功能与getchar功能相同。唯一的差别是:只要用户按下一个键,getche就立即返回(不会等待用户敲回车),并将用户输入的字符回显在屏幕上,getche的返回值就是用户所按键的ASCII码。getch函数原型:int

getch

温馨提示

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

评论

0/150

提交评论