📄 ex4.cpp
字号:
// 第4章 逻辑运算和选择控制语句
//[例4.1]返回double&引用的函数f1, 返回int&引用的函数f2和输入输出流
#include<stdio.h>
#include<iostream.h>
double d=1; int n=2; //定义全局变量d和n
double& f1() { printf("f1();\t"); return d;} //函数调用f1()等价于变量d
int& f2() { printf("f2();\t"); return n; } //函数调用f2()是变量n的替身
void main(void)
{ /*vc6.0上程序交互运行输出结果:*/
cout<<f1()<<"___"<<f2()<<endl; /* f2(); f1(); 1__2 */
cin>>f1()>>f2(); /* f2(); f1(); 3 4( */
cout<<d<<"___"<<n<<endl; /* 3__4 */
scanf("%lf %d",&f1(),&f2()); /* f2(); f1(); 5 6( */
printf("%f%s%d\n",d,"__",n); /* 5.000000__6 */
}
//[例4.2]关系以及逻辑运算的结果和类型
# include<stdio.h>
void main() //vc6.0, Borland5.0输出结果分别如下:
{ printf("%d,%d,%d\n",4>3,1.2==true,sizeof(1==true)); //1,0,4 [1,0,1]
printf("%d,%d,%d\n",4>=4.01,1.2!=1.2,sizeof(1.2!=1.2)); //0,0,4 [0,0,1]
printf("%d,%d,%d\n",4.8>3>2,4>3.4>2.8-4,5+4<3+7); //0,1,1 [0,1,1]
double x,y;printf("%3.1f,%d\n",x=(4.8>3)+1.6,(y=4.8)>3+1.6); //2.6,1 [2.6,1]
x=3+1.6; printf("%d,%d\n",sizeof(y>x),sizeof(4.8>4.8)); //1,4 [1,1]
printf("%d,%d\n",sizeof(y||x),sizeof(4.8&&4.8)); //1,4 [1,1]
}
// [例4.3]逻辑与短路特点显示
#include<stdio.h>
int f(int i){printf("f(%d); ",i);return i;} //函数调用f(i)是int型表达式
void main(void)
{ int k=f(0)&&f(1);printf("%d\n",k); //输出:f(0); 0
k=f(1)&&f(0);printf("%d\n",k); //输出:f(1);f(0); 0
k=f(2)&&f(1)&&f(0);printf("%d\n",k); //输出:f(2); f(1);f(0);0
int n=0; k=0;printf("%d,%d,%d\n",k,n,k++&&n++); //输出:1,0,0
n=0, k=0;printf("%d,%d,%d\n",k,n,n++&&k++); //输出:0,1,0
}
// [例4.4]逻辑或短路特点显示
#include<stdio.h>
int f(int i){printf("f(%d);",i);return i;}
void main(void)
{ int k=f(1)||f(0); printf("%d\n",k); //输出:f(1);1
k=f(0)||f(1); printf("%d\n",k); //输出:f(0);f(1); 1
k=f(0)||f(0)||f(1);printf("%d\n",k); //输出:f(0);f(0); f(1); 1
int n=1; k=1;printf("%d,%d,%d\n",k,n,k++||n++); //输出:2,1,1
n=1, k=1;printf("%d,%d,%d\n",k,n,n++||k++);//输出:1,2,1
}
//[例4.5]逻辑与组合逻辑或时的短路特点
#include<stdio.h>
double f(double x){printf("f(%0.1f);\t",x);return x;}
void main(void)
{ int k;
k=f(0)||f(1)&&f(2); printf("%d\n",k); //输出f(0.0); f(1.0); f(2.0); 1
k=f(2)||f(1)&&f(0); printf("%d\n",k); //输出f(2.0); 1
k=f(2)&&f(1)||f(0); printf("%d\n",k); //输出f(2.0); f(1.0); 1
k=f(0)&&f(1)||f(2); printf("%d\n",k); //输出f(0.0); f(2.0); 1
}
//[例4.6]求三个数的极大值与极小值::
#include<stdio.h>
void main(void)
{ int min,max,x,y,z;
scanf("%d,%d,%d",&x,&y,&z);
min=max=z;
if(x <min) min=x; if(x>max) max=x;
if(y <min) min=y; if(y>max) max=y; //交互运行的情况如下:
printf("min=%d,max=%d\n",min,max); //3,2,7(
} //min=2,max=7
// [例4.7]对三个数从小到大排序
#include<stdio.h>
void f(int a,int b,int c)
{ int t;
if(c<b) {t=b;b=c;c=t;} //第一次比较之后 c=max(b,c),b=min(b,c)
if(c<a) t=a,a=c,c=t; //第二次比较之后c=max(a, max(b,c))
if(b<a) {t=a;a=b;b=t;} //第三次比较之后 a=min(a, min(b,c))
printf("%d,%d,%d\t",a,b,c);
} // t=a,a=c,c=t; 和 f(1,0,2), f(9,7, 4); 是逗号表达式语句
void main(void) { f(1,0,2), f(9,7, 4); } //输出: 0,1,2 4,7,9
//[例4.8] if表达式的影响区域与求三个数的极大值
long amax(long x,long y,long z)
{ long max=x; //设max等于其中之一x
if(y>max) max=y; //谁大于max,max就重定义为该值
if(z>max) max=z;
return max;
}
long bmax(long x,long y,long z)
{ long max=x;
if(z>y) {if(z>x) max=z;}
else if(y>x) max=y;
return max;
}
long errmax(long x,long y,long z)
{ long max=x;
if(z>y) if(z>x) max=z;
else if(y>x) max=y;
return max;
}
#include<iostream.h>
void main(void)
{ cout<<amax(5,7,4)<<endl; //输出7
cout<<bmax(5,6,4)<<endl; //输出6
cout<<errmax(5,6,4)<<endl; //输出5
cout<<errmax(4,6,5)<<endl; //输出4
}
//[例4.9]符号函数的多种实现
int f1(int x)
{
if(x<0) return -1;
if(x==0) return 0;
if(x>0) return 1;
}
int f2(int x)
{ int y;
if(x<0) y= -1;
if(x==0) y=0;
if(x>0) y= 1;
return y;
}
int f3(int x)
{ int y;
if(x<0) y= -1;
else
if(x==0) y=0;
else y=1;
return y;
}
int f4(int x)
{ int y;
if(x<=0)
if(x==0) y=0;
else y=-1;
else y=1;
return y;
}
//[例4.10] switch分支求自然数的和sum=1+2+...+n=n*(n+1)/2 #include<stdio.h> long Sumof1toN(int n); void main(void) //运行输出结果:
{ printf("1+2=%d\n",Sumof1toN(2)); //1+2=3
printf("Sumof 1 to 100=%d\n",Sumof1toN(100)); // Sumof 1 to 100=5050
}
long Sumof1toN(int n)
{ long sum=0;
switch (n)
{case 0: return 0; case 2+1: sum+=3; case 2: sum+=2; case '1'-48: sum+=1;break; default: sum=n*(n+1)/2; break; } return sum; } long Sumof_1toN(int n)
{ long sum=0;
switch (n)
{case 2: sum=2+1; goto AfterSwitch;
case 0: return 0;
case 3: sum=3+2+1; break;
case 1: sum=1; goto AfterSwitch;
default: sum=n*(n+1)/2; break;
} // 常量表达式3+2+1在编译阶段系统会自动静态地计算为6。
AfterSwitch: return sum;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -