第二次实验报告

第二次实验报告

实验项目:简单算法和分支结构实验

姓名:熊远辉 实验地点:一教524 实验时间:2021.4.15


一、实验目的与要求

  1. 进一步掌握DEVC++的安装方法,并实现程序的编辑、编译、连接、运行。
  2. 通过运行简单的C语言程序,进一步了解C语言的结构特点。
  3. 掌握C语言的基本类型及使用方法。
  4. 熟悉C语言运算符和表达式的正确使用方法。
  5. 熟练掌握Markdown的用法。

二、实验内容

1. 实验练习3.3.1

  1. 问题的简单描述:输入x值,输出满足函数关系的y值,并用C语言编写程序进行校验。
  2. 实验代码:
#include<stdio.h>
     main()
{
	float x,y;
	printf("请输入x的值;\n");
	scanf("%f",&x);
	if(x>1)   /*判断变量x是否小于1*/ 
	    if(x<10)   /*判断x的值是否小于10*/ 
	        y=2*x-1;
	    else
	        y=3*x-1;
	else
	    y=x;   /*其他*/ 
	printf("y的值为%0.2f\n",y);  /*输出y的值*/        
}

3.问题分析:本题无较大问题,注意大小写的书写即可


2. 实验练习3.3.2

  1. 问题的简单描述:鸡兔同笼的算法简单描述。
  2. 实验代码:
#include<stdio.h>
main()
{
	int h,f,x,y;
	printf("鸡兔总数,鸡兔脚总数:\n");
	scanf("%d,%d",&h,&f);
	if(h>0&&f>0)
		{
	        x=(4*h-f)/2;
	    	y=(f-2*h)/2;     
	    	printf("鸡有%d 兔有%d\n",x,y);
	      }
	else
	    printf("输入错误!\n");
}
  1. 问题分析:本题应注意应变量x,y的表达,其它没什么大问题。

3. 实验练习3.3.3

  1. 问题的简单描述:有四个圆塔,圆心分别为(2,2)(2,-2)(-2,-2)(-2,2),圆半径为1,这四个塔高为10m,塔以外无建筑物。现输入任一坐标,若该点坐标在任意一个圆塔内,则输出圆塔高度;若不在圆塔内,则输出0。
  2. 实验代码:
#include<stdio.h>
#include<math.h>
main()
{
	int h=10;
	float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=2,y4=-2,x,y,d1,d2,d3,d4;
	printf("请输入一个点(x,y):");
	scanf("%f,%f",&x,&y);
	d1=sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
	d2=sqrt((x-x2)*(x-x2)+(y-y2)*(y-y2));
	d3=sqrt((x-x3)*(x-x3)+(y-y3)*(y-y3));
	d4=sqrt((x-x4)*(x-x4)+(y-y4)*(y-y4));
	if(d1>1&&d2>1&&d3>1&&d4>1)
	h=0;
	printf ("该塔高度为%d",h);
}
  1. 问题分析:在实验时无法输出根号导致无法计算,后面通过翻书找到了根号如何输入利用sqrt函数,以及头文件math的使用。

案例三

  1. 问题描述:制作一个简单的计算器并使其循环使用。
  2. 实验代码:
#include<stdio.h>
#include<stdlib.h>
 main()
 {
	float x,y;
	char op;
	while(true)
	{
	printf("请输入表达式:");
	scanf("%f%c%f",&x,&op,&y);
	switch(op)
	{
		case '+':
			        printf("%.2f%c%.2f=%.2f\n",x,op,y,x+y); break;
		case '-':
			        printf("%.2f%c%.2f=%.2f\n",x,op,y,x-y); break;
		case '*':
			        printf("%.2f%c%.2f=%.2f\n",x,op,y,x*y); break;
		case '/':
			        if(y!=0)
			        {printf("%.2f%c%.2f=%.2f\n",x,op,y,x/y); break;}
			        else {printf("除数为零!\n"); break;}
		default :   printf("输入表达式有误!\n");
	}
	printf("清屏并返回主菜单!\n");
	system("pause");
	system("cls");
 }
}
  1. 问题分析:一开始无法让代码循环不了解while语句的应用,后来不明白如何清屏,通过上网查找资料,以及翻找书籍才解决这些问题。

4. 实验4.3.1

  1. 问题的简单描述:读入3个表示箱子长,宽高的整数值,判断并输入该箱子是正方体还是长方体。
  2. 实验代码:
#include<stdio.h>
main()
{
	int l,w,h;
	printf("请输入箱子的长,宽,高:\n");
	scanf("%d%d%d",&l,&w,&h);
	if(l==w&&w==h&&h==l)
	     printf("该箱子是正方体。\n");
    else
         printf("该箱子是长方体。\n");
	
} 
  1. 问题分析:本题无较大问题。

5. 实验4.3.2

  1. 问题描述:编写程序实现如下功能:商店有打印纸(18元/本),墨盒(132元/个),光盘(4.5元/个)出售,商店进行优惠酬宾活动。具体规则如下:顾客购买商品的总额超过100元,优惠5%;超过200元,优惠6%;超过300元,优惠7%;超过400元,优惠8%;超过500元,优惠10%
  2. 实验代码:

switch结构

#include<stdio.h>1
main()
{
	float x,y,z,w,h;
	int s;
	printf("请输入打印纸,墨盒,光盘的数量:");
	scanf("%f,%f,%f",&x,&y,&z);
	w=18*x+132*y+4.5*z;
	s=w/100;
	switch (s) 
	{
		case 1: h=0.95*w;
		         printf("应付款数=%.2f",h);
		         break;
		case 2: h=0.94*w;
				 printf("应付款数=%.2f",h);
				 break; 
		case 3: h=0.93*w;
				 printf("应付款数=%.2f",h);
				 break;
		case 4: h=0.92*w;
				 printf("应付款数=%.2f",h);
				 break; 
		case 0: h=w;
		         printf("应付款数=%.2f",h);
				 break;		       		 
	    default:    h=0.9*w;
				 printf("应付款数=%.2f",h);
				 break;  
	}
 } 

if...else结构

#include<stdio.h>
main()
{
	float x,y,z,w,h;
	printf("请输入打印纸,墨盒,光盘的数量:");
	scanf("%f,%f,%f",&x,&y,&z);
	w=18*x+132*y+4.5*z;
	if(w>500)
	     {h=w*0.9;
	     printf("应付款数=%.2f",h);}
  	else if(w>400)
  		 {h=w*0.92;
  		 printf("应付款数=%.2f",h);}
 	else if(w>300)
 		 {h=w*0.93;
 		 printf("应付款数=%.2f",h);}
 	else if(w>200)
 		 {h=w*0.94;
 		 printf("应付款数=%.2f",h);}
 	else if(w>100)
 	     {h=w*0.95;
 	     printf("应付款数=%.2f",h);}
        else
           {h=w;
            printf("应付款数=%.2f",h);}    
}
  1. 问题分析:switch语句无法运行显示出错,后面通过与同学讨论发现switch中的表达式不能用float型要用int型。if语句中无太大问题。

6. 实验4.3.3

  1. 实验描述:输入某一年,月的数值,输出该月的天数。
  2. 实验代码:
#include<stdio.h>
main()
{
	int year,month,days;
	printf("Please enter year and month:\n");
	scanf("%d%d",&year,&month);
	switch (month)
	{
	        case 2: if(year%4==0&&year%100!=0||year%400==0) 
		              days=29;
		        else
			      days=28; 
	                break;
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:  days=31; break;
		case 4:
		case 6:
		case 9:
		case 11:  days=30; break;
	}
	printf("%d年%d月有%d天",year,month,days);
	return 0;	         
}
  1. 问题分析:代码可以运行但输入年,月后得出数值出错,我先是与同学讨论但却没有发现问题,然后就去请教老师,通过调试发现程序直接跳出switch语句,最后发现原来是一个空格没打。

三、实验小结

1.
通过此次实验加深了我对if,switch语句结构的了解,并且能够独立书写代码,找出错误并通过调试的方法解决错误,从第一次实验到现在我们已经学习到了不少知识,以下是我的总结:

  • 数据类型的区分,数据类型的转换,比如强制转换。
  • 基本运算符,其中逻辑运算符较为重要
  • 运算符的优先级的详细区分以及运算的结合方向。见书表2-20
  • 输入函数scanf的使用,以及输出函数printf的使用。
  • 结构化算法的基本结构,描述其的自然语言,伪代码以及流程图。其中流程图的制作是重点。
  • if语句的结构,if...else语句的嵌套
  • switch语句结构以及switch语句的简单使用。
  • if,switch语句的嵌套。
    2.
    谢垚同学做的挺好的,特别是代码的排版,层次分明。但在实验总结是可以多写一点。

四、预习

posted @ 2021-04-18 15:32  就是你了啦  阅读(81)  评论(0编辑  收藏  举报
/*鼠标样式动画*/ body{ background-repeat: repeat; background-attachment: fixed; background-size:cover; cursor: url(https://files.cnblogs.com/files/monster-jian/cursor.ico),auto; }