C语言程序设计实验报告(四)

C程序设计实验报告

姓名:黄静微  实验地点:家  实验时间:2020.03.25

实验项目

5.3.1 练习2 求数列的和
5.3.2 求水仙花数
5.3.4 十进制转换
5.3.5 练习1 百马百担问题
5.3.5 练习2 求等差数列
5.3.5 练习3 食品分配问题
九九乘法表
一、实验目的与要求

  • 熟悉循环嵌套的使用方法
  • 巩固对循环的概念
  • 掌握用for语句实现循环的方法
  • 掌握用while语句实现循环的方法
  • 掌握do···while语句实现循环的方法
  • 练习while和for语句配合实现循环的方法

二、实验内容

1、实验练习:5.3.1 练习2 求数列的和
问题的简单描述: 编写程序,求数列1,-3!,5!,-7!,···,(-1)n-1(2n-1)!前n项的和。
流程图:

C语言程序设计实验报告(四)_第1张图片

实验代码:

#include 
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\n",sum);
 } 

问题分析: 在写这个程序的时候,外循环的表达式条件表达式和循环变量表达式写错了,虽然编译没有问题,但是得不出正确得结果。经过老师和同学的讲解将错误改正,获得正确的运行结果。
2、实验练习:5.3.2 求水仙花数
问题的简单描述: 求所有的水仙花数(水仙花数是一个3位自然数,该数各位数的立方和等于该数本身,如153为水仙花数13+53+33)。
流程图

C语言程序设计实验报告(四)_第2张图片

实验代码:

#include 
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\n",k);
		k++;
	}
}

问题分析: 判断是否为水仙花数的程序在之前已经有过学习,所以没有什么问题,但是还是要注意x3+y3+z3)的表达。
3、实验练习:5.3.4 十进制转换
问题的简单描述: 输入4个字符型数字,并把其转换为十进制整数后显示出来。
流程图

C语言程序设计实验报告(四)_第3张图片

实验代码:

#include 
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+=(c-'0')里面的单引号忘记了,运行结果错误,然后就重新分析了一下流程图,发现少了单引号,加上去就得出了正确的结果。
4、实验练习:5.3.5 练习1 百马百担问题
问题的简单描述: 有100匹马,要驮100担货物。其中,1匹大马可以驮3担货物,1匹中马可以驮量担货物,两匹小马可以驮1担货物,求所需要的大马、中马和小马可以有多少种组合。
流程图

C语言程序设计实验报告(四)_第4张图片

实验代码:

#include
 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("大马%3d匹;中马%3d匹;小马%3d匹.\n",m,n,k);
            sum++;
        }
     }
    printf("共有%d种驮法.\n",sum);
}

问题分析: 百马百担问题里面有一个条件是两匹小马驮1担货物,一开始没有考虑到这个问题,只判断了(3m+2n+0.5k=100),结果不会出现错误,但向其他同学的代码进行比对后,发现同时满足k%2=0和3m+2n+0.5k=100更加严谨,两匹小马驮一担,所以小马的数量必须是偶数k%2=0。
5、实验练习:5.3.5 练习2 求等差数列
问题的简单描述: 有一个整数等差数列,已知该数列前4项之和等于26,前4项之积等于880,编写程序求出该数列前6项的值及该数列前6项的和。
实验代码:

#include 
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;
	    	c=a*(a+d)*(a+2*d)*(a+3*d);
	    	if((b==26)&&(c==880))
	    	{
	    		printf("数列的初始值为a=%d,差值为d=%d\n",a,d);
	    		printf("\n数列前6项的值:");
	    		for(i=0;i<6;i++)
	    		{
	    			printf("%d ",a+i*d);
	    			sum=sum+(a+i*d);
				}
				printf("\n");
			}
		}
	printf("\n数列的前6项的和:%d\n",sum);
 } 

问题分析: 编写这个for语句嵌套的算法要专注一点,因为嵌套里面很多花括号。
6、实验练习:5.3.5 练习3 食品分配问题
问题的简单描述: 有30个学生一起卖买小吃,共花费50元,其中,每个大学生花3元,每个中学生花2元,每个小学生花1元,求大、中、小学生的人数分配共有多少种不同的组合(不计算某类学生数为0的组合)。
实验代码:

#include 
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);
 } 

问题分析: 这个问题和百马百担问题相似,需要注意的是z=30-x-y,在表述共有30个学生的时候,不能写成x+y+z=30,这样会导致编译错误,因为这个表达式是赋值,在编写百马百担问题的时候出现了这个错误,通过写这个代码发现了百马百担的问题。
7、实验练习:九九乘法表
问题的简单描述: 编写程序,在屏幕上输出阶梯式的乘法口诀表。
流程图:

C语言程序设计实验报告(四)_第5张图片

实验代码:

#include 
main()
{
	int i=0;
	int j=0;
	for(i=1;i<=9;i++)
	{
		for(j=1;j<=i;j++)
		{
			printf("%dx%d=%d\t",j,i,i*j);
		}
		printf("\n"); 
	}
}

问题分析: 九九乘法表用到的是for循环结构的嵌套,一开始没有在每一行后换行,也没有在每一个式子后面设置空格,然后出现式子比较混乱,将"%dx%d=%d"改为"%dx%d=%d\t"在外循环加printf("\n"), 问题就解决了。
C语言程序设计实验报告(四)_第6张图片

四、实验小结

  循环结构有点绕,分析起来有点头晕,有时候绕得没有清晰的思路,所以在编写代码之前需要流程图帮助理解,但是通过这次实验,我发现我对循环结构的理解还不是很到位,在判断条件上还需要考虑得周全一点,还需要多分析C语言程序代码,多理解,多分析循环结构。

你可能感兴趣的:(C语言程序设计实验报告(四))