第3章C语言程序的流程控制
- 格式:doc
- 大小:103.00 KB
- 文档页数:20
06c语言程序设计教案程序的控制结构—顺序结构int a=-1;printf(“%d,%o”,a,a);输出结果为:-1,177777这是因为-1在内存中以补码形式存放(见图3-2)。
八进制数为从低位开始,以三位一组划分为一个八进制数。
3)x格式符。
以十六进制数无符号形式输出整数。
例如:int a=-1;printf(“%x,%o,%d”,a,a,a);输出结果为:ffff,177777,-1十六进制数为从低位开始,见图3-2,以四位一组划分为一个数。
4)u格式符。
以十进制数无符号形式输出整数。
一个有符号的(int)型数据能够用%d格式输出,也能够用%u格式输出。
要注意两类数据的取值范畴大小。
例如:无符号数据的输出。
main(){unsigned int x=65535;int y=-1;printf(“x=%d,%o,%x,%u\n”,x,x,x,x);printf(“y=%d,%o,%x,%u\n”,y,y,y,y);}运行结果为:x=-1,177777,ffff,65535y=-1,177777,ffff,65535即-1的二进制形式以无符号形式输出时为整数65535。
5)c格式符。
用来输出一个字符。
例如:char x=’A’;printf(“%c,%d\n”,x,x);运行结果为:A,65能够看出,一个范畴在0~255的整数,既能够用%d格式输出,也能够用%c格式输出。
输出该整数或者整数对应ASCII的字符。
6)s格式符。
用来输出一个字符串,该格式有以下用法:①%s例如:printf(“%s”,”HELLO”);运行结果为:HELLO②%±ms,假如%ms字符串的实际宽度小于m,右对齐,左端补空格,%-ms,字符串左对齐,右端补空格;否则,不受m限制,输出实际宽度。
③%±m.ns,若%m.ns取字符串左端n个字符,输出在m列的右端,左端补空格;%-m.ns,取字符串左端n个字符,输出在m列的左侧,右侧补空格;若m<n,则m自动取n 值输出n个字符。
C语言程序设计教程课后习题答案下载C语言程序设计教程内容简介第1章C语言概述11.1简单的C语言程序11.2C语言的发展历史与特点31.2.1C语言的发展历史31.2.2C语言的'特点41.3C程序的开发步骤和上机调试流程51.3.1C程序的开发步骤51.3.2C程序的上机开发过程6习题112第2章基本数据类型的输入/输出132.1C语言的输入/输出132.2整型数据的输入/输出132.3浮点型数据的输入/输出142.4字符数据的输入/输出152.5字符串数据的输入/输出152.6格式化输入/输出举例172.7阅读材料182.7.1格式化输出函数printf的格式说明和使用182.7.2格式化输入函数scanf的格式说明和使用19习题221第3章流程控制223.1算法223.1.1算法的概念223.1.2算法的表达方式233.1.3基本流程控制结构253.1.4案例3.1 求1+1/2+…+1/100的和263.2选择语句263.2.1案例3.2 求三个整数的最大值(if语句)263.2.2案例3.3 百分制成绩转换成五分制成绩(多分支if语句)293.2.3案例3.4 判断所输入的一个字符是数字、空白符还是其他字符(switch语句)313.2.4案例3.5 百分制成绩转换成五分制成绩(switch语句)333.3循环语句343.3.1案例3.6 求1+1/2+…+1/100的和(while语句)343.3.2案例3.7 求1+1/2+…+1/100的和(do...while语句)353.3.3案例3.8 求1+1/2+…+1/100的和(for语句)373.4转向语句393.4.1案例3.9 判断所输入的一个大于1的正整数是否是素数(break语句)393.4.2案例3.10 输出100~200之间能被3整除的数(continue语句)413.5应用举例423.5.1案例3.11 计算1! + 2! + … + 10!(并讨论溢出问题)423.5.2案例3.12 计算级数1-1/3+1/5-1/7+…的和443.5.3案例3.13 统计输入的数字字符、字母字符和其他字符的个数453.5.4案例3.14 求两个正整数的最大公约数和最小公倍数453.5.5案例3.15 将一个正整数逆序输出463.5.6案例3.16 输入日期并检查其合理性,直到输入合理为止473.6阅读材料483.6.1C语言的语句483.6.2goto语句简介493.6.3exit()函数493.6.4程序调试简介50习题351C语言程序设计教程目录本书定位于将C语言作为计算机编程入门语言,以帮助读者树立计算机程序设计的思想,培养学生程序设计基本能力为目标的教材。
C程序设计复习要点第一章概述1.C程序的构成与结构特点2.C程序上机调试过程与流程第二章数据类型、运算量与表达式1.数据类型的种类(基本数据类型和构造数据类型)2.常量的数据类型及其表示(表示方法、存储字节数与表数范围)——整、实、字符、字符串和转义字符3.变量的命名、定义方法与赋初值4.各种表达式及其运算规则——优先级、结合性、类型自动转换与强制转换●算术运算符、表达式及其构造(注意“/”和“%”特殊性)●自增、自减运算符及其简单表达式运算●赋值运算符及其表达式(注意复合赋值运算符的运算方法)●逗号运算符及其表达式第三章流程控制1.赋值语句的一般形式、赋值过程及赋值规则(注意左右数据类型的一致或兼容)2.输入和输出函数的格式、功能及用法(只要求常用的格式控制符d, f, c, s),提醒注意:●格式输出中域宽和小数位数的控制●格式输入与输出中普通字符的原样输入和输出问题●熟悉并区别以下函数:putchar()、printf()、puts();getchar()、scanf()、gets()3.关系运算符及其表达式、逻辑运算符及其表达式和条件运算符及其表达式的运算规则(优先级、结合性)4.关系表达式与逻辑表达式的构造(根据已知条件写表达式)5.if语句的三种形式:if …语句、if …else …语句、if 语句的嵌套●if 语句的格式与用法:简单if、嵌套if、并列if●逻辑关系与执行过程●嵌套规则(重点掌握if …else …if …else …if …else)6.switch语句的格式与用法7.*熟练使用if和switch语句阅读和编写较为简单的选择结构程序8.三种循环语句:while() …、do …while()、for()的格式、执行过程及其用法●循环变量初始化、循环条件构造、循环体所要实现的任务和控制变量修改注意循环期间与结束时循环控制变量的取值问题9.结合例题理解和区别break与continue语句的作用及其用法10.本章涉及的主要算法:累加(计数)、累乘、递推、穷举、判素数、求最大公约与最小公倍等11.*熟练使用三种循环语句并结合以上算法阅读和编写较为简单的循环结构及其嵌套程序第四章复杂数据类型1.一维、二维数组的定义、初始化及其引用方法(数据输入、输出、存储与处理)2.字符数组的定义、初始化及其引用(字符串输入、输出、存储与处理)3.常用字符串处理函数:gets()、puts()、strlen()、strcmp()、strcpy()4.数组涉及的主要算法:排序、极值、逆序、回文和字符串的连接、复制、求长度等5.*熟练使用数组并结合以上算法阅读和编写较为简单的程序6.指针的概念:指针、指针变量、指针运算(*、&、++、--、+、-)7.变量、数组和字符串指针的定义、指向与引用(仅限于一维数组)8.了解指针数组与二级指针的概念和定义9.*能够阅读并理解使用指针进行数据处理的相关程序(极值、逆序、回文和字符串的连接、复制、求长度等)10.结构体与共用体的概念、定义与引用(仅限概念)第五章结构化程序设计与应用1.熟悉程序的三种基本结构:顺序、选择和循环2.*通过其中部分例题掌握选择、循环语句的使用以及循环和数组涉及的主要算法第六章函数与编译预处理1.掌握函数的定义、声明和调用方法及参数传递方式2.*结合相关例题掌握一般函数和递归函数的定义与使用3.熟悉局部变量与全局变量的定义及作用范围,了解各种静态与动态变量的定义、作用范围与生存期4.了解内部函数与外部函数的定义及调用规则5.掌握宏定义与宏展开(重点掌握带参数宏的定义与展开)6.了解文件包含的作用及其使用场合第七章文件1.了解文件的概念2.熟悉文件打开、关闭及各种与文件读写有关函数的格式与用法特别提醒:以上带*部分主要涉及程序阅读、程序填空和编写程序,其余部分主要以选择和概念填空题出现3ae bc C语言程序设计参考题型说明:★本题仅反映考试的题型,作为考前复习参考。
《C语言程序设计》课程教案表算法2:分析:设想用sum作为累加器,初值为0,利用sum+=i(i依次取值为1、2。
100)此分析需要解决的3个问题:1)sum=0,i=1;2)每执行一次sum+=i 后,i增1(i=i+1);3)判断如果i小于或等于100,重新执行步骤(2),否则停止计算main(){int i,s=0;i=1;while(i<=100)/*i<=100为循环条件*/{s=s+i;i++; /*改变i的值*/}printf(″s=%d″,s);}运行结果:s=5050说明:循环结构的三个术语:1、循环条件:循环结构中的条件表达式如while (i<=100)其中,i<100就是循环条件。
2、循环体:在每个循环周期均要执行一次的语句序列。
如while下用{ }括起来的语句序列。
3、循环控制变量:能够决定控制条件是真是假的量。
如while(i<=100)中的变量i要写出一个正确的循环结构,对控制变量要做三方面的工作:1、对循环控制变量赋初值。
2、将循环控制变量写入正确的控制条件。
3、对循环控制变量值的更新。
使用while语句需要注意以下几点:while语句的特点是先计算表达式的值,然后根据表达式的值决定是否执行循环体中的语句。
因此,如果表达式的值一开始就为“假”,那么循环体一次也不执行。
当循环体为多个语句组成,必须用{}括起来,形成复合语句。
在循环体中应有使循环趋于结束的语句,以避免“死循环”的发生。
下列情况,退出while循环条件表达式不成立(为零)循环体内遇break,gotowhile(s<=10){s=s+i*i;i++;}printf(“%d”,--i);}A) 4 B) 3 C) 5 D) 6对以下程序段,描述正确的是________________。
int x=0,s=0;while(!x!=0) s+=++x;printf(“%d”,s);A) 运行程序段后输出0 B) 运行程序段后输出1C) 程序段中的控制表达式是非法的D) 程序段循环无数次下面程序段的运行结果是[ ]。
第3章C语言程序的流程控制利用计算机进行程序设计时,不仅仅只处理一些简单的数据,在大部分的程序设计里处理的问题还是相当复杂的。
对于那些复杂的程序设计,读者不可能直接就能写出程序的源代码,而是要通过一些具体的设计方法(如用程序流程图)把程序设计思想先写出来,然后根据程序流程图编写代码。
本章将具体介绍进行程序设计时使用的基本方法和C程序的流程控制。
3.1程序设计的基本知识3.1.1程序流程图在描述一个程序的基本结构思想时有很多种方法,其中程序流程图是最常用也是最基本的方法。
1.传统程序流程图传统流程图表示法的特点是用一些图框表示各种类型的操作,用线表示这些操作的执行顺序。
美国国家标准化协会ANSI规定了一些常用的流程图符号,现已为世界各国普遍采用。
我国也有自己的国家标准GB 1526-89与该标准基本相同,本书就参照ANSI标准做具体介绍。
标准中各种图示如图3.1所示。
起止框输入输出框判断框处理框或流程线连接点注释框图3.1 传统流程图表示法下面对其中一些主要符号作简要说明:(1)起止框是用来标识程序的开始和结束位置的。
规定流程图以起止框开始,以起止框结束。
(2)输入输出框也叫数据框,其中可以注明数据名称、来源、用途或其它的文字说明。
(3)菱形框的作用是对一个给定的条件进行判断,根据给定的条件是否成立来决定如何执行其后的操作。
(4)处理框用矩形表示各种处理功能。
例如,执行一个或一组特定的操作,从而使信息的值、信息的形式或所在位置发生变化。
另外在矩形框内可注明特定处理名称或其简要功能。
(5)流程线用带箭头的直线表示程序的执行顺序。
当流程自左向右或自上向下时流程线可以不带箭头,其它情况应加箭头表示流程。
(6)连接点用小圆圈表示将画在不同地方的流程线连接起来。
下图中有两个以①为标志的连接点,它表示这两个点是互联在一起的,实际它们是同一个点。
这种连接通常用在图形画不下而需要分开画时。
(7)注释框不是流程图的必要部分,其不反映流程操作,只是为了流程图中某些操作做解释补充的,以帮助阅读流程图的人更好的理解流程图的作用。
2.N-S流程图灵活的流程线在程序设计中有它自己的优点,但也隐藏着许多导致错误的祸根。
因为它允许用流程线使流程任意转移,这对程序设计是一个隐患,它使程序流程看起来很乱,使程序难以理解和维护。
针对这一弊病,1973年美国学者I . Nassi和B . Shneiderman 提出了一种无流程线的流程图,称为N-S图。
它的基本表示方法是用一个矩形框,把整个程序算法像堆积木一样组成。
其基本结构如图3.3、3.4、3.5、3.6所示。
3.1.2程序的三种基本结构结构化的程序设计方法是面向过程的程序设计的基本方法。
1996年意大利Bobra和Jacopini提出了三种基本程序结构。
已经证明,这三种算法可以解决任何复杂的问题。
1.顺序结构(传统流程图表示) (N-S 流程图表示)图3.3 顺序结构流程图2. 选择结构(传统流程图表示) (N-S 流程图表示)图3.4 选择结构流程图3. 循环结构(1)while 循环结构( 传统流程图表示) (N-S 流程图表示)图3.5 当型循环结构流程图当条件P 成立语句组(2)do …while 循环结构( 传统流程图表示) (N-S 流程图表示) 图3.6 直到型流程图例3.1 画出求s=1+2+3+ … +100的传统流程图和N-S 流程图。
3.2C语言的基本语句3.2.1表达式语句C语言是一种表达式语言,所有的操作运算都是通过表达式来实现的。
由表达式组成的语句称为表达式语句,它是由一个表达式后接一个分号组成。
这里要特别强调,没有分号的不是语句。
1.赋值语句赋值语句由赋值表达式加一个分号组成。
例如:i = 1 ;2.函数调用语句函数调用语句由函数调用表达式后跟一个分号组成。
例如:strcpy( s1, "student", 4 );printf("good afternoon\n " );3.空语句空语句是只有一个分号而没有其他表达式的语句。
例如:;它不产生任何操作运算,只作为形式上的语句,被填充在控制结构之中。
3.2.2复合语句C语言还允许把一组语句放在一对花括号之中,称为复合语句。
要特别强调一点,一个复合语句的后花括号之后不应再写分号。
例如:{c = getchar();b = b +c ;putchar();}3.2.3流程控制语句选择型结构语句循环控制结构语句流程转向语句……3.3选择结构程序设计在C语言中实现选择结构的语句有两大类:if语句和switch语句。
3.3.1if语句(1)简单if语句格式:if(表达式)语句;功能:如果表达式的值为真,则执行其后的语句,否则不执行该语句。
其N-S流程图如图3.9表示。
图3.9 简单if语句流程图(2)基本if … else语句格式:if(表达式)语句1; else 语句2;功能:如果表达式值为真,则执行语句1,否则执行语句2。
其执行过程如图3.10所示。
图3.10 基本if … else语句流程图例3.3 从键盘输入任意一整数,求其绝对值并输出。
# include<stdio.h>{int x;printf(" please enter a number: ");scanf("%d",&x);if(x<0)x=-x;elsex=x;printf("number abs is d%",x);}(3)if语句的嵌套当if语句中执行的语句又是if语句时,那么就构成了if语句的嵌套。
其一般形式可以表示如下:if(表达式)if 语句1;else 语句2;elseif 语句3;else 语句4;在if语句的三种形式中,如果所要执行的语句超过一条必须用花括号括起来,构成一条复合语句,才能被完全执行。
例如:if(a>b){ a++;b++; }else{ a=10;b=100;}3.3.2switch语句一种用于多分支选择的语句——switch 语句,用该语句编写的程序简洁、易懂。
而且,其执行效率要比同样功能的阶梯式if …else if …else语句要高的多。
1.switch语句的一般形式switch语句的一般形式如下:switch(表达式){case 常量表达式1:语句组1;case 常量表达式2:语句组2;···case 常量表达式n:语句组n;default :语句组n+1;}2.switch语句的执行过程系统首先计算“表达式”的值,并逐个与其后的“常量表达式”的值相比较,当“表达式”的值与某个“常量表达式”的值相等时,就以此作为程序执行的入口,执行switch 结构中后面的各语句。
如果没有任何一个case后面的“常量表达式”的值与“表达式”的值匹配,则执行default后面的语句(组)。
例3.6用switch语句实现例3.4的功能。
# include<stdio.h>main(){int score;printf("please input score(0-100):");scanf(" %d ",&score); /*从键盘输入学生成绩*/switch(score/10);{case 10:case 9:printf("excellent\n");break;case 8:printf("good\n"); break;case 7:printf("medium\n"); break;case 6:printf("pass\n"); break;default:printf("fail\n");}}3.4循环结构程序设计C语言提供了循环控制的三种语句:while语句、do…while循环语句和for循环语句。
3.4.1while语句while语句是一种条件循环结构,其控制结构如下:while(条件表达式)循环体例3.7计算并输出从1加到100的和:s = 1+2+3+┅100。
# include<stdio.h>main(){int sum = 0 , i = 1; /*设置和与循环变量*/while(i<=100){ sum = sum+i;i++;}printf(" Sum=%d ", sum);}程序执行结果如下:The sum of 1 to 100 equals is:50503.4.2do…while循环语句do…while结构在C语言中用于实现“直到型”循环。
其一般形式为:do循环体while(条件表达式);例3.9用do…while语句求1+2+3+…+100的和。
# include<stdio.h>main(){int i =1 , sum=0;do{ sum = sum+i;i++;}while(i<=100);printf("sum= %d",sum);}3.4.3for循环语句for语句的使用最为灵活,既可以用于循环次数确定的情况,也可以用于循环次数未知的情况。
for语句的一般形式如下:for(表达式1;表达式2;表达式3)循环体如图3.13所示,for语句的执行流程是:图3.13 for语句的执行流程例3.10输入一个整数,求出它的所有因子。
求一个整数n的所有因子可以采用穷举法,对1~ n的全部整数进行判断,凡是能够整除n的都是n的因子。
由分析可知,这是一个已知循环次数的循环,因此可以使用for 语句。
# include<stdio.h>main(){int n, k;printf("Please input a positive integer:");scanf(" %d ",&n);printf(" Number %d Factors:",n);for(k=1;k<=n;k++)if(n%k= =0)printf(" %d",k);printf("\n");}程序某次的运行结果如下:Please input a positive integer:36↙Number 36 Factors:1 2 3 4 6 9 12 18 363.4.4循环嵌套一个循环体内又可以包含另外一个完整的循环结构,从而构成多重循环结构,这就是循环的嵌套。