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

下载本文档

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

文档简介

第3章简单程序设计§3.1

C语言的基本语句§3.2顺序结构§3.3数据输入与输出§3.4程序举例C语句可分为以下5种类型:1.表达式语句由表达式组成,其一般形式是:表达式;

典型例子:赋值语句x=5;

2.函数调用语句由一个函数调用加上一个分号构成,其作用是完成特定功能。它的一般形式是:函数名(参数列表);

典型例子:printf(“%d”,x);3.1

C语言的基本语句3.控制语句用于完成一定的控制功能,以形成程序的各种结构和流程控制。C语言有9种控制语句,分三类:(1)条件判断语句,构成选择结构:

if语句、switch语句(2)循环语句,构成循环结构:

for语句、while语句、do-while语句(3)转向控制语句

①限定转向语句:break、continue、return语句

②无条件转向语句:goto语句4.复合语句是用大括号{……}将若干语句组合在一起,在语法上相当于一条语句。用于if语句的一个分支或循环语句的循环体等。由于复合语句中还可以定义变量,因此又称分程序。注意:复合语句外没有分号,其中最后一个语句的分号不能省略。5.空语句只有一个分号没有其他内容的语句。其形式为:;常用于循环中,表示循环体什么都不做。

程序结构分为顺序、选择、循环三种。任何复杂的程序都是由这三种基本结构组成。3.2顺序结构

顺序结构,按语句出现先后顺序依次执行的程序结构。选择结构,又称选取或分支结构,根据给定条件是否成立,以决定程序的分支转向的程序结构,详见第4章。循环结构,又称重复结构,根据条件反复执行某一部分语句的程序结构,详见第5章。顺序结构是程序设计中最简单、最基本的结构,其特点是程序运行时,按语句书写的次序依次执行,其结构如右图所示。顺序结构一般由函数调用语句、说明语句、表达式语句和输入输出语句组成。AB顺序结构图顺序结构流程图#include<stdio.h>main(){

inta,b,c;a=123;b=456;c=a+b;

printf("\nc=%d\n",c);}【例3-1】分析下面程序预处理命令变量a,b,c声明a,b赋初值赋值语句c=a+b输出变量c的值例3-1的流程从例3-1可以看出,顺序结构的程序框架如下:#开头的预编译命令行

main()

{

局部变量声明语句;

可执行语句;

}3.3数据输入与输出

printf()函数的功能是向系统显示器输出若干个任意类型的数据。1.printf()函数调用形式

printf(格式控制字符串,输出列表)

注意:调用输入输出函数时,一般在程序开头加头文件:#include<stdio.h>,printf()和scanf()可省略。3.3.1格式化输出函数printf()

格式说明

一般字符按原样输出转义字符作用:换行输出列表printf("a=%d\n",a);printf函数简例格式控制字符串和输出列表都是函数的参数,其中:(1)格式控制字符串,它包括两个信息:①格式说明符。由“%”开头,以格式字符结束的一串字符,最简单的如%d,%c,%f等。它的作用是将要输出的数据转化成指定的格式输出。②原样输出字符,含一般字符和转义字符。一般起提示、分隔数据和换行等作用。如例3-1中printf(“\nc=%d\n”,c);中双撇号内的\n和c=。(2)输出列表是需要输出的常量、变量、函数、表达式。【说明】格式说明符的一般形式为:

%[-][+][0][#][整数1][.整数2][l或h]格式字符它是由“%”开头,以格式字符(英文字母)结束的一串字符,用以说明输出数据的类型、长度、位数等,其中[]表示可选项。因此,除了%以外,格式字符是格式说明符中必须要有的,它控制输出列表里相应输出项数据的输出类型。表3-2给出了常用的格式字符及含义。注意:有符号整数按无符号格式将输出其补码;无符号整数按有符号格式将作为补码输出其数。格式说明符printf函数常用类型格式字符表格式字符格式字符含义d或i表示以十进制形式输出一个带符号的整数o表示以八进制形式输出一个无符号的整数X,x表示以十六进制形式输出一个无符号的整数u表示以十进制形式输出一个无符号的整数f表示以小数形式输出带符号的实数(包括单、双精度)E,e表示以指数形式输出带符号的实数G,g表示选择%f或%e格式输出实数(选择占宽度较小的一种格式输出)c表示输出一个单字符s表示输出一个字符串注:大写字母表示输出中的字母为大写格式说明符各项的意义如下图所示。[整数1.整数2]:整数1控制输出长度(域宽),整数2对不同格式符有不同含义,具体作用见上图。1、两者缺省情况下:对整数和字符串按实际字符数输出;

(VC中)对实数(float和double):①小数型:整数部分原样输出,默认输出6位小数,多余小数舍入处理。②指数型:正数默认输出1位整数、小数点、6位小数、4位指数(e或E、+或―号及3位整数)共13个字符(负数12个字符)。2、有整数1无整数2:默认输出(整数、字符串全部;实数同上)3、无整数1有整数2:按上图说明输出(实数整数部分全部输出)【说明】4、域宽情况(有整数1,有或无整数2)①指定域宽不足,按需增加域宽。②指定域宽富余:缺省"―"右对齐:无"0"控制:前加空格;有"0"控制:数值型前加0填齐;其它类型前加空格。有"―"控制左对齐,按域宽后面加空格。

[长度修正l]:长度修正l可与d、i、o、x、X、u、f、e、E、g、G配合使用,long型整数在基本整数范围内、double型实数在float型实数范围内可以不加l输出,否则,必须加长度修正l才能正常输出。【说明】【注意】(1)实数精度(有效数字)由输出项类型控制(float7位double16位),对float型输出项用%lf格式不能增加精度;增大“整数2”可增加实数输出的小数位数,但不能增加精度。(2)输出项从右向左计算后,按格式说明的顺序、类型和要求对应输出。格式说明和输出项的个数类型应相同,如不匹配系统不能正确输出①格式说明的个数少于输出项个数,多余的输出项将不输出;②格式说明的个数多于输出项个数,多余的格式说明将输出随机的值。③整型数据按%f输出或者实型数据按%d输出,均出现输出错误结果。(3)格式字符除X(表示输出的十六进制数用大写字母输出)、E(表示输出的指数e用大写字母E输出)、G(表示若选用指数形式输出,则用大写字母E输出)外,必须是小写字母。如%d不能写成%D。(4)若想输出字符“%”,则在格式字符串中用连续两个%表示。如:printf(“%f%%”,1.0/4);则输出:0.250000%【注意】#include<stdio.h>main(){

int

a,b,c;a=123;b=456;c=a+b;

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

printf(“a+b=%hd+%hd=%hd\n”,a,b,c);

printf("a+b=%2d+%2d=%5d\n",a,b,c);

printf("a+b=%02d+%02d=%05d\n",a,b,c);}【例3-2】分析下面程序运行结果#include<stdio.h>main(){unsignedinta=65535;intb=-2;printf(“a=%d,%o,%x,%u\n”,a,a,a,a);printf(“a=%d,%o,%x,%u\n”,a,a,a,a);}【例3-3】无符号数据的输出

#include<stdio.h>main(){floatx,y,z;x=123.234;y=0.000345;z=-98.567;

printf("x=%.4f,x=%.2f,x=%+e\n",x,x,x);

printf("y=%f,y=%8.4f,y=%10.3e\n",y,y,y);

printf("z=%+f,z=%+e,z=%+g\n",z,z,z);}【例3-4】分析下面程序运行结果#include<stdio.h>main(){doublex,y,z;x=123.234;y=-0.000345;z=-98.567;

printf(“x=%lf,x=%.4lf,x=%2lf,x=%+e\n”,x,x,x,x);

printf("y=%lf,y=%+lf,y=%le\n",y,y,y);

printf("z=%f\n",z);}【例3-5】分析下面程序运行结果#include<stdio.h>main(){

printf("\n%c",'a');/*输出单个字符*/

printf("\n%s","abc");/*输出一个字符串*/}【例3-6】分析下面程序运行结果3.3.2格式化输入函数scanfscanf()函数的功能是从键盘上将数据按用户指定的格式输入并赋给指定变量。1.scanf()函数调用形式

scanf(格式控制字符串,地址列表);格式控制字符串的定义与使用方法和printf函数相似,但不能显示非格式字符串,即不能显示提示字符串。地址列表是要赋值的各变量地址,地址是由地址运算符“&”后跟变量名组成,如&x表示变量x的地址。

格式说明符以%开始,后面跟一个格式符,中间可以有若干个附加字符,格式字符串一般形式为:

%[*][输入数据宽度m][长度]类型其中:[]:表示可选项*:表示输入的数值不赋给相应的变量,即跳过该数据不读。[输入数据宽度m]:表示按十进制正整数m的宽度输入数据。[长度]:长度格式符为l和h,l表示输入长整型数据或双精度实型数据;h表示输入短整型数据。类型:是格式说明符中必须要有的,其格式符的意义与printf函数基本相同,具体如表3-3所示。2.格式说明符表3-3

scanf函数常用类型格式符表格式字符格式字符含义d(i)表示以十进制形式输入一个整数o表示以八进制形式输入一个整数x(X)表示以十六进制形式输入一个整数u表示以十进制形式输入一个无符号的整数f或e(E)表示输入一个实数,可以是小数形式或指数形式g(G)与f或e的作用相同c表示输入一个字符s表示输入一个字符串【注意】(1)scanf函数中的“格式控制字符串”后面应该是变量的地址,而不应是变量名。例如输入语句scanf(“%d,%d”,a,b);是错误的,&不能少。(2)输入数据时不能规定数据的精度。如scanf("%8.2f",&a);是不合法的。(3)在“格式控制字符串”中除了格式说明符外,还有其他字符,则在输入数据时在对应位置上应输入与这些字符相同的字符。例如

scanf("a=%d,b=%d",&a,&b);则输入时应输入:a=12,b=-2↙其他任何输入形式都不正确。例3-7注意(4)输入数据时,遇以下情况认为该数据输入结束: ①按指定的宽度结束; ②遇空格,或“回车”键,或“Tab”键; ③

遇非法输入。(5)在用“%c”格式输入字符时,所有输入的字符(包括空格字符和“转义字符”)都作为有效字符。(6)当输入的数据与输出的类型不一样时,虽然编译没有提示出错,但结果将不正确。/*EX3-8.C*/#include<stdio.h>main(){

inta,b,c;scanf("%3d%3d%4d",&a,&b,&c);/*按长度m进行输入*/

printf("\na=%d,b=%d,c=%d\n",a,b,c);}【例3-8】分析下面程序/*EX3-9.C*/#include<stdio.h>main(){doublea,b,c;

scanf("%lf,%lf",&a,&b);/*按双精度进行输入*/c=a*b;

printf("\na*b=%lf*%lf=%le\n",a,b,c);}【例3-9】分析下面程序/*EX3-10.C*/#include<stdio.h>main(){charch1,ch2;scanf("%c%c",&ch1,&ch2);printf("%c%c\n",ch1,ch2);

}【例3-10】阅读下面程序/*EX3-11.C*/#include<stdio.h>main(){

intx,y;scanf("%2d%*3d%4d",&x,&y);/*注意%*3d的作用*/

printf("\nx=%d,y=%d\n",x,y);}【例3-11】分析下面程序#include<stdio.h>main(){

inta;

scanf(“%d”,&a);/*输入输出类型不一致*/

printf("\na=%ld\n",a);}【例3-12】分析下面程序3.3.3字符数据的输入与输出C语言为字符定义了两个最基本的函数:字符输入函数getchar和字符输出函数putchar。在使用这两个函数时,程序的头部一定要加上文件包含命令:

#include<stdio.h>1.字符输入函数getchar()getchar()的功能是从标准设备(键盘)上读入一个字符。其一般调用形式:getchar();

语句ch=getchar()和scanf(“%c”,&ch);功能相同#include<stdio.h>main(){charc1,c2;c1=getchar();/*从键盘上接收一个字符赋给字符变量c1*/c2=getchar();/*和scanf(“%c”,&c2)等价*/printf("%c,%c\n",c1,c2);}【例3-13】字符输入函数的使用2.字符输出函数putchar()字符输出函数putchar()的功能是向标准输出设备(显示器)输出一个字符。其一般调用形式:

putchar(c);其中:c是参数,它可以是整型或字符型变量,也可以是整型或字符型常量。当是整型量时,输出以该数值作为ASCII码所对应的字符;当是字符型量时,直接输出字符常量。

语名putchar(c)和printf(“%c”,c)功能相同/*EX3-14.C*/#include<stdio.h>main(){

charx,y,z;x='a';y='+';z='b';putchar(x);putchar(y);putchar(z);;putchar('\132');putchar('\n');printf(“%c%c%c\132\n”,x,y,z);}【例3-14】字符输出函数的使用【例3-15】从键盘上输入两个整数放入变量a,b中,编程将这两个变量中的数据交换。【分析】两个数据交换,不能直接写成a=b;b=a;,因为当执行a=b;后,变量a中的原值就被“冲”掉了,而与变量b中的值相等,因此不能实现交换。正确的做法是另定义一个变量(假设是c)作为暂存单元,在执行a=b;之前,先将变量a的值放入c中保存起来,然后执行a=b;,最后再执行b=c;,由于c中保存的是a的值,这样就将原来a的值赋给了b,从而实现了两个变量中的数据交换。3.4程序举例程序#include<stdio.h>main(){

inta,b,c;a=3;b=5;c=a;a=b;b=c;

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

35a3c①②③b【例3-16】从键盘上输入一个英文小写字母,编程输出该字母所对应的ASCII码和所对应的大写字母【分析】在ASCII字符集中,大写字母A~Z是连续的(ASCII值从65~90),小写字母a~z也是连续的(ASCII值从97~122)。因此每对字母的ASCII码值差是相同的,都是32,即'a'-'A'、'b'-'B'、'c'-'C'、…、'z'-'Z'都是32。所以将小写字母的ASCII码值减去32,则得到的是所对应的大写字母ASCII码值。同理,将大写字母的ASCII码值加上32,则得到的是所对应的小写字母ASCII码值。程序#include<stdio.h>main(){charc1,c2;c1=getchar();/*从键盘获得一个小写字母*/c2=c1-32;/*将小写字母转化为大写字母*/printf("%d,%c\n",c1,c1);putchar(c2);}

#include<stdio.h>#include<math.h>main(){floata,b,c,s,area;

scanf("%f%f%f",&a,&b,&c);s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));

printf("\na=%.2f,b=%.2f,c=%.2f\n",a,b,c);

printf("\narea=%.3f\n",area);}【例3-17】输入三角形的三条边,编程求该三角形的面积【例3-18】编程求解方程#include<stdio.h>#include<math.h>main(){floata,b,c,d,x1,x2;a=3;b=-5;c=-7;d=b*b-4*a*c;x1=(-b+sqrt(d))/(2*a);x2=(-b-sqrt(d))/(2*a);printf("x1=%.4f,x2=%.4f\n",x1,x2);}【例3-19】分析下面程序的运行结果#include<stdio.h>main(){intx=1,y=5;

printf("x=%%d,y=%%d",x,y);}

【分析】本程序格式控制字符串中,有两个连续的%%。前面已经讲过,两个连续的%%表示输出一个%,因此变量x,y没有对应的输出格式,只能输出双引号中的字符。【例3-20】分析下面程序的运行结果#include<stdio.h>main(){inta,b;a=0x41;b=++a;

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

printf("%c,%c\n",++a,b++);}

本章介绍了顺序程序结构、赋值语句、基本的输入/输出函数。重点讲解了以下几个方面的内容:1.scanf、printf、getchar、putchar四个函数的使用:(1)scanf和getchar都是输入函数,其功能是接收键盘上输入的数据。但scanf函数可以按指定的格式输入任何类型的数据,而getchar函数只能接收一个字符。(2)printf和putchar都是输出函数,其功能是向屏幕(显示器)输出数据。但printf函数可以按指定的格式输出任何类型的数据,而putchar函数只能输出一个字符。(3)使用scanf函数或printf函数可以在程序中不包含头文件stdio.h,而使用getc

温馨提示

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

评论

0/150

提交评论