2•主教材:•苏小红等,《C语言大学实用教程》,电子工业出版社,2004,8•苏小红等,《C语言大学实用教程(第2版)》,电子工业出版社,2007,2•实验教材:•苏小红等,《C语言大学实用教程习题与实验指导》,电子工业出版社,2004,8•苏小红等,《C语言大学实用教程学习指导》,电子工业出版社,2007,43实验内容4实验1:熟悉上机环境和顺序结构编程练习——键盘输入与屏幕输出练习•问题1:要使下面程序的输出语句在屏幕上显示1,2,34,则从键盘输入的数据格式应为以下备选答案中的哪一个?#includestdio.hmain(){chara,b;intc;scanf(%c%c%d,&a,&b,&c);printf(%c,%c,%d\n,a,b,c);}A)1234B)1,2,34C)’1’,’2’,34D)12345实验1:熟悉上机环境和顺序结构编程练习——键盘输入与屏幕输出练习•问题2:与上面程序的键盘输入相同的情况下,要使上面程序的输出语句在屏幕上显示1234,则应修改程序中的哪条语句?怎样修改?修改后#includestdio.hmain(){chara,b;intc;scanf(%c%c%d,&a,&b,&c);printf(%c%c%d\n,a,b,c);}6•问题3:要使上面程序的键盘输入数据格式为1,2,34,输出语句在屏幕上显示的结果也为1,2,34,则应修改程序中的哪条语句?怎样修改?修改后#includestdio.hmain(){chara,b;intc;scanf(“%c,%c,%d,&a,&b,&c);printf(“%c,%c,%d\n,a,b,c);}实验1:熟悉上机环境和顺序结构编程练习——键盘输入与屏幕输出练习7•问题4:要使上面程序的键盘输入数据格式为1,2,34,而输出语句在屏幕上显示的结果为’1’,’2’,34,则应修改程序中的哪条语句?怎样修改?–[提示:利用转义字符输出字符单引号字符。]#includestdio.hmain(){chara,b;intc;scanf(%c,%c,%d,&a,&b,&c);printf(\'%c\',\'%c\',%d\n,a,b,c);}实验1:熟悉上机环境和顺序结构编程练习——键盘输入与屏幕输出练习8•问题5:要使上面程序的键盘输入无论用下面哪种格式输入数据,程序在屏幕上的输出结果都为’1’,’2’,34,则程序应修改程序中的哪条语句?怎样修改?–第一种输入方式:1,2,34↙(以逗号作为分隔符)–第二种输入方式:1234↙(以空格作为分隔符)–第三种输入方式:1234↙(以Tab键作为分隔符)–第四种输入方式:1↙2↙34↙(以回车符作为分隔符)实验1:熟悉上机环境和顺序结构编程练习——键盘输入与屏幕输出练习9实验1:熟悉上机环境和顺序结构编程练习——计算定期存款本利之和•设银行定期存款的年利率rate为2.25%,并已知存款期为n年,存款本金为capital元,试编程计算n年后的本利之和deposit。•要求定期存款的年利率rate、存款期n和存款本金capital均由键盘输入。#includemath.h#includestdio.hmain()/*主函数首部*/{intn;/*存款期变量声明*/doublerate=0.0225;/*存款年利率变量声明*/doublecapital;/*存款本金变量声明*/doubledeposit;/*本利之和变量声明*/printf(Pleaseenteryear,capital:);/*显示用户输入的提示信息*/scanf(%d,%lf,&n,&capital);/*输入数据,数据间以逗号分隔*/deposit=capital*pow(1+rate,n);/*计算存款利率之和,pow为幂函数*/printf(deposit=%f\n,deposit);/*打印存款本利之和*/}10实验2:选择结构编程练习——身高预测•每个做父母的都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后身高的因素有遗传、饮食习惯与坚持体育锻炼等。小孩成人后身高与其父母身高和自身性别密切相关。•设faHeight为其父身高,moHeight为其母身高,身高预测公式为:–男性成人时身高=(faHeight+moHeight)*0.54(cm)–女性成人时身高=(faHeight*0.923+moHeight)/2(cm)•此外,如果喜爱体育锻炼,那么可增加身高2%,如果有良好的卫生饮食习惯,那么可增加身高1.5%。11实验2:选择结构编程练习——身高预测•编程从键盘输入你的性别(用字符型变量sex存储,输入字符F表示女性,输入字符M表示男性)、父母身高(用实型变量存储,faHeight为其父身高,moHeight为其母身高)、是否喜爱体育锻炼(用字符型变量sports存储,输入字符Y表示喜爱,输入字符N表示不喜爱)、是否有良好的饮食习惯等条件(用字符型变量diet存储,输入字符Y表示喜爱,输入字符N表示不喜爱),利用给定公式和身高预测方法对你的身高进行预测。12实验2:选择结构编程练习——简单的计算器程序•要求用switch语句编程设计一个简单的计算器程序。要求根据用户从键盘输入的表达式:•操作数1运算符op操作数2•计算表达式的值,指定的算术运算符为加(+)、减(-)、乘(*)、除(/)。13例4.8:计算器程序•编程设计一个简单的计算器程序,要求根据用户从键盘输入如下形式的表达式:操作数1运算符op操作数2然后,计算并输出表达式的值指定的运算符为加(+)减(-)乘(*)除(/)14main(){intdata1,data2;/*定义两个操作符*/charop;/*定义运算符*/printf(Pleaseentertheexpression:);scanf(%d%c%d,&data1,&op,&data2);/*输入运算表达式*/switch(op){case'+':/*处理加法*/printf(%d+%d=%d\n,data1,data2,data1+data2);break;case'-':/*处理减法*/printf(%d-%d=%d\n,data1,data2,data1-data2);break;case'*':/*处理乘法*/printf(%d*%d=%d\n,data1,data2,data1*data2);break;case'/':/*处理除法*/if(0==data2)printf(Divisionbyzero!\n);elseprintf(%d/%d=%d\n,data1,data2,data1/data2);break;default:printf(Unknownoperator!\n);}}例4.815实验2:选择结构编程练习——简单的计算器程序•本实验程序是在例4.8基础上,增加如下要求:–(1)如果要求程序能进行浮点数的算术运算,程序应该如何修改?如何比较实型变量data2和常数0是否相等?–(2)如果要求输入的算术表达式中的操作数和运算符之间可以加入任意多空白符,那么程序如何修改?–(3)(选作题)如果要求连续做多次算术运算,每次运算结束后,程序都给出提示:•Doyouwanttocontinue(Y/Nory/n)?–如果用户输入Y或y时,程序继续进行其它算术运算,否则程序才退出运行状态。那么,程序如何修改?16•语句if(0==data2)的必要性–1998年11月《科学美国人》杂志,描述了美国导弹巡洋舰约克敦号上的一起事故,除零错导致军舰推进系统的关闭•如果要求程序能进行浮点数的算术运算,语句if(0==data2)还能用于比较实型变量data2和常数0的大小吗?–if(fabs(data2)=1e-7)•如果要求输入的算术表达式中的操作数和运算符之间可以加入任意多个空格符,那么程序如何修改?–scanf(%d%c%d,&data1,&op,&data2);–scanf(%d%1s%d,&data1,&op,&data2);实验2:选择结构编程练习——简单的计算器程序17实验3:循环结构编程练习——猜数游戏•在这个实验中,我们将尝试编写一个猜数游戏程序,这个程序看上去有些难度,但是如果你按下列要求以循序渐进方式进行编程实现,你就会发现其实这个程序是很容易实现的。先编写第一个程序,然后试着在第一个程序的基础上编写第二个程序,……。•程序1:编程先由计算机“想”一个1到100之间的数请人猜,如果人猜对了,则计算机给出提示:“Right!”,否则提示:“Wrong!”,并告诉人所猜的数是大(Toohigh)还是小(Toolow),然后结束游戏。要求每次运行程序时机器所“想”的数不能都是一样的。18猜数游戏用到的库函数•随机函数srand–为函数rand()设置随机数种子来实现对函数rand所产生的伪随机数的“随机化”•通过键入随机数种子,产生[0,100]之间的随机数scanf(%u,&seed);srand(seed);magic=rand()%100+1;19#includestdlib.h#includestdio.hmain(){intmagic;intguess;intcounter;unsignedintseed;printf(Pleaseenterseed:);scanf(%u,&seed);srand(seed);magic=rand()%100+1;counter=0;do{printf(Pleaseguessamagicnumber:);scanf(%d,&guess);counter++;if(guessmagic)printf(Wrong!Toohigh!\n);elseif(guessmagic)printf(Wrong!Toolow!\n);}while(guess!=magic);printf(Right!\n);printf(counter=%d\n,counter);}20猜数游戏用到的库函数•使用计算机读取其时钟值并把该值自动设置为随机数种子,产生[0,100]之间的随机数•函数time()返回以秒计算的当前时间值,该值被转换为无符号整数并用作随机数发生器的种子#includetime.hsrand(time(NULL));magic=rand()%100+1;21#includestdlib.h#includestdio.h#includetime.hmain(){intmagic;intguess;intcounter;srand(time(NULL));magic=rand()%100+1;counter=0;do{printf(Pleaseguessamagicnumber:);scanf(%d,&guess);counter++;if(guessmagic)printf(Wrong!Toohigh!\n);elseif(guessmagic)printf(Wrong!Toolow!\n);}while(guess!=magic);printf(Right!\n);printf(counter=%d\n,counter);}22•程序2:编程先由计算机“想”一个1到100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,否则计算机给出提示,告诉人所猜的数是太大还是太小,直到人猜对为止。实验3:循环结构编程练习——猜数游戏23•程序3:编程先由计算机“想”一个1到100之间的数请人猜,如果人猜对了,则结束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,则结束游戏。实验3:循环结构编程练习——猜数游戏24#includestdlib.h#includestdio.