<4D F736F F D D382043D3EFD1D4B3CCD0F2C9E8BCC6D5FDCEC42E646F63>

Size: px
Start display at page:

Download "<4D F736F F D D382043D3EFD1D4B3CCD0F2C9E8BCC6D5FDCEC42E646F63>"

Transcription

1 第 5 章循环控制结构 本章导读在进行程序设计时, 仅仅使用前面学过的顺序结构和选择结构, 往往解决不了一些较复杂的问题, 比如累加 求一个班学生的平均分等 C 语言还提供了一种重要的控制结构 循环结构, 利用循环结构可以解决复杂的 重复性的操作 循环结构的作用是使某段程序重复的执行, 具体循环的次数会根据某个条件来决定 循环结构的应用非常普遍, 使用起来也比较灵活, 熟练掌握循环结构对学习编程是非常重要的 循环结构主要包括三种基本形式 :while 语句 for 语句 do...while 语句 除了这三种常见形式之外, 还有一种 goto 语句, 不过这种语句一般不提倡使用 本章主要介绍循环结构的三种基本语句及其特点, 重点讲解常用的循环算法和编程方法, 使读者能够熟练运用这三种基本循环控制结构编写程序 本章知识要点 while 语句的一般形式及应用 for 语句的一般形式及应用 do...while 语句的一般形式及应用 多重循环结构的使用 break 语句和 continue 语句 5.1 while 语句 while 语句属于 当型 循环 当型 循环是指在循环条件成立时, 程序就一直执行循环体语句 while 语句的一般形式如下 : while ( 表达式 ) 循环体语句 while 语句的执行过程 : 首先计算 while 后圆括号内的表达式, 当表达式的值为真 ( 非零 ) 时, 执行循环体语句, 然后继续判断表达式的值, 重复上述执行过程, 只有当表达式为假 ( 零 ) 时才退出循环, 程序跳转到循环体后面的第一行代码处执行 流程图如图 5-1 所示 说明 : (1)while 是关键字 while 后圆括号内的表达式一般是条件表达式或逻辑表达式, 但也可以是 C 语言中任意合法的表达式 (2) 循环体语句可以是一条语句, 也可以是多条语句, 如果循环体语句包含多条语句, 则需要用一对花括号 把循环体语句括起来, 采用复合语句的形式

2 退出循环第 5 章循环控制结构 103 表达式 假 (0) 真 ( 非 0) 循环体 例 5-1 图 5-1 while 语句流程图 100 求前 100 个自然数的和, 即 : 求 n n= 1 分析 : 这是一个简单的求和问题, 需要连续的累加, 因此只能使用循环结构实现重复累加的操作 设变量 sum 用于存放循环执行过程中的求和结果, 设变量 n 为循环控制变量, 同时也是每一次求和运算的基本数据项, 然后可以利用 while 循环结构进行循环累加求和 程序流程图如图 5-2 所示 开始 n=1,sum=0 n 100 假 真 sum=sum+n n++ 输出 sum 结束 图 5-2 程序流程图 #include <stdio.h>

3 104 C 语言程序设计 int n,sum; n=1;sum=0; /* 变量赋初值 */ while (n<=100) sum=sum+n; /* 累加求和 */ n++; /* 修改基本数据项 n*/ printf("sum=%d\n",sum); 程序运行结果为 : sum=5050 在读程序时, 正确地分析语句的执行顺序, 即正确判断语句的跳转以及确定此时变量的值是非常重要的, 是能否正确理解程序的关键, 下面就对例 5-1 的程序执行过程及变量值的变化进行具体的分析 表 5-1 程序执行过程的具体分析 执行顺序执行语句执行结果 sum 的值 n 的值说明 1 n=1;sum=0; 0 1 变量赋初值 2 计算表达式 n<=100 1<=100 结果为 真 判断循环条件 3 sum=sum+n; n++; sum 0+1, n 1+1, 1 2 执行循环体语句 4 计算表达式 n<=100 2<=100 结果为 真 判断循环条件 5 sum=sum+n; n++; sum 1+2, n 2+1, 3 3 执行循环体语句 计算表达式 n<= <=100 结果为 真 判断循环条件 201 sum=sum+n; n++; sum , n 100+1, 执行循环体语句 202 计算表达式 n<= <=100 结果为 假 判断循环条件 203 printf("sum=%d\n",sum); 退出循环体, 执行循环体下面的语句 需要注意的几个问题 : (1) 累加求和算法 这个程序采用的算法思想称为累加求和, 即不断用新累加的值取代 变量的旧值, 最终得到求和结果, 变量 sum 也叫 累加器, 初值一般为 0 累加求和尽管方 法简单, 但却是循环结构程序设计中经常采用的一种算法思想, 后面的很多复杂程序最终都可

4 第 5 章循环控制结构 105 以转化为累加求和或类似累加求和的问题来解决 使用 C 语言的循环结构对若干数进行累加求和一般要包括以下几个步骤 : 步骤 1: 设置基本数据项的初值 ( 如上面程序中的 n=1) 步骤 2: 设置存放结果变量的初值 ( 如上面程序中的 sum=0) 步骤 3: 循环条件判断, 若条件满足转步骤 4, 否则转步骤 6 步骤 4: 累加并修改基本数据项 ( 如上面程序中的 sum=sum+n;n++;) 步骤 5: 转步骤 3 步骤 6: 结束并输出结果 (2) 必须给变量赋初值 在 C 语言中定义的变量必须要赋初值, 即使变量的初值为 0, 赋初值也不能省略 如果没有给变量赋初值, 那么变量的初值就会是一个不可预知的数, 结果将没有意义 例如本题中, 读者可以省略赋值语句 sum=0;, 调试后查看结果 (3) 正确判断条件的边界值 当 n 得知为 100 时, 程序将继续执行循环体, 然后控制流程再次判断条件表达式, 此时,n 的值为 101( 见表 5-1), 表达式 n<=100 结果为假, 退出循环 退出循环后, 循环控制变量 n 的值是 101, 而不是 100 (4) 避免出现 死循环 使用 while 循环一定要注意在循环体语句中出现修改循环控制变量的语句, 使循环趋于结束, 如在本例中的 n++;, 否则条件表达式的计算结果永远为 真, 就会出现死循环 (5) 可能出现循环体不执行 while 循环是先判断表达式的值, 后执行循环体, 因此, 如果一开始表达式为假, 则循环体一次也不执行 (6)while 后面圆括号内的表达式一般为关系表达式或逻辑表达式, 但也可以是其他类型的表达式, 如算术表达式等 只要表达式运算结果为非 0, 就表示条件判断为 真 ; 运算结果为 0, 就表示条件判断为 假 例如下面的几种循环结构, 它们所反映的逻辑执行过程是等价的, 均表示当 n 为奇数时执行循环体, 否则退出循环 while (n%2) while (n%2= =1) while(n%2!=0) 有时, 条件表达式可能只是一个变量, 比如有以下程序段 : P=1; while (p) P=0; 例 5-2 使用 while 语句求 n! 分析 : 该题与例 5-1 非常相似, 只是把求和改成乘积 另外由于 n 的值并不确定, 需要程序执行的时候由用户输入要用到输入函数 #include <stdio.h>

5 106 C 语言程序设计 int n,i=1; double sum=1; printf(" 请输入一个正整数 :"); scanf("%d",&n); while (i<=n) sum=sum*i; /* 累乘求积 */ i++; /* 修改基本数据项 i*/ printf("%d!=%.0f\n",n,sum); 程序运行情况如下 : 输入 : 请输入一个正整数 :6 输出 :6!=720 循环三要素之间的关系 循环变量赋初值 判断控制表达式和修改循环变量是所谓的 循环三要素 一般来说, 进入循环之前, 应该给循环变量赋初值, 确保循环能够正常开始 ; 在控制表达式中判断循环变量是否达到循环的终止值 ; 在循环体中对循环变量进行修改, 以使循环正常的趋向终止 在编写程序时要注意它们的位置关系 循环控制变量的初值可能会影响控制表达式的设计和控制变量修改语句的语序 比如, 把例 5-2 中循环变量的初值改为 0, 则其他两个要素就要随之改变, 修改后的程序如下 : int n,i=0; double sum=1; printf(" 请输入一个正整数 :"); scanf("%d",&n); while (i<n) i++; sum=sum*i; printf("%d!=%.0f\n",n,sum); 此题虽然和例 5-1 非常像近, 但仍有两个需要注意的问题 : (1) 变量合理赋初值 变量初值的选取要根据实际情况, 本例题中用来存放乘积结果的变量 sum 初值就应赋 1, 而不是 0 (2) 防止出现数据溢出错误 累乘结果变量 sum 的结果虽然是整数, 在这里不能定义成 int 型数据 由于 int 型变量可以存放数据的范围比较有限 ( 根据编译环境不同有所不同 ), 当用户输入的 n 值比较大时, 就可能得到一个非常大的结果, 为防止在计算阶乘时发生数据溢出错误, 把 sum 定义成 double 类型 ( 但还是要注意输入数据时不能太大 ) 例 5-3 编写程序, 输入一个字符序列, 直至换行为止, 统计出大写字母 小写字母 数字 空格和其他字符的个数 分析 : 这是一个关于字符处理的问题, 首先可以定义一个字符变量 ch, 利用 getchar() 函数把用户从键盘输入的字符逐个接收, 存储在 ch 中, 然后对 ch 进行判断分类 当读取的字符

6 第 5 章循环控制结构 107 不是换行符时重复执行循环体, 直到遇到换行符为止 while 语句的条件表达式可以写成这样 (ch!= '\n') 程序如下 : #include<stdio.h> char ch; int a,b,c,d,e; a=b=c=d=e=0; while((ch=getchar())!='\n') if(ch>='a'&&ch<='z')a++; /* 判断是否为大写字母 */ else if(ch>='a'&&ch<='z')b++; /* 判断是否为小写字母 */ else if(ch>='0'&&ch<='9')c++; /* 判断是否为数字 */ else if(ch==' ')d++; else e++; printf("%d,%d,%d,%d,%d\n",a,b,c,d,e); 程序运行情况如下 : 输入 :s059se*(& De9@GF 输出 :3,4,4,2,4 /* 接收从键盘输入的字符, 并判断是否为换行符, 遇到换行符则停止循环 */ 注意 : (1) 表达式 ((ch=getchar())!='\n') 的执行分两步, 首先利用 getchar() 函数从终端接收一个字符, 存储在 ch 中, 然后再判断 ch 是否为 '\n', 不能省略内部的括号 如果写成如下形式 : (ch=getchar()!='\n') 调试结果就会发生错误, 因为表达式的关系运算符!= 运算优先级别高于赋值运算符 =, 上述语句相当于 : while(ch=(getchar()!='\n')) 即先把接收的字符与 '\n' 进行关系运算, 再把关系运算的结果 真 (1) 或者 假 (0) 存储在 ch 中, 这显然是错误的 (2) 从终端键盘向计算机输入时, 是在用户按 Enter 键以后才将一批数据一起送到内存缓冲区中去的 有以下程序段 : char ch; while((ch=getchar())!='\n') printf("%c",ch); 程序运行情况 : 输入 : abcdefg 输出 : abcdefg 结果并不是 : aabbccddeeffgg

7 108 C 语言程序设计 5.2 for 语句 for 语句是循环控制结构中使用最为广泛的一种控制语句, 它充分体现了 C 语言的灵活性 for 语句有时也被称为 计数 型循环, 因为它特别适合已知循环次数的情况 但事实上,for 循环同样适用于循环次数不确定而只知道循环结束条件的情况 for 循环可以实现所有的循环问题, 它是 C 语言中形式最灵活 功能最强大的一种循环控制结构 for 语句的一般形式如下 : for( 表达式 1; 表达式 2; 表达式 3) 循环体语句 从语法形式上看,for 语句语法上要比 while 语句复杂,for 后面的圆括号内有三个表达式, 并使用分号 ; 分隔, 这三个表达式的运算次数 运算时间以及在循环中发挥的作用各不相同 它的执行过程如下 : 步骤 1: 计算表达式 1 步骤 2: 计算表达式 2, 若表达式 2 的值为 真 ( 非 0), 则执行一次循环体语句, 然后转步骤 3, 若表达式 2 的值为 假 (0), 则转步骤 4 步骤 3: 计算表达式 3, 然后转步骤 2 步骤 4: 退出循环, 执行 for 语句后面的其他语句 for 语句执行的流程图如图 5-3 所示 : 表达式 1 表达式 2 假 (0) 真 ( 非 0) 循环体 表达式 3 图 5-3 for 语句流程图 其中的表达式 1 表达式 2 和表达式 3 可以是任何一种 C 语言合法的表达式, 但最常用 最简单的形式是这样的 : 即在表达式 1 中给循环变量赋初值 ; 表达式 2 则是循环条件控制表达式 ; 表达式 3 则实现循环控制变量的改变, 使循环趋于结束 具体如下 : for( 循环变量赋初值 ; 循环条件 ; 循环变量增值 ) for 语句的功能等价于下面 while 语句 : 表达式 1; while ( 表达式 2)

8 第 5 章循环控制结构 109 循环体语句表达式 3; 如果用 for 语句改写例 5-1: #include <stdio.h> int n,sum=0; for (n=1;n<=100;n++) sum=sum+n; printf("sum=%d\n",sum); 由此可以看出, 相对于 while 语句,for 语句在形式上更加简洁 方便 例 5-4 设 n=30, 编写程序, 计算并输出 S(n) 的值 S(n)=(1*2)/(3*4)-(3*4)/(5*6)+(5*6)/(7*8)++(-1) (n-1) *[(2n-1)*2n]/[(2n+1)*(2n+2)] + 分析 : 这是一个累加求和的问题, 题目明确是求三十项的和, 因此选用 for 循环是最合适的 设变量 S 用于存放循环执行过程中的求和结果, 设变量 n 为循环控制变量, 每一次求和运算的数据项在题目中已经给出, 即 (-1) (n-1) *[(2n-1)*2n]/[(2n+1)*(2n+2)], 数据项的值会随循环变量 n 的改变而改变 程序流程图如图 5-4 所示 s=0 n=1 n 30 假 真 s=s+pow((-1),(n-1)) *((2*n-1)*2*n)/((2* n+1)*(2*n+2)) 输出 s 图 5-4 程序流程图 #include<stdio.h> #include<math.h>

9 110 C 语言程序设计 int n; float s=0; for(n=1;n<=30;n++) s=s+pow((-1),(n-1))*((2*n-1)*2*n)/((2*n+1)*(2*n+2)); printf("s(n)=%f",s); 运行结果为 : s(n)= 注意 : 在程序中如果使用了数学函数, 就必须在源文件开头添加预编译命令 #include<math.h>, 本题目中用到了一个数学函数 pow(), 作用是进行幂运算, 即计算 x 的 y 次幂的值 函数形式为 double pow(double x,double y) 关于 for 语句的几点说明 : (1) 循环体语句可以是简单语句也可以是使用一对花括号括起来的复合语句 如果是一个语句, 也可以和 for 写在一行上, 这样使程序看起来更加简洁 ; 如果循环体包含多条语句, 最好是另起一行, 采用一对花括号括起来的复合语句形式, 以增加程序的可读性 (2) 表达式的省略 for 语句中的三个表达式均可以省略, 但是两个分号不能省略 省略表达式 1 如果 for 语句中的表达式 1 被省略, 表达式 1 的内容可以放在 for 循环结构之前 表达式 1 的内容一般来说是给循环变量赋初值, 那么如果在循环结构之前的程序中循环变量已经有初值, 那么表达式 1 就可以省略, 但分号不能省 比如例 5-4 中,for 语句中如果省略表达式 1, 可以改写成如下形式 : int n=1; float s=0; for(;n<=30;n++) s=s+pow((-1),(n-1))*((2*n-1)*2*n)/((2*n+1)*(2*n+2)); printf("s(n)=%f",s); 省略表达式 2 如果表达式 2 省略, 就意味着每次执行循环体之前不用判断循环条件, 循环就会无休止的执行下去, 就形成了 死循环 例 5-4 如果省略表达式 2, 形式如下 : int n; float s=0; for(n=1;;n++) s=s+pow((-1),(n-1))*((2*n-1)*2*n)/((2*n+1)*(2*n+2)); printf("s(n)=%f",s); 相当于如下 while 循环 : int n=1; float s=0;

10 第 5 章循环控制结构 111 while(1) s=s+pow((-1),(n-1))*((2*n-1)*2*n)/((2*n+1)*(2*n+2)); n++; printf("s(n)=%f",s); 省略表达式 3 如果表达式 3 省略, 则必须在程序中另外添加修改循环变量值的语句, 保证循环能够正常结束 例 5-4 如果省略表达式 3, 程序可以改写成如下形式 : int n; float s=0; for(n=1;n<=30;) s=s+pow((-1),(n-1))*((2*n-1)*2*n)/((2*n+1)*(2*n+2)); n++; printf("s(n)=%f",s); 同时省略表达式 1 和表达式 3 如果表达式 1 和表达式 3 同时省略, 只有表达式 2, 也就是说只有循环条件, 那就和 while 循环功能一样 下面两段程序是等价的 while (n<=100) sum=sum+n; n++; 等价于 : for (;n<=100;) sum=sum+n; n++; 同时省略三个表达式当然,for 循环的三个表达式也可同时省略, 即 : for (;;) 这种形式就会使循环体一直执行下去, 形成 死循环 (3) 表达式 1 和表达式 3 可以和循环变量无关 前面讲到, 一般来说表达式 1 是给循环变量赋初值, 表达式 3 是修改循环变量的值 但表达式 1 和表达式 3 的内容也可以和循环变量完全无关 用 for 语句实现求 1 到 100 的和, 程序如下 : int n,sum=0; y

11 112 C 语言程序设计 for (n=1;n<=100;n++) sum=sum+n; printf("sum=%d\n",sum); 也可以这样写 : int sum,n=0; for(sum=0;n<100;sum=sum+n) n++; printf("sum=%d\n",sum); 第二种形式虽然结果也正确, 但和第一种形式相比, 程序的可读性和可维护性就大大降低了 可见, 虽然 for 语句使用起来形式非常灵活, 但是一般来说还是要遵从常用的形式, 不要在表达式 1 和表达式 3 中出现和循环控制变量无关的内容 请思考, 在第二种形式中, 为什么 n 的初值设为 0 而不是 1, 循环条件也和第一种形式不同 (4) 表达式 1 和表达式 3 可以是一个简单的表达式, 也可以是逗号表达式, 既包含一个以上的简单表达式, 中间用逗号隔开 比如, 在以后的学习中会遇到一些较为复杂的问题, 和循环控制相关的变量可能一个以上, 如以下程序段 : for(i=0,j=10;i<=j;i++,j--)... 例 5-5 编写程序, 输出所有的水仙花数 水仙花数是指一个 3 位数, 其各位数字的立方和等于该数本身 例如 :153= , 所以 153 就是水仙花数 分析 : 因为水仙花数是一个 3 位数, 所以可以定义一个变量 i, 使 i 在 100~999 之间循环, 逐个判断 i 是否为水仙花数, 选用 for 循环最合适 另外, 题目中要求求各位数字的立方和, 这种问题常用 / 和 % 两种运算结合使用来解决 程序如下 : #include<stdio.h> int a,b,c,i; for(i=100;i<=999;i++) a=i/100; /* 求出 i 的百位数字 */ b=i/10%10; /* 求出 i 的十位数字 */ c=i%10; /* 求出 i 的个位数字 */ if(i==a*a*a+b*b*b+c*c*c) printf("%d\n",i); printf("\n"); 运行结果为 :

12 第 5 章循环控制结构 113 注意 : (1) 在计算机解决实际问题时, 常常会用到类似本程序的 穷举法 穷举法 解决的问题一般具有这种特点 : 如果问题有解, 一组或多组, 必定全在某个集合中 ; 如果这个集合内无解, 集合外也肯定无解 这样, 在解决问题时, 就可以将集合中的元素一一列举出来, 验证是否为问题的解 本题就是一一验证 100~999 之间所有的数, 最终找出答案 (2) 程序中在做是否相等关系判断 (i==a*a*a+b*b*b+c*c*c) 使用到了关系运算符 ==, 而不是 =, 后者是赋值运算符, 在 C 语言中这两种运算符形式是不一样的, 要注意区别 5.3 dowhile 语句 dowhile 语句属于 直到型 循环, 循环体语句一直循环执行, 直到循环条件表达式的值为假为止, 语句一般形式如下 : do 循环体语句 while 表达式 ; 执行过程 : 先执行循环体语句, 然后计算 while 后圆括号内的表达式, 当表达式为 真 ( 非 0) 时, 则再次执行循环体语句, 重复上述操作直到表达式为 假 (0) 时退出循环 其中循环体语句可以是简单语句也可以是用一对花括号 括起来的复合语句 流程图如图 5-5 所示 循环体 真 ( 非 0) 表达式 假 (0) 图 5-5 dowhile 语句流程图说明 : (1)dowhile 语句中 while 表达式 ; 后面的分号是不能省略的, 这一点是和 while 语句不一样的 (2)dowhile 语句是先执行循环体语句, 后判断表达式, 因此无论条件是否成立, 将至少执行一次循环体 而 while 语句是先判断表达式, 后执行循环体语句, 因此, 如果表达式在第一次判断时就不成立, 则循环体一次也不执行 while 语句和 dowhile 语句的比较 : 一般来说, 对于同一个问题, 使用 while 语句或 dowhile 语句结果是一样的, 也就是说, 只要循环体相同, 其结果也会相同 比如求 1~100 的和, 如果使用 dowhile 语句形式如下 :

13 114 C 语言程序设计 int n,sum; n=1;sum=0; do sum=sum+n; n++; while (n<=100); printf("sum=%d\n",sum); 但二者并不完全等价, 当第一次进行循环时,while 后面的表达式就不成立, 那么对于 while 循环来说, 循环体语句一次也不执行, 程序直接跳过循环结构, 执行下面的语句 ; 对于 dowhile 循环来说, 循环体语句还是要执行一次才跳出循环结构 例如以下两段程序 : #include <stdio.h> int n,sum=0; scanf("%d",&n); while (n<=10) sum=sum+n; n++; printf("sum=%d\n",sum); #include <stdio.h> int n,sum=0; scanf("%d",&n); do sum=sum+n; n++; while (n<=10); printf("sum=%d\n",sum); 程序段 1 程序段 2 程序运行情况如下 : 第一次运行 : 输入 :8 输入 :8 输出 :sum=27 输出 :sum=27 第二次运行 : 输入 :10 输入 :10 输出 :sum=10 输出 :sum=10 第三次运行 : 输入 :11 输入 :11 输出 :sum=0 输出 :sum=11 对以上例子进行分析, 当输入 n 的值小于或等于 10 时, 两段程序输出的结果是一样的, 当输入 n 的值为 11 时, 两段程序输出的结果就不同了 当 n=11 时, 对于 while 循环来说, 第一次判断表达式 n<=10 结果为假, 循环体一次也没有执行, 直接输出 sum 的初值 ; 对于 dowhile 循环来说, 程序先执行一次循环体,sum 的值变为 11, 再判断表达式 n<=10 结果为假, 退出循环结构

14 第 5 章循环控制结构 115 例 5-6 编写程序, 实现对用户输入口令的校验 用户输入的口令如果与预设口令不一致, 则需要重新输入, 直到与预设口令一致为止 分析 : 定义一个字符型变量 C 用来存放用户输入的口令 循环的条件是用户输入的口令和预设的口令不一致, 用户需要先输入口令然后进行判断, 因此选用 dowhile 循环更合适一些 程序如下 : #include<stdio.h> char c; do c=getchar(); /* 接收用户输入的口令 */ while(c!='a'); /* 假定预设口令是字符 'A'*/ printf(" 校验成功 \n"); 程序运行情况如下 : 输入 :D R b A 输出 : 校验成功 π 例 5-7 用公式 = 求 π 的近似值, 直到最后一项的绝对值小于 10-6 为止 分析 : 本程序属于累加求和问题, 可以定义浮点型变量 d 存放每一个基本数据项, 注意题目中相邻基本数据项的符号不同, 因此定义变量 sign 表示当前数据项的符号, 初值为正号, 即 :sign=1, 每循环一次, 都使 sign 的符号取反, 即 :sign=-sign, 其他步骤与一般的累加求和问题相同 #include<stdio.h> #include <math.h> double n,d,pi; int sign; sign=1; d=1.0;pi=0.0;n=1.0; do pi=pi+d; n=n+2; sign=-sign; /* 改变数据项的符号 */

15 116 C 语言程序设计 d=sign/n; /* 求出数据项 */ while (fabs(d)>=1.0e-6); pi=4.0*pi; printf("pi=%10.7f\n",pi); 程序运行结果为 : pi= 注意 : 语句的先后顺序有时也非常重要, 比如例 5-7 如果改写成如下形式 : double n,d,pi; int sign; sign=1; d=1.0;pi=0.0;n=1.0; do n=n+2; sign=-sign; d=sign/n; pi=pi+d; while (fabs(d)>=1.0e-6); pi=4.0*pi; printf("pi=%10.7f\n",pi); 程序运行结果为 : pi= 结果显然不正确, 只是修改了循环体中的一个语句的顺序, 结果就会产生错误, 如果将程序在此基础上作进一步相应的修改, 如下 : double n,d,pi; int sign; sign=1; d=1.0;pi=1.0;n=1.0; do n=n+2; sign=-sign; d=sign/n; pi=pi+d; while (fabs(d)>=1.0e-6); pi=pi-d; pi=4.0*pi; printf("pi=%10.7f\n",pi);

16 第 5 章循环控制结构 117 程序运行结果为 : pi= 由此可以看出, 变量初值改变了, 循环体中语句的顺序就要做相应的调整, 同时循环的次数可能也会受到影响, 在编写程序时一定要注意考虑这些因素 请思考 : 为什么在循环体后要添加语句 pi=pi-d; 三种循环的比较 : 上面介绍的三种循环语句 while dowhile 和 for 形式虽然不同, 但主要结构成分都是循环三要素 三种语句都可以实现循环, 一般来说, 可以互相替代 但它们也有一定的区别, 使用时应根据语句特点和实际问题需要选择合适的语句 它们的区别和特点如下 : (1)while 和 dowhile 语句一般实现标志式循环, 即无法预知循环的次数, 循环只是在一定条件下进行 ; 而 for 语句大多实现计数式循环 (2) 一般来说,while 和 dowhile 语句的循环变量赋初值在循环语句之前, 循环结束条件是 while 后面圆括号内的表达式, 循环体中包含循环变量修改语句 ; 一般 for 循环则是循环三要素集于一行 因此,for 循环语句功能更强大, 形式更简洁, 使用更灵活 (3)while 和 for 是先测试循环条件, 后执行循环体语句, 循环体可能一次也不执行 而 dowhile 语句是先执行循环体语句, 后测试循环条件, 所以循环体至少被执行一次 知道了三种循环各自的特点, 在实际使用时就要根据特点合理选择 5.4 多重循环结构 在处理实际问题时, 有时仅仅使用前面学过的循环是不够的, 可能在已有循环结构的循环体语句中还需要包含循环结构, 这就是多重循环 一个程序中的多个循环语句之间存在两种关系 : 并列关系和嵌套关系 循环不允许有交叉 循环之间的关系如图 5-6 所示 for( ; ; ) for( ; ; ) 嵌套循环 for( ; ; ) for( ; ; ) for( ; ; ) for( ; ; ) 并列循环交叉循环 ( 错误 ) 图 5-6 循环之间的关系 循环的嵌套是指一个循环语句的循环体内包含另一个完整的循环结构 前述三种循环结构 (while 循环 for 循环 dowhile 循环 ) 可以任意组合嵌套 例如 :

17 118 C 语言程序设计 (1)while ( ) while ( ) (2)for ( ; ; ) while ( ) 内层 内层 外层 外层 (3)do for ( ; ; ) 外层 内层 while ( ) (4)for ( ; ; ) for ( ; ; ) 外层内层 这种嵌套层次数为两层的循环嵌套称为双重循环嵌套, 它的执行过程是 : 首先进行外层循环的条件判断, 当外层循环条件成立时顺序执行外层循环体语句, 遇到内层循环, 则进行内层循环条件判断, 并在内层循环条件成立的情况下反复执行内层循环体语句, 当内层循环因循环条件不成立而退出后重新返回到外层循环并顺序执行外层循环体的其他语句, 外层循环体执行一次后, 重新进行下一次的外层循环条件判断, 若条件依然成立, 则重复上述过程, 直到外层循环条件不成立时, 退出双重循环嵌套, 执行后面其他语句 例如下面循环嵌套形式的程序流程图如图 5-7 所示

18 第 5 章循环控制结构 119 while( 表达式 1) 外层循环体语句 A while ( 表达式 2) 内层循环体语句 外层循环体语句 B 流程图 假 (0) 表达式真 ( 非 0) 外层循环体语句 A 假 (0) 表达式真 ( 非 0) 内层循环体语句 外层循环体语句 B 图 5-7 双重循环嵌套流程图 多重循环不仅包含双重循环结构,C 语言还允许循环结构的多重嵌套 如果一个循环的外面有两层循环就叫三重循环, 如图 5-8 所示就是一个三重循环结构 当然, 还允许有四重 五重等更多重循环 理论上嵌套可以是无限的, 但一般使用两重或三重的比较多, 若嵌套层数太多, 就降低了程序的可读性和执行效率 for ( ; ; ) while ( ) do while ( ); 第三层 图 5-8 三重循环结构 第二层 第一层 例 5-8 编写程序, 输出 1000 以内所有的完数 如果一个整数的因子之和等于这个数本身, 这个数就被称为完数 例如 :1 2 3 是 6 的因子, 并且 6=1+2+3, 所以 6 是完数 分析 : 此题应该分成两步来做

19 120 C 语言程序设计 第一步 : 判断一个数 n 是否为完数 可以定义一个变量 s 作为 累加器, 此问题仍然需要用前面讲过的 穷举法, 从 1~n-1 逐一去除 n, 如果能除尽, 就说明是 n 的因子, 把它累加到 s 上 可以选用 for 循环 第二步 : 外层循环对 1000 以内的所有正整数一一进行判断, 利用第一步的方法, 逐个判断 n 的因子之和 s 是否等于 n 若相等, 则显示输出 同样选用 for 循环的程序思路如下 : for(n=2;n<=1000;n++) 求 n 的所有因子之和赋给 s 若 n=s, 则显示输出 把上面的内循环改成代码, 程序如下 : #include<stdio.h> int i,n,s; for(n=2;n<=1000;n++) /* 外循环 */ s=0; for(i=1;i<n;i++) /* 内循环, 求出 n 的所有因子之和 */ if(n%i==0) s+=i; if(n==s) /* 判断 s 是否等于所有因子之和 */ printf("%d\n",n); 运行结果为 : 例 5-9 打印九九乘法口诀表 分析 : 乘法口诀表的形式如下 : 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 九九乘法口诀表是一个二维图文表, 这种表的处理常采用双重循环来实现 外循环控制 输出行, 内循环控制输出某行中的具体内容 ( 即列 ) 求解此类问题的关键是分析图表的规律, 九九乘法表的规律如下 : (1) 乘法表共有 9 行 用外循环控制行, 是定数循环, 选用 for 循环比较合适

20 第 5 章循环控制结构 121 (2) 每行算式个数规律 : 第几行就有几列算式 用内循环输出每行的算式, 内循环每执行一次, 输出一个算式, 因此内循环执行次数 = 外循环变量的值 内循环每次也是定数循环, 选用 for 循环 (3) 每个算式既与所在行有关, 又与所在列有关, 规律是 : 列 * 行 = 积 程序如下 : #include<stdio.h> int i,j; for(i=1;i<=9;i++) /* 外循环控制输出行 */ for(j=1;j<=i;j++) /* 输出该行的内容 */ printf("%2d*%d=%2d",j,i,i*j); printf("\n"); /* 每行结束后, 输出换行 */ 注意 : 如果是多重循环, 外循环和内循环应选用不同的循环控制变量 5.5 break 语句和 continue 语句 前面讲到的三种循环结构 while 语句 for 语句和 dowhile 语句, 在一般情况下只有当循环控制条件为假时, 循环才会结束,break 语句和 continue 语句则用于改变控制流 break 语句 break 语句可以使流程跳出 switch 结构, 它也可以用在 while 语句 for 语句和 dowhile 语句中 当 break 用于这三种循环语句时, 可使程序跳出本层循环结构, 接着执行循环体下面的语句 其一般形式如下 : break; 比如下面输出圆面积的例子, 要求当圆的面积大于 100 时停止输出 程序如下 : int r; float area,pi= ; for(r=1;r<=10;r++) area=pi*r*r; if(area>100) break; printf("r=%d,area=%f\n",r,area); 当 r=6 时, 条件 area>100 为真, 执行 break 语句, 提前结束循环, 即不再继续执行其余的几次循环 程序跳转到 for 循环下面的语句接着执行 说明 : (1)break 语句只能用于 while for 和 dowhile 循环语句以及 switch 语句中, 不能用于

21 122 C 语言程序设计 其他语句 (2) 如果 break 语句用在多重循环结构体中, 使用 break 语句只能使程序退出 break 语句所在的最内层循环 如以下程序段 : int i,k; for(i=1;i<=3;i++) printf(" 第 %d 行 :",i); for(k=1;k<=100;k++) if(k>10) break; printf("%d,",k); printf("\n"); 程序执行结果如下 : 第一行 :1,2,3,4,5,6,7,8,9,10, 第二行 :1,2,3,4,5,6,7,8,9,10, 第三行 :1,2,3,4,5,6,7,8,9,10, 可见, 当程序执行 break 语句时, 仅跳出了内层的 for 循环, 跳转到 printf("\n"); 语句接着执行, 外循环不受影响 continue 语句 continue 语句的作用是结束本次循环, 即跳过循环体中下面尚未执行的语句, 接着进行下一次是否执行循环体的判断 其一般形式如下 : continue; continue 语句只能用于循环结构中 对于 while 和 dowhile 语句,continue 语句使程序结束本次循环, 跳转到循环条件的判断部分, 根据条件判断是否进行下一次循环 ; 对于 for 语句,continue 语句使程序不再执行循环体中下面尚未执行的语句, 直接跳转去执行 表达式 3, 然后再对循环条件 表达式 2 进行判断, 根据条件判断是否进行下一次循环 例 5-10 输入若干学生的成绩, 求平均值 程序如下 : #include<stdio.h> int i,n,score; float sum=0,aver; printf(" 请输入学生的个数 :"); scanf("%d",&n); for(i=1;i<=n;i++) printf(" 请输入学生的成绩 :");

22 第 5 章循环控制结构 123 scanf("%d",&score); if(score<0 score>100) /* 学生成绩输入有误 */ printf(" 输入成绩有误, 请重新输入!\n"); i--; /* 此次输入成绩不算, 计数应减去 1*/ continue; sum=sum+score; aver=sum/n; printf("%.2f\n",aver); 程序运行情况如下 : 输入 : 请输入学生的个数 :5 请输入学生的成绩 :102 输入成绩有误, 请重新输入! 请输入学生的成绩 :22 请输入学生的成绩 :98 请输入学生的成绩 :-2 输入成绩有误, 请重新输入! 请输入学生的成绩 :78 请输入学生的成绩 :65 请输入学生的成绩 :80 输出 :68.60 当程序执行时, 用户输入的成绩如果不在 0~100 之间, 即 if 语句的条件 score<0 score>100 成立, 程序就会输出错误信息, 计数变量 i 减去 1, 执行 continue; 语句, 这时, 程序就会结束本次循环, 不再执行循环体中下面尚未执行的语句 sum=sum+score;, 直接跳转去执行 表达式 3(i++), 接着判断 表达式 2(i<=n), 决定是否进行下一次循环 continue 语句和 break 语句的区别是 :continue 语句只是结束本次循环, 而不是终止整个循环的执行 而 break 语句则是结束当前所在循环过程, 执行循环体后面的语句 比如有以下两个循环结构, 如图 5-9 所示 while( 表达式 1) if( 表达式 2)break; 比较 比较 while( 表达式 1) if( 表达式 2) continue; 它们的流程图分别如图 5-10 所示 图 5-9 break 语句和 continue 语句比较

23 124 C 语言程序设计 假 (0) 假 (0) 表达式 1 表达式 1 真 ( 非 0) 真 ( 非 0) 假 (0) 表达式 2 真 ( 非 0) break 比较 假 (0) 表达式 2 真 ( 非 0) continue while 循环体下面的语句 while 循环体下面的语句 图 5-10 break 语句和 continue 语句流程图 注意比较当 表达式 2 为真时, 两个流程图流程的转向 5.6 应用程序举例 例 5-11 判断 m 是否为素数 分析 : 所谓素数, 就是一个正整数, 除了本身和 1 以外并没有任何其他因子 例如 2,3, 5,7 就是素数 方法一 : 可以采用这种算法 : 定义一个整数 i 作为循环变量, 定义一个整数 k = m 让 m 被 2 到 k 除, 如果 m 能被 2~k 之中任何一个整数整除, 则提前结束循环, 此时 i 必然小于或等于 k; 如果 m 不能被 2~k 之间的任何一个整数整除, 则在最后完成一次循环后,i 还要加 1, i=k+1, 然后循环才能终止 因此, 在循环结束之后判断 i 的值是否大于或等于 k+1, 若是, 则表明未曾被 2~k 之间任一整数整除过, 因此 m 就是素数, 否则 m 就不是素数 程序如下 : #include <stdio.h> #include <math.h> int m,i,k; scanf("%d",&m); k=sqrt(m); for (i=2;i<=k;i++) if(m%i==0) break; /*m 已不是素数, 不用再除了, 跳出循环 */ if(i>k) printf("%d is a prime number\n",m);

24 第 5 章循环控制结构 125 else printf("%d is not a prime number\n",m); 程序运行情况如下 : 输入 :32 输出 :32 is not a prime number 再次运行程序输入 :31 输出 :32 is a prime number 方法二 : 还可以采用这种办法, 先定义一个变量 flag, 用它来表示 m 是否为素数, 可以假定 flag 的值为 1 时表示 m 是素数,m 的值为 0 时表示 m 不是素数 这个变量 flag 通常被称为 标志变量, 在以后的学习中还会碰到这种变量 可以事先假定 m 是一个素数, 即把 m 赋初值为 1, 当在 m 被 2 到 k 除的循环过程中, 如果 m 能被 2~k 之中任何一个整数整除, 那么就把 flag 的值置为 0 这样, 在循环结束时, 通过 m 的值就可以判断出 m 是否为素数 程序如下 : #include <stdio.h> #include <math.h> int m,i,k,flag; /* 定义标志变量 */ scanf("%d",&m); k=sqrt(m); flag=1; /* 假设 m 是素数 */ for (i=2;i<=k;i++) if(m%i==0) flag=0; /* 表示 m 不是素数 */ break; /* 跳出循环 */ if(flag==1) printf("%d is a prime number\n",m); else printf("%d is not a prime number\n",m); 程序运行情况如下 : 输入 :85 输出 :85 is not a prime number 再次运行程序输入 :79 输出 :79 is a prime number 请思考 : 在方法二中, 如果把下面的 if 语句 : if(flag==1) printf("%d is a prime number\n",m); 改为 : if(flag) printf("%d is a prime number\n",m); 这二者等价吗?

25 126 C 语言程序设计 例 5-12 从键盘输入两个正整数 m 和 n, 求它们的最大公约数和最小公倍数 分析 : 求两个数的最大公约数有两种算法, 求最小公倍数的方法为两个数的乘积除以它们的最大公约数 方法一 : 根据最大公约数的数学定义, 使用 for 循环查找既能整除 m 又能整除 n 的最大的数就是 m n 的最大公约数 #include <stdio.h> int m,n,k,max,x,y,z; printf("input m and n:\n"); scanf("%d",&m); scanf("%d",&n); x=m; y=n; for (k=1;k<=(m<n?m:n);k++) /* 循环变量 k 的最大值应是 m 和 n 中的较小数 */ if (m%k==0&&n%k==0) max=k; z=x*y/max; /* 求最小公倍数 */ printf("m 和 n 的最大公约数为 :%d,\n 最小公倍数为 :%d\n",max,z); 程序运行情况如下 : 输入 :input m and n: 输出 :m 和 n 的最大公约数为 :8, 最小公倍数为 :672 方法二 : 辗转相除法 求两个数的最大公约数可以使用辗转相除法, 算法的思想如下 : 首先定义一个变量 r, 用来存储 m 除以 n 的余数 步骤 1: 将两个数中的大者放在 m 中, 小者放在 n 中 步骤 2: 求 m 除以 n 的余数 r, 即 r=m%n 步骤 3: 若 r 不等于 0, 转步骤 4; 若 r 等于 0, 则此时的 n 就是最大公约数, 转步骤 5 步骤 4: 把 n 的值赋给 m, 把 r 的值赋给 n, 即 m n,n r, 然后转步骤 2 步骤 5: 跳出循环结构, 执行循环结构的下一个语句 程序如下 : #include<stdio.h> int m,n,r,x,y,z,k; printf("input m and n:\n"); scanf("%d",&m); scanf("%d",&n); if(n>m) /* 若 n>m, 则交换 m n 中的数据 */ k=m;m=n;n=k;

26 第 5 章循环控制结构 127 x=m; /* 保存最初两个数的值给 x 和 y, 以备求最小公倍数时使用 */ y=n; r=m%n; while(r!=0) m=n; n=r; r=m%n; z=x*y/n; /* 求最小公倍数 */ printf("m 和 n 的最大公约数为 :%d,\n 最小公倍数为 :%d\n",n,z); 程序运行情况如下 : 输入 :input m and n: 输出 :m 和 n 的最大公约数为 :8, 最小公倍数为 :672 例 5-13 求 Fibonacci 数列前 30 项, 每行输出 5 个数 分析 : (1) 问题背景 :Fibonacci 数列是中世纪意大利数学家在 算盘书 中提出的一个关于兔 子繁殖的问题 : 如果一对兔子每月能生一对小兔, 而每对小兔在它出生后的第三个月里, 又能 开始生一对小兔, 假定在不发生死亡的情況下, 每个月有多少对兔子? (2) 通过分析可以得出每个月兔子的对数应该是 : 月份 兔子数 通过观察可以发现, 每个月的兔子数量是有规律可循的, 即 : 第 i 个月兔子的对数 = 第 (i 1) 个月兔子对数 + 第 (i 2) 个月兔子对数 (3) 算法设计思想 : 可以设 f1 表示第 (i 2) 个月兔子对数,f2 表示第 (i 1) 个月兔子 对数,f3 表示第 i 个月兔子的对数 即 :f3=f1+f f1 f2 f3 f1 f2 f3 f1 f2 f3 f1 f2 f3 f1 f2 f3 从数据可以看出, 先从第一项开始,f1 f2 分别表示第一项和第二项, 初值均为 1, 第三 项的值 f3=f1+f2 计算第四项的值: 这时的 f3 表示的是第四项, 那么 f1 表示的就应该是第二 项, 即刚才的 f2,f2 表示的就应该是第三项, 即刚才的 f3 因此, 在使用公式 f3=f1+f2 计算 第四项的值之前, 需要先把 f2 的值赋给 f1(f1 f2), 把 f3 的值赋给 f2(f2 f3) 然后, 再

27 128 C 语言程序设计 使用公式计算, 得出的值 f3 就是第四项的值 以此类推, 就可以求出后面各项的值 如下所示 : f3 的值 : f1=1,f2=1,f3=f1+f2; f4 的值 : f1= f2,f2= f3,f3=f1+f2; f5 的值 : f1= f2,f2= f3,f3=f1+f2; 上面的分析可以得知, 从数列的第三项开始, 每一项的值都依赖于其前两项, 这种方法叫递推法 递推算法的基本思想是 : 从初值出发, 归纳出新值与旧值间的关系, 直到推出所需值为止 即新值的求出依赖于旧值, 不知道旧值就无法推导出新值, 类似于数学上的递推公式 程序代码如下 : #include <stdio.h> int f1,f2,f3,i; f1=1;f2=1; printf("%10d%10d",f1,f2); for(i=3; i<=30; i++) /* 从第三项开始计算 */ f3=f1+f2; printf("%10d",f3); if(i%5==0) printf("\n"); /* 每输出 5 个后换行 */ f1=f2; f2=f3; 程序运行结果为 : 请思考 : 上面程序中的两个语句 f1=f2; f2=f3; 如果交换顺序, 即写成 : f2=f3; f1=f2; 是否正确? 例 5-14 百钱买百鸡问题 这是中国古代数学家张丘建在他的 算经 中提出的问题

28 第 5 章循环控制结构 129 问题大意为 : 公鸡 5 元一只 母鸡 3 元一只 小鸡 1 元三只, 问用 100 元钱买 100 只鸡, 公鸡 母鸡 小鸡各应多少只? 分析 : 本问题可使用穷举法实现 设买公鸡 i 只, 母鸡 j 只, 小鸡 k 只, 根据题义 i j k 应满足下面条件 : 5i+3j+k/3=100 i+j+k=100 这是一个三元方程, 只有两个算术式, 方程会有多个解 所以此问题可归结为求不定方程的整数解 由程序设计实现不定方程的求解与手工计算不同 在分析确定方程中未知数变化范围的前提下, 可通过对未知数可变范围的穷举, 验证方程在什么情况下成立, 从而得到相应的解 在所有可能的买鸡方案中选出满足上述两个条件的母鸡 公鸡和小鸡数 由于公鸡 5 元一只, 因此 100 元最多买 20 只公鸡 ; 母鸡 3 元一只,100 元最多买 33 只母鸡 ; 虽然小鸡 1 元三只, 但最多只能够买 100 只小鸡 程序就需要用到三重循环, 分别设三个循环变量 i,j,k, 分别表示购买公鸡 母鸡和小鸡的数量 程序如下 : #include "stdio.h" int i,j,k,n; int money; printf(" 公鸡母鸡小鸡 \n",i,j,k); for (i=0;i<=20;i++) /* 最外层循环控制公鸡数 */ for (j=0;j<=33;j++) /* 二重循环控制母鸡数 */ for (k=0;k<=100;k++) /* 三重循环控制小鸡数 */ n=i+j+k; money=5*i+3*j+k/3; if(k%3==0&&n==100&&money==100) printf("%5d%5d%5d\n",i,j,k); 程序运行结果为 : 公鸡母鸡小鸡 例 5-15 编写程序, 输出如下所示图形 D D D D D D D C C C C C B B B A

29 130 C 语言程序设计 分析 : 此题仍然属于图形输出的问题, 可以采用双重循环实现 外循环控制行输出, 内循环控制每行输出的字符 图形的每行可视为由行前导空格和行中字母构成, 且把每行的字母视为一个整体 其规律是行号与每行不同字符个数有确定的对应关系 : 具体规律 : 前导空格 : 第 i 行 (1,2,3,4) 对应的空格数为 i 1(0,1,2,3) 每行字母 : 第 i 行 (1,2,3,4) 对应的字母个数为 9 2*i(7,5,3,1) 程序如下 : #include <stdio.h> int i,j; for(i=1;i<=4;i++) for(j=1;j<10+i;j++) printf(" "); for(j=1;j<=9-2*i;j++) printf("%c",69-i); printf("\n"); 说明 : 程序中每行输出的空格数并不是分析中的 i 1, 而是 10+i, 但这并不影响结果的输出 原因是输出每行前面的空格时关键是要保证行与行之间空格数的相对关系要正确, 即相邻的下一行比上一行的空格数多一, 只要这一点得到保证, 图形就能正确的输出, 至于每行内容前空格的绝对数目并不重要 程序中用到的 10+i, 只不过是让每行内容的前面都多加了十个空格, 结果只会让输出图形整体右移十个字符的位置 图形输出问题的一般方法 : 可以采用双重循环实现 外循环控制行输出, 内循环控制每行输出的字符 输出具体内容时, 要找出每行内容之间的规律, 对具体的字符进行输出 每行各种字符的个数往往和行号是有一定关系的, 可以利用 for 语句进行输出 每行或每列字符的内容即使不同, 行与行或列与列字符之间一定存在某种联系, 找出这种联系进行输出 必要时可以把每行的内容分为几部分分别进行输出, 比如例 错误解析 1. 形成 死循环 当在 while for 或 dowhile 语句中的循环条件一直都为真时, 就会形成 死循环 其中, 由于 for 循环形式的特点, 一般 表达式 2 是循环条件控制表达式 ; 表达式 3 实现循环控制变量的改变, 使循环趋于结束 因此, 一般来说, 使用 for 语句不容易出现 死循环 现象 使用 while 或 dowhile 语句时就要特别注意 比如以下程序 : int s,i; s=0;

30 第 5 章循环控制结构 131 i=1; while(i<=100) if(i%2==0)s=s+i; printf("%d\n",s); 在循环结构语句中缺少改变循环变量 i 值的语句, 致使循环控制条件一直为真, 程序就会一直循环执行 解决方法 : 在循环体语句中, 特别注意 while 和 dowhile 语句, 必须有使循环变量改变的语句, 以使循环趋于结束 上面的程序段的正确表述如下 : int s,i; s=0; i=1; while(i<=100) if(i%2==0)s=s+i; i++; printf("%d\n",s); 另外还有一种情况, 就是不能在 while 语句后面直接跟随分号 比如以下程序 : int s,i; s=0; i=1; while(i<=100); if(i%2==0)s=s+i; i++; printf("%d\n",s); 这样也会出现 死循环 现象 2. 首次循环条件不成立 这种情况多出现在 while 语句中, 程序在第一次进行循环条件的判断时, 循环控制条件即为假, 程序直接跳过循环体, 不再执行循环语句 比如以下程序 : int m,n,r,x,y,z; scanf("%d",&m); scanf("%d",&n); x=m; y=n; while(r!=0) m=n; n=r;

31 132 C 语言程序设计 r=m%n; z=x*y/n; printf("m 和 n 的最大公约数为 :%d, 最小公倍数为 :%d\n",n,z); 这段程序是例 5-12 常见的错误程序, 程序在进入循环之前没有给变量 r 赋值, 导致第一次判断循环条件即不成立, 程序无法顺利进入循环结构 解决方法 : 一般的在进入循环结构之前要注意和循环控制条件相关的变量值, 注意给这些变量赋值, 使程序能够顺利进入循环结构 3. 使用多重循环时, 循环变量一样 在用到两重以上循环的嵌套时, 内外重循环变量使用一个变量, 导致程序错误 比如以下程序段 : for (i=0;i<=10;i++) for (i=0;i<=50;i++) for (i=0;i<=100;i++) sum=sum+i; printf("%d",sum); 这段程序用到了三重循环, 循环变量一样, 显然是错误的 注 : 本程序段没有实际意义, 只是为了说明这种错误形式 解决方法 : 在循环的嵌套结构中, 每一重的循环变量都不能一样 但一定要分清楚, 循环结构之间的关系, 如果是并列关系, 就可以使用相同的循环变量 比如例 5-15 程序可以改写如下 : int i,j,k; for(i=1;i<=4;i++) for(j=1;j<=4-i;j++) printf(" "); for(j=1;j<=2*i-1;j++) printf("*"); printf("\n"); for(i=3;i>=1;i--) for(j=1;j<=4-i;j++) printf(" "); for(j=1;j<=2*i-1;j++) printf("*"); printf("\n"); 4. 在循环的嵌套结构中, 语句的位置不对 某个语句的具体位置是放在内循环外, 还是放在内循环内, 经常容易出错 比如下面程序段 :

32 第 5 章循环控制结构 133 int i,n,s; for(n=2;n<=1000;n++) for(i=1;i<n;i++) s=0; if(n%i==0) s+=i; if(n==s) printf("%d,",n); 这段程序是例 5-8 常见的错误形式 解决方法 : 在用到循环的嵌套时, 要一层一层进行分析, 必要时可以像例 5-8 一样, 先把一部分程序用文字表示, 然后再把文字部分换成程序段 本章小结 本章介绍的循环结构是基本控制结构中最重要的一种, 这种结构用于实现需要重复执行某些操作的程序 本章主要介绍了循环结构的特点和几种基本形式 :while 语句 dowhile 语句和 for 语句等循环结构语句 三种基本循环结构的特点总结如下 : (1)while 语句 一般形式 while ( 表达式 ) 循环体语句 while 语句属于 当型 循环 while 循环也称 当 循环, 当循环控制表达式的值为非零, 执行循环体 ; 当循环控制表达式的值为零值, 不执行循环体, 或者退出循环体 注意 : 在程序中一定要有使循环开始执行和使循环趋向结束的语句存在 (2)for 语句 一般形式 for( 表达式 1; 表达式 2; 表达式 3) 循环体语句 for 语句也被称为 计数 型循环, 它特别适合已知循环次数的情况 for 语句的结构较为紧凑, 有助于初学者养成良好的编写循环程序的习惯 当然, 它也同样适用于循环次数不确定而只知道循环结束条件的情况 for 语句是 C 语言中形式最灵活, 功能最强大的一种循环控制结构, 它充分体现了 C 语言的灵活性 (3)dowhile 语句 一般形式 do 循环体语句 while 表达式 ;

33 134 C 语言程序设计 dowhile 语句属于 直到型 循环 由于控制条件出现在循环体之后, 循环体至少被执行一次 break 和 continue 语句在循环结构中的作用 : 在循环体中可以使用 break 和 continue 语句改变循环执行过程 使用 continue 语句, 可以跳过本次循环体中那些尚未执行的语句 在 while 或 dowhile 循环体中出现 continue 语句, 流程将直接跳到循环控制条件的测试部分 ; 对于 for 循环, 则跳到执行 表达式 3 的位置 使用 break 语句可使流程跳出本层循环, 尤其在多层次的循环结构中, 利用 break 语句可以提前结束内层循环 (4) 多重循环结构 循环的嵌套是指一个循环语句的循环体内包含另一个完整的循环结构 前述三种循环结构 (while 循环 for 循环 dowhile 循环 ) 可以任意组合嵌套 如以下形式 : (1)for ( ; ; ) while ( ) 外层内层 (2)do for ( ; ; ) 外层内层 while ( ) 两层的循环嵌套称为双重循环嵌套, 它的执行过程是 : 首先进行外层循环的条件判断, 当外层循环条件成立时顺序执行外层循环体语句, 遇到内层循环, 则进行内层循环条件判断, 并在内层循环条件成立的情况下反复执行内层循环体语句, 当内层循环因循环条件不成立而退出后重新返回到外层循环并顺序执行外层循环体的其他语句, 外层循环体执行一次后, 重新进行下一次的外层循环条件判断, 若条件依然成立, 则重复上述过程, 直到外层循环条件不成立时, 退出双重循环嵌套, 执行后面其他语句 多重循环不仅包含双重循环结构,C 语言还允许循环结构的多重嵌套, 即三重或三重以上循环的嵌套 一般循环的嵌套只用到两重或三重

34 第 5 章循环控制结构 135 习题五 1. 编写程序, 求 100~2000 之间所有 3 的倍数之和, 当和大于 1000 时结束 2. 编写程序, 计算并输出下面数列前 n 项的和 ( 设 n=20,x=0.5), 要求结果保留 3 位小数 cos(x)/x,cos(2x)/2x,cos(3x)/3x,,cos(n*x)/(n*x),( 其中,cos(x) 为余弦函数 ) 3. 编写程序, 计算并输出下面数列前 20 项的和 要求结果保留 4 位小数 数列为 :2/1,3/2,5/3,8/5,13/8,21/ 编写程序, 求 ( 即求 1!+2!+3!+4!++20!) n 1 n! = 5. 编写程序, 读入一个整数, 分析它是几位数 6. 编写程序, 统计并逐行显示 ( 每行 5 个数 ) 在区间 [10000,50000] 上的回文数 回文数 的含义是从左向右读与从右向左读是相同的, 即对称, 如 编写程序, 求所有三位数中的素数 8. 使用双重循环输出以下图形 : 编写程序, 用双重循环输出下面的图形 ******* * * * * * * * ** *** ** *** * *** **** **** *** * *** ** *** ** * * * * * * * ******* 10. 一个球从 100 米高度自由落下, 每次落地后又跳回原高度的一半, 再落下 求它在 第 10 次落地时, 共经过多少米? 第 10 次反弹多高? 11. 猴子吃桃问题 猴子摘了若干个桃子, 第 1 天吃掉一半多一个 ; 第 2 天接着吃了剩下 桃子的一半多一个 ; 以后每天都吃剩余桃子的一半多一个, 到第 8 天早上要吃时只剩下一个了 问小猴最初摘了多少个桃子

林子雨《C语言程序设计》讲义PPT

林子雨《C语言程序设计》讲义PPT C 语言程序设计 厦门大学计算机科学系 2013/3/26 林子雨 ziyulin@xmu.edu.cn 2013/3/26 厦门大学非计算机专业本科生公共课 (2012-2013 第 2 学期 ) C 语言程序设计 林子雨厦门大学计算机科学系 E-mail: ziyulin@xmu.edu.cn 个人主页 :http://www.cs.xmu.edu.cn/linziyu 课程提要 第一章绪论 第二章

More information

林子雨《C语言程序设计》讲义PPT

林子雨《C语言程序设计》讲义PPT C 语言程序设计 厦门大学计算机科学系 2012-03-18 林子雨 ziyulin@xmu.edu.cn 2012-03-18 厦门大学非计算机专业本科生公共课 (2011-2012 第 2 学期 ) C 语言程序设计 林子雨厦门大学计算机科学系 E-mail: ziyulin@xmu.edu.cn 个人主页 :http://www.cs.xmu.edu.cn/linziyu 课程提要 第一章绪论

More information

<4D F736F F F696E74202D BDE1B9B9BBAFB3CCD0F2C9E8BCC D20D1ADBBB7>

<4D F736F F F696E74202D BDE1B9B9BBAFB3CCD0F2C9E8BCC D20D1ADBBB7> 能源与动力工程学院 结构化编程 结构化程序设计 循环 循环结构 确定性循环 非确定性循环 I=1 sum=sum+i I = I +1 陈 斌 I>100 Yes No 目录 求和 :1+2+3++100 第四节循环的应用 PROGRAM GAUSS INTEGER I, SUM 计数器 SUM = 0 DO I = 1, 100, 1 SUM = SUM + I print*, I, SUM DO

More information

《C语言程序设计》教材习题参考答案

《C语言程序设计》教材习题参考答案 教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN: 978-7-302-13599-9, 红色封面答案制作时间 :2011 年 2 月 -5 月一 选择题 1. 设有程序段 int k=10;while(k=0)k=k-1;, 则下面叙述正确的是 D 循环体语句一次也不执行 2. 设有程序段 int x=0,s=0;while(!x!=0)s+=++x;printf(

More information

第一章 引言

第一章  引言 第四章 循环结构 上机问题 程序书写风格 缩入 : 例如, 统一缩入四个空格 复合语句中 {} 的对齐 适当的空行 变量名命名 变量名使用 2 上机问题 关系运算符 == 与赋值运算符 = n == 0 与 n = 0 的区别? 逻辑运算符 :&& 与 的区别? && : 两个条件均为真, 结果为真 : 有一个条件为真, 结果为真 for 语句 if-else 语句的逻辑错误 3 上机问题 scanf

More information

实验目的 (1) 熟练掌握顺序 分支 循环三种结构 (2) 会使用流程控制结构编写程序 第三章程序的流程控制 实验要求 (1) 掌握 if-else swith-case 的使用 (2) 掌握 while do-while for 的使用 (3) 掌握分支嵌套和循环嵌套 (4) 分析理解如何避免死循

实验目的 (1) 熟练掌握顺序 分支 循环三种结构 (2) 会使用流程控制结构编写程序 第三章程序的流程控制 实验要求 (1) 掌握 if-else swith-case 的使用 (2) 掌握 while do-while for 的使用 (3) 掌握分支嵌套和循环嵌套 (4) 分析理解如何避免死循 实验目的 (1) 熟练掌握顺序 分支 循环三种结构 (2) 会使用流程控制结构编写程序 第三章程序的流程控制 实验要求 (1) 掌握 if-else swith-case 的使用 (2) 掌握 while do-while for 的使用 (3) 掌握分支嵌套和循环嵌套 (4) 分析理解如何避免死循环 实验范例 系统常用类 : 字符串类 (String) a) 从字符串 s 中截取一个字符串方法 s.substring()

More information

<4D F736F F D204A617661B3CCD0F2C9E8BCC6BBF9B4A1A3A8B5DA35B0E6A3A9CAB5D1E9D6B8B5BCD3EBCFB0CCE2BDE2B4F020B5DA33D5C22E646F63>

<4D F736F F D204A617661B3CCD0F2C9E8BCC6BBF9B4A1A3A8B5DA35B0E6A3A9CAB5D1E9D6B8B5BCD3EBCFB0CCE2BDE2B4F020B5DA33D5C22E646F63> 第 3 章 结构语句 本章知识点 : 流程控制语句是用来控制程序中各语句执行顺序的语句, 是程序中基本却又非常关键的部分 流程控制语句可以把单个的语句组合成有意义的 能完成一定功能的小逻辑模块 最主要的流程控制方式是结构化程序设计中规定的顺序结构 分支结构 ( 选择结构 ) 和循环结构三种基本流程结构 本章将指导读者掌握 Java 程序中的流程控制语句, 包括这些语句的语法结构和使用中需注意的要点

More information

chp3

chp3 Java 软件设计基础 3. 流程控制 3.1 语句控制结构 语句类型 变量声明语句 用来声明变量, 格式为 : 表达式语句 在一个表达式的最后加上一个分号构成的语句, 分号是语句不可缺少的部分, 格式为 : 变量 = 表达式 ; 复合语句 [ 修饰符 ] 类型名变量名 1[, 变量名 2][, ]; [ 修饰符 ] 类型名变量名 1[= 初值 1][, 变量名 2][= 初值 2][, ]; 将相关语句组合在一起就构成复合语句,

More information

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 月 3 日 1 1 INPUTOUTPUT 1 InputOutput 题目描述 用 cin 输入你的姓名 ( 没有空格 ) 和年龄 ( 整数 ), 并用 cout 输出 输入输出符合以下范例 输入 master 999 输出 I am master, 999 years old. 注意 "," 后面有一个空格,"." 结束,

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章 流程控制语句的应用 语句是程序中最小的程序指令, 即程序完成一次完整正操的基本单位 在 C# 中, 可以使用多种类型的语句, 每一种类型的语句又可以通过多个关键字实现 通过这些语句可以控制程序代码的逻辑, 提高程序的灵活性, 从而实现比较复杂的程序逻辑 本章主要内容 : 选择语句的应用 迭代语句的应用 跳转语句的应用 3.1 选择语句的应用 选择语句也叫作分支语句, 选择语句根据某个条件是否成立来控制程序的执行流程

More information

Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3

Generated by Unregistered Batch DOC TO PDF Converter , please register! 浙江大学 C 程序设计及实验 试题卷 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:3 浙江大学 C 程序设计及实验 试题卷 2002-2003 学年春季学期考试时间 : 2003 年 6 月 20 日上午 8:30-10:30 注意 : 答题内容必须写在答题卷上, 写在本试题卷上无效 一. 单项选择题 ( 每题 1 分, 共 10 分 ) 1. 下列运算符中, 优先级最低的是 A.

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章流程控制和数组 3.1 实验目的 (1) 熟练掌握控制台应用程序的代码编写和调试, 以及运行方法 (2) 掌握选择结构的一般语法格式和应用 (3) 掌握 switch 语句的用法 (4) 掌握选择结构的嵌套的用法, 能灵活使用选择结构解决实际问题 (5) 掌握 while 循环语句的一般语法格式 (6) 掌握 for 循环语句的一般语法格式 (7) 掌握循环嵌套的语法格式 (8) 掌握一维数组的定义

More information

数学分析(I)短课程 [Part 2] 4mm 自然数、整数和有理数

数学分析(I)短课程 [Part 2]   4mm 自然数、整数和有理数 .. 数学分析 (I) 短课程 [Part 2] 自然数 整数和有理数 孙伟 华东师范大学数学系算子代数中心 Week 2 to 18. Fall 2014 孙伟 ( 数学系算子代数中心 ) 数学分析 (I) 短课程 Week 2 to 18. Fall 2014 1 / 78 3. 自然数理论初步 孙伟 ( 数学系算子代数中心 ) 数学分析 (I) 短课程 Week 2 to 18. Fall 2014

More information

<4D F736F F F696E74202D BDE1B9B9BBAFB3CCD0F2C9E8BCC D20D1A1D4F1>

<4D F736F F F696E74202D BDE1B9B9BBAFB3CCD0F2C9E8BCC D20D1A1D4F1> 能源与动力工程学院 结构化编程 结构化程序设计 选择 结构化编程的三种基本结构 : 顺序结构 I=1 选择 ( 分支 ) 结构 循环结构 sum=sum+i I = I +1 陈 斌 A?=B NO I>100 No YES Yes 目录 第一节逻辑运算 第一节逻辑运算 第二节 I 语句 逻辑运算 算术运算 关系运算 逻辑运算 关系运算符 运算优先级 第三节浮点数及字符的逻辑运算 90 77 功能

More information

<4D F736F F D205A572D2D A1AAA1AAD4ACE7F42D43D3EFD1D4CAB5D1B5BDCCB3CC2E646F6378>

<4D F736F F D205A572D2D A1AAA1AAD4ACE7F42D43D3EFD1D4CAB5D1B5BDCCB3CC2E646F6378> 第 1 部分 Visual Studio 6.0 开发环境介绍 本书以 Visual C++ 6.0 作为 C 源程序的实践开发环境, 本章将首先介绍 Visual C++ 6.0 环境的基本操作, 包括 Visual C++ 6.0 的安装和启动,C 源程序的编辑 运行与调试 1.1 安装与启动 Visual C++ 6.0 MSDN Visual C++ 6.0 1.1 Microsoft Visual

More information

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

More information

期中考试试题讲解

期中考试试题讲解 一 选择题 ( 一 ) 1. 结构化程序设计所规定的三种基本结构是 C A 主程序 子程序 函数 B 树形 网形 环形 C 顺序 选择 循环 D 输入 处理 输出 2. 下列关于 C 语言的叙述错误的是 A A 对大小写不敏感 B 不同类型的变量可以在一个表达式中 C main 函数可以写在程序文件的任何位置 D 同一个运算符号在不同的场合可以有不同的含义 3. 以下合法的实型常数是 C A.E4

More information

<4D F736F F D204A617661D3EFD1D4B3CCD0F2C9E8BCC628B5DA32B0E629CCE2BDE2D3EBCAB5D1E9D6B8B5BC>

<4D F736F F D204A617661D3EFD1D4B3CCD0F2C9E8BCC628B5DA32B0E629CCE2BDE2D3EBCAB5D1E9D6B8B5BC> 第 3 章 程序流程控制 第 3 章程序流程控制 3.1 本章要点 Java 语言支持结构化程序设计中规定的三种基本控制结构, 即顺序结构 分支结构和循环结构 顺序结构比较简单, 其执行过程是从所描述的第一个操作开始, 按顺序依次执行后续的操作, 直到序列的最后一个操作 分支结构可以通过 if-else 和 switch 实现 if 语句属于条件分支语句 if 语句的语法有以下两种 : if(booleanexp){

More information

Microsoft Word C语言程序设计-理论与实践正文.doc

Microsoft Word C语言程序设计-理论与实践正文.doc 第 3 章 C 语言流程控制 在本章中将学习到如下内容 : 格式化输入 / 输出函数 C 语言中的顺序 分支和循环程序的设计方法 通过前面的学习, 我们已经能够编写一些比较简单的 C 程序了, 但是在解决实际问题的时候, 可能会遇到一些诸如满足某种条件进行怎样的处理, 不满足又进行怎样的处理, 或者某一个处理需要反复进行很多次处理这样的问题 那么在 C 语言中, 怎样来解决这类问题呢? 通过对本章的学习,

More information

求出所有的正整数 n 使得 20n + 2 能整除 2003n n 20n n n 20n n 求所有的正整数对 (x, y), 满足 x y = y x y (x, y) x y = y x y. (x, y) x y =

求出所有的正整数 n 使得 20n + 2 能整除 2003n n 20n n n 20n n 求所有的正整数对 (x, y), 满足 x y = y x y (x, y) x y = y x y. (x, y) x y = 求出所有的正整数 n 使得 20n + 2 能整除 2003n + 2002 n 20n + 2 2003n + 2002 n 20n + 2 2003n + 2002 求所有的正整数对 (x, y), 满足 x y = y x y (x, y) x y = y x y. (x, y) x y = y x y 对于任意正整数 n, 记 n 的所有正约数组成的集合为 S n 证明 : S n 中至多有一半元素的个位数为

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 4.4.1 逻辑运算符及其优先次序 3 种逻辑运算符 : &&( 逻辑与 ) ( 逻辑或 )!( 逻辑非 ) && 和 是双目 ( 元 ) 运算符! 是一目 ( 元 ) 运算符 逻辑表达式 用逻辑运算符将关系表达式或其他逻辑量连接起来的式子 4.4.1 逻辑运算符及其优先次序 判断年龄在 13 至 17 岁之内? age>=13 && age

More information

download.kaoyan.com_2006ÄêÌì½ò¹¤Òµ´óѧ¸ß¼¶ÓïÑÔ³ÌÐòÉè¼Æ£¨409£©¿¼ÑÐÊÔÌâ

download.kaoyan.com_2006ÄêÌì½ò¹¤Òµ´óѧ¸ß¼¶ÓïÑÔ³ÌÐòÉè¼Æ£¨409£©¿¼ÑÐÊÔÌâ 考生注意 : 本试卷共七大题, 满分 150 分 考试时间为 3 小时 ; 所有答案均写在答题纸上 ( 注明题号 ), 在此答题一律无效无效 一 选择题 ( 本题共 20 小题, 每小题 2 分, 满分 40 分 ) 1 char ch 1 2 A 0

More information

第一章三角函数 1.3 三角函数的诱导公式 A 组 ( ) 一 选择题 : 共 6 小题 1 ( 易诱导公式 ) 若 A B C 分别为 ABC 的内角, 则下列关系中正确的是 A. sin( A B) sin C C. tan( A B) tan C 2 ( 中诱导公式 ) ( ) B. cos(

第一章三角函数 1.3 三角函数的诱导公式 A 组 ( ) 一 选择题 : 共 6 小题 1 ( 易诱导公式 ) 若 A B C 分别为 ABC 的内角, 则下列关系中正确的是 A. sin( A B) sin C C. tan( A B) tan C 2 ( 中诱导公式 ) ( ) B. cos( 第一章三角函数 1. 三角函数的诱导公式 A 组 一 选择题 : 共 6 小题 1 ( 易诱导公式 ) 若 A B C 分别为 ABC 的内角 则下列关系中正确的是 A. sin( A B) sin C C. tan( A B) tan C ( 中诱导公式 ) B. cos( B C) cos A D. sin( B C) sin A sin60 cos( ) sin( 0 )cos( 70 ) 的值等于

More information

网C试题(08上).doc

网C试题(08上).doc 学习中心 姓名 学号 西安电子科技大学网络与继续教育学院 高级语言程序设计 (C) 全真试题 ( 闭卷 90 分钟 ) 题号一二三总分 题分 60 20 20 得分 一 单项选择题 ( 每小题 3 分, 共 60 分 ) 1.C 语言程序的基本单位是 A) 程序行 B) 语句 C) 函数 D) 字符 2. 下列四组选项中, 均是不合法的用户标识符的选项是 A)A B)getc C)include D)while

More information

Microsoft PowerPoint - 01_Introduction.ppt

Microsoft PowerPoint - 01_Introduction.ppt Hello, World C 程序设计语言 第 1 章章观其大略 孙志岗 sun@hit.edu.cn http://sunner.cn prf("hello,, world\n"); 超级无敌考考你 : 如何把 hello 和 world 分别打印在两行? 2004-12-19 A Tutorial Introduction 2 hello.c 打印华氏温度与摄氏温度对照表 计算公式 : C=(5/9)(

More information

《计算概论》课程 第十九讲 C 程序设计语言应用

《计算概论》课程 第十九讲  C 程序设计语言应用 计算概论 A 程序设计部分 字符数组与字符串 李戈 北京大学信息科学技术学院软件研究所 lige@sei.pku.edu.cn 字符数组的定义 #include int main() char a[10] = 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' ; for (int i = 0; i < 10; i++) cout

More information

林子雨《C语言程序设计》讲义PPT

林子雨《C语言程序设计》讲义PPT C 语言程序设计 厦门大学计算机科学系 2012-02-26 林子雨 ziyulin@xmu.edu.cn 2012-02-26 厦门大学非计算机专业本科生公共课 (2011-2012 第 2 学期 ) C 语言程序设计 林子雨厦门大学计算机科学系 E-mail: ziyulin@xmu.edu.cn 个人主页 :http://www.cs.xmu.edu.cn/linziyu 课程提要 第一章绪论

More information

第 3 章选择结构 q q q Python 中表示条件的方法 if 语句 选择结构程序设计方法

第 3 章选择结构 q q q Python 中表示条件的方法 if 语句 选择结构程序设计方法 第 3 章选择结构 q q q Python 中表示条件的方法 if 语句 选择结构程序设计方法 3.1 条件的描述 3.1.1 关系运算 Python 的关系运算符有 : =( 大于等于 ) ==( 等于 )!=( 不等于 ) 关系运算符用于两个量的比较判断 由关系运算符将两个表达式连接起来的式子就称为关系表达式, 它用来表示条件, 其一般格式为

More information

林子雨《C语言程序设计》讲义PPT

林子雨《C语言程序设计》讲义PPT C 语言程序设计 厦门大学计算机科学系 2013/3/19 林子雨 ziyulin@xmu.edu.cn 2013/3/19 厦门大学非计算机专业本科生公共课 (2012-2013 第 2 学期 ) C 语言程序设计 第 4 章选择结构林子雨 厦门大学计算机科学系 E-mail: ziyulin@xmu.edu.cn 个人主页 :http://www.cs.xmu.edu.cn/linziyu 课程提要

More information

Microsoft PowerPoint - 03_CtrlFlow.ppt

Microsoft PowerPoint - 03_CtrlFlow.ppt 三种基本结构 C 程序设计语言 第 3 章章控制流 孙志岗 sun@hit.edu.cn http://sunner.cn 顺序结构 选择结构 循环结构 已经证明, 任何程序均可只用这三种结构实现 BÖhm, Corrado,, and Jacopini Guiseppe. "Flow diagrams, Turing machines and languages with only two formation

More information

chap07.key

chap07.key #include void two(); void three(); int main() printf("i'm in main.\n"); two(); return 0; void two() printf("i'm in two.\n"); three(); void three() printf("i'm in three.\n"); void, int 标识符逗号分隔,

More information

Python 开发向导.1 Python 条件判断 条件语句是指根据条件表达式的不同计算结果, 使程序流转到不同的代码块 Python 中的条件语句是 if 语句和 if-else 语句.1.1 if 条件语句 if 语句用于判断某个条件是否成立, 如果成立, 则执行语句内的程序, 否则跳过 if

Python 开发向导.1 Python 条件判断 条件语句是指根据条件表达式的不同计算结果, 使程序流转到不同的代码块 Python 中的条件语句是 if 语句和 if-else 语句.1.1 if 条件语句 if 语句用于判断某个条件是否成立, 如果成立, 则执行语句内的程序, 否则跳过 if 第 章 Python 条件与循环 技能目标 掌握条件语句 if 掌握循环语句 while 掌握循环语句 for 掌握循环控制语句 break 和 continue 本章导读在程序的执行过程中, 经常要使用条件判断语句决定程序的执行流程, 还要使用循环语句进行相同代码的重复执行 它们在任何语言中都是非常重要的组成部分, 熟练掌握才能更好地控制程序 知识服务 Python 开发向导.1 Python 条件判断

More information

Microsoft Word - 实验3.doc

Microsoft Word - 实验3.doc 实验 3 基本控制结构 3.1 基本控制结构程序设计 实验目的 (1) 掌握 3 种基本结构的程序流程图 (2) 熟练掌握分支结构的程序设计方法 (3) 熟练掌握循环结构的程序设计方法 实验内容 Visual Basic 是结构化的程序设计语言, 有 3 种基本控制结构 : 顺序结构 分支结构和循环结构, 循环结构又分 当型 循环和 直到型 循环 其程序流程图如图 3-1 所示 真 E 假 当 E

More information

<4D F736F F D20D0C2B1E C B3CCD0F2C9E8BCC6B0B8C0FDB3F6B0E6B8E5>

<4D F736F F D20D0C2B1E C B3CCD0F2C9E8BCC6B0B8C0FDB3F6B0E6B8E5> 第 3 章 程序控制结构 第 3 章程序控制结构 学习导读 主要内容用计算机完成某项工作, 必须为完成的工作设计算法, 然后根据算法编写程序 算法是解决问题的方法和步骤, 是问题求解过程的精确描述 程序的基本控制结构是结构化程序设计的基础 本章将简要介绍算法 辅助控制语句, 详细介绍程序设计三种控制结构 : 顺序结构 选择结构和循环结构 学习目标 初步了解算法 ; 熟练掌握顺序结构程序设计方法中的输入输出语句的使用

More information

C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 告别 OJ2 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 TEMPLATE 1 Template 描述 使用模板函数求最大值 使用如下 main 函数对程序进行测试 int main() { double a, b; cin >> a >> b; cout c >> d; cout

More information

数学软件 Matlab 编程基础 ( 脚本 ) 1

数学软件 Matlab 编程基础 ( 脚本 ) 1 数学软件 Matlab 编程基础 ( 脚本 ) 1 本讲主要内容 M 文件 基本运算 : 算术 关系 逻辑 简单的输入输出 控制结构 : 顺序 选择 循环 2 M 文件 M 文件介绍 用 Matlab 语言编写的程序称为 M 文件 M 文件以.m 为扩展名 M 文件是由若干 Matlab 命令组合在一起构成的, 它可以完成某些操作, 也可以实现某种算法 两类重要的 M 文件 ( 调用方式不同 ) Script:

More information

普通高等教育 十二五 重点规划教材 C 语言程序设计习题集 刘立君主 编 王立武朱姬凤王锦 副主编 北 京

普通高等教育 十二五 重点规划教材 C 语言程序设计习题集 刘立君主 编 王立武朱姬凤王锦 副主编 北 京 社 心 版 中 出 版 学 科 术出 k.cn 技 boo 教.a 职 ww w 普通高等教育 十二五 重点规划教材 C 语言程序设计习题集 刘立君主 编 王立武朱姬凤王锦 副主编 北 京 ii C 语言程序设计习题集 内容简介 本书是为学习 C 语言程序设计的读者提供的参考书, 书中精心设计的例题和习题对读者深入掌握 C 语言极有参考价值 全书共分为 13 章, 书中的试题基本覆盖了 C 语言程序设计课程的全部内容,

More information

untitled

untitled Introduction to Programming ( 數 ) Lecture 3 Spring 2005 March 4, 2005 Lecture 2 Outline 數 料 If if 狀 if 2 (Standard Output, stdout): 料. ((Standard Input, stdin): 料. 類 數 數 數 說 printf 見 數 puts 串 數 putchar

More information

《C语言程序设计》第2版教材习题参考答案

《C语言程序设计》第2版教材习题参考答案 教材 C 语言程序设计 ( 第 2 版 ) 清华大学出版社, 黄保和, 江弋编著 2011 年 10 月第二版 ISBN:978-7-302-26972-4 售价 :35 元 答案版本 本习题答案为 2012 年 2 月修订版本 一 选择题 1. 设有程序段 int k=10; while(k=0) k=k-1;, 则下面叙述正确的是 D) 循环体语句一次也不执行 A. while 循环执行 10

More information

C/C++ - 函数

C/C++ - 函数 C/C++ Table of contents 1. 2. 3. & 4. 5. 1 2 3 # include # define SIZE 50 int main ( void ) { float list [ SIZE ]; readlist (list, SIZE ); sort (list, SIZE ); average (list, SIZE ); bargragh

More information

Microsoft Word - ch05.doc

Microsoft Word - ch05.doc 第 5 章循环结构程序设计 教学提示 : 结构化程序设计有 3 种基本结构 : 顺序结构 选择结构和循环结构 循环结构程序设计的特点是 : 在满足条件 ( 称为循环条件 ) 的情况下反复执行某段代码 ( 称为循环体 ), 直到不满足条件时结束循环 在进行循环结构程序设计时, 关键是要正确选取循环条件和循环体 循环条件设置不当, 可能导致循环的次数偏多或偏少, 甚至死循环 ; 循环体设置不好, 可能导致多做或少做部分工作,

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 The BitCoin Scripting Language 交易实例 交易结构 "result": { "txid": "921a dd24", "hash": "921a dd24", "version": 1, "size": 226, "locktime": 0, "vin": [ ], "vout": [ ], "blockhash": "0000000000000000002c510d

More information

没有幻灯片标题

没有幻灯片标题 指针作为函数参数 : 原因 : 1 需要修改一个或多个值,( 用 return 语句不能解决问题 ) 2 执行效率的角度 使用方法 : 在函数原型以及函数首部中需要声明能够接受指针值的形参, 具体的写法为 : 数据类型 * 形参名 如果有多个指针型形参, 则用逗号分隔, 例如 : void swap(int *p1, int *p2) 它说明了形参 p1 p2 是指向整型变量的指针 在函数调用时,

More information

nooog

nooog C : : : , C C,,, C, C,, C ( ), ( ) C,,, ;,, ; C,,, ;, ;, ;, ;,,,, ;,,, ; : 1 9, 2 3, 4, 5, 6 10 11, 7 8, 12 13,,,,, 2008 1 1 (1 ) 1.1 (1 ) 1.1.1 ( ) 1.1.2 ( ) 1.1.3 ( ) 1.1.4 ( ) 1.1.5 ( ) 1.2 ( ) 1.2.1

More information

Microsoft Word - 正文.doc

Microsoft Word - 正文.doc 第 5 章循环结构程序设计 一 实验目的 (1) 掌握 For 语句的使用 (2) 掌握 Do While/Until Loop 与 Do Loop While/Until 两种循环语句的使用 (3) 加深理解循环的概念, 掌握循环的规则及其执行过程 (4) 掌握多重循环的规则和程序设计方法 (5) 学会如何控制循环条件, 防止死循环或不循环 二 相关知识在指定条件下多次重复执行一组相同的语句可以通过循环来实现

More information

工程项目进度管理 西北工业大学管理学院 黄柯鑫博士 甘特图 A B C D E F G 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 甘特图的优点 : 直观明了 ( 图形化概要 ); 简单易懂 ( 易于理解 ); 应用广泛 ( 技术通用 ) 甘特图的缺点 : 不能清晰表示活动间的逻辑关系 WBS 责任分配矩阵 ( 负责〇审批

More information

Microsoft Word - 第3章.doc

Microsoft Word - 第3章.doc 第 3 章 选择与循环 本章学习目标 理解结构化程序设计的三种基本结构 ; 学会选择结构的使用, 包括单分支和双分支结构 ; 理解嵌套 if-else 结构的用法 ; 了解条件运算符的用法, 会用 if-else 结构重写条件表达式 ; 学会使用 switch 结构实现多分支, 熟悉 switch 中可使用的表达式类型 ; 了解循环结构的应用场景和循环结构的类型 ; 能够区分 while 循环和 do-while

More information

第 3 章顺序结构程序设计 31 2) 直到型循环结构 先执行 A 操作, 再判断条件, 若条件成立, 再执行 A 操作, 如此反复, 直到条件不成立时才停止循环 由上述三种程序结构组成的程序称作结构化程序, 形成的软件称作结构化软件 C 程序结构 C 语言以文件为编译单位 一个 C 程

第 3 章顺序结构程序设计 31 2) 直到型循环结构 先执行 A 操作, 再判断条件, 若条件成立, 再执行 A 操作, 如此反复, 直到条件不成立时才停止循环 由上述三种程序结构组成的程序称作结构化程序, 形成的软件称作结构化软件 C 程序结构 C 语言以文件为编译单位 一个 C 程 第 3 章顺序结构程序设计 随着计算机应用的不断发展, 软件变得越来越复杂 软件的可读性 可理解性等问题变得十分突出 经过不断的研究和实践, 确定了程序设计的基本方法, 这就是结构化程序设计方法 结构化程序设计方法使得程序的逻辑结构清晰, 层次分明, 有效地改善了程序的可靠性, 提高了软件的质量 本章所介绍的语句, 将按它们在程序中出现的顺序逐条执行, 由这样的语句构成的程序结构称为顺序结构 本章主要介绍以下内容

More information

Microsoft Word - 新1-16最新.doc

Microsoft Word - 新1-16最新.doc 项目 5 制作 36 选 7 摇奖机 本项目是制作一个 36 选 7 的摇奖机, 包括摇出 6 个正选号码和 1 个特选号码, 要具有没有重复号码 ; 可以多次摇奖等功能 利用控件数组来设计摇奖机界面, 产生随机数, 通过循环控制语句和分支控制语句产生满足要求的摇奖号码, 并把产生的摇奖号码显示在界面上 通过本项目, 应掌握循环结构 随机数以及控件数组的使用方法和技巧 1.Label 控件 属性 事件

More information

PowerPoint 演示文稿

PowerPoint 演示文稿 第 1 章程序设计和 C 语言 1.1 什么是计算机程序 1.2 什么是计算机语言 1.3 C 语言的发展及其特点 1.4 最简单的 C 语言程序 1.5 运行 C 程序的步骤与方法 1.6 程序设计的任务 1.1 什么是计算机程序 程序 : 一组计算机能识别和执行的指令 只要让计算机执行这个程序, 计算机就会自动地 有条不紊地进行工作 计算机的一切操作都是由程序控制的, 离开程序, 计算机将一事无成

More information

幻灯片 1

幻灯片 1 第一类换元法 ( 凑微分法 ) 学习指导 复习 : 凑微分 部分常用的凑微分 : () n d d( (4) d d( ); (5) d d(ln ); n n (6) e d d( e ); () d d( b); ); () d d( ); (7) sin d d (cos ) 常见凑微分公式 ); ( ) ( ) ( b d b f d b f ); ( ) ( ) ( n n n n d f

More information

4.C ( 详细解析见视频课程 绝对值 01 约 21 分 15 秒处 ) 5.E ( 详细解析见视频课程 绝对值 01 约 32 分 05 秒处 ) 6.D ( 详细解析见视频课程 绝对值 02 约 4 分 28 秒处 ) 7.C ( 详细解析见视频课程 绝对值 02 约 14 分 05 秒处 )

4.C ( 详细解析见视频课程 绝对值 01 约 21 分 15 秒处 ) 5.E ( 详细解析见视频课程 绝对值 01 约 32 分 05 秒处 ) 6.D ( 详细解析见视频课程 绝对值 02 约 4 分 28 秒处 ) 7.C ( 详细解析见视频课程 绝对值 02 约 14 分 05 秒处 ) [ 说明 ] 1. 以下所指教材是指朱杰老师的 管理类联考综合能力数学套路化攻略 2. 该文档中所标答案和参见的教材答案, 与视频有冲突的, 以视频答案为准! 基础篇 第 1 章 数 1.2.1 整数例题答案 : 1. A ( 详细解析见教材 P7 例 2) 2. D ( 详细解析见视频课程 数的性质 约 10 分 53 秒处 ) 3. C ( 详细解析见教材 P7 例 3) 4.E ( 详细解析见视频课程

More information

Microsoft Word - 扉页

Microsoft Word - 扉页 科学出版社职教技术出版中心 普通高等教育 十一五 规划教材 ( 第二版 ) 刘加海朱云其等编著 北 京 内容简介 本书系统地介绍了 C 语言程序的设计思路 设计方法及开发流程, 通过大量的程序设计实例及与实例相仿的思考题, 能使读者尽快提高 C 语言程序设计能力 本书结构合理, 概念清楚, 由浅入深, 实用性强, 程序中的函数 循环 数组与基本算法 ( 如查找 排序 删除等 ) 融为一体 全书从字符串输出开始,

More information

《C语言程序设计》教材习题参考答案

《C语言程序设计》教材习题参考答案 教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN: 978-7-302-13599-9, 红色封面答案制作时间 :2011 年 2 月 -5 月一 选择题 1. 以下数组定义中, 错误的是 :C)int a[3]=1,2,3,4; 2. 以下数组定义中, 正确的是 :B) int a[][2]=1,2,3,4; 3. 设有定义 int a[8][10];,

More information

第3节 VHDL语言的常用语法

第3节 VHDL语言的常用语法 第 3 节 VHDL 语言的常用语法 [ 学习要求 ] 掌握 VHDL 硬件描述语言的基本描述语句 并可以利用这些语句进行简单 电路的设计 [ 重点与难点 ] 重点 : 常用的并行语句与顺序语句的语法 难点 : 部件 (Component 的定义与应用 [ 理论内容 ] 一 并行语句所谓的并行语句指采用这些语法生成的硬件电路在时间上可以并行 ( 或并发 ) 的执行 ( 运行 ) 这是 VHDL 语法必须具备的能力,

More information

高等数学A

高等数学A 高等数学 A March 3, 2019 () 高等数学 A March 3, 2019 1 / 55 目录 1 函数 三要素 图像 2 导数 导数的定义 基本导数表 求导公式 Taylor 展开 3 积分 Newton-Leibniz 公式 () 高等数学 A March 3, 2019 2 / 55 函数 y = f(x) 函数三要素 1 定义域 2 值域 3 对应关系 () 高等数学 A March

More information

C

C C 2017 4 1 1. 2. while 3. 4. 5. for 6. 2/161 C 7. 8. (do while) 9. 10. (nested loop) 11. 12. 3/161 C 1. I 1 // summing.c: 2 #include 3 int main(void) 4 { 5 long num; 6 long sum = 0L; 7 int status;

More information

《C语言程序设计》教材习题参考答案

《C语言程序设计》教材习题参考答案 教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN:978-7-302-13599-9, 红色封面 答案制作时间 :2011 年 2 月 -5 月 一 选择题 1. 设已定义 int a, * p, 下列赋值表达式中正确的是 :C)p=&a 2. 设已定义 int x,*p=&x;, 则下列表达式中错误的是 :B)&*x 3. 若已定义 int a=1,*b=&a;,

More information

实验 2 顺序结构程序设计 9 unsigned short a; a= 1; printf("%d\n",a); 运行以上程序, 查看输出的结果, 分析为什么会输出这些信息 (1) 打开 VC 创建 liti2 2.c 文件 (2) 输入以上代码并编译执行 (3) 结果如图 2 2 所示 图 2

实验 2 顺序结构程序设计 9 unsigned short a; a= 1; printf(%d\n,a); 运行以上程序, 查看输出的结果, 分析为什么会输出这些信息 (1) 打开 VC 创建 liti2 2.c 文件 (2) 输入以上代码并编译执行 (3) 结果如图 2 2 所示 图 2 实验 2 顺序结构程序设计 明符 一 实验目的 1. 掌握 C 语言基本数据类型 运算符和赋值语句 2. 变量的定义及初始化 整型 实型 字符型等基本类型变量的定义和初始化 3. 熟练使用赋值运算 算术运算等表达式, 能够编写简单顺序结构程序 4. 掌握 C 语言基本的输入输出 熟练使用标准输入 输出函数及各种数据类型的格式说 二 实验内容及步骤 例题 2.1 输入程序, 查看输出结果 (1) 参照第一章创建

More information

内容简介 本书是 程序设计基础 C 语言 ( 杨莉 刘鸿翔主编, 科学出版社出版 ) 的配套教学用书 全书共分 9 章, 前 8 章包括程序设计概述, 基本数据类型 运算符与表达式, 程序结构, 数组, 指针, 其他数据类型, 函数以及文件, 针对各章节中的重点和难点知识, 每个章节都配有上机实训项

内容简介 本书是 程序设计基础 C 语言 ( 杨莉 刘鸿翔主编, 科学出版社出版 ) 的配套教学用书 全书共分 9 章, 前 8 章包括程序设计概述, 基本数据类型 运算符与表达式, 程序结构, 数组, 指针, 其他数据类型, 函数以及文件, 针对各章节中的重点和难点知识, 每个章节都配有上机实训项 普通高等教育 十二五 规划教材计算机系列中国科学院教材建设专家委员会 十二五 规划教材 程序设计基础实训指导教程 C 语言 杨莉龚义建主编王芳邓芳副主编 1 宋婉娟杨宜波 北 京 内容简介 本书是 程序设计基础 C 语言 ( 杨莉 刘鸿翔主编, 科学出版社出版 ) 的配套教学用书 全书共分 9 章, 前 8 章包括程序设计概述, 基本数据类型 运算符与表达式, 程序结构, 数组, 指针, 其他数据类型,

More information

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例

帝国CMS下在PHP文件中调用数据库类执行SQL语句实例 帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例 这篇文章主要介绍了帝国 CMS 下在 PHP 文件中调用数据库类执行 SQL 语句实例, 本文还详细介绍了帝国 CMS 数据库类中的一些常用方法, 需要的朋友可以参考下 例 1: 连接 MYSQL 数据库例子 (a.php)

More information

第3章.doc

第3章.doc 3 3 3 3.1 3 IT Trend C++ Java SAP Advantech ERPCRM C++ C++ Synopsys C++ NEC C C++PHP C++Java C++Java VIA C++ 3COM C++ SPSS C++ Sybase C++LinuxUNIX Motorola C++ IBM C++Java Oracle Java HP C++ C++ Yahoo

More information

Microsoft PowerPoint - w10.ppt

Microsoft PowerPoint - w10.ppt 基本程序设计技术 甘锐 北京大学数学科学学院 2010-4-12 例 : 定义计算整数阶乘的函数 : 1 2 (n-1) n 乘法的次数依赖于 n: 定义时不知道, 每次用可能不同 ( 程序的典型情况 ) 1 n 0 可用递归形式严格定义 n! n ( n 1)! n 0 递归定义的形式既是一种计算的方法 如果语言允许递归定义函数, 就可以直接翻译为程序 C 允许递归定义 : 在函数定义内调用被定义函数本身

More information

《C语言程序设计》教材习题参考答案

《C语言程序设计》教材习题参考答案 教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN: 978-7-302-13599-9, 红色封面答案制作时间 :2011 年 2 月 -5 月一 思考题 1 函数总需要从 main 中调用吗? 当调用一个函数时, 为什么要使用参数? 函数不是总需要从 main 函数中调用, 使用参数的目的是为了给被调函数传递数据 2 什么是函数的返回值? 是否每个函数都有返回值?

More information

新版 明解C言語入門編

新版 明解C言語入門編 328, 4, 110, 189, 103, 11... 318. 274 6 ; 10 ; 5? 48 & & 228! 61!= 42 ^= 66 _ 82 /= 66 /* 3 / 19 ~ 164 OR 53 OR 164 = 66 ( ) 115 ( ) 31 ^ OR 164 [] 89, 241 [] 324 + + 4, 19, 241 + + 22 ++ 67 ++ 73 += 66

More information

108 小学生 C++ 趣味编程 ( 上册 ) 第 27 课 老狼老狼几点钟 for 语句 尼克和格莱尔玩 老狼老狼几点钟 的游戏 老狼老狼几点钟? 1 点钟 老狼老狼几点钟? 2 点钟 老狼老狼几点钟? 3 点钟 老狼老狼几点钟? 4 点钟 老狼老狼几点钟? 11 点钟 老狼老狼几点钟? 12 点

108 小学生 C++ 趣味编程 ( 上册 ) 第 27 课 老狼老狼几点钟 for 语句 尼克和格莱尔玩 老狼老狼几点钟 的游戏 老狼老狼几点钟? 1 点钟 老狼老狼几点钟? 2 点钟 老狼老狼几点钟? 3 点钟 老狼老狼几点钟? 4 点钟 老狼老狼几点钟? 11 点钟 老狼老狼几点钟? 12 点 第 3 单元 for 循环 格莱尔是勤奋的孩子, 她每天都会练半小时的钢琴, 也就是说,1 月 1 日练半小时的钢琴, 1 月 2 日练半小时的钢琴,1 月 3 日练半小时的钢琴,,12 月 31 日练半小时的钢琴 每天都重复做一件事需要毅力, 格莱尔真是一个了不起的孩子! 108 小学生 C++ 趣味编程 ( 上册 ) 第 27 课 老狼老狼几点钟 for 语句 尼克和格莱尔玩 老狼老狼几点钟 的游戏

More information

CC213

CC213 : (Ken-Yi Lee), E-mail: feis.tw@gmail.com 49 [P.51] C/C++ [P.52] [P.53] [P.55] (int) [P.57] (float/double) [P.58] printf scanf [P.59] [P.61] ( / ) [P.62] (char) [P.65] : +-*/% [P.67] : = [P.68] : ,

More information

Microsoft Word - ACL chapter02-5ed.docx

Microsoft Word - ACL chapter02-5ed.docx 第 2 章神奇的質數 2.1.1 什麼是質數 1 1 1 打下好基礎 - 程式設計必修的數學思維與邏輯訓練 1 1 0 10 2 3 5 7 4 6 8 9 10 4 10000 1229 1000 168 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131

More information

吉林大学学报 工学版 244 第 4 卷 复杂 鉴于本文篇幅所限 具体公式可详见参考文 献 7 每帧的动力学方程建立及其解算方法如图 3 所示 图4 滚转角速度与输入量 η 随时间的变化波形 Fig 4 Waveform of roll rate and input η with time changing 图5 Fig 5 滚转角随时间的变化波形 Waveform of roll angle with

More information

第 33 届宁波市中小学生信息学能力水平展示活动第一轮试题 第 33 届宁波市中小学生信息学能力水平展示小学组第一轮 pascal 试题 ( 说明 : 答案请填在答题卷上 考试时间 120 分钟, 满分 100 分 ) 一. 选择题 ( 每题 1.5 分, 共 30 分 每小题只有一个正确答案, 多

第 33 届宁波市中小学生信息学能力水平展示活动第一轮试题 第 33 届宁波市中小学生信息学能力水平展示小学组第一轮 pascal 试题 ( 说明 : 答案请填在答题卷上 考试时间 120 分钟, 满分 100 分 ) 一. 选择题 ( 每题 1.5 分, 共 30 分 每小题只有一个正确答案, 多 第 33 届宁波市中小学生信息学能力水平展示小学组第一轮 pascal 试题 ( 说明 : 答案请填在答题卷上 考试时间 120 分钟, 满分 100 分 ) 一. 选择题 ( 每题 1.5 分, 共 30 分 每小题只有一个正确答案, 多选错选均不给分 ) 1 以下不属于计算机硬件的是( ) A. 显示器 B. 内存 C. 操作系统 D. 光盘驱动器 2 以下列扩展名结尾的文件, 是视频文件的是

More information

新・解きながら学ぶC言語

新・解きながら学ぶC言語 330!... 67!=... 42 "... 215 " "... 6, 77, 222 #define... 114, 194 #include... 145 %... 21 %... 21 %%... 21 %f... 26 %ld... 162 %lf... 26 %lu... 162 %o... 180 %p... 248 %s... 223, 224 %u... 162 %x... 180

More information

试卷代号 :1253 座位号 E 口 国家开放大学 ( 中央广播电视大学 )2014 年秋季学期 " 开放本科 " 期末考试 C 语言程序设计 A 试题 2015 年 1 月 E 四! 五 总分! 一 单选题 ( 每小题 2 分, 共 20 分 ) 1. 由 C 语言源程序文件编译而成的目标文件的默

试卷代号 :1253 座位号 E 口 国家开放大学 ( 中央广播电视大学 )2014 年秋季学期  开放本科  期末考试 C 语言程序设计 A 试题 2015 年 1 月 E 四! 五 总分! 一 单选题 ( 每小题 2 分, 共 20 分 ) 1. 由 C 语言源程序文件编译而成的目标文件的默 试卷代号 :1253 座位号 E 口 国家开放大学 ( 中央广播电视大学 )2014 年秋季学期 " 开放本科 " 期末考试 C 语言程序设计 A 试题 2015 年 1 月 E 四! 五 总分! 一 单选题 ( 每小题 2 分, 共 20 分 ) 1. 由 C 语言源程序文件编译而成的目标文件的默认扩展名为 ( ) A. cpp B. c C. exe D. obj 2. 设 x 和 y 均为逻辑值,

More information

《C语言程序设计》第2版教材习题参考答案

《C语言程序设计》第2版教材习题参考答案 教材 C 语言程序设计 ( 第 2 版 ) 清华大学出版社, 黄保和, 江弋编著 2011 年 10 月第二版 ISBN:978-7-302-26972-4 售价 :35 元 答案版本 本习题答案为 2012 年 2 月修订版本 一. 选择题 1 若已经定义 struct stu int a, b; student;, 则下列输入语句中正确的是 D)scanf( %d,&student.a) A.

More information

华清远见第三次大型嵌入式公益培训活动—嵌入式Linux普及行动

华清远见第三次大型嵌入式公益培训活动—嵌入式Linux普及行动 活动主题 : 嵌入式 Linux 普及行动 } 本活动是继 FPGA 红色飓风普及行动 和 WinCE 普及行动 之后华清远见推出的第三次大型嵌入式公益培训活动, 主要面向嵌入式 Linux 初学者, 希望能为更多热爱嵌入式的朋友提供有益的帮助! 第五讲 : Shell 编程基础 } 主讲 : 曾宏安老师 Shell 编程基础 内容提纲 1 2 3 4 Shell 基础 Shell 变量及环境变量

More information

( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023)

( CIP) /. :, ( ) ISBN TP CIP ( 2005) : : : : * : : 174 ( A ) : : ( 023) : ( 023) ( CIP) /. :, 2005. 2 ( ) ISBN 7-5624-3339-9.......... TP311. 1 CIP ( 2005) 011794 : : : : * : : 174 ( A ) :400030 : ( 023) 65102378 65105781 : ( 023) 65103686 65105565 : http: / /www. cqup. com. cn : fxk@cqup.

More information

C++ 程序设计 OJ4 - 参考答案 MASTER 2019 年 5 月 30 日 1

C++ 程序设计 OJ4 - 参考答案 MASTER 2019 年 5 月 30 日 1 C++ 程序设计 OJ4 - 参考答案 MASTER 2019 年 月 30 日 1 1 STRINGSORT 1 StringSort 题目描述 编写程序, 利用 string 类完成一个字符串中字符的排序 ( 降序 ) 并输出 输入描述 输入仅一行, 是一个仅由大小写字母和数字组成的字符串 输出描述 输出排序后的字符串 样例输入 abcde 样例输出 edcba 提示 使用 std::sort

More information

Microsoft Word - Vcj05.doc

Microsoft Word - Vcj05.doc 第 5 章选择结构程序设计 在日常生活和工作中, 经常会遇到各种各样的选择, 根据选择的不同, 会得到不同的结果 在程序设计中, 也经常会根据不同的情况执行不同的操作, 这与现实生活中的选择非常类似 但程序设计中的选择结构根据条件只能选择一个分支执行, 即无论分支多寡, 必择其一 ; 纵然分支众多, 仅选其一 本章主要介绍实现选择结构程序设计方面的知识, 包括 If 语句 Select Case 语句

More information

普通高等教育 十二五 规划教材中国科学院教材建设专家委员会规划教材 C 语言程序设计 何丽余平主编 胡勇刘云杰陈勇副主编 北 京 内容简介 本书根据教育部计算机基础课程教学指导分委员会制定的 高级语言程序设计 课程的教学基本要求和全国高等学校非计算机专业学生计算机等级考试教学大纲要求, 以 C 语言为主要内容, 介绍了结构化程序设计的方法 本书主要内容有 C 语言概述 C 语言程序基础 结构化程序设计

More information

C/C++ - 字符输入输出和字符确认

C/C++ - 字符输入输出和字符确认 C/C++ Table of contents 1. 2. getchar() putchar() 3. (Buffer) 4. 5. 6. 7. 8. 1 2 3 1 // pseudo code 2 read a character 3 while there is more input 4 increment character count 5 if a line has been read,

More information

C/C++ 语言 - 循环

C/C++ 语言 - 循环 C/C++ Table of contents 7. 1. 2. while 3. 4. 5. for 6. 8. (do while) 9. 10. (nested loop) 11. 12. 13. 1 // summing.c: # include int main ( void ) { long num ; long sum = 0L; int status ; printf

More information

新・明解C言語入門編『索引』

新・明解C言語入門編『索引』 !... 75!=... 48 "... 234 " "... 9, 84, 240 #define... 118, 213 #include... 148 %... 23 %... 23, 24 %%... 23 %d... 4 %f... 29 %ld... 177 %lf... 31 %lu... 177 %o... 196 %p... 262 %s... 242, 244 %u... 177

More information

试卷代号 :1075 座位号 rn 国家开放大学 ( 中央广播电视大学 )2015 年秋季学期 " 开放本科 " 期末考试 c+ 十语言程序设计试题 2016 年 1 月 t 问一 Urr-f 斗 士 1 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new

试卷代号 :1075 座位号 rn 国家开放大学 ( 中央广播电视大学 )2015 年秋季学期  开放本科  期末考试 c+ 十语言程序设计试题 2016 年 1 月 t 问一 Urr-f 斗 士 1 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new 试卷代号 :1075 座位号 rn 国家开放大学 ( 中央广播电视大学 )2015 年秋季学期 " 开放本科 " 期末考试 c+ 十语言程序设计试题 2016 年 1 月 t 问一 Urr-f 斗 士 1 1. 下面的保留字 ( ) 不能作为函数的返回类型 A. void B. int C. new D. long 2. 在每个 C 十 + 程序中都必须包含有这样一个函数, 该函数的函数名为 ) A.main

More information

编译原理与技术

编译原理与技术 编译原理与技术 中间代码生成 2015/11/7 编译原理与技术 讲义 1 中间代码生成 - 布尔表达式翻译 - 控制流语句翻译 2015/11/7 编译原理与技术 讲义 2 布尔表达式的翻译 布尔表达式文法 G 4 E E 1 or E 2 E 1 and E 2 not E 1 ( E 1 ) id 1 relop id 2 true false id 3 布尔运算符 or and 和 not(

More information

2015年计算机二级(C语言)模拟试题及答案(四)

2015年计算机二级(C语言)模拟试题及答案(四) 2015 年计算机二级 (C 语言 ) 模拟试题及答案 (4) 一 填空题 1 C 语言中基本的数据类型有 : 2 C 语言中普通整型变量的类型说明符为, 在内存中占 字节, 有符号普通整型的数据范围是 3 整数-35 在机内的补码表示为 4 执行下列语句 int a=8;a+=a-=a*a; 后,a 的值是 5 有如下语句:charA[ ]={ I am a student }; 该字符串的长度是,A[3]=

More information

C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 C++ 程序设计 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1 1 CIRCLE 1 Circle 描述 编写一个圆类 Circle, 实现半径的输入 面积的计算和输出 输入 圆的半径 (double 类型 ) 输出 圆的面积 ( 保留小数点后两位 ) 样例输入 3 样例输出 28.27 提示 圆周率的取值需要比较精确, 以保证计算结果的精度 #include

More information

untitled

untitled 1-1 1-2 1-3 1-4 1-5 1-6 1-7 1-8 1-1-1 C int main(void){ int x,y,z; int sum=0; double avg=0.0; scanf("%d",&x) ; scanf("%d",&y) ; scanf("%d",&z) ; sum=x+y+z ; avg=sum/3.0; printf("%f\n",avg); system("pause");

More information

C C

C C C C 2017 3 8 1. 2. 3. 4. char 5. 2/101 C 1. 3/101 C C = 5 (F 32). 9 F C 4/101 C 1 // fal2cel.c: Convert Fah temperature to Cel temperature 2 #include 3 int main(void) 4 { 5 float fah, cel; 6 printf("please

More information

<4D F736F F D20B5DA2031D5C22020B1E0D2EBD3EBB5F7CAD42E646F63>

<4D F736F F D20B5DA2031D5C22020B1E0D2EBD3EBB5F7CAD42E646F63> 第 1 章编译与调试 1.1 编译的概念和理解 在进行 C 程序开发时, 编译就是将编写的 C 语言代码变成可执行程序的过程, 这一过程是由编译器来完成的 编译器就是完成程序编译工作的软件, 在进行程序编译时完成了一系列复杂的过程 1.1.1 程序编译的过程在执行这一操作时, 程序完成了复杂的过程 一个程序的编译, 需要完成词法分析 语法分析 中间代码生成 代码优化 目标代码生成 本章将讲解这些步骤的作用与原理

More information

《C语言程序设计》教材习题参考答案

《C语言程序设计》教材习题参考答案 教材名称 : C 语言程序设计 ( 第 1 版 ) 黄保和 江弋编著清华大学出版社 ISBN: 978-7-302-13599-9, 红色封面 答案制作时间 :2011 年 2 月 -5 月 一 选择题 1 若已经定义 struct stu int a, b; student;, 则下列输入语句中正确的是 D)scanf( %d,&student.a); 2 若已有以下结构体定义, 则值为 2 的表达式是

More information

2. 读 课 文, 填 空 : (1) 树 上 垂 挂 着 择 怎 侉 (2) 孔 雀 好 像 美 人 拖 着 (3) 象 身 上 刺 着, 耳 朵 上 戴 着, 脖 子 上 系 着 (4) 象 主 人 敲 着, 象 小 姐 踩 着 一 摇 一 晃 的 (5) 小 松 鼠 歪 着, 朝 你 挤 眉

2. 读 课 文, 填 空 : (1) 树 上 垂 挂 着 择 怎 侉 (2) 孔 雀 好 像 美 人 拖 着 (3) 象 身 上 刺 着, 耳 朵 上 戴 着, 脖 子 上 系 着 (4) 象 主 人 敲 着, 象 小 姐 踩 着 一 摇 一 晃 的 (5) 小 松 鼠 歪 着, 朝 你 挤 眉 8. 印 度 奇 观 星 期 一 1. 写 一 写 : 幻 盆 妨 露 丛 裙 牙 松 49 2. 读 课 文, 填 空 : (1) 树 上 垂 挂 着 择 怎 侉 (2) 孔 雀 好 像 美 人 拖 着 (3) 象 身 上 刺 着, 耳 朵 上 戴 着, 脖 子 上 系 着 (4) 象 主 人 敲 着, 象 小 姐 踩 着 一 摇 一 晃 的 (5) 小 松 鼠 歪 着, 朝 你 挤 眉 弄 眼

More information

// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple

// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# using System; using HalconDotNet; public partial class HDevelopExport public HTuple halcon 与 C# 混合编程之 Halcon 代码调用 写在前面 完成 halcon 与 C# 混合编程的环境配置后, 进行界面布局设计构思每一个按钮所需要实现 的功能, 将 Halcon 导出的代码复制至相应的 C# 模块下即可 halcon 源程序 : dev_open_window(0, 0, 512, 512, 'black', WindowHandle) read_image (Image,

More information

C 1

C 1 C homepage: xpzhangme 2018 5 30 C 1 C min(x, y) double C // min c # include # include double min ( double x, double y); int main ( int argc, char * argv []) { double x, y; if( argc!=

More information

C

C C 2017 3 14 1. 2. 3. 4. 2/95 C 1. 3/95 C I 1 // talkback.c: 2 #include 3 #include 4 #define DENSITY 62.4 5 int main(void) 6 { 7 float weight, volume; 8 int size; 9 unsigned long letters;

More information

关于罗斯福时代新政 宪法革命 的几点浅见 韩 铁 美国宪法的若干重要法理原则及其运用在富兰克林 罗斯福总统任内 发生了巨大变化 史称新政 宪法革命 不过 这种变化并不是在所谓 年最高法院的 及时转向 中一锤定音的 最高法院在正当程序 商业权 公众福利条款上的态度及其变化充分说明 新政宪法革命无论是从当时还是其后的发展来看都有它的连续性 局限性和复杂性 只有认识到了这一点 我们对新政宪法革命乃至于整个新政的历史评价才会比较准确

More information

复杂加载路径下无粘性土的次塑性边界面模型

复杂加载路径下无粘性土的次塑性边界面模型 第六章选择结构程序设计 1. 概述 2. 逻辑 IF 语句 3. 块 IF 语句 4. 选择结构程序设计举例 5. 习题六 6.1 概述 顺序结构程序特点 : 程序自上而下按语句顺序逐句执行 是三大结构之一 选择结构程序特点 : 根据条件判定结果决定语句执行顺序 是三大结构之一 FORTRAN90 提供 IF 和 SELECT 语句来实现选择结构 示例 : 输入学生成绩, 判定合格与否, 输出判定结果

More information

Microsoft Word - 目次範例-catalog016204.doc

Microsoft Word - 目次範例-catalog016204.doc 財 政 經 濟 篇 行 政 規 則 行 政 院 金 融 監 督 管 理 委 員 會 令 中 華 民 國 99 年 10 月 25 日 金 管 銀 法 字 第 09910003990 銀 行 辦 理 結 構 型 商 品 所 收 本 金 性 質 及 會 計 處 理 之 相 關 事 項 規 定 如 下 : 一 結 構 型 商 品 所 收 之 本 金 不 視 為 存 款, 該 本 金 於 計 算 銀 行 法

More information

左边 ) 处 4 符号 /* */ 和 // 为注释语句, 它只帮助阅读和理解程序, 可以起到注释 标识 说明 指示等作用, 以增加程序的可读性 这部分内容不参加程序的编译, 对程序的功能无影响 /* */ 可以跨行或跨段注释, // 只注释本行 例 1-2 使用 C++ 语言编写程序输出 Hell

左边 ) 处 4 符号 /* */ 和 // 为注释语句, 它只帮助阅读和理解程序, 可以起到注释 标识 说明 指示等作用, 以增加程序的可读性 这部分内容不参加程序的编译, 对程序的功能无影响 /* */ 可以跨行或跨段注释, // 只注释本行 例 1-2 使用 C++ 语言编写程序输出 Hell 第 1 章程序设计基础 语言, 是人与人进行交流沟通的工具 人与计算机通信也需要语言, 为了使计算机进行各种工作, 就需要有一套用以编写计算机程序的数字 字符和语法规则, 由这些字符和语法规则组成计算机的各种指令 ( 或各种语句 ), 这些就是计算机所能接受的语言, 称为计算机语言 1.1 简单的 C/C++ 程序 C 语言是目前世界上广泛使用的高级语言, 其结构紧凑 语言简洁, 只有 32 个关键字,9

More information

2

2 学习要求 (1) (2) (3) 内容简述 1 2 3 利率的计算 10 r 10% 100 110 110% 121 100 1 10% 2 4 121110% 13310 100 1 10% 3 n FV P0 1 r (11.12 10) (1 12%) 1 (1 12%) n1 (1 r) 1 S P[ 1] r 5 1 r FV A[ r n 1 ] 110 100 1 10% 100 100

More information

<4D F736F F D2043D3EFD1D4B3CCD0F2C9E8BCC6CAD4BEEDBCB0B4F0B0B8A3A BCB62D3031A3A92E646F6378>

<4D F736F F D2043D3EFD1D4B3CCD0F2C9E8BCC6CAD4BEEDBCB0B4F0B0B8A3A BCB62D3031A3A92E646F6378> 注 :C 语言考试是机考, 试卷是随机抽取, 故只拿出其中一份试卷及答案 试卷编号 :6668 所属语言 :Turbo C 所属方案 :2008C 理论考试 第 1 题 填空 (2 分 )( 题号 :735) 执行以下语句后,x y 和 z 的值分别为 1 x=y=z=0; ++x ++y && ++z; 1). 1 0 0 第 2 题 填空 (2 分 )( 题号 :431) 执行下面两个语句, 输出的结果是

More information