C语言程序设计教程第5章

合集下载

C语言 第五章-循环结构程序设计

C语言 第五章-循环结构程序设计

执行过程如图所示。其中i为外循环的控制变 量,j为内循环的控制变量。
i =0 当 i <=10
j=0 当 j<=10
printf(“%d ”, i*j ) j++ i++
例4 编程打印“九九乘法表”。
分析:九九乘法表 1×1=1 1×2=2 1×3=3 … 2×1=2 2×2=4 2×3=6 … 3×1=3 3×2=6 3×3=9 … …… 9×1=9 9×2=18 9×3=27 …
i ++ ; } while ( i <= 100 ) ; printf ( " %d " , sum ) ; }
结果相同
同样是下列程序,但如果while后面的表达式结果一开始就是 假时,两种循环结果会不一样。
main ( ) /*程序1*/
{ int i , sum = 0 ; i = 101 ;
所以程序需要设计成二重循环。由于题目只 要求找到一组解,所以在循环过程中只要找到一组 满足条件的x, y, z就可以跳出循环。
跳出循环的方法可以采用break语句,但是, 因为是二重循环,所以要考虑使用break是否方便。
程序 百钱买百鸡问题。 void main ( ) { int x , y , z ;
打印第2行 ( i = 2 ) for (j=1;j<=9;j++) printf(“%5d”,i*j) ; printf ( “ \n ” ) ; /*换行打印*/
…… 打印第9行 ( i = 9 )
for (j=1;j<=9;j++) printf(“%5d”,i*j) ; printf ( “ \n ” ) ; /*换行打印*/

C语言程序设计:第5章 循环结构

C语言程序设计:第5章 循环结构
执行过程: 先执行循环体语句,再检查 循环条件表达式的值是否为真, 如果为真则继续执行循环体语句, 否则结束循环。
12
do...while语句(cont...)
课堂练习: 1.输出1---n之间的数,其中n从键盘输入。
int main(void) {
//1.定义变量i和n //2.输入n的值 //3.思考循环的开始条件:i从1开始 //4.思考循环的结束条件:i++,i > n //5.循环的条件:i<=n //6.循环要做的事情:输出i的值 return 0; }
} 相当于 while(1) {
}
26
小结
❖for(i=m;i<n;i++)//循环次数:n-m次 ❖for(i=m;i<=n;i++)//循环次数:n-m+1次
27
循环语句的练习
课堂练习: 1.输出n---1之间的数,其中n>1且n从键盘输入。 2.计算1*2*3*...*n的值(n的阶乘n!), 其中n从键盘输入。 3.计算10- 1/2 - 1/3 -....1/n的值 以上练习分别以while、do...while、for语句实现
int main(void) {
//1.定义变量i,n,sum //2.输入n的值 //3.思考循环的开始条件:i从1开始 //4.思考循环的结束条件:i++,i > n //5.循环的条件:i<=n //6.循环要做的事情:累加i的值 //7.输出计算结果 return 0; }
24
for语句(cont...)
{
sum = sum + i;
if(sum > 100)break;

C语言程序设计教程 清华大学出版社 陈明主编 第5章答案

C语言程序设计教程 清华大学出版社 陈明主编 第5章答案

第5章习题解答一、选择题1.以下叙述中错误的是。

A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出B)数组名代表的是数组所占存储区的首地址,其值不可改变C)在程序执行中,当数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息D)可以通过赋初值的方式确定数组元素的个数解析:对于double类型数组,不能直接用数组名对数组进行整体输入或输出。

所以选项A的说法是正确的。

数组名代表数组所占内存区的首地址,是一个固定指针,其值不可改变,因此选项B也是正确的。

在C语言一维数组定义时可以不指定数组长度,由赋初值的初值个数决定数组的长度。

因此选项D也是正确的。

C语言程序在执行时,不检查数组元素的下标是否越界,如果出现越界,可能会引起系统死机,因此选项C不正确。

答案:C2.有以下程序:/* 文件路径名:ex5_1_2\main.c */#include <stdio.h> /* 标准输入/出头文件*/int main(void) /* 主函数main() */{char s[] = "abcde"; /* 定义字符数组*/s += 2; /* s自加2 */printf("%d\n", s[0]); /* 输出s[0] */return 0; /* 返回值0, 返回操作系统*/}执行后的结果是。

A)输出字符a的ASCII码B)输出字符c的ASCII码C)输出字符c D)程序出错解析:数组s[]的首地址值s是不可改变的,故该程序编译时会出错。

答案:D3.有以下程序:/* 文件路径名:ex5_1_3\main.c */#include <stdio.h> /* 标准输入/出头文件*/int main(void) /* 主函数main() */{int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, *p = &a[3], *q = p + 2; /* 定义数组及变量*/printf("%d\n", *p + *q); /* 输出*p + *q之值*/return 0; /* 返回值0, 返回操作系统*/}程序运行后的输出结果是。

C语言程序设计-第5章全解

C语言程序设计-第5章全解
2018/10/21 华中科技大学计算机学院C语言课程组 22
函数返回的值,程序可以使用它, 也可以不使用它
while(…) { getchar(); c=getchar(); … } /* 返回值不被使用 */ /* 返回值被使用 */
2018/10/21 华中科技大学计算机学院C语言课程组 18
5.2.1
函数的定义
函数定义的一般形式为: 类型名 函数名(参数列表) { 声明部分 语句部分 }
2018/10/21 华中科技大学计算机学院C语言课程组 19


类型名说明函数返回值(即出口参数)的数据类型 (简称为函数的类型或函数值的类型),可以是除 数组以外的任何类型。当返回值类型为void,函数 将不返回任何值。 参数列表说明函数入口参数的名称、类型和个数, 它是一个用逗号分隔的变量名及其类型列表,它描 述了在调用函数时函数所接收的参数。一个函数可 能没有参数,在没有参数的情况下,参数列表说明 为void,否则必须明确地列出每一个参数的类型。
16

图5.1 C语言程序的基本结构
2018/10/21
华中科技大学计算机学院C语言课程组
17
5.2

函数的定义与函数的声明
程序中若要使用自定义函数实现所需的功能, 需要做三件事: ① 按语法规则编写完成指定任务的函数,即 定义函数; ② 有些情况下在调用函数之前要进行函数声 明; ③ 在需要使用函数时调用函数
2018/10/21
华中科技大学计算机学院C语言课程组
9



在函数的顶端用“/*……*/”格式包含的部分是函 数头部注释,包括函数名称、函数功能、函数参数、 函数返回值等内容,如有必要还可增加作者、创建 日期、修改记录(备注)等相关项目。虽然函数头 部注释在语法上不是必需的,但可以提高程序的质 量和可维护性,在程序设计时要遵从这一编程规范。 GetNum是函数名,其后的void说明函数调用时不 接收任何参数,即没有入口参数,函数执行完应该 返回所产生的随机数,即该随机数是函数的出口参 数,函数名前的int说明出口参数的类型为整型。 函数体内的rand是接口stdlib.h中的一个函数,它 返回一个非负并且不大于常量RAND_MAX的随机整 数,RAND_MAX的值取决于计算机系统。 MAX_NUMBER是用#define定义的符号常量,其 值为1000。当执行return语句时,其后表达式的值 被带回到调用函数中。

C语言课件 第5章

C语言课件 第5章
如果x<y, max=y, min=x ③ 输出最大值max、 最小值min
第5章 选择结构程序设计
/*程序 5 - 3, 求两个数的最大值、 最小值*/ main( ) { float x, y; float max, min; printf(″请输入两个数x, y: ″); scanf(″%f, %f″, &x, &y); if (x>y) {max=x; min=y; } else {max=y; min=x; } printf(″max=%6.2f, min=%6.2f\n″, max, min); } 输入数据: 1.2, 2.54 运行结果: max= 2.54, min= 1.20
第5章 选择结构程序设计
5.1.3 多分支if语句
多分支if语句不是一条具体的语句,它通过if语句的嵌套实
现。其一般形式为: if (条件表达式1)
if (条件表达式2) 语句1
else 语句2 else if (条件表达式3) 语句3 else 语句4
第5章 选择结构程序设计
T T
条件表达式1 条件表达式2
}
第5章 选择结构程序设计
例 5 — 7 将例 5 — 5 用switch语句实现。
switch ((int)(cj/10)) { 10: 9: ch=′A′; break; /*注意选择表达式的构造*/
8: ch=′B′; break;
7: ch=′C′; break; 6: ch=′D′; break;
第5章 选择结构程序设计
例 5 –3 输入两个数, 求两个数的最大值、最小值。 数据分析:
输入量: 两个数x、 y, float

《C语言程序设计》教材习题答案第5章

《C语言程序设计》教材习题答案第5章

一、选择题1.设有程序段”int k=10;while(k=0)k=k-1;”,则下面叙述正确的是D 循环体语句一次也不执行2.设有程序段”int x=0,s=0;while(!x!=0)s+=++x;printf(“%d”,s);”则A 运行程序段后输出13.若有语句”int x=3;do{printf(“%d\n”,x-=2);}while(!(--x));”,则该程序段C 输出的是1和-24.下面循环语句中,错误的是D int a=1,b=2;do b--while(b= =0);5.已知”int i=5;”,下列do…while循环语句的循环次数为C 5do{printf(“%d\n”,i--);}while(i!=0);6.循环语句”for(int i=0,j=10;i=j=10;i++,j--)”的循环次数是D 无限7.循环语句”while(int i=0;)i--;”的循环次数是A 08.下述有关break语句的描述中,不正确的是C break语句用于if语句的内嵌语句内,它结束该if语句9.下面关于循环语句的描述中,错误的是B 循环体内必须同时出现break语句和continue语句10.以下不是死循环的是D for(;(c=getchar()!=’\n’);)printf(“%c”,c);11.执行语句”for(i=0;i++<3;);”后,变量i的值为C 412.语句”for(x=0,y=0;y!=1&&x<4;x++);”是C 循环4次13.与语句”while(!x);”等价的语句是A while(x= =0);14.执行下列程序段后a的值为B 2int a=1,b=10;do{b-=a;a++;}while(b--<0)二、编程题1.读入用户输入的6个整数并显示其平均值。

#include<stdio.h>main(){float sum=0;int tmp;int i;for(i=0;i<6;i++){printf("输入第%d个数:",i+1);scanf("%d",&tmp);sum=sum+tmp;}printf("平均值是:%f",sum/6);}2.先读入一个正整数n,然后计算并显示前n个偶数的和。

C语言程序设计第5章数组.ppt

C语言程序设计第5章数组.ppt
冒泡法排序
2019/3/19
F
冒泡法排序 (续)
程序如下:
#define N 6 #include "stdio.h" void main( ) {int a[N]; int i,j,t; printf("请输入%d个成绩,用空格隔开:\n",N); for (i=0; i<N; i++) scanf("%d",&a[i]);
2019/3/19
5.2.2 数组元素的引用(续)
2.说明
① 下标从0开始(下界为0),数组的最大下标 (上界)是数组长度减1。 例如: int a[10],i; scanf ("%d",&a[10]); /* 下标越界 */ C编译系统不做越界检查。
2019/3/19
5.2.2 数组元素的引用(续)
【例5-4】用冒泡法(也称起泡法)对输入的一组 成绩按从低分到高分的顺序排序并输出。
例如将6个数:4、7、5、6、8、1按从小到大顺序用冒泡 法排序,方法如下: 在第一趟排序中, 6个数比较了5次,把6个数中 第一趟排序情况如下: 的最大数8排在最后。 4 7 5 6 8 1 第一次 4和7比较,不交换 4 7 5 6 8 1 第二次 7和5比较,交换 457681 第三次 7和6比较,交换 456781 第四次 7和8比较,不交换 4 5 6 7 8 1 第五次 8和1比较,交换 456718
2019/3/19
5.1概述(续)
2.数组与数组元素的概念
数组:是用一个名字表示的一组相同类型的数据的集合, 这个名字就称为数组名。 如定义:float a[10]; a是数组名。 下标变量(或数组元素):数组中的数据分别存储在用下 标区分的变量中,这些变量称为下标变量或数组元素。 如:a[0]、a[1]…a[i]。 每个下标变量相当于一个简单变量,数组的类型也就是该 数组的下标变量的数据类型。 数组属于构造类型。构造类型的数据是由基本类型数据按 一定规则构成的。

C语言第5章循环结构程序设计1

C语言第5章循环结构程序设计1

(2)在循环体中应有使循环趋向于结束的语句。 比如上例中,循环结束的条件是“score>=0”, 那么当我们把这个班的成绩全部输入完后, 一定要输入一个负数,才能使程序往下执行。 (3)循环体语句有可能一次也不执行。比如说上 例中,当第一次输入的分数就为负数时,则 循环体一次也不执行。
§5.3 do …while语句
① ② ④ ③
for(i=1; i<100; i++) s=s+i; printf(″s=%d″, s); }
/*循环体语句*/
对于for循环,有一点非常重要,即条件测 试永远是在循环开始时进行,如果在循环开 始时条件为假,那么循环体语句就不会被执 行。如: int i=10; for (k=10;k!=i;k++) printf(″%d″,k); printf(″%d″,k);
2、循环控制变量必须在循环体内有所改变,才 能使while和do-while语句的循环控制条件表达 式的值不断改变,直至循环结束。否则会造 成死循环。例如: i=1; while(i<=100) putchar(′*′); i++; 这个循环永远不会结束,因为“i++;”语句 不属于循环体中的语句,循环控制变量i没有 在循环体内被改变。 程序应该作如下改变:
在使用while语句的时候,我们要注意以下 两个问题: (1)循环体如果包含一个以上的语句,应该用花 括号括起来,以复合语句的形式出现。如果 不加花括号,则while语句的范围只到while后 面的第一个分号处。比如上例中,while语句 中如无花括号,则while语句范围只到 “average+=score;”。
#include <stdio.h> main() {int i,n;long fac; Scanf(―%d‖,&n); i=1 while (i<=n) fac=fac*i; i++; } Printf(―%d!=%ld‖,n,fac); }

《C语言程序设计》第5章数组、字符串、指针

《C语言程序设计》第5章数组、字符串、指针

相当于声明了5个整型变量
说明: ① 数组的所有元素的数据类型都是相同的。 ② 数组取名规则应符合标识符的规定,数组 名不能与同一函数中其它变量名相同: int a; float a[10]; 是错误的。
③ C语言中规定数组的下标从0开始,方括号 中常量表达式表示数组元素的个数。
④ 不能在方括号中用变量来表示元素的个数, 但是可以是符号常数或常量表达式。例如: int n=5,a[n]; 是错误的。
二维数组在内存的存放顺序是“先行后列”
a[0][0] a[0][1] a[0][2] a[0][3] a[1][0]

a[2][3]
5.3.2 二维数组元素的引用
二维数组的元素的引用形式为: 数组名[下标][下标] 使用二维数组的情况举例: 学生多门功课的成绩,如: a[100][3]可以用来记录100个学生3门功 课的成绩。 矩阵,如: a[3][3]可以用来记录3×3的矩阵。一个 数组元素正好存放一个矩阵的元素。
5.2.2 一维数组的初始化
1、数组声明时初始化 在编译阶段进行的。这样将减少运行时间, 提高效率。 数组初始化的一般形式为: 类型符 数组名[常量表达式]={值,值…值}; 例如: int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; 相当于a[0]=0; a[1]=1;... a[9]=9;

a[9]
#include <stdio.h> 声明有10个元素 void main() 的一维数组a {int n,i; float s=0, ave, a[10]; a[0] a[1] … a[9] for(i=0;i<10;i++) a[i] { scanf("%f",&a[i]); a[i] s=s+a[i]; } ave=s/10; for(i=0;i<10;i++) a[i] a[i] if (a[i]>ave) printf("%f ",a[i]); }

大一C语言教材《C语言程序设计》第5章 循环程序设计

大一C语言教材《C语言程序设计》第5章 循环程序设计


复合赋值运算符
种类:+= -= *= /= %= 《= 》= &= 含义: 变量 op= 表达式 变量 = 变量

^= |= op 表达式
x%=3 x*=y+8 a+=3
x=x%3 x=x*(y+8) a=a+3
运算符和表达式

说明:

结合方向:自右向左 左侧必须是变量,不能是常量或表达式
例 int i; 例 3=x-2*y; i=2.56; //结果 i=2; a+b=3;

赋值转换规则:使赋值号右边表达式值自动 转换成其左边变量的类型
赋值表达式的值与变量值相等,且可嵌套g a=b=c=5 a=(b=5) a=5+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2) //表达式值为5,a,b,c值为5 // b=5;a=5 //表达式值11,c=6,a=11 //表达式值10,a=10,b=4,c=6 //表达式值5,a=5,b=10,c=2
例 -i++ i=3;
-(i++) printf(“%d”,-i++);
//-3
无论是作为前缀还是作为后缀运算符,对于变量本身来 说自增1或自减1都具有相同的效果,但作为表达式来说却有 着不同的值。

j=3; k=++j; j=3; k=j++; j=3; printf(“%d”,++j); j=3; printf(“%d”,j++); a=3;b=5;c=(++a)*b; a=3;b=5;c=(a++)*b;

C语言程序设计教程 第五章 课后习题参考答案

C语言程序设计教程 第五章 课后习题参考答案

C语言程序设计教程第五章课后习题参考答案一、选择题1. B2. A3. C4. B5. D二、填空题1. while2. binary3. 164. 35. continue6. global三、判断题1. 错误2. 正确3. 错误4. 错误5. 正确四、编程题1.```c#include<stdio.h>int main() {int num;printf("请输入一个整数:"); scanf("%d", &num);if (num % 2 == 0) {printf("%d是偶数\n", num); } else {printf("%d是奇数\n", num); }return 0;}```2.```c#include<stdio.h>int main() {int num1, num2;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);printf("%d与%d的和为%d\n", num1, num2, num1 + num2); return 0;}```3.```c#include<stdio.h>int isPrime(int num) {int i;if (num <= 1)return 0;for (i = 2; i <= num / 2; i++) {if (num % i == 0) {return 0;}}return 1;}int main() {int num;printf("请输入一个整数:");scanf("%d", &num);if (isPrime(num)) {printf("%d是素数\n", num); } else {printf("%d不是素数\n", num); }return 0;}```4.```c#include<stdio.h>int factorial(int num) {int i, result = 1;for (i = 1; i <= num; i++) {result *= i;}return result;}int main() {int num;printf("请输入一个整数:");scanf("%d", &num);printf("%d的阶乘为%d\n", num, factorial(num)); return 0;}```五、简答题1. C语言逻辑与运算符(&&)短路特性是什么?答:C语言逻辑与运算符(&&)具有短路特性,即在进行逻辑与运算时,如果前一个表达式的值为假(0),则后面的表达式将不会被计算,整个逻辑与表达式的值直接为假(0)。

C语言程序设计教程(第5版)_第5章_循环结构

C语言程序设计教程(第5版)_第5章_循环结构

b(a<b),求它们之间的几何级数的和,数学表达式

:i b
i
ia
分析:
①所求级数和的初值和终值由键盘任意输入;
②题目要求初值a<b,并且a>0,b>0;
③如果a>b,或者输入的值为负数,则程序提示输 入错误,不进行任何计算,直接退出程序。
5.1 for语句
程序流程图: 程序:example5_2.c 思考: ①该算法的缺点; ②设计更好的算法。 ③假如输入的数可以为任意整数,
2.判断<条件表达式>的值。该表达式就是循环条件,若该 表达式的值为“真”,则执行<循环体语句>; 若该表达式的值为“假”,则退出循环,执行循环结构外 的语句。
3.计算<循环表达式>的值。该表达式更新循环控制变量的 值。
4.转第2步。
5.1 for语句
for语句的流程图:
注意: ①若<循环体语句>中有多
ib
如果a≤b,计算i; ia ia
如果a>b,则计算i 。 ib
请设计算法并编写程序验证。
5.1 for语句
例3:编写程序,从键盘输入m和n的值,用符号“*”在屏幕 上打印出如下所示具有m行n列的矩形图案。 ******* ******* ******* ******* ******* ******* ******* *******
5.1 for语句
程序算法流程图如图所示: 程序:example5_4.c 程序特别处理:如果(a>b),
计算(a−b);否则计算(b−a)。 思考: 1.如果每次测试的题目不止10个,
需要怎样修改算法和程序? 2.如果要求程序在结束了一组测
试之后,可以继续进行测试,需 要怎样修改算法和程序? 3.如果要加入两位数的除法计算, 需要怎样修改算法和程序?

C语言-第5章 循环结构程序设计

C语言-第5章 循环结构程序设计

第5章循环结构程序设计一、单项选择题1.在C语言中,下列说法中正确的是()。

A) do-while语句构成的循环不能用其它语句构成的循环来代替。

B) do-while语句构成的循环只能用break语句退出。

C) do-while语句构成的循环在while后的表达式非零时结束循环。

D) do-while语句构成的循环,在while后的表达式为零时结束循环。

2. break语句不能出现在语句中()A) switch B)for C) while D) if…else3.对于break语句和continue语句的说法错误的是()A) break语句不能用于循环语句和switch语句之外的任何其他语句中。

B) break和continue也可以用于if语句中C) continue语句只结束本次循环,而不是终止整个循环的执行。

D) break语句是结束整个循环过程,不再判断执行循环的条件是否成立。

4. 语句while(!y);中的表达式!y等价于A)y==0 B)y=1 C)y=!0 D) y==15. 若有“int a=1,x=1;”,则循环语句“while(a<10) x++; a++;”的循环执行()。

A)无限次B)不确定次C)10次D)9次6. 有以下程序段int k=0while(k) k++;则while循环体执行的次数是A) 无限次B) 有语法错,不能执行C) 一次也不执行D) 执行1次7. 下列循环语句中有语法错误的是( )A while(x=y) 5;B while(0) ;C do 2;while(x= =b);D do x++ while(x= =10);8. 当运行时输入:abcd$abcde ,下面程序的运行结果是。

#include<stdio.h>main(){char c;while(putchar(getchar())!='$');printf("end");}A)abcd$abcde B)abcd$end C)abcdend D)abcd$abcdeend 9. 以下程序段( )x=-1;do { x=x*x; }while(x>0);A) 是死循环B) 循环执行一次C) 循环执行二次D) 有语法错误10. 下面程序段执行后的结果为: ( )int sum=0, n=10;do { sum=sum+n;n++; }while(n<10);printf(“%d,%d”,sum,n);A. 0, 10 B) 10, 11C) 0, 11 D) 以上结果都不对12. 循环“for(i=0,x=1;i=10&&x>0;i++);”的循环执行()。

《C语言程序设计》课件 《C语言程序设计》课件 第5章-循环结构程序设计

《C语言程序设计》课件 《C语言程序设计》课件 第5章-循环结构程序设计

Page 28
参考代码
#include<stdio.h> void main() {
char ch; int char_num=0,int_num=0,other_num=0; while((ch=getchar())!=‘\n’) //回车键结束输入 {
if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z') char_num++;
printf("************\n ");
printf("************\n ");
printf("************\n ");
printf("************\n "); printf("************\n "); 等价 for(int i=1;i<=8;i++)
{ s=s+i;
i++; //表达式3移至循环体末尾
}
printf("s=%d",s);
}
<<C语言程序设计>>
Page 19
随堂练习
例 编程计算n的阶乘。
n!=1 2 3 ……〔n-1〕 n
思路:
类似于累加求和,每一次循环乘上一个数字,求和 将和初始化为0,这里应把积初始化为?
<<C语言程序设计>>
#include "stdio.h" void main( ) { int i,sum=0;

《C语言程序设计》课件 第五章 数组

《C语言程序设计》课件 第五章 数组
若二维数组名a代表的起始地址为5948,则它的三个元 素a[0]、a[1]和a[2]分别对应了起始地址5948、5956和 5964。
a(5948)
a[2](5964) a[1](5956) a[0](5948) 图 5-10
a[2][1] (5968) a[2][0] (5964) a[1][1] (5960) a[1][0] (5956) a[0][1] (5952) a[0][0](5948)
return 0;
}
5.1.4一维数组程序举例
3.用选择法对输入的n个学生的单科成绩进行 从小到大排序。
编程思路: 直接选择排序的过程是:首先在所有数据中找出值 最小(最大)的数据,把它与第1个数据交换,然后 在其余的数据中找出值最小(最大)的数据,与第2 个数据交换......依次类推,这样,n个数据经过n-1轮 交换后可得到有序结果。
printf("%3d ",a[i]); printf("\n"); return 0; }
5.1.3 一维数组的初始化 5.1.3 一维数组的初始化
数组初始化常见的格式:
1.用大括号括起来的常量表达式列表,常量表达式 之间用逗号进行分隔: int a[10]={1,2,3,4,5,6,7,8,9,10};
注意:
不要将a[i][j]写成a[i,j],否则编译系统会将逗号分隔 符作为逗号运算符处理,即将a[i,j]视为a[j]。
5.2.2二维数组元素的引用
可以将二维数组看成是特殊的一维数组。
例如,二维数组a[3][2]可以看成是长度为3的一维数组, 所含的3个数组元素分别为:a[0]、a[1]、a[2]
for(i=0;i<3;i++) for(j=0;j<5;j++)

C语言程序设计教程(第4版)_第5章_循环结构

C语言程序设计教程(第4版)_第5章_循环结构

void main()
{ int i,sum=1,n;
printf("please input the value of n:");
scanf("%d:",&n);
if (n>=0)
{ i=1;
while(i<=n)
{sum=sum*I; i++;}
printf("%d\n",sum);}
else
printf("wrong\n"); }
5.2 while语句
例6:编写程序,从键盘输入一个正整
数n,求n!。
分析:n!=n*(n−1)*(n−2)*…*2*1 (约定:n≥0,0!=1) 用i代表循环变量,s代表n!的结
果值,则循环计算表达式:s=s*i, 即可求得n!。 思考:能否用for循环实现?
#include<stdio.h>
2.判断<条件表达式>的值。该表达式就是循环条件, 若该表达式的值为“真”,则执行<循环体语句>; 若该表达式的值为“假”,则退出循环,执行循环结 构外的语句。
3.计算<循环表达式>的值。该表达式更新循环控制变 量的值。
4.转第2步。
5.1 for语句
for语句的流程图:
注意: ①若<循环体语句>中有多
sum=0; for(i=1; i<=100; i=i+2) 7.for循环也可以嵌套,执行时是先执行最里层的循环,再 执行其外一层的循环。
5.1 for语句
例2:编写程序,从键盘输入两个不等于零的正整数a、
b(a<b),求它们之间的几何级数的和,数学表达式

c语言程序设计 杨路明 第五章

c语言程序设计 杨路明 第五章









ww
w.
mn
ub
} getch();
bs
}
.c
if (n > 1) printf("%d,%d", k1, k2); /* n>1 表示 a 至少有 2 个因子 */ if (n > 2) printf(",%d", k3); /* 注意以下 if 的用法,追加的方法 */ if (n > 3) printf(",%d", k4); if (n > 4) printf(",%d", k5); if (n > 5) printf(",%d", k6); if (n > 6) printf(",%d", k7); if (n > 7) printf(",%d", k8); if (n > 8) printf(",%d", k9); if (n > 9) printf(",%d", k10); printf("\n");
设某县 2000 年工业总产值为 200 亿元,如果该县预计平均年工业总产值增长率为 4.5%, 那么多少年后该县年工业总产值将超 500 亿元。 答 main() { float x=200; int n=0;








ww
4 ★输入一个字符串,将其中的大写字母改为小写字母,小写字母改为大写字母,然后输出。
ub
bs
.c
n
do { x*=(1+0.045); n++; }while(x<500); printf("n=%d",n); getch();

c语言第五章选择结构程序设计(习题册答案)

c语言第五章选择结构程序设计(习题册答案)

c语⾔第五章选择结构程序设计(习题册答案)第五章选择结构程序设计基础练习(A)⼀、填空题1、关系表达式的运算结果是逻辑值。

C语⾔没有逻辑型数据,以1代表“真”,以0代表“假”。

2、逻辑运算符!是单⽬运算符,其结合性是由右结合性。

3、C语⾔提供的三种逻辑运算符是&&、|| 、!。

其中优先级最⾼的为!,优先级最低的为| | 。

4、逻辑运算符两侧的运算对象不但可以是0和1,或者是0和⾮0的整数,也可以是任何类型的数据。

系统最终以0 和⾮0 来判定它们属于“真”或“假”。

5、设y为int型变量,请写出描述“y是偶数”的表达式(y%2==0)。

6、设x,y,z均为int型变量,请写出描述“x或y中有⼀个⼩于z”的表达式x7、条件“22&&x<3。

8、判断char型变量ch是否为⼤写字母的正确表达式是(ch>=‘A’)&&(ch<=‘Z’)。

9、当a=3,b=2,c=1时,表达式f=a>b>c的值是0。

10、当a=5,b=4,c=2时,表达式a>b!=c的值是1。

11、已知A=7.5,B=2,C=3.6,表达式A>B&&C>A||AB的值是0。

12、若a=6,b=4,c=2,则表达式!(a-b)+c-1&&b+c/2的值是1。

13、有int x,y,z;且x=3,y=-4,z=5,则表达式(x&&y)==(x||z)的值为1。

14、有int x,y,z;且x=3,y=-4,z=5,则以下表达式的值为1。

!(x>y)+(y!=z)||(x+y)&&(y-z)15、有int a=3,b=4,c=5,x,y;,则以下表达式的值为0。

!(x=a)&&(y=b)&&016、if (!k) a=3;语句中的!k可以改写为k= =0,使其功能不变。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一般为关系表达式 或逻辑表达式,也 可以是C语言其他 类型的合法表达式 用来控制循环体是 否执行

称为内嵌语句, 可以是基本语句、 控制语句,也可 以是复合语句 是循环重复执行 的部分

2013-7-10
功能:

4
计算表达式的值,为非0(逻辑真)时,重复执 行内嵌语句,每执行一次,就判断一次表达式 的值,直到表达式的值为0 时结束循环,转去执 行while后面的语句。 循环控制条件
流程图 N-S结构图 当表达式为真
表达式非 0?
N
语句
Y
语句
循环体
2013-7-10
例如:
【例5.1】编写程序,求100个自然数的和 即: s=1+2+3+ … +100 思路:寻找加数与求和的规律
加数i——从1变到100,每循环一次,使i增1, 直到i的值超过100。i的初值设为1。
求和——设变量 sum 存放和,循环求 sum=sum+i,直至i超过100。
17
2013-7-10
说明:

18
所有用 while 语句实现的循环都可以用 for 语句实现。 for(表达式1;表达式2 ;表达式3) 语句;
等价于: 表达式1; while (表达式2) { 语句; 表达式3; }
2013-7-10
for语句的简单应用
【例5.4】求n! ,即计算p=1×2×3×…×n 的值。
5
2013-7-10
算法和程序:
运行jc5_1
6
i=1,sum=0
当i <= 100
sum=sum+i i++
输出sum
i: 循环控制变量 sum: 累加器
main( ) { int i,sum; i=1; sum=0; while (i<=100) { sum=sum+i; i++; } printf("sum=%意(续):

8
为了保证循环正常运行,应该特别注意:
– – –
循环控制条件的描述
控制条件的初始状态(初始值)
循环体内部对控制条件的影响
2013-7-10
5.2 do-while语句

9
语句一般格式 do 语句 while (表达式);

功能: – 先执行内嵌语句(循环体),之后计算 表达式的值,不为0(逻辑真)时,再 执行循环体并判断条件,直到表达式的 值为 0 结束循环,转去执行while下面 的语句。
2013-7-10
for语句的算法
流程图 计算表达式1
表达式2 为真?
15
N-S结构图 for (表达式1;表达式2;表达式3) N 语句
Y 语句 计算表达式3
例如: 可部分或全部省略, main( ) 但“;”不可省略 { int i,sum; sum=0; for ( i=1; i<=100; i++) sum=sum+i; printf("sum=%d\n",sum); }
2013-7-10
do-while循环的算法
流程图
循环体
表达式非0?
10
N-S结构图 循环体 当表达式为真
Y
N
用do-while语句 求100个自然数的和
main( ) { int i=1,sum=0; do { sum=sum+i; i++; } while (i<=100); printf("%d\n",sum); }
2013-7-10
几种循环语句的比较
while和do-while语句的表达式只有一个,for语 句有三个。
22
while 和for先判断循环条件后执行循环体,dowhile语句先执行循环体后判断循环条件。
while语句多用于循环次数不定的情况 do-while语句多用于至少要运行一次的情况 for语句多用于要赋初值或循环次数固定的情况
运行jc5_4
20
思考: 如何输出1!, 2!, … , n! ? 如何求s =1!+ 2!+ … + n! ?
2013-7-10
熟悉几个循环语句

21




while (!x) x++; 当 x=0 时,执行循环体x++; while ((c=getchar( )) != '\n') n=n+1; n 称为计数器,作用是统计输入字符的个数 while (num++<=2) ; printf("%d\n",num); 循环体是空语句,退出循环后输出num的值 do x*=-3; while(x>5); 先执行循环体x*=-3,再判断条件(x>5) for (n=0; n<26; n++) printf("%c ", n+'A'); 作用是输出26个大写字母 for (sum=0, i=1; i<=100; sum=sum+i, i+=2) ; 作用是计算100以内的奇数和
27
2013-7-10
算法和程序
main( ) { int n,j=0; for(n=100;n<=200;n++) { if (n%7!=0) continue; printf("%6d",n); j++; if (j%10==0) printf("\n"); } printf(" \n j=%d\n",j); }
程序输出结果: sum=5050
2013-7-10
注意:

7
如果while的 (表达式) 值为0,则循环体一 次也不执行 (例如当i的初值=101) 。
在循环体中必须有使循环趋向结束的操作, 否则循环将无限进行(死循环)。 在循环体中,语句的先后位置必须符合逻 辑,否则会影响运算结果。 思考程序段的输出? …… 运行后,输出: while (i<=100) sum=5150 { i++; 原因是什么? sum=sum+i; }
2013-7-10
do-while语句的简单应用
【例5.3】用辗转相除法求m和n的最大公约数
定义m、n、r m<n
T F m和n交换 r=m%n m=n n=r 当r != 0时 输出最大公约数m
12
2013-7-10
算法和程序:
main( ) { int m,n,r; scanf("%d, %d",&m,&n); if (m<n) { r=m; m=n; n=r; } do { r=m%n; 程序运行情况如下: m=n; 24, 60 n=r; 12 }while(r!=0); printf("%d\n",m); }
– – –
continue语句 break语句 goto语句

在循环语句的循环体中使用,可以进行 循环的流程控制
2013-7-10
5.5.1 continue语句及应用

25
功能:

中断循环体的本次执行(即跳过循环体中尚 未执行的语句),立即开始执行下一次循环。
do-while语句
N
while语句
2013-7-10
5.4 用goto语句实现循环
有兴趣的同学自学 不提倡使用goto语句
23
注意: goto语句能实现程序无条件转移,为编程 提供了便利。但是无限制地使用,会破坏 程序的结构化程度。因此应限制使用。
2013-7-10
5.5 循环结构中的跳转语句

24
有如下三种语句实现跳转:
26
⑶ for (n=0,s=0; n<10; n++) { scanf("%d",&x); if (x<0) continue; s+=x; }
2013-7-10
应用举例
【例5.7】把100~200之间能被7整除的数, 以十个数为一行的形式输出,最 后输出一共有多少个这样的数。
for (n=100; n<=200; n++) n能被7整除 T F 终止本次循环 输出n 输出10个数 T F 换行
计算表达式3 后续语句
2013-7-10
后续语句
后续语句
例如:
⑴ int x,n=0,s=0; while (n<10) { scanf("%d",&x); if (x<0) break; s+=x; n++; }; ⑵ int x,n=0,s=0; do { scanf("%d",&x); if (x<0) break; s+=x; n++; } while (n<10);
30
⑶ for (n=0,s=0; n<10; n++ ) { scanf("%d",&x); if (x<0) break; s+=x; }
2013-7-10
5.6 循环的嵌套
如果循环语句的循环体内又包含了另一条 循环语句,则称为循环的嵌套 例如: #include <stdio.h> main( ) { int i, j; 外循环语句 for ( i=1; i<10; i++ ) 内循环语句 for ( j=1; j<=i; j++ ) printf ((j==i)?"%4d\n":"%4d",i*j); }
相关文档
最新文档