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

    ---恢复内容开始---

    1、用for语句实现循环

    • 求数列前n项
    • 求数列前n项的和

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

    • 统计学生的最高最低成绩
    • 求水仙花数

    3、用do-while语句实现循环

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

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

    • 百马百担问题
    • 求等差数列
    • 食品分配问题

    姓名:曹时仙  实验地点:514教室  实验时间:4.17

    一、实验目的与要求

    1、用for语句实现循环

    1、1求数列前n项

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

    1、2求数列前n项的和

    • 掌握for语句实现循环的方法
    • 循环嵌套的使用

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

    2、1统计学生的最高最低成绩

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

    2、2求水仙花数

    • 进一步掌握while语句实现循环的方法

    3、用do-while语句实现循环

    • 掌握do/while语句实现循环的

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

    • 掌握while语句和for语句配合实现循环

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

    5、1百马百担问题

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

    5、2求等差数列

    • 掌握for语句嵌套(3层)实现循环的方法
    • 掌握continue语句的用法

    5、3食品分配问题

    • 掌握for语句嵌套实现循环的方法
    • 掌握continue语句的用法

    二、实验内容

    1、1求数列前n项

    • 问题的简单描述:编写一程序,求出1,1+2,1+2+3···数列中前n项的值。
    • 实验代码:
     
    #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);
            printf(" ");
            j++;
        }
    }
    

      

    运行结果如下:

    • 问题分析:该题比较简单,主要就是例题中的代码出了点小问题,该问题出现在printf("%d",s);的下一行,少了一行控制空格的代码,起初我完成题目中的横线部分代码,后来发现输出的是136101521,连续输出没有空格,后来加上了printf(" ");就解决了该问题。

    1、2求数列前n项的和

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

    实验代码:

    #include<stdio.h>
    #include<conio.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);
    }
    

      

    运行结果如下:

    • 问题分析:以开始在课堂上老师已经讲了那段for(i=1;i<=2*n-1;i=i+2)代码有问题,后来让我们自己找错。最终我没能找到错误,同学上去讲了一下我才知道,把那段代码改为
      for(i=1;i<=n;i++)就行了。
     

    2、1统计学生的最高最低成绩

    • 问题的简单描述:从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。
    • 实验代码
    #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);
    }
    

      

     

    运行结果如下:

    • 问题分析:该题实则就是编写一个比较两个数大小的代码,通过两两数的比较,最后随意输入一个负数后即可输出答案。

    2、1求水仙花数

    • 问题的简单描述:求所有的水仙花数(水仙花数是一个3位数的自然数,该数个位的立方和等于该数本身,如153为水仙花数1^3+5^3+3^3=153)。
    • 实验代码:
    #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、求不等式

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

    • 实验代码:
    • #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);
      }
      

        

    运行结果如下:

    • 问题分析:这段核心代码
      do
      	{
      		++n;
      		sum+=1.0/(float)n;
      	}
    • 提供了它一次又一次的循环,最终当sum大于value时,跳出循环。

    4、十进制转换

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

    • 实验代码:
     #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');
    	}
    	printf("Data=%d",data);
    }
    

      

     

    运行结果如下:

    • 问题分析:通过利用关键字data,来取随机数组合。

    5、1百马百担问题

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

    • 实验代码
    #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);
    }
    

      

     

    运行结果如下:

    • 问题分析:这题的难度无疑就是核心算法了,这个如果不看书,估计得想半天,核心算法
      if((k%2==0)&&(3*m+2*n+0.5*k==100))中的k%2==0,就能确保小马是双数,后面的算法就如数学方程了。
     

    5、2求等差数列

    • 问题的简单描述:编写程序,求一正整数等差数列的前六项的和,该数列前四项之和是26,前四项之积是880.

    • 实验代码:
    #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+d*i);
    			}
    		}
    	 } 
    	 printf("
    数列的前6项的和:%d
    ",sum);
     } 
    

      

     
    • 问题分析:这题非常考验数学功底,基本全是算法。

    5、3食品分配问题

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

    • 实验代码:
    #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);
    }
    

      

     
    • 问题分析:这题基本上没什么大问题,主要就是靠算法,该题的核心算法if((z!=0)&&(3*x+2*y+z==50)),z不等于0,排除了大学生为零的解,后面的等式就是符合数学逻辑和计算机语言的等式。

    三、实验小结

    本次实验课上的内容较多,可以发现,基本上都是靠算法在循环结构里面,如果没有书上的流程图,我想会有很多人做不出来,难度还是比较大的,毕竟这次实验课下课了我还没有完成任务,做题速度欠缺,现在听老师的,在每次实验课之前先自己敲一遍代码,后面有不懂的可以再到课堂上解决,这样可以大大提高实验课的效率。

    ---恢复内容结束---

  • 相关阅读:
    Leetcode Unique Binary Search Trees
    Leetcode Decode Ways
    Leetcode Range Sum Query 2D
    Leetcode Range Sum Query
    Leetcode Swap Nodes in Pairs
    Leetcode Rotate Image
    Leetcode Game of Life
    Leetcode Set Matrix Zeroes
    Leetcode Linked List Cycle II
    CF1321A
  • 原文地址:https://www.cnblogs.com/shixian/p/10765255.html
Copyright © 2011-2022 走看看