版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
主讲:廖智蓉项目3五子棋游戏界面菜单制作关系和逻辑运算情景导入该系统能实现五子棋各项功能的反复选择。选择编号不同则实现功能也不一样。这种选择在实际应用当中有很多。如何来实现呢?
关键技术
在C语言中表示条件,一般用关系表达式或逻辑表达式实现选择结构用if语句或switch语句。实现反复选择用循环for,while或do_while语句。解决问题的关键:(1)条件的表达。(2)分支和循环结构的运用。
举例
例如,假设num1=3,num2=4,num3=5,则:(1)num1>num2的值=
(2)(num1>num2)!=num3的值=
(3)num1<num2<num3的值=
(4)(num1<num2)+num3的值=
思考题:任意改变num1或num2的值,会影响整个表达式的值吗?为什么?因为num1<num2的值=1,1+5=6再次强调:C语言用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”。所以,关系表达式的值,还可以参与其它种类的运算例如算术运算、逻辑运算等。0116
逻辑运算
关系表达式只能描述单一条件,例如“x≥0”。如果需要描述“0≤x<10”,就要借助于逻辑表达式了。
C语言提供三种逻辑运算符:
&& 逻辑与(相当于“同时或且”)
||逻辑或(相当于“或者”)
! 逻辑非(相当于“否定”)
关系运算符
C语言提供6种关系运算符:<(小于),<=(小于或等于),>(大于),>=(大于或等于),==(等于),!=(不等于)注意:在C语言中,“等于”关系运算符是双等号“==”,而不是单等号“=”(赋值运算符)
优先级(1)在关系运算符中,前4个优先级相同,后2个也相同,且前4个高于后2个。(2)与其它种类运算符的优先级关系
关系运算符的优先级,低于算术运算符,但高于赋值运算符。
逻辑表达式
所谓逻辑表达式是指,用逻辑运算符将1个或多个表达式连接起来,进行逻辑运算的式子。在C语言中,用逻辑表达式表示多个条件的组合。
逻辑表达式的值也是一个逻辑值(非“真”即“假”)例如,下面的表达式都是逻辑表达式:(x>=0)&&(x<10),(x<1)||(x>5),!(x==0),例如,假定x=5,则(x>=0)&&(x<10)的值为(x<-1)||(x>5)的值为“真”“假”
关系表达式
(1)关系表达式的概念
---用关系运算符将两个表达式连接起来,进行关系运算的式子例如,下面的关系表达式都是合法的:设a=2,b=4,c=5,d=1;
1!=2
a>b,a+b>c-d,(a=3)<=(b=5),'a'>='b',(a>b)==(b>c)由于C语言没有逻辑型数据,所以用整数“1”表示“逻辑真”,用整数“0”表示“逻辑假”(2)关系表达式的值——逻辑值(非“真”即“假”)1(真)0假1真1真0假0假
逻辑运算
三种逻辑运算符运算规则:
a&&b只有a,b均为真,结果为真,否则都为假。
a||b只有a,b均为假,结果为假,否则都为真。
!a 若a为真,则结果就为假,反之为真。
想一想
条件1:能被4整除,但是不能被100整除(year%4==0)&&(year%100!=0)如何表达闰年?(能被4整除,但是不能被100整除,或则可以被400整除的年份)条件2:被400整除的年份(year%400==0)
((year%4==0)&&(year%100!=0))||(year%400==0)
说明
(2)在计算逻辑表达式时,只有在必须执行下一个表达式才能求解时,才求解该表达式(即并不是所有的表达式都被求解)。换句话说:
对于逻辑与运算,如果第一个操作数被判定为“假”,系统不再判定或求解第二操作数对于逻辑或运算,如果第一个操作数被判定为“真”,系统不再判定或求解第二操作数
(1)逻辑运算符两侧的操作数,除可以是0和非0的整数外,也可以是其它任何类型的数据,如实型、字符型等。值不变,仍等于1!0例如,假设n1、n2、n3、n4、x、y的值分别为
1、2、3、4、1、1,则求解表达式“(x=n1>n2)&&(y=n3>n4)”后,
x的值变为_____,而y的__________
练一练
1、用C语言写出判断ch是否是大写字母表达式?2、用C语言写出判断ch是否是小写字母表达式?3、用C语言写出判断ch是否是字母表达式?预习下讲分支结构if语句主讲:廖智蓉项目3五子棋游戏界面菜单制作分支结构if语句问题描述案例:
假定某地个人所得税的起征额为1500元,1500元以下的不征税,1500元以上的部分按15%征税。编写一个程序,当从键盘输入职工工资时,计算出实发工资并输出。
关键技术
C语言中的分支语句If嵌套switchif要设计选择结构程序,要考虑两个方面的问题:一是在C语言中如何来表示条件二是在C语言中实现选择结构用什么语句
if单支
形式:
if(表达式)
{语句或者语句组}
流程图#include<stdio.h>main(){intx=6,y=2;}例如:如果x大于y,则输出x。if(x>y)printf(“%d”,x);
if举例
案例:
假定某地个人所得税的起征额为1500元,1500元以下的不征税,1500元以上的部分按15%征税。编写一个程序,当从键盘输入职工工资时,计算出实发工资并输出。#include<stdio.h>main(){floatgz;printf(“请输入一个职工应发工资:\n”);scanf(“%f”,&gz);printf(“该职工实发工资%.2f\n”,gz);}if(gz>=1500)gz=gz*0.85;
if思考
//程序1#include<stdio.h>main(){intx=6,y=2;if(x<y){x=x+1;printf(“%d\n”,x);}}//程序2#include<stdio.h>main(){intx=6,y=2;if(x<y)x=x+1;printf(“%d\n”,x);}请思考程序1和程序2区别在哪?运行结果是否一样?结论:当if条件有多条语句时必须加上花括号,否则意义完全不一样
if双支
形式:
if(表达式)
{语句1或者语句组1}else
{语句2或者语句组2}流程图#include<stdio.h>main(){intx,y;scanf(“%d%d”,&x,&y);}例如:从键盘上输入任意整数x,y,如果x大于y,则输出x,否则输出y。if(x>y)printf(“%d”,x);elseprintf(“%d”,y);表达式语句1语句2真(非0)假(0)
举例
案例:
假定某地个人所得税的起征额为1500元,1500元以下的不征税,1500元以上的部分按15%征税。编写一个程序,当从键盘输入职工工资时,计算出实发工资并输出。#include<stdio.h>main(){floatgz;printf(“请输入一个职工应发工资:\n”);scanf(“%f”,&gz);}if(gz>=1500){gz=gz*0.85;
printf(“该职工实发工资%.2f\n”,gz);}elseprintf(“该职工实发工资%.2f\n”,gz);
举例
从键盘上任意输入一年份,判断是否是闰年,如果是输出某某年是闰年,否则输出某某年不是闰年。#include<stdio.h>main(){intyear;printf(“请输入一个年份:\n”);scanf(“%d”,&year);}if((year%4==0&&year%100!=0)||(year%400==0))printf(“%d是闰年\n”,year);else
printf(“%d不是闰年\n”,year);解决该问题的核心:闰年条件的表达。能被4整除但不能被100整除或者是能被400整除。
课后练一练
请仿照编写闰年的方法编写程序:输入一个数,如果是7的倍数,则输出这个数的立方,否则输出这个数的平方预习下讲If多支和嵌套主讲:廖智蓉项目3五子棋游戏界面菜单制作if语句多支和嵌套问题描述编写一个程序,将学生的百分制转换成等级制。规则如下:成绩大于等于90分且小于等于100输出“优秀”;成绩大于等于80分小于90分输出“良好”;成绩大于等于70分小于80分输出“中等”;成绩大于等于60分小于70分输出“及格”;成绩大于等于0分小于60分输出“不及格”。
if单支
#include<stdio.h>voidmain(){floatscore;printf(“\n请输入一个百分制的期末考试成绩:");scanf("%f",&score);if(score>=90&&score<=100)printf(“\n优秀");if(score>=80&&score<90)printf(“\n良好");if(score>=70&&score<80)printf(“\n中等");if(score>=70&&score<80)printf(“\n及格");if(score<60&&score>=0)printf(“\n不及格");}
if多支
形式:
if(表达式1)
{语句1或者语句组1}elseif(表达式2)
{语句2或者语句组2}elseif(表达式3)
{语句3或者语句组3}…else{语句n或者语句组n}表达式1表达式2表达式3表达式n语句1语句2语句3语句n语句n+1真真真真假假假假流程图
if多支
#include<stdio.h>voidmain(){floatscore;printf(“\n请输入一个0-100的期末考试成绩:");scanf("%f",&score);if(score>=90)printf(“\n优秀");elseif(score>=80)printf(“\n良好");elseif(score>=70)printf(“\n中等");elseif(score>=60)printf(“\n及格");
elseprintf(“\n不及格");}
if嵌套
某单位马上要加工资,增加金额取决于工龄和现工资两个因素:对于工龄大于等于20年的,如果现工资高于2000,加200元,否则加180元;对于工龄小于20年的,如果现工资高于1500,加150元,否则加120元。工龄和现工资从键盘输入,编程求加工资后的员工工资。解决这个实际问题可以用我们前面学习过的单支来做,但是我们今天学习用if嵌套来实现。
if嵌套
形式1:
if(表达式1)if(表达式2){语句1或者语句组1}else{语句2或者语句组2}
else
if(表达式3){语句3或者语句组3}else{语句4或者语句组4}if语句中又包含一个或多个if语句,称为if语句的嵌套。形式2:
if(表达式1)if(表达式2){语句1或者语句组1}elseif(表达式3){语句2或者语句组2}else{语句3或者语句组3}
案例实现
#include<stdio.h>voidmain(){intgl;floatxgz,gz;floatscore;printf("请输入职工的工龄和现在工资:\n");scanf("%d%f",&gl,&xgz);if(gl>=20)if(xgz>=2000)gz=xgz+200;elsegz=xgz+180;elseif(xgz>=1500)gz=xgz+150;elsegz=xgz+120;printf("该职工增加后的工资为:%.2f\n",gz);}
说明
(1)if与else的配对关系,从最内层开始,else总是与离它最近的未曾配对的if配对。(2)如果if与else的个数不相同,可以用花括号来确定配对关系。例如:if(){if()〈语句1〉}
else〈语句2〉
这时{}限定了内嵌if语句的范围,因此else与第一个if配对。
练一练
答案:A
课后练一练
请仿照百分制转成等级制实例的方法编写下列程序:输入一个字符,判断它是小写、大写、数字还是其它字符。预习下讲开关语句——switch主讲:廖智蓉项目3五子棋游戏界面菜单制作Switch语句问题描述编写一个程序,根据用户输入的期末考试成绩,输出相应的成绩评定信息。成绩在90—100分输出“优秀”;成绩大于等于80分小于90分输出“良好”;成绩大于等于70分小于80分输出“中等”;成绩大于等于60分小于70分输出“及格”;成在0-60分输出“不及格”。
问题解决
(1)单支结构可以实现#include<stdio.h>voidmain(){intscore;printf(“\n请输入一个百分制的期末考试成绩:");scanf("%d",&score);if(score>=90&&score<=100)printf(“\n优秀");if(score>=80&&score<90)printf(“\n良好");if(score>=70&&score<80)printf(“\n中等");if(score>=60&&score<70)printf(“\n及格");if(score<60&&score>=0)printf(“\n不及格");}
缺点:表达条件太繁琐,容易写错。
问题解决
(2)多支结构if可以实现#include<stdio.h>voidmain(){intscore;printf(“\n请输入一个0-100的期末考试成绩:");scanf("%d",&score);if(score>=90)printf(“\n优秀");elseif(score>=80)printf(“\n良好");elseif(score>=70)printf(“\n中等");elseif(score>=60)printf(“\n及格");
elseprintf(“\n不及格");}
问题解决
(3)还可以用switch开关语句来实现C语言提供了switch语句直接处理多分支选择。
switch语句
1.switch语句的一般形式
switch(表达式){case常量表达式1:语句组;break;
case常量表达式2:语句组;break;......case常量表达式n:语句组;break;
[default:语句组;[break;]] }
执行过程
(1)当switch后面“表达式”的值,与某个case后面的“常量表达式”的值相同时,就执行该case后面的语句(组);当执行到break语句时,跳出switch语句,转向执行switch语句的下一条。(2)如果没有任何一个case后面的“常量表达式”的值,与“表达式”的值匹配,则执行default
后面的语句(组)。然后,再执行switch语句的下一条。表达式语句1语句2语句n语句n+1常量表达式1常量表达式2常量表达式ndefaultswitch语句的流程图表示
问题实现
#include<stdio.h>voidmain(){intscore;printf(“\n请输入一个0-100的期末考试成绩:
");scanf("%d",&score);score=score/10;switch(score){case10:printf(“\n优秀");break;case9:printf(“\n优秀");break;case8:printf(“\n良好");break;case7:printf(“\n中等");break;case6:printf(“\n合格");break;default:printf(“\n不合格");break;}}
说明
(1)switch后面的“表达式”,必须是整型和字符型中的一种。(2)每个case后面“常量表达式”的值,必须各不相同,否则会出现相互矛盾的现象(即对表达式的同一值,有两种或两种以上的执行方案)。(3)case后面的常量表达式仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以必须加上break语句,以便结束switch语句(4)各case及default子句的先后次序,不影响程序执行结果。(5)多个case子句,可共用同一语句(组)。(6)用switch语句实现的多分支结构程序,完全可以用if语句或if语句的嵌套来实现。
举例
利用switch开关语句编写一个简单的运算器
#include<stdio.h>main(){floatx,y;charop;doublez;printf("请输入两个操作数和操作符,中间用逗号隔开输入:\n");scanf("%f,%f,%c",&x,&y,&op);switch(op){case'+':z=x+y;break;case'-':z=x-y;break;case'*':z=x*y;break;case'/':z=x/y;break;default:printf("operatorError");}printf("%.2f%c%.2f=%.2f\n",x,op,y,z);}
举例
利用switch开关语句编写一个简单的运算器
#include<stdio.h>main(){floatx,y;charop;doublez;printf("请输入两个操作数和操作符,中间用逗号隔开输入:\n");scanf("%f,%f,%c",&x,&y,&op);switch(op){case'+':z=x+y;break;case'-':z=x-y;break;
case‘*’:z=x*y;case'/':z=x/y;break;default:printf("operatorError");}printf("%.2f%c%.2f=%.2f\n",x,op,y,z);}把这个break删除,还是输入原数据结果会是怎么呢?
课后练一练
利用switch开关语句编写:用户输入任意一个字符,要求检查该字符是否是元音字母。预习下讲循环结构for语句主讲:廖智蓉项目3五子棋游戏界面菜单制作循环for语句问题描述输出一行10个星号“*”语句是?printf(“**********\n”);输出两行10个星号“*”语句是?printf(“**********\n”);printf(“**********\n”);要100行呢?写100行这样的语句,那太不可取了!
问题解决
用循环结构来解决C语言中的三种循环语句whiledo-whilefor
++,--运算
++i,--i(先使i的值加(减)1,后使用)
i++,i--(先使用i的值,后使i的值加(减)1)
a=2,b=2a=3,b=2例如:inta=1,b;
b=++a;
b=a++;
作用:使变量的值增1或减1,如:
++,--运算
说明:(1)++、--为单目运算符(2)++、--只能用于变量,而不能用于常量或表达式。(3)自增、自减运算符为右结合性(即自右至左)。例如:-a++;
-(a++);
练一练
1.请写出程序输出结果
main(){
inti,j,m,n;i=8;j=10;m=++i;n=j++;printf(″%d,%d,%d,%d\n″,i,j,m,n);
}运行结果:9,11,9,10
for语句
for(循环变量赋初值;循环条件;修改循环变量的值){
语句;
}for(表达式1;表达式2;表达式3){
语句;}
for循环的一般语法:1243
举例
用for语句实现求sum=1+2+3+……+100。#include<stdio.h>main(){inti,sum=0;
printf(“1+2+3+……+100的和为:%d\n”,sum);}for(i=1;i<=100;i++)sum+=i;
举例
利用for语句将1~100之间不能被3整除的数输出。#include<stdio.h>main(){inti;}for(i=1;i<=100;i++)if(i%3!=0)printf(“%3d”,i);
练一练
用for语句实现10的阶乘,即求1*2*3…*10的结果。#include<stdio.h>main(){inti;
longsum=1;for(i=1;i<=10;i++)sum=sum*i;printf("%ld",sum);}
说明
for语句可省略“表达式1”。“表达式1”的作用是设置循环初始条件,“表达式1”省略后,应在for语句前面设置循环初始条件。但“表达式1”后的分号不能省略。
for(i=1;i<=10;i++)s=s+i;i=1;for(;i<=10;i++)s=s+i;
说明
(2)for语句可省略“表达式2”。若省略“表达式2”,则不判断循环条件,认为循环条件始终为真,循环将无终止地进行下去。一般用条件语句退出循环。
说明
(3)for语句可省略“表达式3”“表达式3”可省略,但程序必须在“循环体语句”中设置循环变量增值,来修改循环条件,以确保循环能正常结束。如:
for(i=1;i<=10;i++)s=s+i;for(i=1;i<=10;){s=s+i;i++;}
课后练一练
利用for编写程序:求一个小组(10个)学生成绩的总分及平均分(保留两位小数)。预习下讲while和do-while语句主讲:廖智蓉项目3五子棋游戏界面菜单制作循环while和do_while语句问题描述输出一行10个星号“*”语句是?printf(“**********\n”);输出两行10个星号“*”语句是?printf(“**********\n”);printf(“**********\n”);要100行呢?写100行这样的语句,那太不可取了!
问题解决
用循环结构来解决C语言中的三种循环语句whiledo-whilefor
while语句
while(表达式){
语句;}
while循环的一般语法:
先判断条件,后执行语句表达式语句零非零
do_while语句
do{
语句;}while(表达式);
do_while循环的一般语法:先执行语句,后判断条件表达式语句零非零
举例
分别用while和do_while语句实现求sum=1+2+3+……+100。sum=sum+2;
sum=sum+1;sum=0;不确定sum013sum=sum+3;
6…
…
sum=sum+100;
5050sum=sum+i;
规律是:
实现
分别用while和do_while语句实现求sum=1+2+3+……+100。#include<stdio.h>main(){inti,sum=0;printf(“1+2+3+……+100的和为:%d\n”,sum);}i=1;while(i<=100){sum+=i;i++;}#include<stdio.h>main(){inti,sum=0;printf(“1+2+3+……+100的和为:%d\n”,sum);}i=1;do{sum+=i;i++;}while(i<=100);
举例
分别用while和do_while语句实现将1~100之间不能被3整除的数输出。#include<stdio.h>main(){inti;}#include<stdio.h>main(){inti;}i=1;while(i<=100){if(i%3!=0)printf(“%3d”,i);i++;}i=1;do{if(i%3!=0)printf(“%3d”,i);i++;}while(i<=100);
举例
分别用while和do_while语句实现10行星号的输出。#include<stdio.h>main(){inti;}#include<stdio.h>main(){inti;}i=1;while(i<=10){printf(“**********\n”);i++;}i=1;do{printf(“**********\n”);i++;}while(i<=100);
想一想
main(){inti,s=0;scanf(“%d”,&i);
while(i<=10){s=s+i;i++;}printf(“s=%d\n”,s);}main(){inti,s=0;scanf(“%d”,&i);
do{s=s+i;i++;}while(i<=10);printf(“s=%d\n”,s);}
第二次测试输入:11
第一次测试输入:1结论:当while后的表达式为真时,while语句和do—while语句的结果相同,否则不同。
总结
for语句和while语句先判断条件,后执行语句,故循环体有可能一次也不执行,而do—while语句的循环体至少执行一次。必须在while语句和do—while语句之前对循环体变量赋初值,而for语句可在表达式1中对循环变量赋初值。在循环次数已经确定的情况下,习惯用for语句;而对于循环次数不确定只给出循环结束条件的问题,习惯用while语句解决。
课后练一练
利用while和do_while编写程序:求一个小组(10个)学生成绩的总分及平均分(保留两位小数)。预习下讲break和continue语句主讲:廖智蓉项目3五子棋游戏界面菜单制作break和continue语句问题描述韩信点兵:相传汉高祖刘邦问大将军韩信现在统御兵士多少,韩信答,每3人一列余1人、5人一列余2人、7人一列余4人、13人一列余6人、17人一列余2人、19人一列余10人。
刘邦茫然而不知其数。你呢?
你是一位优秀的程序员,请你帮刘邦解决这一问题,韩信至少统御了多少兵士。
问题解决
这个问题的本质:就是去找一个最小的正整数,“一个正整数,被3除时余1,被5除时余2,被7除时余4,被13除时余6,被17除时余2,被19除时余10,求这个数。”所以,我们可以从最小自然数出发,一个一个地累加,如果它满足条件,则结束循环。解决的技术:break语句和break相对应:continue语句
break语句
1.break语句语法:break;功能:终止包含该语句的最内层循环。
while(…){
…………
break;
…………}跳出整个循环
continue语句
2.continue语句语法:continue;功能:结束循环体的本次执行,直接到下一次循环。while(…){
…………continue;
…………}继续下一次循环
举例
请阅读下列两段程序运行结果?并比较两者的区别?#include<stdio.h>main(){intn;for(n=1;n<=10;n++){if(n%3==0)
break;printf("%6d",n);}}#include<stdio.h>main(){intn;for(n=1;n<=10;n++){if(n%3==0)
continue;printf("%6d",n);}}
问题实现
#include<stdio.h>main(){longinti;printf("韩信统领的兵数有:%ld\n",i);}for(i=1;;i++)//循环条件省略if(i%3==1&&i%5==2&&i%7==4&&i%13==6&&i%17==2&&i%19==10)break;
举例
在数学课上,李老师要同学们对给定的任意正整数进行判断,看是否为素数,这个数学问题,用C语言该如何解决?#include<stdio.h>main(){inti,x;printf("请输入一个正整数");scanf("%d",&x);if(i==x)printf("%d是素数\n",x);elseprintf("%d不是素数\n",x);}for(i=2;i<=x-1;i++)if(x%i==0)break;分析:因为素数只能被1及本身整除,所以判断一个大于2的正整数x是否为素数,就让x按顺序除以i=2、3、…、x-1,若x能被它们中的任一个除尽,就可跳出循环。因为此数一定不是素数。所以判断x是不是素数,就可以用i的值来衡量,若i=x,则x一定是素数,否则就不是素数。
课后练一练
编写程序:在正整数中找出1个最小的被3、5、7、9除余数分别为1、3、5、7的数,并输入该数。预习下讲循环语句嵌套主讲:廖智蓉项目3五子棋游戏界面菜单制作循环嵌套问题描述大家非常熟悉的九九乘法表怎么控制才可以输出呢?
问题解决
既要控制行又要控制列,靠一个循环是很难实现的,所以需要多重循环来解决。也就会出现循环嵌套了。定义:在循环体内又包含一个循环结构,称为循环嵌套。三种循环(while、do_while、for)都可以嵌套。
嵌套几种形式
for(;;){···while(){···}}for循环体嵌套while循环体for(;;){···for(;;){···}}for循环体嵌套for循环
嵌套几种形式
do{do{···}while();}while();do_while循环体嵌套do_while循环while(){do{···}while();}while循环体嵌套do_while循环while(){for(;;){···}}while循环体嵌套for循环
do{for(;;){···}}while();do_while循环体嵌套for循环
举例
for(i=1;i<=2;i++)for(j=1;j<=2;j++){printf(“%3d”,i+j);printf(“\n”);}分析程序段运行结果output:2334
举例
for(i=1;i<=2;i++){for(j=1;j<=2;j++)printf(“%3d”,i+j);
printf(“\n”);
}分析程序段运行结果output:2334多了这么一行,结果又是怎样的呢?
问题实现
#include<stdio.h>main(){inti,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++)printf("%d*%d=%-3d",j,i,i*j);printf("\n");}}
应用举例
用双循环实现百钱买百鸡。用双循环实现百钱买百鸡。分析:每只价格分别公鸡2元,母鸡3元,小鸡0.5元假设公鸡买x只,母鸡买y只,小鸡买z只,则:(1)y可以是1、2、3……33的一个值。(2)x可以是1、2、3……50的一个值。(3)然后由y及x,显然可解得z=100-x-y。(4)如果所花的钱刚好是100,则输出x,y,z。程序如下:#include<stdio.h>main(){intx,y,z;for(x=1;x<=50;x++)for(y=1;y<=33;y++){z=100-x-y;if(2*x+3*y+0.5*z==100)printf("公鸡数为%d,母鸡数为%d,
小鸡数为%d\n",x,y,z);}}
应用举例
a、b、c为区间[1,100]的整数,统计使等式c/(a*a+b*b)=1成立的所有解的个数,(若a=1、b=3、c=10是1个解,则a=3、b=1、c=10也是解)#include<stdio.h>voidmain(){intn=0,a,b,c;for(a=1;a<=100;a++)for(b=1;b<=100;b++)for(c=1;c<=100;c++) if((a*a+b*b)==c)n+=1;printf("%d",n);}
练一练
用循环嵌套语句实现1!+2!+……+n!的和。n是从键盘输入的一个正整数。#include<stdio.h>main(){inti,j,n;longf,sum=0;printf(“请输入一个正整数n:\n”);scanf(“%d”,&n);for(i=1;i<=n;i++){for(j=1,f=1;j<=i;j++)f=f*j;sum=sum+f;}printf("%ld",sum);}
课后练一练
利用循环嵌套编写程序:求出500以内的所有素数,最后还要统计500以内所有素数的个数。预习下讲条件、逗号、位运算主讲:廖智蓉项目3五子棋游戏界面菜单制作条件、逗号、位运算条件运算(2)
运算规则
如果“表达式1”的值为非0(即逻辑真),则运算结果等于“表达式2”的值;否则,运算结果等于“表达式3”的值(1)一般格式:表达式1?表达式2:表达式3
条件表达式中的“表达式1”、“表达式2”、“表达式3”的类型,可以各不相同条件运算比如:若a=7,b=10,则c=(a>b)?a:b,这个表达式结果是多少?(3)运算符的优先级与结合性
条件运算符的优先级,高于赋值运算符,但低于关系运算符和算术运算符。其结合性为“从右到左”(即右结合性)c=10
举例
从键盘上输入2个整数,输出其中的最大值。
#include“stdio.h”main(){inta,b,max;printf(“请输入2个整数:");scanf("%d%d",&a,&b);
max=(a>b)?a:b;printf(“您输入的2个数的最大值为%d\n",max);} #include“stdio.h”main(){inta,b,max;printf(“请输入2个整数:");scanf("%d%d",&a,&b);if(a>b)max=a;elsemax=b;printf(“您输入的2个数的最大值为%d\n",max);}
逗号运算
C语言提供一种用逗号运算符“,”连接起来的式子,称为逗号表达式。逗号运算符又称顺序求值运算符。(1)一般形式:表达式1,表达式2,……,表达式n.(2)求解过程:自左至右,依次计算各表达式的值,“表达式n”的值即为整个逗号表达式的值。例如:表达式x=(a=3*5,a*4)的值以及a的值。逗号表达式y=((a=2+1,a*5),a+8)的值以及a的值。x=60a=15y=11a=3
位运算
程序中所有的数据在内存中都是以二进制的形式存储的,位运算就是直接对内存中的二进制位进行运算。C语言提供了常用的位运算功能,虽然不如汇编语言丰富,但这使得C语言也能像汇编语言一样用来编写系统程序。
位运算符
运算符含义表达式举例优先级~按位取反~a1(高)<<左移a<<22>>右移a>>22&按位与a&b3^按位异或a^b4|按位或a|b5(低)
与—&
按位与运算符“&”是双目运算符。
1.运算性质
参与运算的两数对应二进制位相与,即两个二进位均为1时,结果位才为1,否则为0。例如,表达式3和9的与运算过程如下(3、9对应的二进制分别为00000011和00001001)00000011&0000
1001
10
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 旅游公司用章安全手册
- 餐饮业服务员聘用协议
- 五金元购销合同案例
- 栏杆合同范本样本
- 机械制造业自购料采购管理办法
- 幼儿园教材转让合同
- 机场绿化工程养护合同
- 社区服务人员行业打架私了协议书
- 2024年水上救援专用洒水车出租协议2篇
- 水资源管理协议
- 《中小学校园食品安全和膳食经费管理工作指引》专题培训
- 宾馆饭店危险品安全管理制度(3篇)
- 天津市河西区2024-2025学年高一上学期11月期中考试 政治 含答案
- 重症医学科培训与考核制度
- 日本课件 人教版
- 统编版(2024新版)七年级上册历史第二单元测试卷(含答案)
- 北京市2024年中考道德与法治真题试卷(含答案)
- DB41T 1106-2015 高油酸花生生产技术规程
- 沪科版2023-2024学年七年级上册数学期末考试试卷(一)含答案
- 2023年12月英语四级真题及答案-第3套
- 2024-2025年上海中考英语真题及答案解析
评论
0/150
提交评论