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

下载本文档

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

文档简介

第3章

简单程序设计

本章要点l

结构化程序的三种流程结构,C语句的分类。l

字符输入输出函数getchar、putchar的使用方法。l

格式输入输出函数的使用方法,常见的格式说明符的含义及使用方法。l

顺序结构程序设计方法。本章难点格式说明符的含义及使用。

3.1流程结构和语句

3.2标准输入输出函数3.3简单程序设计举例3.1流程结构和语句3.1.1三种流程结构3.1.2C的语句概述3.1.1三种流程结构顺序结构N-S结构图流程图ABAB选择结构YNABP成立?PTFAB循环结构NYP成立?A当P成立时

A直到型循环

A当P成立时YNAP成立?当型循环N-S结构图流程图3.1.2C的语句概述

C语言程序最基本的组成元素是一条条的C语句。按其编译后是否产生目标代码,C语言的语句可分为:数据定义语句(说明语句):定义数据结构和数据初值,指示编译器分配存储单元。如变量定义语句。外部说明必须放在一个源程序文件中所有函数定义的外面局部说明必须放在执行语句的前面

可执行语句:编译后产生若干机器指令,实现对数据的处理和对程序流程的控制。

常用的程序结构为:常量说明类型说明变量说明/*外部说明*/返回类型函数名(参数表){

变量说明/*局部说明*/

可执行语句}C语言的可执行语句分为5类:表达式语句、函数调用语句、复合语句、空语句、控制语句。

表达式后面加一个分号,构成表达式语句x=3;y=y+5;x=a-b&&c||d;printf("x=%d,y=%d\n",x,y);sort(a,10);

表达式语句能够独立出现在程序中,而表达式则不能独立出现。1.表达式语句

注意:

分号是语句必不可少的一部分。C的说明语句也必须以分号结束。2.函数调用语句由函数名、实际参数加上分号“;”组成。其一般形式为:函数名(实际参数表);执行函数调用语句就是调用被调用函数体并把实际参数赋予函数定义中的形式参数,然后执行被调用函数体中的语句,求取函数值。3.复合语句

用一对花括号“{}”括起来的若干条语句。

花括号中可以是说明语句、表达式语句、控制语句,也可以是复合语句。右括号“}”后不必加分号。例如:⑴if(a>b){max=a;min=b;}

⑵for(n=1;n<10;n++)

{p=n+p;if(p>=100)

{

printf(“%d\n”,p);break;

}

}

复合语句中如果有说明性语句,应该写在可执行语句的前面。例如:

main(){inta,b;a=b=100;{floatc=10.23;

printf("%f\n",c);}

printf("%d%d\n",a,b);}要特别注意:花括号的配对花括号的位置4.空语句单独的一个分号“;”构成一个空语句,空语句是什么也不执行的语句。例如:

;(空语句,是最简单的C语句)

while(getchar()!=‘\n’)

该语句的功能是,只要从键盘输入的字符不是回车就重新输入。循环体为空。5.控制语句选择分支控制语句

if()…else…

switch(){…} 循环控制语句

for()…

while()…do…while()其他控制语句

break、continue、gotoreturn3.2标准输入输出函数C语言的输入和输出操作是通过调用C标准函数库中的函数来实现的。

标准函数库是由C编译程序提供的、以编译后的目标代码形式存储的函数的集合。用户程序可根据需要按规定的格式调用其中的函数来完成相应的功能。标准输入输出函数默认的标准输入设备通常为键盘,默认的标准输出设备通常为显示器。由于这些函数都是C语言提供的“标准I/O库”函数,其具体函数定义均在头文件“stdio.h”中,因此在使用这些函数之前应该使用预编译命令#include<stdio.h>

将这些库函数包含到C程序中。C语言中从标准输入和输出设备中进行读(写)的四个标准函数是:字符输出函数putchar字符输入函数getchar格式输出函数printf格式输入函数scanf3.2.1字符输入和输出函数3.2.2格式输出函数printf3.2.3格式输入函数scanf3.2.1字符输入和输出函数

1字符输出函数:函数调用的一般形式:

putchar(ch)功能:在标准输出设备(即显示器屏幕)上输出一个字符。ch可以是char、short或int类型的表达式,其值是要被输出字符的字符码。返回值是被输出的字符。例如:

putchar('b'); putchar('\101');#include"stdio.h"

main(){charc1,c2;c1='a';c2='b';putchar(c1);putchar(c2);putchar('\n');putchar(c1-32);putchar(c2-32);

putchar('\n');}也可改为:c1=97;c2=98;输出结果:abAB例3.1#include“stdio”voidmain(){ charc1,c2,c3; c1=‘T’; c2=‘o’; c3=‘m’; putchar(c1); putchar(c2); putchar(c3);}输出结果:Tom例3.2#include“stdio”voidmain(){ charc1,c2,c3; c1=‘T’;c2=‘o’;c3=‘m’; putchar(c1); putchar(‘\n’); putchar(c2); putchar(‘\n’); putchar(c3); putchar(‘\n’);}输出结果:T o m也可改为:c1=84;c2=111;c3=109;说明:若有:inti=7;下面四个语句是等价的,同为输出一个响铃字符:putchar(i);putchar(7);putchar(‘\07’);putchar(‘\a’);下面三个语句分别输出字符a,3和换行putchar(‘a’);putchar(‘3’);putchar(‘\n’);

注:putchar(3)输出是♥而不是整数3。putchar(((c=getchar())>=’a’&&c<=’z’)?c-‘a’+’A’:c);

该语句先输入一个字符存入变量c,如果c是小写字母则将其转换成大写字母后输出,否则直接输出原字符。2字符输入函数函数调用的一般形式

getchar()功能:从标准输入设备(即键盘)上读取一个字符。返回值(即函数值)是所读取字符的字符码,类型为由unsignedchar转换的int。例如:c=getchar();putchar(getchar());printf("%c\n",getchar());【例】#include"stdio.h"voidmain(){charch;

ch=getchar();

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

printf("%c%d\n\n",ch-32,ch-32);}程序运行时输入:m

并按回车键后输出结果是:m109M77如果输入多个字符,getchar()只能接收第一个getchar函数需要交互输入,接收到输入字符之后才继续执行程序。连续使用getchar函数时,要注意字符的输入形式,例如执行如下程序段:charch1,ch2;ch1=getchar();ch2=getchar();必须连续输入两个字符,中间不能有其他字符。如果有空格,空格也会被作为输入字符接收getchar和putchar函数用于输入和输出单个字符,输入和输出过程中不进行格式上的任何转换。printf和scanf函数在数据的输入和输出过程中能够将计算机内部形式的数据和输入输出任务上的数据相互转换,称为格式输出和格式输入。3.2.2格式输出函数printf

函数调用的一般形式

printf(格式控制,参数2,…,参数n)参数2,…,参数n可以是任何基本类型的表达式,功能:按格式控制所指定的格式,在标准输出设备上输出参数2、…、参数n的值。函数的返回值是实际输出字符的数目。例如:

inta=123,b=100;

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

printf("c=%d+%d=%d\n",a,b,a+b);调用printf函数时至少要给出第一个参数,即格式说明符。用双引号括起的字符串,用于指定输出数据的类型、格式、个数包括:普通字符和格式说明符照原样输出

printf("c=%d+%d=%d\n",a,b,a+b);格式说明符:指定输出3个十进制整型数,分别为变量a、b、a+b的值格式说明符用于说明数据输出格式,其形式为:%转换字符一个格式说明符以%开头。每个格式说明符对应于一个输出参数,该参数被转换成由转换说明规定的数据格式后输出。普通字符通常用作输出提示信息,它可以与转换说明交替出现。输出格式说明符整型数据

%d以有符号十进制形式输出整型数%ld输出十进制长整型数据。在VC6.0中与%d相同%u(%lu)以无符号十进制形式输出整型数(无符号十进制长整型数据)在VC6.0中二者作用相同%o以无符号八进制形式输出整型数%x以无符号十六进制形式输出整型数例实型数据

%f以十进制小数形式输出单、双精度实型数%e以指数形式输出单、双精度实型数例%g以%f或%e中宽度最小的形式输出实型数,且不输出无意义的零例字符型数据

%c输出一个字符%s按实际宽度输出一个字符串其他

%%输出字符%本身例例:printf(“%d,%d”,a,b);longinta=1234567;printf(“%ld”,a);#include“stdio.h” voidmain() { unsignedintx=4294967295;

inty=-2;

printf(“x=%d,%u\n”,x,x);

printf(“y=%d,%u\n”,y,y);}x、y的内存分配情况输出结果:

x=-1,

4294967295y=-2,4294967294

1111

11

111111

11

111111

11

111111

11

111111

11

111111

11

111111

11

111111

1110intx=-1;printf(“%d,%o,%x\n”,x,x,x);-1的内存分配情况1111

11

111111

11

111111

11

111111

11

11输出结果:

-1,

37777777777,ffffffff例3.4#include“stdio.h”voidmain(){ doublex=3.1415; floaty=15.725;

printf(“x=%f,y=%f\n”,x,y);}vc6.0和TC3.0都默认输出6位小数,不够时末尾补零。若以指数形式输出,则输出语句改为:

printf(“x=%e,y=%e\n”,x,y);输出结果:

x=3.141500,

y=15.725000输出结果:

x=3.141500e+000,

y=1.572500e+001例:#include“stdio.h”voidmain(){ doublepi=3.1415;

printf(“%f,%e,%g”,pi,pi,pi);}输出结果:

3.141500,3.141500e+000,

3.1415例:charc;c=‘s’;printf(“%c,%s,%%”,c,”Goodmorning!”);输出结果:

s,Goodmorning!,%域宽在%和格式说明符之间可以加入域宽说明,用于指定数据输出时的对齐方向、输出数据的域宽度、小数部分的位数等要求。:%[域宽]格式说明符printf域宽说明字符

域宽说明符号意义-(减号)以左对齐方式输出(默认右对齐)+以右对齐方式输出,输出正值时前面加符号+空格输出的第一个字符不是符号时,要输出一个空格作参照0(零)数据不足最小输出宽度时,左补零#对于o格式输出前导0,对于x或X格式要输出0x或0X前缀,对于g或G格式不删除尾部零m(正整数)域宽,指出输出数据的最小宽度。如果实际宽度>m,则按实际宽度;如果实际宽度<m,则左边(左对齐时为右边)补上空格或零(当有域宽说明字符0时).(小数点)分隔域宽与精度。小数点前面可以没有域宽说明符。n(正整数)指出输出数据的精度。对于e、f格式为小数部分的位数,对于g格式为有效字的个数,对于整数为至少应输出的数字的个数(添加前导0来满足所需宽度)例:设有整数x=18,y=-1:

printf(“%-5d,%05d,%+5d,%4d\n”,x,x,x,y); printf(“%15o,%-10x\n”,y,y);输出结果:

18□□□,00018,+18,

□□-1

□□37777777777,ffffffff

□□

例3.5#include“stdio.h”voidmain(){ doublepi=3.1415;

printf(“%f,%6.2f,%.2f,%-6.2f\n”,pi,pi,pi,pi);}输出结果:

3.141500,□□3.14,3.14,3.14□□

charc; c=‘s’; Printf(“%c,%3c”,c,c);输出结果:

s,□□s

例3.6#include“stdio”voidmain(){printf(“%s,%3s,%8s,%-8s,%8.3s”,”Hello”,”Hello”,”Hello”,”Hello”,”Hello”);}输出结果:

Hello,Hello,□□□Hello,Hello

□□□,□□□□□Hel

例3.7#include"stdio.h"voidmain(){

int

a,b; floatx,y,s; a=12;b=-34; x=3.1;y=6.3;s=x*x-y*y;

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

printf(“x=%6.2f,y=%-6.2f,s=%.2f\n",x,y,s);}输出结果:

a=12,b=-34x=3.10,y=6.30,s=-30.08例3.8#include"stdio.h"voidmain(){

intx=83; chary=‘S’;

printf(“x=%d,%o,%x,%c\n",x,x,x,x);

printf(“y=%d,%o,%x,%c\n",y,y,y,y);

printf(“x=%f%%”,1.0/3);}输出结果:

x=83,123,53,Sy=83,123,53,S

0.333333%例1整型数据的输出voidmain(){inta=11,b=22;

intm=-1;longn=123456789;

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

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

printf("m:%d,%o,%x,%u\n",m,m,m,m);

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

printf("n=%ld\n",n);}程序输出:1122a=11,b=22m:-1,177777,ffff,65535n=-13035n=123456789例2实型数据的输出voidmain(){floatx=1234.56,y=1.23456789;doublez=1234567.123456789;

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

printf("z=%f\n",z);

printf("z=%e\n",z);

printf("z=%g\n",z);

printf("z=%18.8f\n",z);

printf("x=%10.3f\n",x);

printf("x=%-10.3f\n",x);

printf("x=%4.3f\n",x);}程序输出:x=1234.560059,y=1.234568z=1234567.123457z=1.23457e+06z=1.23457e+06z=1234567.12345679x=1234.560x=1234.560x=1234.560例3字符型数据的输出voidmain(){intm=97;charch='B';

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

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

printf("%s\n","student");printf("%10s\n","student");printf("%-10s\n","student");printf("%10.3s\n","student");printf("%.3s\n\n","student");}程序输出:m:97ach:66Bstudentstudentstudent

stustu注意:printf函数格式控制中的格式说明符与输出参数的个数、次序和类型必须一一对应。格式说明符的%和后面的描述符之间不能有空格。除%X、%E、%G外类型描述符必须是小写字母。长整型数应该用%ld(或%lo、%lx、%lu)格式输出,否则会出现输出错误。数值范围在0~255之间的整数也可以用字符形式输出。反之,一个字符型数据也可以用整数形式输出。printf函数的参数可以是常量、变量或表达式。在计算各参数值时,C语言采用从右至左的顺序求值。printf中参数右结合,如设inti=1;则:

printf(“%d,%d,%d”,++i,++i,++i); 输出结果为4,3,2

printf(“%d,%d,%d”,i++,i++,i++); 输出结果为3,2,1

3.2.3格式输入函数scanf

函数调用的一般形式scanf(格式控制,地址参数2…,地址参数n);功能:按格式控制指定的格式,从标准输入设备(即键盘)输入数据,并依次存放到对应地址参数指定的变量中(即将输入值赋给变量)。返回被转换并赋值的数据项的数目。

例如:scanf("%d%f",&a,&f);scanf("a=%d,b=%d",&a,&b);用双引号括起的字符串,用于指定输入数据的类型、格式、个数以及输入的形式,包括:普通字符和格式说明符照原样输入

scanf("a=%d,b=%d",&a,&b);格式说明符:指定输入2个十进制整型数赋给变量a和b输入格式说明符整型数据

%d输入十进制整型数%u输入无符号的十进制整型数%o输入八进制整型数%x输入十六进制整型数实型数据

%f输入小数形式的单精度实型数%e输入指数形式的单精度实型数字符型数据

%c输入单个字符%s输入一个字符串在%和格式符之间可以使用附加说明符附加格式说明符l与d、o、x、u结合输入长整型数与f、e结合输入double型数h与d、o、x、u结合输入短整型数m指定数据输入的宽度(即域宽)*忽略读入的数据(即不将读入数据赋给相应变量)例如:%mf——输入m位数(域宽)%*d——忽略输入的一个整型数对float和double型指整数位数+小数点+小数位数例如:scanf("%d%d%d",&a,&b,&c);输入3个整型十进制数,以空白符(空格、tab键或回车键)分隔scanf("%d,%o,%f",&a,&b,&x);输入3个数,以“,”分隔scanf("a=%d,b=%d",&a,&b);输入的形式是:a=32,b=28(普通字符要照原样输入)int

i,j; scanf(“%3d%d”,&i,&j);

输入12345678,则整数123被赋给i,4被赋给j。shorti; longj;

doublex;

scanf(%hd%ld”,&i,&j);

scanf(“%lf”,&x);使用scanf函数应注意:输入数据个数、次序和类型必须与格式说明符一一对应。地址参数形式:&变量名(除数组或指针变量)格式控制中有普通字符时,必须照原样输入。格式控制中无普通字符时,输入的数值型数据之间、字符串之间用空白符分隔,字符型数据不必分隔。double型数据输入时,必须用%lf或%le格式。实型数输入时域宽不能用m.n形式的附加说明。当整型或字符型格式说明符中有宽度说明时,按宽度说明截取数据。为了减少不必要的输入量,除了逗号、分号、空格符以外,格式控制中尽量不要出现普通字符,也不要使用‘\n’

、‘\t’

等转义字符。scanf("%c%c%c",&ch1,&ch2,&ch3);要输入:abc不能输入:abc注意数值型数据与char型数据的混合输入例:例如:scanf("%d%d",&m,&n);scanf("%c",&ch);错误输入:3228a

正确输入:3228a

当下一次调用scanf时,从上一次scanf调用已被读取的最后一个字符的后面那一个字符开始读取。例1. inti,j;floatx,y;

scanf(“%d%d”,&i,&j,&x);

scanf(“%f”,&y);执行时输入123456.789执行第一个scanf调用时i被赋值为12,j为34,x未被赋值。Scanf返回值为2;56.7未被读取。执行第2个scanf时,将56.7赋予y,89多余,scanf返回值为1。转换说明应与输入参数所指变量的类型一致,否则,输入数据不是所需要的结果;转换说明项个数也应与输入参数个数相同,如果转换说明项个数少于输入参数个数,右边多出的输入参数所指变量将不被赋值,反之,数据不存放。例2.int

i,j;

scanf(“%d%d”,&i,&j);执行时输入12a则i为12,j未被赋值,scanf返回值为1。如果%和格式说明符之间加了*,则输入数据被跳过,不赋值。 例如:inti=0,j=0,k=0;

scanf(“%d%*d%d”,&i,&j,&k);

执行时输入:102030

执行结果为:i=10,j=30,k依然保留原来的0;其中第2个数据20被跳过不赋予任何变量。在使用“%”输入字符时,空格和转义字符都作为有效字符输入。 例如:

charch1,ch2,ch3; scanf(“%c%c%c”,&ch1,&ch2,&ch3);

若输入:B□O□Y↙

执行结果为:ch1=B,ch2=□,ch3=O例3.9#include"stdio.h"voidmain(){

int

x,y,z;

scanf(“%d%d”,&x,&y); z=x*x+y*y;

printf(“z=%d\n",z);}程序运行时:

34(输入x、y的值)z=25(输出z的值)例3.10#include"stdio.h“#include“math.h”voidmain(){ doublea,b,c;

printf(“input

a,b:”);

scanf(“%lf,%lf”,&a,&b);c=sqrt(a*a

温馨提示

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

评论

0/150

提交评论