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

    C程序设计实验报告

    实验项目:
    1、用for语句实现循环
    2、用while循环语句实现循环
    3、用do-while语句实现循环
    4、用while语句和for语句配合实现循环
    5、用for语句嵌套实现循环
    姓名:杨婷 实验地点:514教室 实验时间:2019.4.17
    一、实验目的与要求
    1、用for语句实现循环

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

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

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

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

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

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

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

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

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

    二、实验内容
    1、实验练习:5.3.1 实验练习1 求数列前n项
    1问题的简单描述:
    编写一程序,求出1,1+2,1+2+3...数列中前n项和的值。
    2流程图:

    实验代码:

    #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;  /*计算第i项的值s*/
        	printf("%d ",s);
        	j++; 	
    	}
    }
    

    3问题分析:
    这道题比较简单,s代表前n项的和,i代表第i项的数,i从1开始累加,s是根据s+i进行累加。根据流程图就可以写出该数列第i项的值,但是要注意的就是输出s的时候要打空格,变成printf("%d ",s)。
    运行结果:

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

    实验代码:

    #include <stdio.h>
    main()
    {
    	int n,i,j,k,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;
    		}/*计算第n项的*/
    		fac=fac*sign;
            sum=sum+fac;  /*求前n项的和*/
            sign=-sign;
    	}
    	printf("sum=%.0f
    ",sum);
    }
    

    3问题分析:
    从流程图中可以看出:
    当i=1时,j=1, j<=1, fac=1x1=1, sum=1, sign=-sign=-1;
    当i=2时,j=1, j<=3, fac=1x1x2x3, sum=1+fac, sign=-sign=1.
    在代码中,首先要有一个大的for循环来确定项数i,再用一个for循环确定第n项的值及前n项的和。只用一个循环不能运行出结果。
    运行结果:

    3、实验练习:5.3.2 实验练习1 统计学生的最高最低成绩
    1问题的简单描述:
    从键盘上输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入。
    2流程图:

    实验代码:

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

    3问题分析:
    求学生的最高、最低成绩时,要用到max、min存储成绩的值,比较完成绩的大小后将最大值和最小值分别存放在max、min中。但是,输入成绩时必须要输入负数,不然就运行不出正确的结果。
    运行结果:

    4、实验练习:5.3.2 实验练习2 求水仙花数
    1问题的简单描述:
    求所有的水仙花数(水仙花数是一个3位数的自然数,该数各位数的立方和等于该数本身,如153为水仙花数13+53+3^3=153)。
    2流程图:

    实验代码:

    #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问题分析:
    水仙花数是一个3位数的自然数,且该数各位数的立方和等于该数本身。所以,首先要用到一个while循环,判断输入的数值是否是一个3位数的自然数,其次再判断该数各位数的平方和是否等于其本身。当两个条件都满足时,输出k的值并进入下一次循环。
    运行结果:

    5、实验练习:5.3.3 用do-while语句实现循环
    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问题分析:
    在这个实验练习中,由于value是大于1的任何数,所以用float定义sum和value。表达式的成立条件是sum>value,要用到while循环进行判断。
    运行结果:

    6、实验练习:5.3.4 用while语句和for语句配合实现循环
    1问题的简单描述:
    输入4个数字字符,并把其转换为4位十进制整数后显示出来。
    2流程图:

    实验代码:

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

    3问题分析:
    这个实验我一开始一直没有出正确的结果,后面我发现我的代码中缺少了一些条件。从流程图中可以看出当k==0时,可以得出data+=(c-‘0’*1000),其他的也是这样。在这里最关键的就是用到if语句进行条件判断。
    运行结果:

    7、实验练习:5.3.5 实验练习1 百马百担问题
    1问题的简单描述:
    有100匹马,要驮100担货物,其中,1匹大马可以驮3担,1匹中马可以驮2担,两匹小马可以驮1担,请问,大马、中马和小马可以有多少种组合。
    2流程图:

    实验代码:

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

    3问题分析:
    百马百担问题:由流程图可看出马的总数小于等于100,其中,m、n、k分别为大马、中马和小马的匹数。小马的匹数k是要根据大马的匹数m和中马的匹数n来确定,k=100-m-n。其次要判断是否满足k%2==0及3m+2n+0.5k=100,最后输出满足条件的全部解法。
    运行结果:

    8、实验练习:5.3.5 实验练习2 求等差数列
    1问题的简单描述:
    编写程序,求一正整数等差数列的前6项的和,该数列前4项之和是26,前4项之积是880。
    2流程图:

    实验代码:

    #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("
    数列的前6项的和:%d
    ",sum);
    }
    

    3问题分析:
    这个实验练习是求等差数列的前6项的和,定义整型变量a和d分别表示等差数列的首项和公差,定义整型变量b和c分别表示该数列的前4项之和及前4项之积。利用for循环进行求解,并且需要满足数列前4项值之和为26及前4项之积为880。得出a和d的值后,求出数列的前6项之和并输出结果。
    运行结果:

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

    实验代码:

    #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问题分析:
    这个实验练习类似于百马百担的问题。设整型变量x、y、z、sum分别表示大学生、中学生、小学生和解的个数。根据大、中、小学生花的钱满足的关系式,用for循环实现求大学生、中学生、小学生食品分配的各种方式,将解的个数存放在变量sum中并输出sum的值。
    运行结果:

    三、实验小结
    这次实验课上共做了9个实验,书上给出了流程图和部分代码,这使得问题更为简便。但是有些实验练习里面的代码还是要仔细推敲,才能理解这些代码的意思。根据流程图我们可以更方便地写出实验代码,但在接下来的过程中,我们要习惯自己去思考怎样得出流程图而不是依赖于书本。还有一些细节问题还是需要重视的,我有几次因为一些细节问题得不出正确结果,到最后才发现了。

  • 相关阅读:
    html5+css3中的background: -moz-linear-gradient 用法 (转载)
    CentOS 安装Apache服务
    Linux 笔记
    CURL 笔记
    Spring Application Context文件没有提示功能解决方法
    LeetCode 389. Find the Difference
    LeetCode 104. Maximum Depth of Binary Tree
    LeetCode 520. Detect Capital
    LeetCode 448. Find All Numbers Disappeared in an Array
    LeetCode 136. Single Number
  • 原文地址:https://www.cnblogs.com/youthyee/p/10744118.html
Copyright © 2011-2022 走看看