C 语言程序设计 主讲人:王 英
项目五:循环控制——加减法练习 任务一:程序的界面设计及循环语句概述 任务二:使用while语句实现加法练习 任务三:使用do_while语句实现加法练习 任务四:使用for语句实现加减法练习 任务五:对用户的计算结果进行判断,给出成绩 任务六:完善程序,实现重复练习 主讲人:王英
任务一:程序的界面设计及循环语句概述 程序的总体设计 本项目是供用户进行加减法练习的系统。系统随机给出加减法题,用户输入答案,系统给出结果的判断,并给出成绩,用户可以重复练习。 根据以上分析可以得到程序流程图如下: 主讲人:王英
任务一:程序的界面设计及循环语句概述 1 3 2 Y N 程序流程图 开始 显示欢迎信息 提示用户下一步操作 获得用户输入 加法题 减法题 退出 统计并显示成绩 结束 再来一次 1 2 3 N Y 程序流程图 主讲人:王英
任务一:程序的界面设计及循环语句概述 goto while for do-while 程序设计中的循环(简称循环)是指在程序设计中,从某处开始有规律地反复执行某一操作块(或程序块)。如果循环永远不会终止,这样的循环就称为死循环。 for goto while do-while C中常使用的循环语句
注意:一般很少使用,goto语句只有在不得已时使用。 任务一:程序的界面设计及循环语句概述 goto语句(无条件转向语句) 一般格式: goto 语句标号; 如: loop:if(i<=100) { sum=sum+i; i++; goto loop; } 注意:一般很少使用,goto语句只有在不得已时使用。 主讲人:王英
while语句用来实现“当型”循环结构。 循环体 ; 格式中的循环体,可以是单个语句、空语句,也可以是复合语句。 主讲人:王英
任务二:使用while语句实现加法练习 代码如下: srand(time(0)); while(i<10) { a=rand(); 想一想:怎样能产生100以内的随机数 while(i<10) { a=rand(); b=rand(); result=a+b; printf(“%d+%d= ”,a,b); } srand(time(0)); 主讲人:王英
含义:产生一个随机整数。范围在0至RAND_MAX之 间。RAND_MAX定义在stdlib.h中,其值为2147483647。 任务二:使用while语句实现加法练习 rand()函数 含义:产生一个随机整数。范围在0至RAND_MAX之 间。RAND_MAX定义在stdlib.h中,其值为2147483647。 说明: 使用该函数必须引入头文件“stdlib.h”; rand()产生的随机数是通过确定的方法计算出来的,称伪随机数 。 产生多个不同随机数需要使用srand()函数。 主讲人:王英
任务二:使用while语句实现加法练习 srand()函数 rand()函数在计算时需要有一个初始值,这个值称为种子,使用srand()函数可以设定一个种子; srand()函数中的参数必须为一个整数,如果设定为一个常数,则使用rand()多次执行得到的值仍然为相同的值;如果希望每次执行得到不同的值,则可以使用time(0)作为参数;例如:srand(time(0)); 使用该函数必须使用引入头文件time.h 系统时间函数 主讲人:王英
任务三:使用do-while语句实现加法练习 循环体 while(表达式) ; do-while语句与while语句的区别: while先判断,再执行; do-while语句先执行,再判断 ,所以该语句至少执行一次; 主讲人:王英
任务三:使用do-while语句实现加法练习 代码如下: srand(time(0)); do { a=rand(); b=rand(); result=a+b; printf(“%d+%d= ”,a,b); } while(i<10) 主讲人:王英
for语句可以用于循环次数已经确定的情况,还可用于循环次数不确定而只给出循环结束条件的情况。 循环体 主讲人:王英
for(int i=0;i<10;i++) { a=rand(); b=rand(); result=a+b; 代码如下: srand(time(0)); for(int i=0;i<10;i++) { a=rand(); b=rand(); result=a+b; printf(“%d+%d= ”,a,b); } srand(time(0)); for(int i=0;i<10;i++) { a=rand(); b=rand(); result=a-b; printf(“%d+%d= ”,a,b); } 主讲人:王英
if(result==c) { printf("正确\n"); num++; } 任务五:对用户的结果进行判断,给出成绩 以for语句为例,代码如下: //实现加法练习,并对结果进行判断 srand(time(0)); for(int i=0;i<10;i++) { a=rand()%100; b=rand()%100; result=a+b; printf(“%d+%d= ”,a,b); scanf("%d",&c); if(result==c) printf("正确\n"); else printf("错误\n"); } printf(“您做对%d个题”,num); if(result==c) { printf("正确\n"); num++; } 主讲人:王英
已知循环变量初始值和终止值时,三种语句可以相互代替 任务五:对用户的结果进行判断,给出成绩 三种循环语句的比较: 执行次数 for和while先判断后执行,所以可能一次也不执行; do-while是先执行后判断,所以至少执行一次; 循环变量初始值 do-while和while必须在该语句之前赋初值; for一般在表达式1中赋初值; 循环次数 次数确定:使用for语句 次数不确定:使用while 和 do-while 已知循环变量初始值和终止值时,三种语句可以相互代替 主讲人:王英
循环语句是可以相互嵌套的,最多允许16层。例如: 任务五:对用户的结果进行判断,给出成绩 循环语句是可以相互嵌套的,最多允许16层。例如: for(int i=1;i<10;i++) { int j=1; for(;j<=i;j++) printf(“%d*%d=%d”,i,j,i*j); } 该函数的功能输出九九乘法表 主讲人:王英
任务六:完善程序,实现重复练习 实现重复练习的代码如下: } char again=‘y’; while(again==‘y’||again==‘Y’) { //界面设计 …… if(choice==1) …..//加法练习 if(choice==2) ……//减法练习 if(choice==3) exit(0);//退出程序 fflush(stdin); //清除缓冲区,stdin标准输入 printf(“ 你想再输入一次吗?(Y/N)\n”); scanf(“%c”,&again); system(“cls”); //清除屏幕上的内容 } 主讲人:王英
知识扩展 任务六:完善程序,实现重复练习 break语句 作用是结束循环体;在switch语句中用来跳出switch语句。 continue语句 作用是结束本次循环,忽略continue后面的语句,执行下一次循环判定。 主讲人:王英
知识扩展 任务六:完善程序,实现重复练习 break语句 作用是结束循环体;在switch语句中用来跳出switch语句。 continue语句 作用是结束本次循环,忽略continue后面的语句,执行下一次循环判定。 主讲人:王英
函数的功能是:从键盘循环输入字符,每当输入Enter键时,输出刚才输入的字符个数,再次输入重复统计,直到按下Esc键结束程序。 任务六:完善程序,实现重复练习 国家二级历年真题 main() { int i=0; char c; while(1) { c=‘\0’; while(c!=13&&c!=27) { c=getchar(); printf(“%c\n”,c); } if(c==27) break; i++; printf(“输入字符的个数是:%d\n”,i); printf(“The end”); 13—回车键 27—ESC键 函数的功能是:从键盘循环输入字符,每当输入Enter键时,输出刚才输入的字符个数,再次输入重复统计,直到按下Esc键结束程序。 主讲人:王英
任务六:完善程序,实现重复练习 国家二级历年真题 #include "stdio.h“ main() { int i,n=0; for(i=2;i<5;i++) do { if(i%3) continue; n++; }while(!i); } printf("n=%d\n",n); 当i%3==1时执行下一次for循环 主讲人:王英
提示:可以使用contiue语句 任务六:完善程序,实现重复练习 除法运算中除数为零时的处理方法 想一想:如果将加减法练习系统改为算术运算练习系统,即改为能够进行加减乘除运算,怎么修改程序? 除法运算中除数为零时的处理方法 提示:可以使用contiue语句 主讲人:王英
任务六:完善程序,实现重复练习 作业: P91-8 P92-11 P93-18 主讲人:王英
Thank You !