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

下载本文档

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

文档简介

第3章顺序结构程序设计本章要点:格式化输出函数──printf()格式输入函数——scanf()字符输出函数——putchar()字符输入函数——getchar()顺序结构程序设计

学习方法建议:本章是程序设计的基础,建议重点掌握格式输入输出函数和字符输入输出函数的使用方法,掌握顺序结构程序的编写方法,本章难点是格式输入输出函数中的格式描述符的用法。

3.1引例1.问题分析——华氏温度与摄氏温度的转换。将华氏温度转换为对应的摄氏温度。已知华氏温度与摄氏温度的转换公式为:程序代码#include"stdio.h"voidmain(){doublef,c;/*定义变量f和c分别表示华氏温度和摄氏温度*/

scanf("f=%lf",&f);/*输入华氏温度值*/c=5*(f-32)/9;/*计算摄氏温度*/

printf("c=%.2f\n",c);/*输出摄氏温度*/}3.2C语言的基本语句

C语言的语句可以分为以下5类:1.控制语句控制语句用于完成一定的控制功能。C语言中有9种控制语句:①if()…else… (条件语句)②for()… (循环语句)③while()… (循环语句)④do…while() (循环语句)⑤continue (结束本次循环语句)⑥break (中止执行switch或循环语句)⑦switch (多分支选择语句)⑧goto

(转向语句)⑨return (从函数返回语句)

2.表达式语句表达式语句由一个表达式加一个分号构成,最典型的是,由赋值表达式构成一个赋值语句。例如:a=3是一个赋值表达式,而a=3;是一个赋值语句。3.函数调用语句函数调用语句由一个函数调用加一个分号构成,例如:

printf("ThisisaCprogram.");4.空语句空语句只有一个语句结束符“;”,它不执行任何操作,称为空语句。5.复合语句可以用{}把一些语句括起来构成复合语句(又称分程序)。例如下面的语句是一个复合语句。

{t=x;x=y;y=t;}注意:复合语句中最后一个语句中最后的分号不能忽略不写。复合语句在语法上和单一语句相同,即单一语句可以出现的地方,可以出现复合语句。复合语句可以嵌套,即复合语句中也可出现复合语句。3.3字符数据的输入输出

C语言本身不提供输入输出语句,输入和输出操作是由函数来实现的。在C标准函数库中提供了一些输入输出函数,由于C编译系统与C函数库是分别进行设计的,因此不同的C系统所提供函数的数量、名字和功能是不完全相同的。但有些通用的函数(如printf()和scanf()等),各种C系统都提供,成为各种C系统的标准函数。3.3.1putchar函数putchar函数(字符输出函数)的作用是向终端输出一个字符。其一般格式如下:

putchar(ch);它输出字符变量ch的值,ch可以是字符变量或整型变量。【例3.1】输出单个字符。#include<stdio.h>main(){chara,b,c;a='B';b='O';c='Y';putchar(a);putchar(b);putchar(c);putchar('\n');putchar(a);putchar('\n');/*输出a的值,并换行*/putchar(b);putchar('\n');/*输出b的值,并换行*/putchar(c);putchar('\n');/*输出c的值,并换行*/}

getchar函数(字符输入函数)的作用是从终端(或系统隐含的输入设备)输入一个字符。getchar函数没有参数,其一般格式如下:

getchar();(1)getchar()函数只能用于单个字符的输入,一次输入一个字符。(2)在输入时,空格、回车符都将作为字符输入,而且只有在敲回车键时,读入才开始执行。3.3.2getchar函数运行结果为:输入new↙NEW【例3.2】将输入的小写字母转换成大写字母后输出。

#include<stdio.h> /*编译预处理命令:文件包含*/

voidmain()

{

charch1,ch2,ch3;

ch1=getchar();/*输入小字母分别赋给变量ch1,ch2,ch3*/

ch2=getchar();

ch3=getchar();

ch1-=32;/*将小字母转换成大写字母*/

ch2-=32;

ch3-=32;

putchar(ch1);putchar(ch2);putchar(ch3);putchar('\n');

}

从键盘输入字符时,要求new连续输入再回车,如果输入n↙e↙w↙,则字符n赋给ch1,字符↙赋给ch2,字符e赋给ch3,就不对了。注意:程序中如果使用putchar()函数和getchar()函数时,在程序(或文件)的开头必须加上编译预处理命令,即:

#include“stdio.h”或#include<stdio.h>。3.4格式输入与输出3.4.1printf()函数printf()函数的作用是向计算机系统默认的输出设备(一般指终端或显示器)输出一个或多个任意类型的数据。1.printf()函数printf函数的一般格式为:

printf(格式控制,输出表列);功能:输出任何类型的数据。例如:printf("radius=%f",radius);(1)格式控制

格式控制由双引号括起来的字符串,主要包括格式说明和需要原样输出的字符。

①格式说明

由“%”和格式字符组成,如%d,%f等,作用是将要输出的数据转换为指定的格式后输出。

②普通字符

需要原样输出的字符。如“printf("radius=%f",radius);”语句中的“radius=”就是普通字符。

(2)输出表列:是需要输出的一些数据,可以是常量、变量和表达式。2.格式字符(1)d格式字符:以十进制整数形式输出数据。①%d:按整型数据的实际宽度输出。②%md:m为一个正整数,用以指定输出数据所占的宽度。如果数据的位数小于m,则右对齐,左端补以空格,若数据位数大于m,则按实际位数输出。③%-md:m为一个正整数,用以指定输出数据所占的宽度。如果数据的位数小于m,则左对齐,右端补以空格,若数据位数大于m,则按实际位数输出。④%ld:输出长整型数据。【例3.3】观察printf()的输出效果。

#include"stdio.h"

main()

{inta=123;

longb=12345;

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

printf("a=%2d\tb=%3ld\n",a,b);

printf("a=%5d\tb=%8ld\n",a,b);

printf("a=%-5d\tb=%-8ld\n",a,b);

}(2)c格式符:用来输出一个字符。

【例3.4】字符数据的输出。

#include"stdio.h"

main()

{

charc='b';

inti=98;

printf("%c,%d\n",c,c);

printf("%c,%d\n",i,i);

}(3)s格式符:用来输出一个字符串。

①%s,输出一个字符串

②%ms,输出的字符串占m列,如字符串本身长度大于m,将字符串全部输出。若串长小于m,则右对齐左补空格。

③%-ms,输出的字符串占m列,如字符串本身长度大于m,将字符串全部输出。若串长小于m,则左对齐右补空格。

④%m.ns,输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格。如果n>m,则m自动取n值,即保证n个字符正常输出。

⑤%-m.ns,其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格。如果n>m,则m自动取n值,即保证n个字符正常输出。【例3.5】字符串的输出。

#include"stdio.h"

main()

{

printf("%2s,%8.3s,%.4s,%-7.2s\n","hello","hello","hello","hello");

}(4)f格式符:用来输出实数,以小数形式输出。①%f,不指定字段宽度,由系统自动指定,使整数部分全部输出,并输出6位小数。双精度数也可以用%lf格式输出。②%m.nf,指定输出的数据共占m列,其中有n位小数。如果数值长度小于m,则左端补空格。③%-m.nf与%m.nf基本相同,只是使输出的数值向左端靠,右端补空格。【例3.6】输出下列单精度实数和双精度实数。#include"stdio.h"main(){floatf1,f2;doubled1,d2;f1=111111.111;f2=222222.222;d1=1111111111111.111111111;d2=2222222222222.222222222;printf("%f\n",f1+f2);printf("%f\n",d1+d2);

}【例3.7】输出实数时指定小数位数。#include"stdio.h"main(){floatf=123.456;printf("%f%10f%10.2f%.2f%-10.2f\n",f,f,f,f,f);}(4)e格式符,以指数形式输出实数。①%e,不指定输出数据所占的宽度和数字部分的小数位数,数值按规范化指数形式输出(即小数点前必须有而且只有1位非零数字)。②%m.ne和%-m.ne,m、n和“-”字符含义与前面的相同。此处n指拟输出的数据的小数部分(又称尾数)的位数。表3-1printf函数格式字符格式字符作用d或i十进制整数形式带符号输出(正数不带符号)o八进制整数形式无符号输出(不带前缀0)xX无符号输出十六进制整数(不带前缀0x),其中字母小写无符号输出十六进制整数(不带前缀0x),其中字母大写u十进制整数形式无符号输出f十进制小数形式输出单、双精度数(默认6位小数)eE指数形式输出单、双精度数(默认6位小数)字母e小写指数形式输出单、双精度数(默认6位小数)字母E大写gG自动选用f或e形式,字母e小写自动选用f或e形式,字母E大写c输出1个字符s输出1个字符串ld长整型输出lo长八进制整型输出lx长十六进制整型输出lu无符号长整型输出m格式字符按宽度m输出,右对齐-m格式字符按宽度m输出,左对齐m.m格式字符按宽度m,n位小数,或截取字符串前n个字符输出,右对齐-m.n格式字符按宽度m,n位小数,或截取字符串前n个字符输出,左对齐3.printf()函数应用举例【例3.8】用不同的格式输出同一变量。#include"stdio.h"main(){charch='b';

intx=65;

printf("ch=%c,%4c,%d\n",ch,ch,ch);printf("x=%d,%c\n",x,x);}【例3.9】输出不同的数据类型的应用。#include"stdio.h"main(){int

a,b;floatc;charch;a=123;b=-1;c=1.23;

ch='a';

printf("a=%d,a=%4d\n",a,a);/*输出整数a的值*/

printf("%d,%o,%x,%u\n",b,b,b,b);/*输出b的值*/

printf("%f,%6.1f\n",c,c);/*输出实数c的值*/

printf("%c\n",ch);/*输出字符变量ch的值*/}

1.scanf()函数scanf函数的一般格式为

scanf(格式控制,地址表列);“格式控制”的含义同printf函数,“地址表列”是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。3.4.2scanf()函数【例3.10】用scanf()函数输入数据。#include"stdio.h"main(){int

a,b,c;scanf("%d%d%d",&a,&b,&c);printf("%d,%d,%d\n",a,b,c);}其中:&a、&b、&c中的“&”是“地址运算符”,&a指a在内存中的地址。

scanf函数的作用是:按照a、b、c在内存的地址将a、b、c的值存进去,如图3-1所示。运行结果为:输入123↙1,2,3图3-1变量在内存中存放的情况(1)格式说明格式说明主要由“%”和格式符组成的,如%d,%f等,作用是将输入数据转换为指定格式后存入到由地址表所指的相应变量中。表3-2scanf()函数的类型字符格式字符作用d,i输入有符号的十进制整数U输入无符号的十进制整数O输入无符号的八进制整数X,x输入无符号的十六进制整数(大小写作用一样)C输入单个字符S输入1个字符串F输入单精度实型数据,(可以用小数形式或指数形式)E,e,g,G与f作用相同(大小写作用一样)lf、le、lg输入双精度实型数据ld、lo、lx、lu输入长整型数据hd、ho、hx输入短整型数据(2)地址表列scanf()函数中的“地址表列”部分是由变量的地址组成的,如果有多个变量,则各变量之间用逗号隔开。地址运算符为“&”,如变量a的地址可以写为&a。注意:scanf()函数中的“格式控制”后面应当是变量地址,而不应是变量名。例如:scanf("%d%d",a,b);是不对的,应改为scanf("%d%d",&a,&b);如果在“格式控制”字符串中除了格式说明以外还有其他字符,则在输入数据时在对应位置应输入与这些字符相同的字符。例如:scanf("a=%db=%d",&a,&b);应输入a=3b=4↙。在用“%c”格式输入字符时,空格字符和“转义字符”都作为有效字符输入。2.scanf()函数应用举例【例3.11】附加格式说明符n(宽度)。#include"stdio.h"main(){

inta,b;charch1,ch2;scanf("%2c%3c",&ch1,&ch2);printf("ch1=%c,ch2=%c\n",ch1,ch2);}运行结果为:ABCDEF↙ch1=A,ch2=C【例3.12】“*”号附加说明符的应用。

main(){int

a,b;

scanf("%2d%*3d%2d",&a,&b);

printf("a=%d,b=%d\n",a,b);}运行结果为:从键盘输入:23□482□60↙a=23,b=603.5程序设计举例【例3.13】输入任意二个整数,求它们的和及平均值。main(){intn1,n2,sum=0;floataver;

printf("Pleaseinputtwonumbers:");

scanf("%d,%d",&n1,&n2);/*输入二个整数*/sum=n1+n2; /*求和*/aver=sum/2.0;

/*求平均值*/printf("n1=%d,n2=%d\n",n1,n2);/*输出结果*/

printf("sum=%d,aver=%5.2f\n",sum,aver);}运行结果为:Pleaseinputtwonumbers:5,10↙n1=5,n2=10sum=15,aver=□7.50【例3.14】交换两个变量的值。#include<stdio.h>main(){intx,y,temp;

scanf("%d%d",&x,&y);

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

printf("x=%d,y=%d\n",x,y);}运行结果为:程序输入:

1234↙x=12,y=34x=34,y=12【例3.15】输入一个double类型的数,使该数保留小数点后两位,对第三位小数进行四舍五入。#include"stdio.h"main(){doublex,y;

printf("Input

x:\n");

scanf("%lf",&x);

printf("x=%f\n",x);y=(int)(x*100+0.5)/100.0;

printf("y=%f\n",y);}main(){floatradius,high,carea,volume,pi=3.14159;

printf("请输入圆的半径:\n");

scanf("%f",&radius);/*从键盘输入一个实数赋给变量radius*/

printf("请输入圆柱体的高:\n");

scanf("%f",&high);/*从键盘输入一个实数赋给变量high*/

carea=2.0*pi*radius*high;/*求圆柱体侧面积*/volume=pi*radius*radius*high;/*求圆柱体体积*/

printf("radius=%f\n",radius);/*输出圆柱体底面半径*/

printf("radius=%f\n",high); /*输出圆柱体的高*/

printf("carea=%7.2f,volume=%7.2f\n",carea,volume);}【例3.16】输入圆柱体的半径和高,计算圆柱体的侧面积和体积。运行结果为:请输入圆的半径:1↙请输入圆柱体的高:2↙radius=1.00000high=2.00000carea=□□12.57,volume=□□□6.28上机实验1.掌握printf()和scanf()

温馨提示

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

评论

0/150

提交评论