第04章基本输入、输出和顺序程序设计_第1页
第04章基本输入、输出和顺序程序设计_第2页
第04章基本输入、输出和顺序程序设计_第3页
第04章基本输入、输出和顺序程序设计_第4页
第04章基本输入、输出和顺序程序设计_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

第4章基本输入、输出和顺序程序设计制作人:王敬华第4章:基本输入输出和顺序程序设计

学习的意义

程序对数据的处理流程:程序的主要功能就是对数据的处理,其整个流程主要包括数据的输入、数据的处理、数据的输出。语言程序设计教程第二版

第四章基本输入输出和顺序程序设计C数据处理数据输入数据输出C程序中如何实现数据输入?C程序中如何实现数据输出?

程序的结构:写文章有文章的结构建房子有房子的结构制造机械产品由机械产品的结构

………

那么编写程序是否有程序的结构呢?学习的意义

程序结构顺序结构选择结构循环结构YES!本章讨论第5章讨论第6章讨论语言程序设计教程第二版

第四章基本输入输出和顺序程序设计C

格式化输出printf

格式化输入scanf

字符数据的非格式化输入、输出程序的控制结构顺序程序设计举例

本章小结学习目标

掌握各种类型数据的格式化输入输出方法;掌握字符数据的非格式化输入输出方法;理解三种程序控制结构的流程图;学会简单顺序程序的设计;养成良好的程序设计习惯;

学习内容

语言程序设计教程第二版

第四章基本输入输出和顺序程序设计C4.1格式化输出printf

一般格式printf("格式控制字符串",表达式1,表达式2,…,表达式n);

功能

按照“格式控制字符串”的要求,将表达式1,表达式2,…,表达式n的值显示在计算机屏幕上。

说明

格式控制字符串用于指定输出格式。它包含两类字符:

常规字符:包括可显示字符和用转义字符表示的字符。

格式控制符:以%开头的一个或多个字符,以说明输出数据的类型、形式、长度、小数位数等。其格式为:%[修饰符]格式转换字符例:

longintx=0x8AB6;printf(“TheValueofxis%ld\n”,x);常规字符常规字符(转义符)格式控制符(修饰符)格式控制符(格式转换符)语言程序设计教程第二版

第四章基本输入输出和顺序程序设计Cprintf使用时的注意事项(1)格式控制字符串可以不包含任何格式控制符。(2)当格式控制字符串中既含有常规字符,又包含有格式控制符时,则表达式的个数应与格式控制符的个数一致。此时,常规字符原样输出,而格式控制符的位置上输出对应的表达式的值,其对应的顺序是:从左到右的格式控制符对应从左到右的表达式。(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=7printf("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下无符号整型%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("90\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);}90a=123--------(a=%d)a=123-----(a=%6d)a=+123-----(a=%+6d)a=123-----(a=%-6d)a=123-----(a=%-06d)a=-----(a=%+06d)a=----(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=---(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下):111111111111111111111111111111宽度包含0X宽度不包含0X11111111011111110000000000000000000000111111000000001111110000000011111100000000111111语言程序设计教程第二版

第四章基本输入输出和顺序程序设计C2.实数的输出

一般形式:

[]:表示可选项,可缺省。

|:表示互斥关系。

#:必须输出小数点。

.precision:规定输出实数时,小数部分的位数。

l:输出double型数据(缺省时也是输出double型数据)。

L:输出longdouble型数据。其它字段的含义与前面介绍的相同。

说明:%[-][+][#][0][width][.precision][l|L]f|e|E|g|G辅助格式控制字符(修饰符)

语言程序设计教程第二版

第四章基本输入输出和顺序程序设计C【例】实数的格式化输出

#include<stdio.h>voidmain(){doublef=2.5e5;printf("90\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);}90f=250000.000000--------(f=%15f)f=00250000.000000--------(f=%015f)f=250000--------(f=%-15.0f)f=250000.--------(f=%#15.0f)f=.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("90\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");}90ch=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字节,长整型占4字节),整型不会自动转换成长整型,所以不会正常输出120,同时也会影响到下一个表达式的输出。但在VC6.0下,因为整型和长整型所占内存单元的大小相同(均占4字节),且都是整型数据,数据类型基本是相同的,所以输出的结果正确

如何修改?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);

取地址运算符(与按位“与”同符号),只能作用于变量!

格式控制符与后续参数中的变量地址的对应关系

已知:

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)格式控制字符串中出现的常规字符(包括转义字符),务必原样输入。

(3)为改善人机交互性,同时简化输入操作,在设计输入操作时,一般先用printf()函数输出一个提示信息,再用scanf()函数进行数据输入。

(4)当格式控制字符串中指定了输入数据的域宽width时,将读取输入数据中相应的width位,但按需要的位数赋给相应的变量,多余部分被舍弃。例如:

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

假设给num1输入12,给num2输入36,则正确的输入操作为:

12□36↙

或者

12↙36↙

使用“↙”符号表示按回车键操作,在输入数据操作中的作用是,通知系统输入操作结束。例如:

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↙,则系统将读取的“abc”中的'a'赋给变量ch1;将读取的"def"中的'd'赋给变量ch2。语言程序设计教程第二版

第四章基本输入输出和顺序程序设计C

使用scanf函数注意事项

(5)当格式控制字符串中含有抑制符‘*’时,表示本输入项对应的数据读入后,不赋给相应的变量(该变量由下一个格式指示符输入)。

(6)使用格式控制符%c输入单个字符时,空格和转义字符均作为有效字符被输入。

(7)输入数据时,遇到以下情况,系统认为该数据结束:

遇到空格,或者回车键,或者Tab键。

遇到输入域宽度结束。例如“%3d”,只取3列。

遇到非法输入。比方说,在输入数值数据时,遇到字母等非数值符号。

(8)当一次scanf调用需要输入多个数据项时,如果前面数据的输入遇到非法字符,并且输入的非法字符不是格式控制字符串中的常规字符,那么,这种非法输入将影响后面数据的输入,导致数据输入失败。例如:

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↙,则系统将字母'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);

//清除键盘缓冲区

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.字符数据的非格式化输入intgetchar(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↙):

语言程序设计教程第二版

第四章基本输入输出和顺序程序设计Cintgetc(FILE*stream);

//应包含的.h文件为stdio.h

getc

功能:从流文件stream中读取一个字符信息,它的返回值是所读取字符的ASCII码。

返值:正常,返回读取字符的ASCII码值;出错,返回EOF(-1)。

说明:该函数带有一个参数stream,它是一文件指针(第12章介绍),表示流文件,当流文件是stdin时,getc函数的功能与getchar函数的功能完全相同。也就是说,gtec(stdin)与getchar()是等价的。语言程序设计教程第二版

第四章基本输入输出和顺序程序设计Cintgetche(void);

//应包含的.h文件为conio.h

getche

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

返值:正常,返回读取字符的ASCII码值;出错,返回EOF(-1)。

说明:直接从键盘获取键值,不等待用户按回车键;输入字符回显。

getch

intgetch(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.字符数据的非格式化输出intputchar(intc);

//应包含的.h文件为stdio.h

与输出字符数据有关的常用库函数主要有:

putchar、putc、puts等。

putchar

功能:在显示器上输出字符c。

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

说明:该函数带有一个参数c,它为要显示字符的ASCII码值,有一个int型返回值

。语言程序设计教程第二版

第四章基本输入输出和顺序程序设计C

putc

intputc(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.算法的基本概念

程序=数据结构+算法。算法:简而言之,就是解决问题的方法与步骤。

程序设计语言:是程序开发工具,即是将算法转化为程序的开发工具。

程序:算法的具体实现。

学习C语言,不仅要熟练掌握其语言本身的特点、语法规则等意外,更重要的就是掌握分析问题、解决问题的方法,就是锻炼分析、分解,最终归纳整理出算法的能力。语言程序设计教程第二版

第四章基本输入输出和顺序程序设计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)两步仍不明确,无法直接转化为程序语句,可以继续细化:

(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】猴子吃桃问题:有一堆桃子不知数目,猴子第一天吃掉一半,觉得不过瘾,又多吃了一只,第二天照此办理,吃掉剩下桃子的一半另加一个,天天如此,到第十天早上,猴子发现只剩一只桃子了,问这堆桃子原来有多少个?

总体思路:

假设第一天开始时有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的下标而已。由此,我们引入循环的处理方法,并统一用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)步为循环

语言程序设计教程第二版

第四章基本输入输出和顺序程序设计C3.算法的描述方法

自然语言描述语言程序设计教程第二版

第四章基本输入输出和顺序程序设计C如前面表示的那样,自然语言就是人们日常使用的语言,可以是汉语、英语,或其他语言。

优点:用自然语言表示通俗易懂;

缺点:

(1)文字冗长,容易出现歧义性。自然语言表示的含义往往不太严格,要根据上下文才能判断其正确含义。假如有这样一句话:“张先生对李先生说他的孩子考上了大学”。请问是张先生的孩子考上了大学还是李先生的孩子考上了大学呢?光从这句话本身难以判断。

(2)用自然语言来描述包含分支和循环的算法,不很方便。

因此,除了那些很简单的问题以外,一般不用自然语言描述算法。3.算法的描述方法

流程图起止框判断框输入、输出框注释框处理框连接点流程线_____常见流程图符号语言程序设计教程第二版

第四章基本输入输出和顺序程序设计C流程图是一种传统的算法表示法,利用几何图形的框来代表各种不同性质的操作,用流程线来指示算法的执行方向。由于其简单直观,所以应用广泛,特别是在早期语言设计阶段,只有通过流程图才能简明地表述算法,流程图成为程序员们交流的重要手段,直到结构化的程序设计语言出现,对流程图的依赖才有所降低【例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图就是以这两位学者名字的首字母命名的。它的最重要的特点就是完全取消了流程线,这样算法被迫只能从上到下顺序执行,从而避免了算法流程的任意转向,保证了程序的质量。与传统流程图相比,NS图的另一个优点就是既形象直观,又比较节省篇幅,尤其适合于结构化程序的设计。

输入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

伪码是指介于自然语言和计算机语言之间的一种代码,是帮助程序员制定算法的智能化语言,它不能在计算机上运行,但是使用起来比较灵活,无固定格式规范,只要写出来自己或别人能看懂即可,由于它与计算机语言比较接近,因此易于转换为计算机程序。用伪码描述【例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)循环结构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("bit2=%d,bit1=

温馨提示

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

评论

0/150

提交评论