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

    第三次实验报告

    实验项目:

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

    姓名:袁诚   实验地点:教学楼514教室   实验时间:4月17日

    一、实验目的与要求

    1.用for语句实现循环

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

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

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

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

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

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

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

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

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

    二丶实验内容

    5.3.1实验练习

    1.问题描述
    一:编写一程序,求出1,1+2,1+2+3…数列中前n项的值。程序流程图如图5-1所示。 二:编写一程序,求数列1,-3!,5!,-7!……(-1)^(n-1)*(2n-1)前n项的和。n的值由键盘输入。
    2.实验代码
    #include <stdio.h>
    main()
    {
    	int i,j,s;
    	s=0;
    	printf("Enter a number:");
    	scanf("%d",&i);
    	if(i<=0)
    	{
    		printf("输入数据有误,请重新输入!");
    	}
    	else
    	{
    			for(j=1;i>=j;j++)
    			{
    				s=s+j;
    				printf("%d ",s);
    			}
    	}
    }
    
    #include<stdio.h>
    main()
    {
    	int i,j,k,z,y,sum;
    	sum=0;
    	printf("Please input value of n:");
    	scanf("%d",&i);
    	if(i<=0)
    	{
    		printf("输入数据有误,请重新输入!"); 
    	}
    	else
    	{	
    		for(j=1;j<=i*2-1;j=j+2)
    		{
    			k=1;
    			y=1;
    			for(z=1;j>=z;z++)
    			{
    				y=y*z*k;
    				k=-k;
    			}
    			sum=sum+y;
    		}
    		printf("%d",sum);
    	}
    }
    
    
    3.问题分析
    问题:实验二的输出的结果总是不正确。 解决方法:将k与y等于1的赋值放在外部的for中,使其每一次循环都可以让k与y的值重置。

    5.3.2实验练习

    1.问题描述
    一:从键盘输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。 二:求所有的水仙花数(水仙花数是一个3位数的自然数,该数各位数的立方和等于该数本身,如153为水仙花数1*1+5*5+3*3=153)
    2.实验代码
    #include<stdio.h>
    main()
    {
    	float x,max,min,z;
    	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=%.0f  min=%.0f",max,min);
    }
    
    #include<stdio.h>
    main()
    {
    	int x,y,z,s,k,p;
    	k=100;
    	while(k<1000)
    	{
    		x=k/100;
    		p=k/10;
    		y=p%10;
    		z=k%10;
    		s=x*x*x+y*y*y+z*z*z;
    		if(s==k)
    		{
    			printf("%d
    ",k);
    		}
    		k++;
    	}
    }
    
    3.问题分析
    问题:实验二中的个十百位的分离不成功。 解决方法:使用取余,除法和int型变量的性质来分离个十百位。

    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;
    	do
    	{
    		++n;
    		sum+=1.0/(float)n;
    	}
    	while(sum<value);
    	printf("n=%d",n);
    }
    
    3.问题分析
    该实验没有碰到问题。

    5.3.4实验练习

    1.问题描述
    输入4个字符,并把其转换为4位十进制整数后显示出来。
    2.实验代码
    #include<stdio.h>
    main()
    {
    	char a;
    	int k,s;
    	s=0;
    	for(k=0;k<4;k++)
    	{
    		while(1)
    		{
    			a=getchar();
    			if(a>='0'&&a<='9')
    			break;
    		}
    	if(k=0)
    	{
    		s=s+(a-48)*1000;
    	}	
    	if(k=1)
    	{
    		s=s+(a-48)*100;
    	}	
    	if(k=2)	
    	{
    		s=s+(a-48)*10;
    	}
    	if(k=3)	
    	{
    		s=s+(a-48);
    	}
    	}
    	printf("s=%d",s);
    }
    
    3.问题分析
    问题:实验中,没有搞清楚字符型与整形数据的关系,导致输出结果不对。 解决方法:通过ASCII码来计算值,再输出相应的数据,得到结果。

    5.3.5实验练习

    1.问题描述
    一:有100匹马。要驮100担货物,其中,1匹大马可以驮3担,1匹中马可以驮2担,两匹小马可以驮1担,请问,大马、中马和小马可以有多少种组合。 二:编写程序,求一正整数等差数列的前6项的和,该数列前4项之和是26,前4项之积是880。 三:有30个学生一起买小吃,共花钱50元,其中,每个大学生花3元,每个中学生花2元,每个小学生花1元,问大、中、小学生的人数共有多少种不同的解(去掉某类学生数为0的解)
    实验代码
    #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("大马%d匹;中马%d匹;小马%d匹.
    ",m,n,k);
    				sum++;
    			}
    			else
    			{
    				continue;
    			}
    		}
    	}
    	printf("共有%d种驮法.
    ",sum);
    } 
    
    #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+b)*(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("
    数列的前6项的和:%d
    ",sum); 
    }
    
    #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.问题分析
    问题:第二个实验中,输出不出结果。 解决方法:将等差数列的和与积表达式写正确,再合理运用if与continue,即可令语句正常运行出结果。

    三、实验小结

    收获:本次实验,我熟悉了循环语句的使用方法,对于for、do/while、while的了解更深了一步。同时学会了怎样使用多重循环的嵌套,对于循环语句的理解也更上一层楼了。 不足:本次实验,我发现我对于循环语句的使用方法还存在很多的不了解与不熟悉,对于各种算法的使用还不清楚,还需要更多的加强。
  • 相关阅读:
    创建网络数据集
    [虚拟机]Virtual Box的使用--共享文件夹
    MapControl图层删除或添加触发监听事件
    Dev控件GridView单元格绑定控件
    Log4net中换行符
    没有为 COM 互操作注册程序集 请使用 regasm.exe /tlb 注册该程序集——解决办法
    加载dll过程中assembly失败
    Spring Boot 自带缓存及结合 Redis 使用
    Spring Boot + Redis 初体验
    在 Windows 中使用 C# 启动其他程序
  • 原文地址:https://www.cnblogs.com/ylpforever/p/10747518.html
Copyright © 2011-2022 走看看