• 第三次实验报告


    第三次实验报告

    C程序设计实验报告

    实验项目:

    5.3.1、用for语句实现循环
    5.3.2、用whlie循环语句实现循环
    5.3.3、用do while语句实现循环
    5.3.4、用whlie语句和for语句配合实现循环
    5.3.5、用for语句嵌套实现循环

    姓名:邹慧莹  实验地点:教学楼514  实验时间:2019.4.17

    一、实验目的与要求

    5.3.1、用for语句实现循环
    5.3.1.1 掌握for语句实现循环的方法
    5.3.1.2掌握for语句实现循环的方法
    循环嵌套的使用

    5.3.2、用whlie循环语句实现循环
    5.3.2.1掌握while语句实现循环的方法
    5.3.2.2进一步掌握while语句实现循环的方法

    5.3.3、用do while语句实现循环

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

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

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

    5.3.5、用for语句嵌套实现循环
    5.3.5.1掌握for语句嵌套实现循环的方法
    5.3.5.2掌握for语句嵌套(3层)实现循环的方法
    掌握continue语句的用法
    5.3.5.3掌握for语句嵌套实现循环的方法
    掌握continue语句的用法

    二、实验内容

    5.3.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);
    		j++;
    	}
    }
    

    问题分析:分清楚i与s的关系就ok
    5.3.1.2求数列前n项

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

    • 实验代码

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

    问题分析:理清楚外循环和内循环之间的联系,并且看流程图就可以得出。刚开始老师没讲按照书上的打,打不出,发现是i 的条件表达式错误了,再次说明不能一味的按照书上的。
    5.3.2.1统计学生的最高最低成绩

    • 问题描述:从键盘上输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。程序流程图如下图。

    • 实验代码:

    #include<conio.h>
    #include<stdio.h>
    main()
    {
    	float x,max,min;
    	printf("please input scores:");
    	scanf("%f",&x);
    	max=min=x;
    	while(0<=x&&x<=100)
    	{
    		if (x>max) max=x;
    		if (x<min) min=x;
    		scanf("%f",&x);
    	}
    	printf("
    max=%f
    min=%f
    ",max,min);
    }
    

    问题分析:知道成绩一定要大于零,用while语句就行。
    5.3.2.2 求水仙花数

    • 问题描述:求所有水仙花数(水仙花数是一个3位数的自然数,该数各位数的立方和等于该数本身,如153为水仙花数13+53+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++;
    	}
    }
    

    问题分析:看了流程图就比较简单。
    5.3.3、求不等式。

    • 问题描述:求满足下列不等式求满足1+1/2+1/3+...+1/n>value这个不等式的n最小值,的n的最小值,其中,value是大于1的任何数。流程图如下

    • 实验代码:

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

    问题分析:看流程图中可以知道sum<value时才会输出。
    5.3.4、十进制转换

    • 问题描述:输入4个数字字符,并把其转换为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);
    }
    

    问题分析:刚开始的时候把等号又写成了一个,而不是两个,然后一直显示不出来,后面同学看了发现是没有写成两个等于号,改了之后就ok了。还是要细心啊。用for循环来完成程序运行。利用if语句进行判断,输入非数字字符则继续;否则,程序跳出本次循环。输入的字符为数字字符则将其转换为对应的十进制整数。
    5.3.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);
    }
    

    问题分析:知道马和马可以驮担之前的关系,因为两匹小马可以驼一担所以为k%2==0。

    5.3.5.2求等差数列

    • 问题描述:编写程序,求一正整数等差数列的前6项的和,该数列前4项之和是26,前4项之积是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+i*d);
    		    }
    	    }
    	  }
    	 printf("
    数列的前六项的和:%d
    ",sum);
    }
    

    问题分析:满足数列前4项值之和为26,还必须满足数列前4项之积为880。根据其中的关系写出表达式。
    5.3.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);
    }
    

    问题分析:和5.3.5.2一样,找出满足的关系式然后利用for循环表达来进行。

    实验总结:

    1.在上课的时候还是不够时间去完成所有的题目,打字速度和解题速度都有待提高。
    2.在百马百担的问题上思考了很久,主要是关系式要清楚
    3.有时候还是会犯一些低级错误,但是比以前好多了。

  • 相关阅读:
    HDU 1874 畅通工程续(dijkstra)
    HDU 2112 HDU Today (map函数,dijkstra最短路径)
    HDU 2680 Choose the best route(dijkstra)
    HDU 2066 一个人的旅行(最短路径,dijkstra)
    关于测评机,编译器,我有些话想说
    测评机的优化问题 时间控制
    CF Round410 D. Mike and distribution
    数字三角形2 (取模)
    CF Round410 C. Mike and gcd problem
    CF Round 423 D. High Load 星图(最优最简构建)
  • 原文地址:https://www.cnblogs.com/zzzdka/p/10722823.html
Copyright © 2020-2023  润新知