实验程序设计与数据结构基础_第1页
实验程序设计与数据结构基础_第2页
实验程序设计与数据结构基础_第3页
实验程序设计与数据结构基础_第4页
实验程序设计与数据结构基础_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

1、C+程序设计与数据结构基础 天津大学精仪学院 生物医学工程系张宁Email: 实验4 循环结构 复习关闭工作区 编写另一个程序之前,应关闭工作区(【文件】-【关闭工作区】命令)。 初学者可关闭整个VC+窗口,然后重新打开VC再新建程序。 复习注意语法元素不得输入中文 出现unknown character的错误往往是由于输入了中文符号双击仔细检查该行,发现误 输入了中文分号(;)复习cout(设已定义:int a=5, b=3;) couta; a couta; a 原样输出引号内内容,无空格、不换行 原样输出引号内内容,无空格、不换行 couta; 5 couta+b; 8 输出a的值,无空

2、格、不换行 输出式子的值8,无空格、不换行 couta+bendl; a+b 原样输出a+b,不会计算式子,换行 couta+bn; a+b 输出效果同上 couta+b; 内只能含有一个字符 couta+; 5 输出式子的值5,之后a变为6,无空格、不换行 有引号必“照抄”(不能计算),无论单引号、双引号。但单引号内只能含1个字符。本讲概要4. 练习21统计元音字母个数 3. 练习20打印数字图形5. 循环结构程序的趣味应用(选作之一) 6. 第1章作业解析和答案 2. 练习19输出英文字母表 1. 看程序写结果while语句练习 1)练习22银行存款问题 2)练习23百鸡百钱问题 3)练习

3、24小学生百以内加法练习 7. 第2章部分习题和作业提示 看程序写结果while语句练习 #include main()int y=2;while (y-) ; couty=yendl; 空语句 #include main()int y=2;while (y- ); couty=yendl; y: 2 2 1 0 0 1 真假-1 y=-1 请上机实验:在程序中包含while后的分号(空语句)和删除该分号,分别运行程序,观察两次输出结果的不同,体会空语句在 循环中的“占位”作用。 本讲概要4. 练习21统计元音字母个数 3. 练习20打印数字图形5. 循环结构程序的趣味应用(选作之一) 6.

4、第1章作业解析和答案 2. 练习19输出英文字母表 1. 看程序写结果while语句练习 1)练习22银行存款问题 2)练习23百鸡百钱问题 3)练习24小学生百以内加法练习 7. 第2章部分习题和作业提示 复习字符型数据与整数的混用 97整数 a字符 97的二进制 or字符与整数是混用的 字符变作对应的ASCII码 C + 1 D - A 7 + 1 aA a 1A a65 = D = 68 = 68-65 = 3 = 55+49 = 104 = h;8 9765 3297 4965 练习19输出,每行打印6个字母 #include #include main()char ch; cout

5、大写英文字母表n; for (ch=A; ch=Z; ch+)coutsetw(3)ch; for (ch=65; ch=90; ch+) 大写英文字母表 A ch: A 大写英文字母表 A B 大写英文字母表 A B C 大写英文字母表 A B C D E F G H I J Z B ch+C D Z count+; if (count=6) / 输出满一行了 coutendl; /换行 count=0; / 新行从头计数int count=0; 一行之内输出几个字母了 0-6变化,使一行输出6个 练习19输出,每行打印6个字母(2) #include #include main()char

6、 ch; cout 大写英文字母表n; for (ch=A; ch=Z; ch+)coutsetw(3)ch; count+; if (count=6) / 输出满一行了 coutendl; /换行 count=0; / 新行从头计数int count=0; ch: A count: 0 B 大写英文字母表 A 1 大写英文字母表 A B 2 C F 大写英文字母表 A B C D E F 5 6 大写英文字母表 A B C D E F 0 一行之内输出几个字母了0-6变化,使一行输出6个G 大写英文字母表 A B C D E F G 1 if (+count=6) / 输出满一行了 cout

7、endl; /换行 count=0; / 新行从头计数 大写英文字母表 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z / 输出到第6个、第12个、/ 第18个 时换行if ( 已输出个数 % 6 =0 ) 换行; if ( ( ch-A+1 ) % 6 =0 )coutendl; 练习19输出,每行打印6个字母(3) #include #include main()int i; cout 大写英文字母表n; for (i=1; i=26; i+)coutsetw(3)if (i % 6 =0) coutendl; 大写英文字母表 65

8、66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90(A+i-1); (char) 大写英文字母表 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 括起类型字,临时强转换。本讲概要4. 练习21统计元音字母个数 3. 练习20打印数字图形5. 循环结构程序的趣味应用(选作之一) 6. 第1章作业解析和答案 2. 练习19输出英文字母表 1. 看程序写结果while语句练习 1)练习22银行存款问题 2)练习23百鸡百钱问题 3)练习24小学生百

9、以内加法练习 7. 第2章部分习题和作业提示 练习20打印数字图形 16个空格 + 114个空格 + 121 12个空格 + 131 10个空格 + 141 8个空格 + 151 6个空格 + 161 4个空格 + 171 2个空格 + 181 0个空格 + 191 for (i=1; i=10; i+) cout ;for (i=1; i=4; i+) coutsetw(2)=1; i-) coutsetw(2)i; 每数字输出时, 为:空格+数字 i=1; coutsetw(2)i;i=2; coutsetw(2)i; 1 1 2 for (i=1; i=16; i+) cout ;for

10、 (i=1; i=1; i+) coutsetw(2)=1; i-) coutsetw(2)i; 提取公共部分for (i=1; i= ; i+) cout ;for (i=1; i= m ; i+) coutsetw(2)=1; i-) coutsetw(2)i; for (m=1; m=9; m+) coutch; ch是char型变量,只能保存一 个字符,因此此语句一次只能读 入一个字符 若用户输入较多字符,被读入一 个字符后的剩余内容将在下次执 行cin时再读入 统计输入的一个字符串中元音字母(a、e、i、o、u)的个数,字符串以#结束。本讲概要4. 练习21统计元音字母个数 3. 练

11、习20打印数字图形5. 循环结构程序的趣味应用(选作之一) 6. 第1章作业解析和答案 2. 练习19输出英文字母表 1. 看程序写结果while语句练习 1)练习22银行存款问题 2)练习23百鸡百钱问题 3)练习24小学生百以内加法练习 7. 第2章部分习题和作业提示 【思考】1. 多少年后分别能翻番、超过1万元、超过10万元呢?2. 如果你有1万元,多少年后能超过100万元?3. 如果银行利率为3.5%,多少年后能超过100万元? 4. 你能改造程序,使初始存款和银行利率在程序运行后通过键盘输入确定吗? 练习22银行存款问题 假设在银行存款1000元,年息为3.25,多少年后,变为100

12、万元?1年后:1000*(1+0.0325)=1032.5元 2年后:1032.5 *(1+0.0325)=1066.06元3年后:1066.06 *(1+0.0325)=1100.71元方法1方法2本讲概要4. 练习21统计元音字母个数 3. 练习20打印数字图形5. 循环结构程序的趣味应用(选作之一) 6. 第1章作业解析和答案 2. 练习19输出英文字母表 1. 看程序写结果while语句练习 1)练习22银行存款问题 2)练习23百鸡百钱问题 3)练习24小学生百以内加法练习 7. 第2章部分习题和作业提示 练习23百鸡百钱问题 设公鸡每只5元,母鸡每只3元,小鸡每3只1元。用100

13、元钱买100只鸡,问公鸡、母鸡和小鸡各买多少只?用双重循环,而不必用三重,因公鸡x、 母鸡y数确定了,小鸡数必为:100-x-y 小鸡数必须为3的整数倍,不然钱 就不整了,无法正好凑100元钱 本讲概要4. 练习21统计元音字母个数 3. 练习20打印数字图形5. 循环结构程序的趣味应用(选作之一) 6. 第1章作业解析和答案 2. 练习19输出英文字母表 1. 看程序写结果while语句练习 1)练习22银行存款问题 2)练习23百鸡百钱问题 3)练习24小学生百以内加法练习 7. 第2章部分习题和作业提示 练习24百以内加法练习程序 为小学生编写两位整数的加法练习程序, 要求由计算机随机出

14、题。 产生一个随机非负整数(0),并将之存入变量a中: a=rand(); a=rand()%100; 产生100以内的随机整数: #include #include srand()函数:设置随机数种子。 用运行程序时的时间作为种子: srand( time(0) ); rand()函数:产生随机数。 time()函数:获得从1970年1月1日0:00至现在所走过的秒数(参数设为0即可)。 #include 设置种子后,每次运行程序,调用rand()函数产生的随机数都会不同。 练习24百以内加法练习程序(2) 本讲概要4. 练习21统计元音字母个数 3. 练习20打印数字图形5. 循环结构程序

15、的趣味应用(选作之一) 6. 第1章作业解析和答案 2. 练习19输出英文字母表 1. 看程序写结果while语句练习 1)练习22银行存款问题 2)练习23百鸡百钱问题 3)练习24小学生百以内加法练习 7. 第2章部分习题和作业提示 4. 整型变量a=5, b=3,写出各表达式的值 (2)a-=b(3)a & b 2 原式 a=a-b a=2,表达式的值为2,同时a变为2 1 a非0 为真,不能短路,再看b非0也为真, 因此&(且)的结果为真,真则值为1 注意(1)-(12)为小题,而非程序,前面小题对变量值的改变不会影响后面小题;所有小题都是在a为5、b为3的前提下的题目。(4)b=0

16、(5)a=5 | b=5 0 b=0,因此整个表达式结果为假,假则值为0 1 a=5为真,对|(或)可以短路,不做 b=5,因此整个表达式结果为真,真则值为1 (7)x=(a+) + (+b) (9)a%3 - 1(11)ab ? a+2 : b+2 9 同时a变为6,b变为4 1 真真假短路真短路5 4 2 5 ab为假,取b+2的值作为整个表达式的值 假5 5. 选择填空题 (1)设有定义:int x=0, y=5; 表达式y += x/5 +4; 的值是 答案:D原式 y += 4 y = y + 4 y=9 表达式的值为9(同时y也变为9)0 (4)设有定义:int x=2, y=3,

17、 z=4; 以下能正确表示 的表达式是 答案:C(A)1/x*y*z :先计算1/x,1/x为整数除法,结果为0,再*y必得0,再*z也 得0,因此这个式子结果为0,不能正确表示原式。(B)1/(x*y*z):先计算括号中的(x*y*z),其中又先计算x*y,x、y都为整 型,它们的结果也为整型为6;再计算6*z,6与z都为整型,它们的结果也为整 型为24,即括号中的(x*y*z) 计算结果为整型的24。再计算1/24,1与24都为 整型,发生整数除法,结果为0。因此这个式子也不能正确表示原式。 5. 选择填空题 (C)1.0/x/y/z:先计算1.0/x,1.0为double型,x为整型,“

18、类型不怕乱,结 果向高看”,1.0/x结果为double型的0.5。再计算0.5/y,虽y为整型,但结果需 与0.5的类型相同,为double型的约0.1667。再计算0.1667/z,虽z为整型,但 结果需与0.1667的类型相同,为double型的约0.04167,与原式数学上求得的 结果相同。故选C。(D)1/x/y/(float)z:先计算1/x,结果为整型的0;0/y结果仍为整型的0。最 后计算0/(float)z,先将z的值4临时转换为float型4.0,计算0/4.0,0虽为整型, 但“结果向高看”,结果为float型的0.0。因此这个式子也不能正确表示原式。 (6)设有定义:

19、char c1=a, c2=A; 表达式c1c2? c1: c2+32 的值 是答案:C请牢记小写字母比对应大写字母的ASCII码大32。本题回答答案是97也 正确,因为字符与对应ASCII码的整数是混用的, 字符与对应ASCII码 的整数等效(字符A的ASCII码是65,字符a的ASCII码是97)。假a 97 6. 写出下列程序的运行结果 #include using namespace std; void main() int m(1), n(2), k;k = +m;cout k= k endl;k = m + n+;cout m n k endl;k = -n -m;cout m n

20、 k =n );cout k endl;(1)m: 1n: 2k: ?2 2 2 k=2 2 3 4 k=2 234 2 2 0 k=2234 220 1 1 k=2234 220 1 注意:没有空格、最后换行注意:没有空格、最后换行6. 写出下列程序的运行结果 #include using namespace std; int main() float x=12.345;int y=100; cout x*y endl;y = x*y ; cout y endl;return 0; (3)x: 12.345 y: 100 1234.5 1234.5 1234 1234.5 1234 变量定空

21、间,塑身再搬迁。若为空间窄,舍点也情愿。6. 写出下列程序的运行结果 #include using namespace std; void main() int a, b, c, sum;cin a b c; / 依次输入 5 6 7int &resum = sum; resum = a + b + c; cout sum endl; (4)a: ?b: ?c: ?5 6 7 sum: ?resum:18 18 7. 编写下列程序 #include void main() int a;cin a; cout a*10 endl; (1)#include #include using names

22、pace std; C语言的传统方法 C+的新方法 编程时,两种方法可任选一种使用。 头文件有 .h 后缀头文件无 .h 后缀传统C语言的头文件文件名前加c 但需using namespace std; cin里永远不能用endl。 endl只能用于cout 7. 编写下列程序 #include void main() int a;cin a; cout a%10 endl; cout a/10%10 endl; cout a/100%10 endl; (5)_ 456 456 6 5 4 取整数x的个位:x % 10取整数x的十位:x / 10 % 10取整数x的百位:x / 100 %10

23、取整数x的千位:x / 1000 %10取最高位时,/n 后可不再 %10。本讲概要4. 练习21统计元音字母个数 3. 练习20打印数字图形5. 循环结构程序的趣味应用(选作之一) 6. 第1章作业解析和答案 2. 练习19输出英文字母表 1. 看程序写结果while语句练习 1)练习22银行存款问题 2)练习23百鸡百钱问题 3)练习24小学生百以内加法练习 7. 第2章部分习题和作业提示 2. 读程序写结果 (1)提示:=为赋值,表达式的值为赋值后变量的值;=为判等,表达式的 值为1或0。if “( )”中的表达式的值非0表示条件成立,执行子句;表达式的值 为0表示条件不成立,不执行子句

24、。“a=b+c”是判断a的值等于b+c的和吗? (2)提示:a+5与a+b5是同类事物,它们都是表达式。a+b5是用a+b 这个式子的值(和)判断与5的大小(而不是用变量a的值去与5比较,也不是 用变量b的值与5比较);同样a+5也是用a+这个式子的值(而不是变量a 的值)与5比较。同样,cout5之后,a值还为5吗? (3)提示:for语句表达式间分号断,int k=1, int s=0是表达式1,它是逗号 表达式,依次分别做逗号分开的两部分就可以了。for语句结束后k的值为几? 如果k为10,k=10还能否成立,还能跳出for吗?(可按照for 语句的执行过程 口诀从头倒一下)。只有一个分

25、号的语句是空语句,起占位作用。 谁是for的 “孩子”(谁要被重复执行)?是s+=k; 吗? 2. 读程序写结果 #include using namespace std; void main() int i=0, s=0;for ( ; ; )i += 2 ;if (i8) cout s endl; break; if (i=6) continue;s += i;(4)for省略了3个表达式(分号不能省)。在for语句的执行过程中,该做表达式1或表达式3时不做,跳过直接进行下一步。该用表达式2 判断条件时,条件为永真。i: 0s: 0真i=i+2; 2 s=s+i; 2 4 6 6 8 14

26、 10 14 2. 读程序写结果 #include using namespace std; void main() int n, sum;do cinn; sum=0; for (int i=0; i5; i+) sum += n%10; n=n/10; if ( ( i=4) | (n=0) ) break; cout sum= sum endl; if (sum = 0) break; while (1); (5)n: ? sum: ? _ 5238 5238 0 i: 0 8 523 1 11 2 13 3 18 break只能跳出一层,此 跳出for,不能跳出更外层的 do-whil

27、e。5238sum=18 5238sum=18 _ 实际是求n值各位相加之和。如果n值多于5位,只求低5位的相加之和。外层do-while循环使程序一次运行可以输入多个数据(分别求多个数据各位相加之和),数据为0(和也为0)时结束。52 5 0 sum =sum + n%10; #include using namespace std; void main() int n, sum;do cinn; sum=0; for (int i=0; i5; i+) sum += n%10; n=n/10; if ( ( i=4) | (n=0) ) break; cout sum= sum endl;

28、 if (sum = 0) break; while (1); 2. 读程序写结果 (5)5238sum=18 _ n: 0 sum: 18 i: 3 5238sum=18 316 316 0 0 6 31 1 7 3 2 10 0 5238sum=18 316 sum=10 5238sum=18 316 sum=10 _ sum =sum + n%10; 实际是求n值各位相加之和。2. 读程序写结果 #include using namespace std; void main() int n, sum;do cinn; sum=0; for (int i=0; i5; i+) sum +=

29、 n%10; n=n/10; if ( ( i=4) | (n=0) ) break; cout sum= sum endl; if (sum = 0) break; while (1); (5)5238sum=18 316 sum=10 _ n: 0 sum: 10 i: 2 5238sum=18 316 sum=10 24 2400sum =sum + n%10; 42 16实际是求n值各位相加之和。0 5238sum=18 316 sum=10 24 sum=6 5238sum=18 316 sum=10 24 sum=6 _5238sum=18 316 sum=10 24 sum=6

30、0 000 0 5238sum=18 316 sum=10 24 sum=6 0 sum=0 这个break位于外层do-while循环中,它是跳出外层do-while循环的。数据为0(和也为0)时跳出外层循环,结束。 编程题3. 3. 提示:按题目要求此题必须用if语句实现。单独的if实现的是执行还是不执行的功能,如“if(教室没停电) 上课”;if-else实现的是两路分支,两路必选一路(如求绝对值); 本题是三路分支,应用 if - else if - else 实现。注意:n值应在程序运行时,由cin从键盘输入;然后程序用if语句根据n值判断,在n为不同值时分别执行不同的y=.n.;。

31、最后输出y值。注意n2的写法。编程题4. 4. 请参见“第2章(1)选择 结构.ppt” P21页。本题要求输入10个学生的 考试分数,也就是P21的 程序要被反复执行10 遍;于是应写循环体就是用 括起来的P21的程序。另外本题要求是8090输出B,而不是7090。参考答案见右(注答案程序 不唯一)内嵌在for循环之内的 嵌套循环:如果所输 score值不在0100范 围内,就要求用户重输 入这个学生的成绩,直 至输入正确,才能继续 和进行下一学生判断一个学生的程序,该段程序要被反复执行10次,以判断10个学生。for (i=1; i=10; i+)编程题5-6 5. 答案见“第2章(1)选

32、择结构.ppt” P23页。6. 提示:先将 的值求出,存入变量,例如存入变量s中。然后再计算 4*s就求得了 值。而计算 就是一个累加问题,可用累加的编程套路编出程序(套路见“第2章(2)循环结构.ppt” P15页)。分子1/-1的变化该如何做呢?(参见“第2章(2)循环结构.ppt” P17页)直到最后一项的绝对值小于10-6为止。编程题6(2) 分母是1, 3, 5, 7.,从1开始、每次+2,但“到多少为止”不定(结束条件是遇到一项的值小于10-6为止。可将for语句的表达式2省略表示 “永真”,在循环体中再判断现在这一项的绝对值是否小于10-6,若小于则用 break强行跳出for

33、即可。程序框架如下:s= ; / s表示总和(先求/4)。累加问题勿忘清零 for ( i=1 ; ; i+=2 ) / i表示各项分母:1, 3, 5, 7, . /(按需可添加其他语句或不添加) t= ; / 求得第i项的值存入t if ( fabs(t)1e-6 ) break;s = s + ; / 累加这一项到s(累加t的值) /(按需可添加其他语句或不添加) pai=4*s; / 求4*s存入变量pai,再输出pai值;或直接cout4*s; coutpai; 方法1fabs是求绝对值的系统函数,要使用它需#include 请任选一种方法将程序补充完整(包括#include、main函数、变量定义 等),也可按照自己的思路编程。注意哪些变量能定义成int型,哪些不能? 编程题6(3) s= ; / s表示总和(先求/4)。累加问题勿忘清零 t=1;/ t表示各项的值,现在准备第一项的值 for ( i=3 ; fabs(t) = 1e-6 ; i+=2 ) / i从3开始,因第一项 t=1 已备完 /* 每次循环累加上次准备的一项 t

温馨提示

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

评论

0/150

提交评论