⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex4.cpp

📁 这里有大量的习题解答
💻 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 + -