资源描述
第第第第3 3章章章章 顺序程序设计和顺序程序设计和顺序程序设计和顺序程序设计和输入输入输入输入/输出输出输出输出制作人:李敏制作人:李敏制作人:李敏制作人:李敏u学习的内容学习的内容 程序对数据的处理流程:程序对数据的处理流程:程序的主要功能就是对数据的处理,其整个流程主要包括数据的输入、数据的处理、数据的输出。C C C C程序中如何实程序中如何实程序中如何实程序中如何实现数据输入现数据输入现数据输入现数据输入?C C C C程序中如何实程序中如何实程序中如何实程序中如何实现数据输出现数据输出现数据输出现数据输出?程序的结构:程序的结构:写文章有文章的结构 建房子有房子的结构 制造机械产品由机械产品的结构 那么编写程序是否有程序的结构呢?u学习的内容学习的内容 程序结构程序结构程序结构程序结构顺序结构顺序结构顺序结构顺序结构选择结构选择结构选择结构选择结构循环结构循环结构循环结构循环结构YES!本章讨论本章讨论本章讨论本章讨论第第第第5 5章讨论章讨论章讨论章讨论第第第第6 6章讨论章讨论章讨论章讨论3.2 C语句概述表达式语句表达式语句表达式语句表达式语句 表达式语句由一个表达式加上一个分号构成,一般形式表达式语句由一个表达式加上一个分号构成,一般形式表达式语句由一个表达式加上一个分号构成,一般形式表达式语句由一个表达式加上一个分号构成,一般形式为:为:为:为:表达式;表达式;表达式;表达式;函数调用语句函数调用语句函数调用语句函数调用语句 由函数名由函数名由函数名由函数名、函数参数函数参数函数参数函数参数、返回值类型、返回值类型、返回值类型、返回值类型加上一个分号构成:加上一个分号构成:加上一个分号构成:加上一个分号构成:返回类型返回类型返回类型返回类型 函数名(参数表);函数名(参数表);函数名(参数表);函数名(参数表);控制语句控制语句控制语句控制语句 由特定的语句定义符组成。由特定的语句定义符组成。由特定的语句定义符组成。由特定的语句定义符组成。C C C C语言的九种控制语句被分成语言的九种控制语句被分成语言的九种控制语句被分成语言的九种控制语句被分成3 3 3 3类:类:类:类:条件判断语句:条件判断语句:条件判断语句:条件判断语句:if,switchif,switchif,switchif,switch;循环执行语句:循环执行语句:循环执行语句:循环执行语句:do-while,while,fordo-while,while,fordo-while,while,fordo-while,while,for;转向语句:转向语句:转向语句:转向语句:break,goto,continue,returnbreak,goto,continue,returnbreak,goto,continue,returnbreak,goto,continue,return复合语句复合语句复合语句复合语句 用大括号用大括号用大括号用大括号 括起来的多个语句称为复合语句:括起来的多个语句称为复合语句:括起来的多个语句称为复合语句:括起来的多个语句称为复合语句:a=1 a=1 a=1 a=1;a+;b=a;a+;b=a;a+;b=a;a+;b=a;空语句空语句空语句空语句 只有分号;的语句称为空语句:只有分号;的语句称为空语句:只有分号;的语句称为空语句:只有分号;的语句称为空语句:while(getchar()!=n)while(getchar()!=n)while(getchar()!=n)while(getchar()!=n);#include#include int max(int a,int b);int max(int a,int b);void main()void main()int x,y,z;int x,y,z;scanf(%d%d,&x,&y);scanf(%d%d,&x,&y);z=max(x,y);z=max(x,y);printf(max=%dn,z);printf(max=%dn,z);int max(int a,int b)int max(int a,int b)int c;int c;if (a b)if (a b)c=a;c=a;return c;return c;else else c=b;c=b;return c;return c;3.2 结构化程序设计 1.1.算法的基本概念算法的基本概念算法的基本概念算法的基本概念 程序程序程序程序 =数据结构数据结构数据结构数据结构 +算法。算法。算法。算法。算法:算法:算法:算法:简而言之,就是解决问题的方法与步骤。简而言之,就是解决问题的方法与步骤。简而言之,就是解决问题的方法与步骤。简而言之,就是解决问题的方法与步骤。程序设计语言:程序设计语言:程序设计语言:程序设计语言:是程序开发工具,即是将算法转化为是程序开发工具,即是将算法转化为是程序开发工具,即是将算法转化为是程序开发工具,即是将算法转化为程序的开发工具。程序的开发工具。程序的开发工具。程序的开发工具。程序:程序:程序:程序:算法的具体实现。算法的具体实现。算法的具体实现。算法的具体实现。学习学习学习学习C C C C语言,不仅要熟练掌握其语言本身的特点、语言,不仅要熟练掌握其语言本身的特点、语言,不仅要熟练掌握其语言本身的特点、语言,不仅要熟练掌握其语言本身的特点、语法规则等意外,更重要的就是掌握分析问题、解决问语法规则等意外,更重要的就是掌握分析问题、解决问语法规则等意外,更重要的就是掌握分析问题、解决问语法规则等意外,更重要的就是掌握分析问题、解决问题的方法,就是锻炼分析、分解,最终归纳整理出算法题的方法,就是锻炼分析、分解,最终归纳整理出算法题的方法,就是锻炼分析、分解,最终归纳整理出算法题的方法,就是锻炼分析、分解,最终归纳整理出算法的能力。的能力。的能力。的能力。2.2.2.2.设计算法举例设计算法举例设计算法举例设计算法举例【例【例【例【例1 1 1 1】求】求】求】求5!5!5!5!总体思路:总体思路:总体思路:总体思路:首先,求首先,求首先,求首先,求12,12,得到结果得到结果得到结果得到结果2;2;然后然后然后然后,将将将将1212的结果再乘以的结果再乘以的结果再乘以的结果再乘以3,3,得到结果得到结果得到结果得到结果6;6;接着将结果接着将结果接着将结果接着将结果6 6与与与与4 4相乘相乘相乘相乘,得到结果得到结果得到结果得到结果24;24;最后,将最后,将最后,将最后,将2424与与与与5 5相乘相乘相乘相乘,得到最后结果得到最后结果得到最后结果得到最后结果120120。具体步骤:具体步骤:具体步骤:具体步骤:(1)t=1;(1)t=1;(2)i=2;(2)i=2;(3)t(3)t i.i.结果放在结果放在结果放在结果放在t t中中中中,即即即即t t i-t;i-t;(4)i+1-i;(4)i+1-i;(5)(5)判断判断判断判断i i是否小于等于是否小于等于是否小于等于是否小于等于5,5,如果是如果是如果是如果是,返回重新执行返回重新执行返回重新执行返回重新执行(3),(3),否否否否则结束则结束则结束则结束,最后计算的最后计算的最后计算的最后计算的5!5!的结果保存在的结果保存在的结果保存在的结果保存在t t中中中中 【例【例【例【例2 2】求】求】求】求1-1/2+1/3-1/4+1/99-1/1001-1/2+1/3-1/4+1/99-1/100?总体思路:总体思路:总体思路:总体思路:式子中每一项分子均为式子中每一项分子均为式子中每一项分子均为式子中每一项分子均为1,1,1,1,分母从分母从分母从分母从1 1 1 1开始递增开始递增开始递增开始递增,且每一项的且每一项的且每一项的且每一项的符号与前一项相反符号与前一项相反符号与前一项相反符号与前一项相反.若用变量表示总和若用变量表示总和若用变量表示总和若用变量表示总和,sign,sign,sign,sign表示符号表示符号表示符号表示符号,m,m,m,m表表表表示分母示分母示分母示分母,term,term,term,term表示每个分数项的值表示每个分数项的值表示每个分数项的值表示每个分数项的值,则则则则term=sign(1/m),term=sign(1/m),term=sign(1/m),term=sign(1/m),下下下下一个分数项的符号与上一个相反一个分数项的符号与上一个相反一个分数项的符号与上一个相反一个分数项的符号与上一个相反,即即即即,sign=(-1)sign.,sign=(-1)sign.,sign=(-1)sign.,sign=(-1)sign.算算算算法描述如下法描述如下法描述如下法描述如下:(1)sign=1 (1)sign=1 最开始符号最开始符号最开始符号最开始符号为为正正正正 sum=1 sum=1 总总和和和和为为1 1 m=2 m=2 加数的序号加数的序号加数的序号加数的序号 (2)sign=(-1)(2)sign=(-1)sign sign 计计算符号算符号算符号算符号 (3)term=sign (3)term=sign(1/m)(1/m)得到下一得到下一得到下一得到下一项项的的的的值值 (4)sum=sum+term (4)sum=sum+term 求和求和求和求和,将将将将结结果存放在果存放在果存放在果存放在sumsum中中中中 (5)m=m+1 (5)m=m+1 加数序号加加数序号加加数序号加加数序号加11 (5)(5)若若若若i 100i 100,转转(2)(2)(6)(6)否否否否则则,结结束束束束 其中其中其中其中(2)(2)(5)(5)步步步步为为循循循循环环 起止框起止框 输入输入/出出框框 判断框判断框处理框处理框流程线流程线连接点连接点 开始1 i 2 jti ti+1 ii5结束YN 流程图流程图流程图流程图3.3.流程图流程图 三种基本结构算法的流程图描述三种基本结构算法的流程图描述三种基本结构算法的流程图描述三种基本结构算法的流程图描述(1)(1)顺序结构顺序结构顺序结构顺序结构ABCA条件条件ABTF(2)(2)分支结构分支结构分支结构分支结构条件条件TF(3)(3)循环结构循环结构循环结构循环结构ATF条件条件A条件条件TF3.3 基本输出函数 1.1.输入输出的概念输入输出的概念输入输出的概念输入输出的概念 以计算机为主体而言的概念以计算机为主体而言的概念以计算机为主体而言的概念以计算机为主体而言的概念 输入:输入:输入:输入:外设外设外设外设 计算机内部计算机内部计算机内部计算机内部 输出:输出:输出:输出:计算机内部计算机内部计算机内部计算机内部 外设。外设。外设。外设。C C C C语言的输入和输出是通过语言的输入和输出是通过语言的输入和输出是通过语言的输入和输出是通过库函数来实现库函数来实现库函数来实现库函数来实现。putcharputcharputcharputchar:输出字符输出字符输出字符输出字符getchargetchargetchargetchar:输入字符输入字符输入字符输入字符printfprintfprintfprintf:格式输出格式输出格式输出格式输出(f:format)(f:format)(f:format)(f:format)scanfscanfscanfscanf:格式输入格式输入格式输入格式输入putsputsputsputs:输出字符串输出字符串输出字符串输出字符串(s(s(s(s:string)string)string)string)getsgetsgetsgets:输入字符串输入字符串输入字符串输入字符串使用时一定要在程序开头添加使用时一定要在程序开头添加#include#include 将有关的头文件包含到用户源文件中。将有关的头文件包含到用户源文件中。形式形式:int putchar(c);int putchar(c);int putchar(c);int putchar(c);功能功能:向终端向终端向终端向终端(一般为显示器一般为显示器一般为显示器一般为显示器)输出一个字符输出一个字符输出一个字符输出一个字符,其中其中其中其中c c c c为字符型为字符型为字符型为字符型或整型变量或整型变量或整型变量或整型变量2.putchar()2.putchar()字符输出函数字符输出函数字符输出函数字符输出函数返回值返回值:输出正常输出正常输出正常输出正常,返回显示字符的返回显示字符的返回显示字符的返回显示字符的ASCIIASCIIASCIIASCII码码码码;否则否则否则否则,返回返回返回返回-1.-1.-1.-1.#include#include stdio.hstdio.h main()main()char a,b,c;char a,b,c;a=B;b=O;c=Y;a=B;b=O;c=Y;putchar(a);putchar(a);putchar(b);putchar(b);putchar(c);putchar(c);结果结果:BOY:BOYputchar(101);输出Aputchar(a );输出aputchar(015);输出3 格式化输出printf 一般格式一般格式一般格式一般格式printf(printf(printf(printf(格式控制字符串格式控制字符串格式控制字符串格式控制字符串 ,表达式,表达式,表达式,表达式1 1 1 1,表达式,表达式,表达式,表达式2 2 2 2,表达式,表达式,表达式,表达式n);n);n);n);功能功能功能功能 按照按照按照按照“格式控制字符串格式控制字符串格式控制字符串格式控制字符串”的要求,将的要求,将的要求,将的要求,将表达式表达式表达式表达式1 1 1 1,表达式,表达式,表达式,表达式2 2 2 2,表达,表达,表达,表达式式式式n n n n的值显示在计算机屏幕上。的值显示在计算机屏幕上。的值显示在计算机屏幕上。的值显示在计算机屏幕上。说明说明说明说明 格式控制字符串用于指定输出格式。它包含两类字符:格式控制字符串用于指定输出格式。它包含两类字符:格式控制字符串用于指定输出格式。它包含两类字符:格式控制字符串用于指定输出格式。它包含两类字符:常规字符:常规字符:常规字符:常规字符:包括可显示字符和用转义字符表示的字符。包括可显示字符和用转义字符表示的字符。包括可显示字符和用转义字符表示的字符。包括可显示字符和用转义字符表示的字符。格式控制符:格式控制符:格式控制符:格式控制符:以以以以%开头的一个或多个字符,以说明输出数据的类型、形开头的一个或多个字符,以说明输出数据的类型、形开头的一个或多个字符,以说明输出数据的类型、形开头的一个或多个字符,以说明输出数据的类型、形式、长度、小数位数等。其格式为:式、长度、小数位数等。其格式为:式、长度、小数位数等。其格式为:式、长度、小数位数等。其格式为:%修饰符修饰符修饰符修饰符 格式转换字符格式转换字符格式转换字符格式转换字符例:例:例:例:int x=10;int x=10;printf(“printf(“The Value of x isThe Value of x is%d%dnn”,x);”,x);常规字符常规字符常规字符常规字符常规字符常规字符常规字符常规字符(转义符转义符转义符转义符)格式控制符格式控制符格式控制符格式控制符(修饰符)(修饰符)(修饰符)(修饰符)格式控制符格式控制符格式控制符格式控制符(格式转换符)(格式转换符)(格式转换符)(格式转换符)printfprintf使用时的注意事项使用时的注意事项使用时的注意事项使用时的注意事项(1)(1)(1)(1)格式控制字符串可以不包含任何格式控制符。格式控制字符串可以不包含任何格式控制符。格式控制字符串可以不包含任何格式控制符。格式控制字符串可以不包含任何格式控制符。(2)(2)(2)(2)当格式控制字符串中既含有常规字符,又包含有格当格式控制字符串中既含有常规字符,又包含有格当格式控制字符串中既含有常规字符,又包含有格当格式控制字符串中既含有常规字符,又包含有格式控制符时,则表达式的个数应与格式控制符的个数式控制符时,则表达式的个数应与格式控制符的个数式控制符时,则表达式的个数应与格式控制符的个数式控制符时,则表达式的个数应与格式控制符的个数一致。此时,常规字符原样输出,而格式控制符的位一致。此时,常规字符原样输出,而格式控制符的位一致。此时,常规字符原样输出,而格式控制符的位一致。此时,常规字符原样输出,而格式控制符的位置上输出对应的表达式的值,其对应的顺序是:置上输出对应的表达式的值,其对应的顺序是:置上输出对应的表达式的值,其对应的顺序是:置上输出对应的表达式的值,其对应的顺序是:从左从左从左从左到右的格式控制符对应从左到右的表达式。到右的格式控制符对应从左到右的表达式。到右的格式控制符对应从左到右的表达式。到右的格式控制符对应从左到右的表达式。(3)(3)(3)(3)如果格式控制字符串中格式控制符的个数多于表达如果格式控制字符串中格式控制符的个数多于表达如果格式控制字符串中格式控制符的个数多于表达如果格式控制字符串中格式控制符的个数多于表达式的个数,则余下的格式控制符的值将是不确定的。式的个数,则余下的格式控制符的值将是不确定的。式的个数,则余下的格式控制符的值将是不确定的。式的个数,则余下的格式控制符的值将是不确定的。(4)(4)(4)(4)不同类型的表达式要使用不同的格式转换符,同一不同类型的表达式要使用不同的格式转换符,同一不同类型的表达式要使用不同的格式转换符,同一不同类型的表达式要使用不同的格式转换符,同一表达式如果按照不同的格式转换符来输出,其结果可表达式如果按照不同的格式转换符来输出,其结果可表达式如果按照不同的格式转换符来输出,其结果可表达式如果按照不同的格式转换符来输出,其结果可能是不一样的。能是不一样的。能是不一样的。能是不一样的。printf(“how are you?n”);printf(“how are you?n”);/只有一个字符串参数,只有一个字符串参数,只有一个字符串参数,只有一个字符串参数,输出为:输出为:输出为:输出为:how are you?how are you?how are you?how are you?printf(“how old are you?n”,20);printf(“how old are you?n”,20);/带有两个参数,带有两个参数,带有两个参数,带有两个参数,20202020没有意义,没有意义,没有意义,没有意义,输出为:输出为:输出为:输出为:how old are you?how old are you?how old are you?how old are you?已已已已 知:知:知:知:int a=2;int a=2;函数函数函数函数调调用:用:用:用:printf(a*a=printf(a*a=%d%d,a+5=,a+5=%d%dn,a*a,a+5);n,a*a,a+5);实际输实际输出:出:出:出:a*a=4,a+5=7a*a=4,a+5=7 printf(5+3=%d,5-3=%d,5*3=%d,5+3,5-3);printf(5+3=%d,5-3=%d,5*3=%d,5+3,5-3);输输出出出出结结果将是:果将是:果将是:果将是:5+3=85+3=8,5 3=25 3=2,5*3=-287105*3=-28710输出随机输出随机输出随机输出随机char ch=A;char ch=A;printf(ch=%c,ch);printf(ch=%c,ch);/输输出出出出结结果:果:果:果:ch=A ch=A (以字符形式(以字符形式(以字符形式(以字符形式输输出)出)出)出)printf(ch=%d,ch);printf(ch=%d,ch);/输输出出出出结结果:果:果:果:ch=65ch=65 (以(以(以(以AA字符的字符的字符的字符的ASCIIASCII码码形式形式形式形式输输出)出)出)出)4、格式字符不同类型的数据输出,用不同格式字符:d d格式符格式符格式符格式符十进制整数输出。十进制整数输出。十进制整数输出。十进制整数输出。%d:%d:按数据的实际长度输出。按数据的实际长度输出。%md:m%md:m表示输出字段宽度。若实际位数表示输出字段宽度。若实际位数m,mm,则按实际的长度输出。,则按实际的长度输出。如:printf(%4d,%4d,a,b);若a=123,b=12345,则结果:_123,12345 o o 格式符格式符 按八进制形式输出按八进制形式输出.int a=90;printf(%d,%o,a,a);则输出结果:90,132 x x格式符格式符以十六进制形式输出整数以十六进制形式输出整数.例:int a=90;printf(%x,%o,%d,a,a,a);输出结果:5A,132,90 u u格式符格式符输出输出unsignedunsigned型数据型数据.main()unsigned int a=65535;int b=-2;printf(“a=%d,%o,%x,%un”,a,a,a,a);printf(“b=%d,%o,%x,%un”,b,b,b,b);a=1,177777,ffff,65535b=2,177776,fffe,65534运行结果为:运行结果为:c格式符格式符输出一个字符出一个字符.注:若有一整型变量,其值在0255之间,则可以字符形式输出.一个字符型变量亦可以一个整型数据输出.char c=a;printf(%c,c);运行结果为:a,97 a,97 char c=a;int i=97;printf(%c,%cn,c,c);printf(%c,%cn,i,i);运行结果为:a s格式符格式符用来输出一个字符用来输出一个字符串串.允允许%ms,%ms,%m.ns,%m.ns四种形式四种形式,每一形式的意每一形式的意义如下如下:例:printf(%s,CHINA);结果:CHINA(1)%ms,输出的字符串占输出的字符串占m列列,如字符串本身长度大于如字符串本身长度大于m,则突破则突破m的限制的限制,将字符串全部输出。若串长小于将字符串全部输出。若串长小于m,则则左补空格左补空格。(2)%ms,如果串长小于如果串长小于m,则在则在m列范围内,字符串向列范围内,字符串向左靠,左靠,右补空格右补空格。例例:printf(%7s,CHINA);输出:输出:_ _ CHINA例例:printf(%-7s,CHINA);输出:输出:CHINA _ _(3)%m.ns,输出占m列,但只取字符串中左端n个字符。这n个字符输出在m列的右侧,左补空格左补空格。(4)%m.ns,其中m、n含义同上,n个字符输出在m列范围的左侧,右补空格右补空格。如果nm,则m自动取n值,即保证n个字符正常输出。例:printf(%6.4s,CHINA);输出:_ _ CHIN例:printf(%6.4s,CHINA);输出:CHIN_ _ f f格式符格式符格式符格式符以小数形式以小数形式以小数形式以小数形式输输出出出出单单、双精度、双精度、双精度、双精度实实数,有数,有数,有数,有以下几种形式以下几种形式以下几种形式以下几种形式:(1)(1)%f,%f,不指定字段不指定字段不指定字段不指定字段宽宽度度度度,由系由系由系由系统统自自自自动动指定指定指定指定,使整使整使整使整数部分全部如数数部分全部如数数部分全部如数数部分全部如数输输出出出出,并并并并输输出出出出6 6位小数。位小数。位小数。位小数。%f%m.nf%m.nf例例例例:printf(%f,23.4445559);:printf(%f,23.4445559);输输出:出:出:出:23.44455623.444556(2)(2)%m.nf,%m.nf,指定指定指定指定输输出的数据共占出的数据共占出的数据共占出的数据共占mm列,其中有列,其中有列,其中有列,其中有n n位位位位小数。如果小数。如果小数。如果小数。如果值长值长度小于度小于度小于度小于mm,则则左端左端左端左端补补空格。空格。空格。空格。例:printf(%8.4f,23.4445559);输出:_ 23.4446无论无论m为多少,整数部分都要全部输出为多少,整数部分都要全部输出(3)%m.nf,与%m.nf基本相同,只是使输出的数值向左端靠,右端补空格。例:printf(%-8.4f,23.4445);输出:23.4445 _ 许多情况与具体机器或系统有关,最好机器上一试。表表表表3.3.1 printf1 printf格式字符格式字符格式字符格式字符总结总结格式字符d以带符号的十进制形式输出整数(正数不输出符号)oxucsfeg以8进制无符号形式输出整数(不输出前导符0)。以16进制无符号形式输出整数(不输出前导符0 x)。以无符号10进制形式输出整数。以字符形式输出,只输出一个字符。说明输出字符串。以小数形式输出单、双精度数,隐含输出6位小数。以标准形式输出单、双精度数,数字部分小数位数为6位。选用f或%e格式中输出宽度较短的一种格式,不输出无意义的0。3.4 基本输入函数字符输入函数字符输入函数字符输入函数字符输入函数int getchar(void);int getchar(void);/应包含的应包含的应包含的应包含的.h.h文件为文件为文件为文件为stdio.hstdio.hgetchargetchar 功能:功能:功能:功能:从键盘读一字符从键盘读一字符从键盘读一字符从键盘读一字符 返值:返值:返值:返值:正常,返回读取字符的正常,返回读取字符的正常,返回读取字符的正常,返回读取字符的ASCIIASCIIASCIIASCII码值;出错码值;出错码值;出错码值;出错,返回返回返回返回EOF(-1)EOF(-1)EOF(-1)EOF(-1)。说明:说明:说明:说明:以回车符为输入结束条件;输入多个字符时,返回第一个以回车符为输入结束条件;输入多个字符时,返回第一个以回车符为输入结束条件;输入多个字符时,返回第一个以回车符为输入结束条件;输入多个字符时,返回第一个字符的值;输入字符的值;输入字符的值;输入字符的值;输入字符回显字符回显字符回显字符回显。#include#include#include#include void main()void main()char ch1,ch2;char ch1,ch2;ch1=ch1=getchar();getchar();ch2=ch2=getchar();getchar();putchar(ch1);putchar(ch1);printf(nch1=%c,ch2=%cn,ch1,ch2);printf(nch1=%c,ch2=%cn,ch1,ch2);1 1ch1=1,ch2=2ch1=1,ch2=2运行结果运行结果运行结果运行结果(假设输入为:(假设输入为:(假设输入为:(假设输入为:12121212):):):):格式化输入格式化输入scanfscanf 一般格式一般格式一般格式一般格式scanf scanf scanf scanf(“(“格式控制字符串格式控制字符串格式控制字符串格式控制字符串”,变量,变量,变量,变量1 1的地址,变量的地址,变量的地址,变量的地址,变量2 2的地址,的地址,的地址,的地址,变量,变量,变量,变量n n的地址的地址的地址的地址););功能功能功能功能 第一个参数格式控制字符串的控制下,接受用户的键盘输入,并将第一个参数格式控制字符串的控制下,接受用户的键盘输入,并将第一个参数格式控制字符串的控制下,接受用户的键盘输入,并将第一个参数格式控制字符串的控制下,接受用户的键盘输入,并将输入的数据依此存放在输入的数据依此存放在输入的数据依此存放在输入的数据依此存放在变量变量变量变量1 1 1 1、变量、变量、变量、变量2 2 2 2、变量、变量、变量、变量n n n n中中中中。int a;int a;scanf(%d,&a);scanf(%d,&a);取地址运算符取地址运算符(与按与按位位“与与”同符号同符号),只,只能作用于变量!能作用于变量!格式控制符与后续参数中的变量地址的对应关系格式控制符与后续参数中的变量地址的对应关系格式控制符与后续参数中的变量地址的对应关系格式控制符与后续参数中的变量地址的对应关系 已已已已 知:知:知:知:int a,b;int a,b;函数函数函数函数调调用:用:用:用:scanf(%d%d,&a,&b);scanf(%d%d,&a,&b);假假假假设输设输入:入:入:入:10201020 变变量的量的量的量的值值:a a的的的的值值是是是是1010,b b的的的的值值是是是是2020 scanfscanfscanfscanf函数的格式控制符函数的格式控制符函数的格式控制符函数的格式控制符%*width l|h Type%*width l|h Typel l 一般形式:一般形式:一般形式:一般形式:l l 说明:说明:说明:说明:表示可选项,可缺省。表示可选项,可缺省。表示可选项,可缺省。表示可选项,可缺省。|表示互斥关系。表示互斥关系。表示互斥关系。表示互斥关系。widthwidth:指定输入数据的域宽,指定输入数据的域宽,指定输入数据的域宽,指定输入数据的域宽,遇空格或不可转换字符则结遇空格或不可转换字符则结遇空格或不可转换字符则结遇空格或不可转换字符则结束。束。束。束。TypeType:各种格式转换符(参照各种格式转换符(参照各种格式转换符(参照各种格式转换符(参照printfprintf)。)。)。)。*:抑制符,输入的数据不会赋值给相应的变量。抑制符,输入的数据不会赋值给相应的变量。抑制符,输入的数据不会赋值给相应的变量。抑制符,输入的数据不会赋值给相应的变量。l l:用于用于用于用于d d、u u、o o、x|Xx|X前,指定输入为前,指定输入为前,指定输入为前,指定输入为longlong型整数;用于型整数;用于型整数;用于型整数;用于e|Ee|E、f f前,指定输入为前,指定输入为前,指定输入为前,指定输入为doubledouble型实数。型实数。型实数。型实数。h h:用于用于用于用于d d、u u、o o、x|Xx|X前,指定输入为前,指定输入为前,指定输入为前,指定输入为shortshort型整数。型整数。型整数。型整数。使用使用使用使用scanfscanfscanfscanf函数注意事项函数注意事项函数注意事项函数注意事项 (1)(1)(1)(1)如果相邻两个格式控制符之间,不指定数据分隔符如果相邻两个格式控制符之间,不指定数据分隔符如果相邻两个格式控制符之间,不指定数据分隔符如果相邻两个格式控制符之间,不指定数据分隔符(如逗号、冒号等),则相应的两个输入数据之间,(如逗号、冒号等),则相应的两个输入数据之间,(如逗号、冒号等),则相应的两个输入数据之间,(如逗号、冒号等),则相应的两个输入数据之间,至少用至少用至少用至少用一个空格分隔,或者用一个空格分隔,或者用一个空格分隔,或者用一个空格分隔,或者用TabTabTabTab键分隔,或者输入一个数据后,键分隔,或者输入一个数据后,键分隔,或者输入一个数据后,键分隔,或者输入一个数据后,按回车按回车按回车按回车,然后再输入下一个数据。,然后再输入下一个数据。,然后再输入下一个数据。,然后再输入下一个数据。(2)(2)(2)(2)格式控制字符串中出现的常规字符(包括转义字符)格式控制字符串中出现的常规字符(包括转义字符)格式控制字符串中出现的常规字符(包括转义字符)格式控制字符串中出现的常规字符(包括转义字符),务必原样输入。,务必原样输入。,务必原样输入。,务必原样输入。(3)(3)(3)(3)为改善人机交互性,同时简化输入操作,在设计输为改善人机交互性,同时简化输入操作,在设计输为改善人机交互性,同时简化输入操作,在设计输为改善人机交互性,同时简化输入操作,在设计输入操作时,一般先用入操作时,一般先用入操作时,一般先用入操作时,一般先用printf()printf()printf()printf()函数输出一个提示信息,再函数输出一个提示信息,再函数输出一个提示信息,再函数输出一个提示信息,再用用用用scanf()scanf()scanf()scanf()函数进行数据输入函数进行数据输入函数进行数据输入函数进行数据输入。(4)(4)(4)(4)当格式控制字符串中指定了输入数据的域宽当格式控制字符串中指定了输入数据的域宽当格式控制字符串中指定了输入数据的域宽当格式控制字符串中指定了输入数据的域宽widthwidthwidthwidth时,将读取输入数据中相应的时,将读取输入数据中相应的时,将读取输入数据中相应的时,将读取输入数据中相应的widthwidthwidthwidth位,但按需要的位数赋位,但按需要的位数赋位,但按需要的位数赋位,但按需要的位数赋给相应的变量,多余部分被舍弃。给相应的变量,多余部分被舍弃。给相应的变量,多余部分被舍弃。给相应的变量,多余部分被舍弃。例如:例如:例如:例如:scanf(%d%d,&num1,&num2);scanf(%d%d,&num1,&num2);假设给假设给假设给假设给num1num1输入输入输入输入1212,给,给,给,给num2num2输入输入输入输入3636,则正确的输入操作为:,则正确的输入操作为:,则正确的输入操作为:,则正确的输入操作为:12361236 或者或者或者或者 1212 36 36 使用使用使用使用“”符号表示按回车键操作,在输入数据操作中的作用符号表示按回车键操作,在输入数据操作中的作用符号表示按回车键操作,在输入数据操作中的作用符号表示按回车键操作,在输入数据操作中的作用是,通知系统输入操作结束。是,通知系统输入操作结束。是,通知系统输入操作结束。是,通知系统输入操作结束。例如:例如:例如:例如:scanf(%d:%d:%d,&h,&m,&s);scanf(%d:%d:%d,&h,&m,&s);假设给假设给假设给假设给h h输入输入输入输入1212,给,给,给,给mm输入输入输入输入3030,给,给,给,给s s输入输入输入输入1010,正确的输入操作为:,正确的输入操作为:,正确的输入操作为:,正确的输入操作为:12:30:1012:30:10 例如:例如:例如:例如:scanf(num1=%d,num2=%dn,&num1,&num2);scanf(num1=%d,num2=%dn,&num1,&num2);假设给假设给假设给假设给num1num1输入输入输入输入1212,给,给,给,给num2num2输入输入输入输入3636,正确的输入操作为:,正确的输入操作为:,正确的输入操作为:,正确的输入操作为:num1=12 num1=12,num2=36nnum2=36n 例如:例如:例如:例如:将将将将scanf(num1=%d,num2=%dn,&num1,&num2);scanf(num1=%d,num2=%dn,&num1,&num2);改为:改为:改为:改为:printf(num1=);scanf(%d,&num1);printf(num1=);scanf(%d,&num1);printf(num2=);scanf(%d,&num2);printf(num2=);scanf(%d,&num2);例如:例如:例如:例如:scanf(%3c%3c,&ch1,&ch2);scanf(%3c%3c,&ch1,&ch2);假设输入假设输入假设输入假设输入abcdefgabcdefg ,则系统将读取的,则系统将读取的,则系统将读取的,则系统将读取的“abc”“abc”中的中的中的中的aa赋给变量赋给变量赋给变量赋给变量ch1ch1;将读取的;将读取的;将读取的;将读取的defdef中的中的中的中的dd赋给变量赋给变量赋给变量赋给变量ch2ch2。使用使用使用使用scanfscanfscanfscanf函数注意事项函数注意事项函数注意事项函数注意事项 (5)(5)(5)(5)当格式控制字符串中含有抑制符当格式控制字符串中含有抑制符当格式控制字符串中含有抑制符当格式控制字符串中含有抑制符*时,表示本输入时,表示本输入时,表示本输入时,表示本输入项对应的数据读入后,不赋给相应的变量(该变量由下一个格项对应的数据读入后,不赋给相应的变量(该变量由下一个格项对应的数据读入后,不赋给相应的变量(该变量由下一个格项对应的数据读入后,不赋给相应的变量(该变量由下一个格式指示符输入)。式指示符输入)。式指示符输入)。式指示符输入)。(6)(6)(6)(6)使用格式控制符使用格式控制符使用格式控制符使用格式控制符%c%c%c%c输入单个字符时,空格和转义字符输入单个字符时,空格和转义字符输入单个字符时,空格和转义字符输入单个字符时,空格和转义字符均作为有效字符被输入。均作为有效字符被输入。均作为有效字符被输入。均作为有效字符被输入。(7)(7)(7)(7)输入数据时,遇到以下情况,系统认为该数据结束:输入数据时,遇到以下情况,系统认为该数据结束:输入数据时,遇到以下情况,系统认为该数据结束:输入数据时,遇到以下情况,系统认为该数据结束:遇到空格,或者回车键,或者遇到空格,或者回车键,或者遇到空格,或者回车键,或者遇到空格,或者回车键,或者TabTabTabTab键。键。键。键。遇到输入域宽度结束。例如遇到输入域宽度结束。例如遇到输入域宽度结束。例如遇到输入域宽度结束。例如“%3d%3d%3d%3d”,只取,只取,只取,只取3 3 3 3列。列。列。列。遇到非法输入。比方说,在输入数值数据时,遇到字母等非遇到非法输入。比方说,在输入数值数据时,遇到字母等非遇到非法输入。比方说,在输入数值数据时,遇到字母等非遇到非法输入。比方说,在输入数值数据时,遇到字母等非数值符号。数值符号。数值符号。数值符号。(8)(8)(8)(8)当一次当一次当一次当一次scanfscanfscanfscanf调用需要输入多个数据项时,如果前面数调用需要输入多个数据项时,如果前面数调用需要输入多个数据项时,如果前面数调用需要输入多个数据项时,如果前面数据的输入遇到非法字符,并且输入的非法字符不是格式控制字据的输入遇到非法字符,并且输入的非法字符不是格式控制字据的输入遇到非法字符,并且输入的非法字符不是格式控制字据的输入遇到非法字符,并且输入的非法字符不是格式控制字符串中的常规字符,那么,这种非法输入将影响后面数据的输符串中的常规字符,那么,这种非法输入将影响后面数据的输符串中的常规字符,那么,这种非法输入将影响后面数据的输符串中的常规字符,那么,这种非法输入将影响后面数据的输入,导致数据输入失败。入,导致数据输入失败。入,导致数据输入失败。入,导致数据输入失败。例如:例如:例如:例如:scanf(%2d%*2d%3d,&num1,&num2);scanf(%2d%*2d%3d,&num1,&num2);printf(num1=%d,num2=%dn,num1,num2);printf(num1=%d,num2=%dn,num1,num2);假设输入假设输入假设输入假设输入123456789123456789 输出结果为:输出结果为:输出结果为:输出结果为:num1=12,num2=567num1=12,num2=567。例如:例如:例如:例如:scanf(%c%c%c,&ch1,&ch2,&ch3);scanf(%c%c%c,&ch1,&ch2,&ch3);假设输入:假设输入:假设输入:假设输入:ABCABC ,则系统将字母,则系统将字母,则系统将字母,则系统将字母AA赋值给赋值给赋值给赋值给ch1ch1,空格,空格,空格,空格赋赋赋赋值给值给值给值给ch2ch2,字母,字母,字母,字母BB赋值给赋值给赋值给赋值给ch3ch3。例如:例如:例如:例如:scanf(%d,a);scanf(%d,a);如果输入为:如果输入为:如果输入为:如果输入为:12a312a3 ,a a的值将是的值将是的值将是的值将是1212。例如:例如:例如:例如:scanf(%d,%d,&a,&b);scanf(%d,%d,&a,&b);如果输入为:如果输入为:如果输入为:如果输入为:12a3412a34 ,那么,那么,那么,那么a a的值将是的值将是的值将是的值将是1212,b b的值将无法预测。的值将无法预测。的值将无法预测。的值将无法预测。正确的输入是:正确的输入是:正确的输入是:正确的输入是:1212,3434 3.5 顺序程序设计举例 【例例例例1 1 1 1】任意从键盘输入一个三位整数,要求正确地分离任意从键盘输入一个三位整数,要求正确地分离任意从键盘输入一个三位整数,要求正确地分离任意从键盘输入一个三位整数,要求正确地分离出它的个位、十位和百位数,并分别在屏幕上输出。出它的个位、十位和百位数,并分别在屏幕上输出。出它的个位、十位和百位数,并分别在屏幕上输出。出它的个位、十位和百位数,并分别在屏幕上输出。程序设计的分析:程序设计的分析:程序设计的分析:程序设计的分析:本例要求设计一个从三位整数中分离出它的个位、十位和百位数的本例要求设计一个从三位整数中分离出它的个位、十位和百位数的本例要求设计一个从三位整数中分离出它的个位、十位和百位数的本例要求设计一个从三位整数中分离出它的个位、十位和百位数的算法。例如,输入的是算法。例如,输入的是算法。例如,输入的是算法。例如,输入的是456456456456,则输出的分别是,则输出的分别是,则输出的分别是,则输出的分别是4 4 4 4、5 5 5 5、6 6 6 6,最低位数字可用对,最低位数字可用对,最低位数字可用对,最低位数字可用对10101010求余的方法得到,如求余的方法得到,如求余的方法得到,如求余的方法得到,如456%10=6456%10=6456%10=6456%10=6,最高位的百位数字可用对,最高位的百位数字可用对,最高位的百位数字可用对,最高位的百位数字可用对100100100100整除的方整除的方整除的方整除的方法得到,如法得到,如法得到,如法得到,如456/10=4456/10=4456/10=4456/10=4,中间位的数字既可通过将其变换为最高位后再整除,中间位的数字既可通过将其变换为最高位后再整除,中间位的数字既可通过将其变换为最高位后再整除,中间位的数字既可通过将其变换为最高位后再整除的方法得到,如的方法得到,如的方法得到,如的方法得到,如(456-4*100)/10=5(456-4*100)/10=5(456-4*100)/10=5(456-4*100)/10=5,也可通过将其变换为最低位再求余的,也可通过将其变换为最低位再求余的,也可通过将其变换为最低位再求余的,也可通过将其变换为最低位再求余的方法得到,如方法得到,如方法得到,如方法得到,如(456/10)%10=5(456/10)%10=5(456/10)%10=5(456/10)%10=5。根据以上的分析,这个程序应这样设计:根据以上的分析,这个程序应这样设计:根据以上的分析,这个程序应这样设计:根据以上的分析,这个程序应这样设计:(1)(1)(1)(1)定义一个整型变量定义一个整型变量定义一个整型变量定义一个整型变量x x x x,用于存放用户输入的一个三位整数;再定,用于存放用户输入的一个三位整数;再定,用于存放用户输入的一个三位整数;再定,用于存放用户输入的一个三位整数;再定义三个整型变量义三个整型变量义三个整型变量义三个整型变量b0b0b0b0、b1b1b1b1、b2b2b2b2,用于存放计算后个位、十位和百位数。,用于存放计算后个位、十位和百位数。,用于存放计算后个位、十位和百位数。,用于存放计算后个位、十位和百位数。(2)(2)(2)(2)调用调用调用调用scanfscanfscanfscanf函数输入该三位整数。函数输入该三位整数。函数输入该三位整数。函数输入该三位整数。(3)(3)(3)(3)利用上述计算方法计算该数的个位、十位和百位数。利用上述计算方法计算该数的个位、十位和百位数。利用上述计算方法计算该数的个位、十位和百位数。利用上述计算方法计算该数的个位、十位和百位数。(4)(4)(4)(4)输出计算后的结果。输出计算后的结果。输出计算后的结果。输出计算后的结果。#include#include void main()void main()int x,b0,b1,b2;int x,b0,b1,b2;/变量定义变量定义变量定义变量定义 printf(please input an integer x:);printf(please input an integer x:);/提示用户输入一个整数提示用户输入一个整数提示用户输入一个整数提示用户输入一个整数 scanf(%d,&x);scanf(%d,&x);/输入一个整数输入一个整数输入一个整数输入一个整数 b2=x/100;b2=x/100;/用整除方法计算最高位用整除方法计算最高位用整除方法计算最高位用整除方法计算最高位 b1=(x-b2*100)/10;b1=(x-b2*100)/10;/计算中间位计算中间位计算中间位计算中间位 b0=x%10;b0=x%10;/用求余数法计算最低位用求余数法计算最低位用求余数法计算最低位用求余数法计算最低位 printf(bit2=%d,bit1=%d,printf(bit2=%d,bit1=%d,bit0=%dn,b2,b1,b0);bit0=%dn,b2,b1,b0);/输出结果输出结果输出结果输出结果 具体程序如下:具体程序如下:具体程序如下:具体程序如下:please input an integer x:456please input an integer x:456 bit2=4,bit1=5,bit0=6bit2=4,bit1=5,bit0=6 运行结果运行结果运行结果运行结果:输入三角形三边输入三角形三边输入三角形三边输入三角形三边,求三角形面积。求三角形面积。求三角形面积。求三角形面积。算法依据:s=(a+b+c)/2算法过程:1.输入边长a,b,c2.计算半周长s=(a+b+c)/23.计算面积area4.输出a,b,c,s,area算法依据:s=(a+b+c)/2算法过程:1.输入边长a,b,c2.计算半周长s=(a+b+c)/23.计算面积area4.输出a,b,c,s,area#include#include main()main()float a,b,c,s,area;float a,b,c,s,area;scanf(“%f,%f,%f”,&a,&b,&c);/scanf(“%f,%f,%f”,&a,&b,&c);/输入边长信息输入边长信息输入边长信息输入边长信息 s=0.5*(a+b+c);/s=0.5*(a+b+c);/计算半周长计算半周长计算半周长计算半周长 area=sqrt(s*(s-a)*(s-b)*(s-c);/area=sqrt(s*(s-a)*(s-b)*(s-c);/计算面积计算面积计算面积计算面积 printf(“a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2fn”,a,b,c,s);/printf(“a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2fn”,a,b,c,s);/显示结果显示结果显示结果显示结果 printf(“area=%7.2fn”,area);/printf(“area=%7.2fn”,area);/显示结果显示结果显示结果显示结果 输入一个大写字母输入一个大写字母输入一个大写字母输入一个大写字母,要求系统改为小写字母输出。要求系统改为小写字母输出。要求系统改为小写字母输出。要求系统改为小写字母输出。1.输入一个大写字母c12.将c1的ASCII码值+32,即c
展开阅读全文