阳台煮酒

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

      鉴于在学校弱弱的接触过C,基本上很少编程,C语言基础太薄弱。刚好目前从事的是软件编程,难度可想而知。严重影响工作效率,已无法再拖下去了。为此,痛下决心恶补C语言。此前只停留在看书,光看好像也记不住,C这东西毕竟是练出来的,所以从今天开始,每日一道C语言题目,从题目入手来补知识漏洞。题目比较基础,如不堪入目,还请见谅。

1.题目:输入三个整数,输出最大的数 

2.思路:定义三个变量用来存储输入的整数

        比较三个变量的大小,找到最大的数

        定义一个变量存储来存储最大的数

3.程序:

 1 #include <stdio.h>
 2 
 3 int maxium(int a,int b,int c)
 4 {
 5    int max = 0;
 6   
 7    max = a>b ? a:b;//三目运算符,两两相比较,max保存大的数
 8    max = max>c ? max:c;//三目运算符,大的数与剩下的数作比较
 9    return max;
10 }
11 void main()
12 {  
13    int a = 0; //定义三个变量a、b、c来保存输入
14    int b = 0;
15    int c = 0;
16    int max = 0;//定义变量max来保存最大数
17    printf("请输入任意三个数:");
18    scanf("%d",&a);//输入三个数
19    scanf("%d",&b);
20    scanf("%d",&c);
21    max = maxium(a,b,c);//调用获取最大数
22    printf("三个数中最大的数是:%d\n",max);
23 
24 }

 

 

4.改进:

    求最大数的函数不必设三个输入参数,假设是10个数或者是更多的数来比较呢?难道输入参数也要设置为10个吗?比较明智的办法是求最大数的函数设置为两个输入参数,尽做两两比较,然后递归调用这个函数即可

 1 #include <stdio.h>
 2 /*
 3 int maxium(int a,int b,int c)
 4 {
 5    int max = 0;
 6   
 7    max = a>b ? a:b;//三目运算符,两两相比较,max保存大的数
 8    max = max>c ? max:c;//三目运算符,大的数与下一个数作比较
 9    return max;
10 }*/
11 int maxium(int a,int b)
12 {
13     int max = 0;
14     max = a>b ? a:b;
15     return max;
16 }
17 void main()
18 {  
19    int a = 0; //定义三个变量a、b、c来保存输入
20    int b = 0;
21    int c = 0;
22    int max = 0;//定义变量max来保存最大数
23    printf("请输入任意三个数:");
24    scanf("%d",&a);//输入三个数
25    scanf("%d",&b);
26    scanf("%d",&c);
27   // max = maxium(a,b,c);//获取最大数
28    max = maxium(maxium(a,b),c);//获取最大数
29    printf("三个数中最大的数是:%d\n",max);
30 
31 }

 

 

5.延伸:如果是更多的数呢?比如10个数?

 1 #include <stdio.h>
 2 
 3 int maxium(int a,int b)
 4 {
 5     int max = 0;
 6     max = a>b ? a:b;
 7     return max;
 8 }
 9 
10 void main()
11 {
12     int nInput[10] = {};//定义一个数组来存放10个数并且初始化
13     int max = 0;
14     printf("请输入任意10个数:");
15     for(int i=0;i<10;i++)
16     {
17        scanf("%d",&nInput[i]);
18        max = maxium(max,nInput[i]);//循环调用求最大数函数,将最大值存放在max里再参与下次比较
19     }
20     printf("10个数中最大的数是:%d\n",max);
21 }

由以上代码发现语法错误:数组初始化问题

int nInput[10] = {};是肯定不对的

正确的初始化方法:

int nInput[10] = {0};

那么接下来有问题的是:max的初始值为0,让这10个数与从0开始一次比较,那假如这10个数都比0小呢?那输出的结果等于0.很显然,这是不行的,因为10个数中并没有0这个数。max的初始值应该为第一个数,但是如果在循环里把第一个数赋给max作为初始值,那么每次循环的时候max都被初始化,循环调用maxium(int a,int b)就失去了意义。到底怎样写才会简洁呢?

 

6.知识点:

数组初始化

printf()

   

posted on 2014-04-30 00:59  阳台煮酒  阅读(362)  评论(1编辑  收藏  举报