• 2.2 简单的算法举例


    说实话,我感觉这小节没什么可以看的,于是我准备把书中的例子描述 具体代码化  (- -!)

    题目一    1*2*3*4*5 求结果

    程序代码开始————————————————————————————————————————————————————————————————

    #include <stdio.h>

    int main (void)

    {

    int a=1,b=2; 

         while(b<=5)

        //当b<=5时,条件为真,执行花括号里的步骤,当条件为假,跳出,执行下一步,即是 printf函数。

       {       

               a=a*b;

                 b=++b;

                /*++b 为自增,b自己加1,然后赋值给对象。与b++不同,b++是 将b赋值给对象,然后自己加1,所以无论b++还是++b,最后b的数值是一样的,但是赋值对象的数值是不一样的*/

        }

    printf("1*2*3*4*5=%d ",a);

    printf("%d",b);

    getch();

    return 0;

    }

    程序代码结束———————————————————————————————————————————————————————————————————

    PS:其实我第一遍打代码,后我用Code::Blocks编译了一遍,发现语意错误。。我连while怎么用忘了,看来以后真的每天打代码。这东西忘得太快。。。

    题目二 1*3*5*7*9*11

    ——————————————————————————————————————————————————————————————————————————

    #include<stdio.h>

    int main (void)

    {

            int a=1,b=3;

       while(b<=11)

      {

             a=a*b;   

              b=b+2;

        }

    printf ("1*3*5*7*9*11=%d ",a);

    return 0;

    }

    ————————————————————————————————————————————————————————————————————————

    PS;shit,竟然又没有一次打成,这回是语意思考不严谨,我直接将b设成  :  int  b=a+2;while(b<=){a=a*b}然后错误。。。

    得到的教训是:b=a+2;只执行一次,while中的循环体{a=a*b}里的b在循环体里与上面的b=a+2;无关,永远保存数值为3.形成死循环。

    具体怎么说我也不明白,但是死记住这一个勉强理解为规则好了,循环体里的变量只有循环体里的变化

    ————————————————————————————————————————————————————————————————————————————————

    50个学生,输出他们之中80分以上的学号和成绩

    #include<stdio.h>
    int main()
    {
    int i,g[50],n[50];
    i=0;//下标要从0开始的

    while(i<50)//最大值到49,不然会越界的
    {
    scanf("%d,%d",&g[i],&n[i]);//输入放在里面
    if(g[i]>=80)
    printf("%d,%d ",n[i],g[i]);//这里少了分号,输出不用取地址了
    i=i+1;
    }
    return 0;
    }

    这个是百度了的,我也想了,但是我不知道怎么将学号和成绩关联,一一对应,于是百度了,发现也只能靠人工对应输入。fuck!!

    ---------------------------------------------------------------------------------------------------------————————————————————————————————————————————————

    判定2000-2500年中的闰年

    闰年条件,能被四整除,但不能被100整除,或者能被100整除,又能被400整除。

    #include<stdio.h>

    int main (void)

    {

    int a=2000;

        while(a<=2500)

      {

          if(

                 (a%4==0&&a%100!=0)

                ||

                (a%100==0&&a%400==0)

               )    

           printf("闰年是%d ",a);    

           a++;

       }

    return 0;

    }

    ________________________________________________________________________________________________

    #include<stdio.h> int main (void)

    {

    //求1-1/2+1/3-1/4.....-1/100

    float a=1;

    float b=2;

           while (b<=100)   

       {

        a=a-1/b;

         b++;

         a=a+1/b;

         b++;

       }

    a=a-1.0/101.0;

    printf ("最终结果为%f ",a);

    return 0;

    _________________________________________________________________________________________________________________

    感悟:两个int 进行计算 结果类型必然似乎 int  1/2=0.5 整数直接为0了 ,没有小数,当计算出现浮点数值,记得要该声明类型,和对应的表示类型,并且到最后多加了一个1/101所以要减去一个1/101才行

    同样 要打1.0/101.0 否则同样整数为0 不能执行

    因为同样类型的操作数与运算符 返回结果的类型必须一致 所以2/1和1/2应该返回同样类型的结果 而编译器根本不知道应该返回的真实结果是什么 只知道返回类型
    这是思考得出的 因为编译器只知道操作数的类型 不知道操作数的具体值 所以无法返回不同类型
     
    顺便说一下U盘容量为什么2 4 8 16 32增长的
     

    U盘是对晶圆的切割 随着工艺的进步  切割越来越精细 但是一刀下去总是分两分的

    __________________________________________________________________________________________________________

    有人帮我简化了程序

    #include<stdi.h>

    int main (void)

    {

    float a=0,b=1;

           while(b<=100)

       {

       a=a+1/b;

       b++;

       a=a-1/b;

        b++;

     

     

     

     

     }

    printf("最后结果是%d ",a);

    return 0;

    }

     __________________________________________________________________________________________________________
    判断一个数是否是素数
    素数的条件:除了1和自身 外,其他任何整数都不能被整出

    #include<stdio.h>

    int main (void)

    {

      int i=2,n;

       float y;

       scanf("%d",&n);

             while(i<n-1)  

       {  

          y=n%i;

          if(y==0)        printf("此数不是素数 ");

           else   i++;

            y=n%i;    

         if(y!=0)        printf("此数是素数");    

        getch();   

    }

    }

    这是C语言吧 :乌鸦bu黑 回复的  感谢它

    ____________________________________________________________________________________________________其实也可以,在家加入一个变量,利用求余 设条件是否等于0,输出 ,将原本的 去掉,不让其每一次输出。

    具体代码

    #include<stdio.h>
    int main (void) 

    int a=2000,i=0; 
    while(a<=2500) 

    if( 
    a%4==0&&a%100!=0
    || 
    a%100==0&&a%400==0
    )
    printf("闰年是%d ",a);
    else printf("%d不是闰年 ",a);
    i++;
    if(i%4==0) printf(" ");
    a++; 
    }
    return 0; 
    }
    再加上点就好了,if(i%4==0) printf(" ");4个显示一次,就能显示全了

    _____________________________________________________________________________________________

    这个程序编的真不是一般的烂  为什么?明明可以达到目的的?
    因为如果是真素数,如果没有加结尾的 getch(); 会进行循环,直到while(i<n-1)条件为假时才能跳出循环,当跳出时可能已经循环了若干次,屏幕输出多个 “此数是素数”,影响观看。
    当输入数字为不能被2整除,又不是素数,例如9,则会进行到i自加1,判断不是素数,然后进行 getch(); 停留在等待从控制台接受一个字符上,必须多敲击一下,才能输出“此数不是素数”
     
     
     
  • 相关阅读:
    openssl rsa 加密
    SVN
    day04-drf认证、限流、权限、过滤、排序、分页、异常处理、自动接口文档生成、Xadmin后台管理
    day03-drf视图相关
    day02-序列化与反序列化
    day01-drf引入、序列化反序列化前序
    restFul接口设计规范
    Mysql优化之innodb_buffer_pool_size篇
    Mysql(CAST)和Oracle(to_char)应用
    Mongo和Mysql查看查询任务并终止
  • 原文地址:https://www.cnblogs.com/taoyuan7788/p/3181144.html
Copyright © 2020-2023  润新知