zoukankan      html  css  js  c++  java
  • 第三次实验报告

    C程序设计实验报告

    姓名:张涛   实验地点: 514实验室    实验时间:2019年4月17日


     

    实验项目:

    1、用for语句实现循环
    2、用while循环语句实现循环
    3、用do-while语句实现循环
    4、用while语句和for语句配合实现循环
    5、用for语句嵌套实现循环

    一、实验目的与要求

    1.用for语句实现循环
    • 掌握for语句实现循环的方法;
    • 循环嵌套的使用;
    2.用while循环语句实现循环
    • 掌握fwhile语句实现循环的方法;
    • 进一步掌握fwhile语句实现循环的方法;
    3.用do-while循环语句实现循环
    • 掌握do-fwhile语句实现循环的方法;
    4.用while语句和for语句配合实现循环
    • 掌握fwhile语句和for语句配合实现循环的方法;
    5.用for语句嵌套实现循环
    • 掌握for语句嵌套实现循环的方法;
    • 掌握for语句嵌套(三层)实现循环的方法;
    • 掌握continue语句的使用;

    二、实验内容

    A、实验5.3.1

    a、5.3.1.1

    1、5.3.1.1的问题的简单描述:编写一程序,求出1,1+2,1+2+3……数列中前n项的值。

    2、实验代码:

    #include<stdio.h>
    #include<conio.h>
    main()
    {
        int i,j=0,k,s=0;
        printf("Enter a number;");
        scanf("%d",&k);
        for(i=1;i<=k;i++)
        {
           s=s+i;
           printf("%d ",s);
           j++;
        } 
    }

    3、问题分析:注意输出 printf("%d ",s);的格式要在双引号内加入空格,这样输出不会一连串数字,或者用 水平制表符可以使结果自动排版。

    b、5.3.1.2

    1、5.3.1.2的问题的简单描述:编写一程序,求数列1,-3!,5!,-7!……(-1)^(n-1)*(2n-1)前n项的和。n的值由键盘输入。

    2、实验代码:

    #include<stdio.h>
    main()
    {
        int n,i,j,sign=1;
        float fac,sum;
        printf("please input value of n:");
        scanf("%d",&n);
        sum=0.0;
        for(i=1;i<=n;i++)
        {
            fac=1.0;
            for(j=1;j<=2*i-1;j++)
            {
                fac=fac*j;
            }
            fac=fac*sign;
            sum=sum+fac;
            sign=-sign;
        }
        printf("sum=%.0f
    ",sum);
    }

    3.问题分析:

    开始控制i的循环结构是错误的应该为for(i=1;i<=n;i++),一开始没有怎么看懂算法框图,然后自己用记事本写了几遍才看懂。n为键盘输入数字,i控制总的循环次数,j控制2n-1的结果,fac和sum控制阶乘运算输出结果,sign控制结果的正负。

    B、实验5.3.2

    a、5.3.2.1

    1、5.3.2.1的问题的简单描述:从键盘输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。

    2、实验代码:

    #include<conio.h>
    #include<stdio.h>
    main()
    {
        float x,max,min;
        printf("please input scores:");
        scanf("%f",&x);
        max=min=x;
        while(x>=0)
        {
            if( x>max)
            max=x;
            if( x<min)
            min=x;
            scanf("%f",&x); 
        }
        printf("
    max=%f
    min=%f
    ",max,min);
    }

    3、问题分析:

    主要了解while的用法就ok了

    b、5.3.2.2

    1、5.3.2.2的问题的简单描述:求所有的水仙花数(水仙花数是一个3位数的自然数,该数各位数的立方和等于该数本身,如153为水仙花数1*1+5*5+3*3=153)

    2、实验代码:

    #include<stdio.h>
    main()
    {
        int x,y,z;
        int k=100;
        while(100<=k&&k<=999)
        {
            x=k/100;
            y=(k/10)%10;
            z=k%10;
            if(k==x*x*x+y*y*y+z*z*z)
            printf("%d
    ", k);
            k++;
        }
    
    }

    3、问题分析:

    注意while里面的判断语句的写法,应该为数学或者逻辑表达式

    C、实验5.3.3

    1、问题的简单描述:求满足下列不等式的n的最小值。其中,value是大于1的任何数。1+1/2+1/3+……+1/n>value

      2.实验代码:

    #include<stdio.h>
    main()
    {
        float sum,value;
        int n;
        printf("Input value:");
        scanf("%f",&value);
        sum=0.0;
        n=0;
        while(sum<value)
        {
            ++n;
            sum+=1.0/(float)n;
        }
    
        printf("n=%d",n);
    }

     

     3、问题分析:

    while(sum<value)

    {
    ++n;
    sum+=1.0/(float)n;
    }

    这种写法和下面的循环是一样的,一个是用while写的,另一个使用do-while写的。通过写这两种写法,我更加理解了while和do-while的区别,循环次数的区别。

    do
    {
    ++n;
    sum+=1.0/(float)n;
    }
    while(sum<value);

    D、实验5.3.4

     1、问题的简单描述:输入4个字符,并把其转换为4位十进制整数后显示出来。

     2.实验代码:

    #include<stdio.h>
    main()
    {
        char c;
        int k,data;
        data=0;
        for(k=0;k<4;k++)
        {
            while(1)
            {
                c=getchar();
                if(c>='0' && c<='9')
                   break;
            }
         if(k==0) data+=(c-'0')*1000;
         if(k==1) data+=(c-'0')*100;
         if(k==2) data+=(c-'0')*10;
         if(k==3) data+=(c-'0')*1;
        }
        printf("Data=%d",data);
    }

    3、问题分析:

    首先看到了四条横线先想到的是用switch,然后发现横线不够用了。就想到用if写比较快。

    E、实验5.3.5

    a、5.3.5.1

    1、5.3.5.1的问题的简单描述:有100匹马。要驮100担货物,其中,1匹大马可以驮3担,1匹中马可以驮2担,两匹小马可以驮1担,请问,大马、中马和小马可以有多少种组合。

    2.实验代码:

    #include<stdio.h>
    main()
    {
        int m,n,k;
        int sum=0;
        printf("各种驮法如下:
    ");
        for(m=1;m<=100;m++)
           for(n=1;n<=100-m;n++)
           {
                  k=100-m-n;
                  if((k%2==0)&&(3*m+2*n+0.5*k==100))
                  {
                          printf("大马%3d匹;中马%3d匹;小马%3d匹.
    ",m,n,k);
                          sum++;
               }       
           }
           printf("共有%d种驮法.
    ",sum);    
    } 

     

    3、问题分析:

    这道题主要是要先理解算法,就是先把大马和小马数量定义为循环变量,然后小马的数量通过这两个马的数量表示出来,最后通过一个if判断语句判断百马百担的结果是否正确,最后输出结果。

    b、5.3.5.2

    1、5.3.5.2的问题的简单描述:编写程序,求一正整数等差数列的前6项的和,该数列前4项之和是26,前4项之积是880。

    2.实验代码:

    #include<stdio.h>
    main()
    {
        int a,b,c,d,i,sum=0;
        for(a=1;a<=26;a++)
            for(d=1;d<=26;d++)
            {   
                b=4*a+6*d;
                if(b!=26)
                    continue;
                else
                {   
                    c=a*(a+d)*(a+2*d)*(a+3*d);
                  if(c!=880)
                      continue;
                  else  
                      for(i=0;i<6;i++)
                      {     
                           printf("%d,",a+i*d);
                           sum=sum+(a+i*d);
                      }
                }    
            }
            printf("
    数列的前六项的和:%d
    ",sum);
    }

    3、问题分析:

    这题我觉得主要是看算法比较难以理解。我仔细看了好几遍才看懂,数列的逆运算,如果是一道单纯的数学题,我相信很快能做出来,然而在想算法。a为首相,d为公差,先写a的循环,再写d的循环(我觉得循环次数多了,次数可以少一点)。 然后还要满足第二个条件数列的前四项的积为880,满足两个条件就ok了。

    c、5.3.5.3

    1、5.3.5.3的问题的简单描述:有30个学生一起买小吃,共花钱50元,其中,每个大学生花3元,每个中学生花2元,每个小学生花1元,问大、中、小学生的人数共有多少种不同的解(去掉某类学生数为0的解)

    2.实验代码:

    #include<stdio.h>
    main()
    {   
        int x,y,z,sum;
        sum=0;
        for(x=1;x<=30;x++)
        {  
            for(y=1;y<30;y++)
            {   
                z=30-x-y;
                if((z!=0)&&(3*x+2*y+z==50))
                  {   
                     printf("大学生%3d	中学生%3d	小学生%3d
    ",x,y,z);
                     sum=sum+1;
                  }
                else
                     continue;
            }
        }
        printf("sum=%d
    ",sum);
    }

    3、问题分析:

    这题和之前的百马百担查不错理解起来比较容易。


    三、实验小结

    这次的实验内容有点多,差点就顶不住了。还好有些难度不大,我觉得此次实验主要还是for,while,do-while语句的使用练习。百马百担是一个很经典的问题,循环变量是什么,怎么样去写for循环,内外循环,先想怎么写外循环,再写内循环是解决百马百担的关键。然后就是加深了while,do-while语句的写法以及两种语句之间的转换,循环次数的差别。

    总之现在学的越来越深入c语言,循环好像变得有趣而又生动了。

  • 相关阅读:
    美容:盐水按摩 靓肤不花钱 健康程序员,至尚生活!
    关于黑眼圈形成和应对方法! 健康程序员,至尚生活!
    女人必知25个养颜排毒美容锦囊 健康程序员,至尚生活!
    让你睡眠更香甜的九种食物 健康程序员,至尚生活!
    几款美容瘦身的花茶配方 健康程序员,至尚生活!
    吃出来的美白方法 健康程序员,至尚生活!
    达人DIY护肤经验分享 健康程序员,至尚生活!
    【男士必看】男士护肤必备攻略 健康程序员,至尚生活!
    一起学习手撕包菜如何做 健康程序员,至尚生活!
    抵制美食诱惑 春节美食瘦身建议 健康程序员,至尚生活!
  • 原文地址:https://www.cnblogs.com/zt1037054045/p/10747715.html
Copyright © 2011-2022 走看看