A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 叶子哥 中级黑马   /  2016-5-14 23:36  /  2210 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

    经过半个月的C语言熏陶,最终迎来了一次考试的检查.考后整理了下编程题,经本人优化后,自认为比较完美了(貌似有点自嗨了O(∩_∩)O~).
   
    如果有更好的优化建议,请尽管讲撒...


  1. //
  2. //  main.c
  3. //  第一题
  4. //
  5. //  Created by YYSky on 16/5/13.
  6. //  Copyright © 2016年 yaomars. All rights reserved.
  7. //

  8. /**
  9. *  1、设计一个函数,统计从键盘输入的50个实数中有多少个正数、多少个负数、多少个零
  10. *
  11. *
  12. */

  13. #include <stdio.h>

  14. int main(int argc, const char * argv[]) {
  15.    
  16.     //存储正数的个数
  17.     int zNum = 0;
  18.     //存储负数的个数
  19.     int fNum = 0;
  20.     //存储零的个数
  21.     int zero = 0;
  22.    
  23.     //循环输入50个实数
  24.     for (int i = 0; i < 50; i++) {
  25.         printf("请输入第%d个实数:",i + 1);
  26.         int temp = 0;
  27.         
  28.         rewind(stdin);
  29.         scanf("%d",&temp);
  30.         
  31.         if (temp > 0) {
  32.             zNum ++;
  33.         } else if(temp < 0){
  34.             fNum ++;
  35.         }else{
  36.             zero ++;
  37.         }
  38.         
  39.     }
  40.    
  41.     //打印结果
  42.     printf("正数个数为:%d, 负数个数为:%d, 零的个数为:%d\n",zNum,fNum,zero);
  43.    
  44.     return 0;
  45. }
复制代码
  1. //
  2. //  main.c
  3. //  第二题
  4. //
  5. //  Created by YYSky on 16/5/13.
  6. //  Copyright © 2016年 yaomars. All rights reserved.
  7. //

  8. /**
  9. *  2,完数,一般指完全数,一个自然数如果它的所有真因子(即除了自身以外的约数)的和等于该数,那么这个数就是完全数,如:6的真因子有1 、2、3,6=1+2+3,所以6是一个完全数。
  10. 编程输出1000以内的所有完数

  11. *
  12. *
  13. */

  14. #include <stdio.h>

  15. int main(int argc, const char * argv[]) {
  16.    
  17.     //循环取数
  18.     for (int i = 2; i <= 1000; i++) {
  19.         //存储每个数的因子之和
  20.         int sum = 0;
  21.         //遍历每个数,取出因子之和(循环次数一定要注意优化)
  22.         for (int j = 1; j <= (i / 2); j++) {
  23.             if (i % j == 0) {
  24.                 sum += j;
  25.             }
  26.         }
  27.         if (sum == i) {
  28.             printf("完全数:%d\t",i);
  29.         }
  30.     }
  31.     printf("\n");
  32.    
  33.     return 0;
  34. }
复制代码
  1. //
  2. //  main.c
  3. //  第三题
  4. //
  5. //  Created by YYSky on 16/5/13.
  6. //  Copyright © 2016年 yaomars. All rights reserved.
  7. //

  8. /**
  9. *  3、定义一个函数int fun(int a,int b,int c),它的功能是:若a,b,c能构成等边三角形函数返回3,若能构成等腰三角形函数返回2,若能构成一般三角形函数返回1,若不能构成三角形函数返回0。
  10. *
  11. *
  12. */

  13. #include <stdio.h>

  14. //函数的声明
  15. int fun(int a,int b,int c);

  16. int main(int argc, const char * argv[]) {
  17.    
  18.     //调用函数
  19.     int result = fun(4, 4, 4);

  20.     //判断函数返回结果,打印判断结果
  21.     switch (result) {
  22.         case 0:
  23.             printf("此三个数不能构成三角形..\n");
  24.             break;
  25.             
  26.         case 1:
  27.             printf("此三个数能构成一般三角形..\n");
  28.             break;

  29.         case 2:
  30.             printf("此三个数能构成等腰三角形..\n");
  31.             break;

  32.         case 3:
  33.             printf("此三个数能构成等边三角形..\n");
  34.             break;

  35.             
  36.         default:
  37.             break;
  38.     }
  39.    
  40.     return 0;
  41. }

  42. //实现函数
  43. int fun(int a,int b,int c){

  44.     //判断是三角形的条件
  45.     if ((a + b) > c && (c + b) > a && (a + c) > b) {
  46.         //等边三角形的条件
  47.         if ((a == b) && (b == c)) {
  48.             
  49.             return 3;
  50.            //等腰三角形的条件
  51.         } else if(a == b || a == c || c == b){
  52.             
  53.             return 2;
  54.           //一般三角形
  55.         }else{
  56.             return 1;
  57.         }
  58.         
  59.     } else {
  60.         
  61.         return 0;
  62.     }

  63. }
复制代码



6 个回复

倒序浏览
不错
回复 使用道具 举报
学习了!~~!~!~!~!~!~!~!
回复 使用道具 举报
rewind(stdin); 这个是什么意思?
回复 使用道具 举报
2528 发表于 2016-5-15 08:17
rewind(stdin); 这个是什么意思?

清除标准输入流的缓存区
回复 使用道具 举报
擦,和我那时候的测试题目一模一样
回复 使用道具 举报
2528 中级黑马 2016-5-16 07:12:28
7#
yaomars 发表于 2016-5-15 16:14
清除标准输入流的缓存区

嗯,懂了。谢谢啊!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马