一个phper,笔试,面试,技术栈的总结

powerby flight phpms

成功,唯有积累,没有奇迹

关于我

瞧一瞧,看一看:

吴大叔,20已过半,30还未满,175cm的个子,65kg的体重,平淡的就像差不多先生,一个非主流的程序员,目前的理想是赚钱,得一灵魂伴侣,然后隐居山水之间,蹦野迪

友情链接

一切只是开始,我从未放弃过改变

三个数比较大小——C语言经典题目

时间:2019-03-03 16:17:55

这道题是每一位初学C的小伙伴们的必经之路,其经典性简直如同Hello World!

下面写一下几种不同的解法。

使用if语句

#include<stdio.h>

int main()
{
    int a, b, c, max;//逗号,(大/中/普通)括号,右端需有空白字符

    scanf("%d%d%d", &a, &b, &c);

    if( a>b)    max = a;//为了代码可视性高,操作符需被空白字符包围
    else        max = b;
    if( c>max)  max = c;

    printf("max=%d", max);

    return 0;
}

使用三目运算符

?:条件运算符,使用方法是<表达式1> ?<表达式2> :<表达式3>,意思是满足表达式1就执行表达式2,否则执行表达式3。

#include<stdio.h>

int main()
{
    int a, b, c, max;

    scanf("%d%d%d", &a, &b, &c);

    max = a>b ? a:b;
    max = c>max ? c:max;

    printf("max=%d", max);

    return 0;
}
a>b ? (max = a) : (max = b); c>max ? (max = c) : max ;

max = ( (a>b ? a:b) > c) ? (a>b ? a:b) : c;

以上三种方法均可以比较出三个数的最大值,区别在于例子中的方法是使用的赋值语句,而替代方法1是运用的标准条件运算,后面的替代方法2则是以赋值语句为主的两重(条件运算的)嵌套。

补充:替代方法2不能写成max = ( (a>b?a:b) > c ) ? ():c;。 因为在三目运算符?的前置条件中(a>b?a:b)的运算结果是没有分配储存地址的,只是开辟了临时地址(理解成缓存也行,程序结束便清空),这就导致后面的()根本无法从前面取得值,所以得再写一次表达式。

使用max函数——if语句

#include<stdio.h>

int main()
{
    int a, b, c, max;
    int Max( int x, int y, int z);//声明自定义函数Max

    scanf("%d%d%d", &a, &b, &c);

    max = Max( a,b,c);

    printf("max=%d", max);
    return 0;
}

int Max(int x, int y, int z)
{
    int max;//不同的函数中可以使用同名(局部)变量

    if( x>y)    max = x;
    else        max = y;
    if( z>max)  max = z;

    return max;
}

使用max函数——三目运算符

#include<stdio.h>

int main()
{
    int a, b, c;
    int Max( int x, int y);

    scanf("%d%d%d", &a, &b, &c);
    printf("max=%d", Max(Max(a,b),c) );//调用两重Max函数嵌套

    return 0;
}

int Max(int x, int y)
{
    return x>y?x:y;
}

其中printf语句里的两重函数嵌套不能写成Max( (a,b) ,c),因为这个(a,b)并不符合自定义Max函数的传参要求。

自定义Max函数int Max(int x, int y)的形参为整型变量int x, int y,所以在调用Max函数时,需要传入符合定义要求的int型参数,那么显然这个(a,b)并不是int型参数,它是一个不属于任何类型的不完整表达式,其没有实际意义。

不过,两重Max函数嵌套写成Max( Max(a,b) ,c)是符合要求的,因为Max(a,b)的函数返回值符合int x的传参要求,究其原因是其内部return语句中返回的x>y?x:y是一个int型值。

使用指针

#include<stdio.h>

int main()
{
    int a, b, c;
    int Max( int x, int y);
    int (*p)(int, int) = &Max;//对指针p赋初值为Max的地址,&可省略

    scanf("%d%d%d", &a, &b, &c);
    printf("max=%d", p(p(a,b) ,c) );

    return 0;
}

int Max(int x, int y)
{
    return x>y?x:y;
}

这个有关于数字比较之类的问题,在C语言中是非常经典的一块,于是写了几种方法来开拓一下自己思路。也希望可以通过对这个题目的不同解法,来为之后像回溯和指针之类的知识稍微做一下铺垫,嘿,大家一起来感受一下。


求10 个整数中最大值

#include<stdio.h>
int main()
{
   int i,max;
   int array[10];
   printf("请输入十个整数:\n");
   for(i=0;i<10;i++)
   {
    scanf(" %d",&array[i]);
   }
   max=array[0];//数组第一个从0开始
   for(i=1;i<10;i++)
   {
      if(max<array[i])
    max=array[i];
   }
   printf("max=%d\n",max);
   return 0;
}

by admin
 仅对管理员开放,支持markdown语法

有需要的,可以联系我 wuxiumu@163.com

Copyright © 2019. All rights reserved. 本站由 无朽木 纯手工打造