zoukankan      html  css  js  c++  java
  • 循环机构报告

    C程序设计报告

    1、用for语句实现循环

    2、用while循环语句实现循环

    3、用do_while语句实现循环

    4、用while语句和for语句配合实现循环

    5、用for语句嵌套实现循环

    姓名:陈以鹏  实验地点:514教室  实验时间:4.17

    一、实验目的与要求

    5.3.1、用for语句实现循环

    ● 掌握for语句实现循环的方法。

    ● 循环嵌套的使用

    5.3.2、用while循环语句实现循环

    ●掌握while语句实现循环的方法;

    5.3.3、用do while语句实现循环

    ●掌握do  while语句实现循环的方法。

    5.3.4、用while语句和for语句配合实现循环

    ●掌握while语句和for语句的配合实现循环的方法。 

    5.3.5、用for语句嵌套实现循环

    ●掌握for语句嵌套实现循环的方法。

    ●掌握continue语句的用法。

    二、实验内容

    1、实验练习(5.3.1):

    实验练习--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.问题分析:根据题目描述主要填的是求和表达式,故问题不大。

    4.代码运行:

     

    实验练习--2

    1.问题的简单描述:

    编写一程序,求数列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=i+1)
    {
    fac=1.0;
    for(j=1;j<=2*i-1;j=j+1)
    {
    fac=fac*j;
    }
    fac=fac*sign;
    sum=sum+fac;
    sign=-sign;

    }
    printf("sum=%.0f ",sum);
    }

    3.问题分析:一开始想到了要用到循环嵌套机构,但一直没有做出来,当老师运行成功是才明白自己错在哪里。

    4.代码运行:

    2、实验练习(5.3.2):

    实验练习--1

    1.问题的简单描述:

    从键盘上输入若干学生的成绩,统计并输入最高成绩和最低成绩,当输入负数时结束输入。

    2.实验代码:

    #include<stdio.h>
    #include<conio.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.问题分析:根据流程图可以清晰地知道所要的条件,但有一点不明白就是运行时需要一个负数。

    4.代码运行:

    实验练习--2

    1.问题的简单描述:

    求所有的水仙花数(水仙花数是一个三位数的自然数,该数各位数的立方等于该数本身,如153为水仙花数1^3+5^3+3^3=153)。

    2.实验代码:

    #include<stdio.h>
    main()
    {
     int x,y,z;
     int k=100;
     while(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.问题分析:条件框中的等号需要用到连等,而不是一个等号,不然程序运行有误。

    4.代码运行:

    3、实验练习(5.3.3):

    1.问题的简单描述:

    求满足1+1/2+1/3+...+1/n>value这个不等式的n最小值,其中,value是大于1的任何数。

    2.实验代码:

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

    3.问题分析:程序需要的是大于1的任何数字,故用float型变量。

    4.代码运行:

    4、实验练习(5.3.4):

    实验练习--1

    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;
      else if(k==1) data+=(c-'0')*100;
      else if(k==2) data+=(c-'0')*10;
      else if(k==3) data+=(c-'0');
     }
     printf("Data=%d",data);
    }

    3.问题分析:条件框中运用了if的嵌套结构,其它问题不大。

    4.代码运行:

    4、实验练习(5.3.5):

    实验练习--1

    1.问题的简单描述:

    有100匹马,要驼100担货物,其中1匹大马可以驼3担,1匹中马可以驼两担,两匹小马可以驼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.问题分析:程序中再一次运用了连等,故一开始想了很久都不知道错在哪里,之后询问同学才搞定。

    4.代码运行:

    实验练习--2

    1.问题的简单描述:

    编写程序,求一正整数等差数列的前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.问题分析:此程序运用了for嵌套结构,故一开始看流程图有一点不懂,但在仔细分析之后会觉得这个流程图并不是那么难。

    4.代码运行:

    实验练习--3

    1.问题的简单描述:

    有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.问题分析:编写改程序的主要问题是之前没有搞清楚x,y之间的关系,导致结果有无限多个。

       解决方法:我先看懂了流程图,理解了x,y意义和关系。

    4.代码运行:

    三、实验小结:经过本次实验明白了自己哪里有所不足,比如对条件的判断等,同时对于一些符号的运用也会有错误。

  • 相关阅读:
    ZOJ 3765 Lights (zju March I)伸展树Splay
    UVA 11922 伸展树Splay 第一题
    UVALive 4794 Sharing Chocolate DP
    ZOJ 3757 Alice and Bod 模拟
    UVALive 3983 捡垃圾的机器人 DP
    UVA 10891 SUM游戏 DP
    poj 1328 Radar Installatio【贪心】
    poj 3264 Balanced Lineup【RMQ-ST查询区间最大最小值之差 +模板应用】
    【转】RMQ-ST算法详解
    poj 3083 Children of the Candy Corn 【条件约束dfs搜索 + bfs搜索】【复习搜索题目一定要看这道题目】
  • 原文地址:https://www.cnblogs.com/cyp312/p/10777964.html
Copyright © 2011-2022 走看看