第三次实验报告

第三次实验报告

实验项目:

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\n",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("各种驮法如下:\n");
	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匹.\n",m,n,k);
				sum++;
			}
			else
			{
				continue;
			}
		}
	}
	printf("共有%d种驮法.\n",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("\n数列的前6项的和:%d\n",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\t中学生%3d\t小学生%3d\n",x,y,z);
			sum=sum+1;
		}
		else
		{
			continue;
		}
		}
	}
	printf("sum=%d\n",sum);
}
3.问题分析
问题:第二个实验中,输出不出结果。 解决方法:将等差数列的和与积表达式写正确,再合理运用if与continue,即可令语句正常运行出结果。

三、实验小结

收获:本次实验,我熟悉了循环语句的使用方法,对于for、do/while、while的了解更深了一步。同时学会了怎样使用多重循环的嵌套,对于循环语句的理解也更上一层楼了。 不足:本次实验,我发现我对于循环语句的使用方法还存在很多的不了解与不熟悉,对于各种算法的使用还不清楚,还需要更多的加强。
posted @ 2019-04-21 22:39  袁爷灬oc  阅读(144)  评论(0编辑  收藏  举报