C语言实验报告(二)

实验报告(二)

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

姓名:王曼霖 实验时间:2021.4.25 实验地点:一教524教室


第三章实验目的:

 1.掌握结构化程序的算法描述方法。
 2.了解C语言的基本语法要素,能熟练地将算法描述转化为C语言程序。
 3.熟练掌握C语言的运算符的优先级、结合性、运算规则、运算对象类型等。

实验3.3.1

#include<stdio.h>
main()
{
	float x,y;
	printf("请输入x的值:");
	scanf("%f",&x);
	if(x<1) 
	  y=x;
	else if(x<10)
	  y=2*x-1;
	else
	  y=3*x-1;
	printf("y的值为%.2f\n",y);    
}	

运行图

小结:

1、if语句的条件为单一语句时,可直接写出;若为复合语句,则需要用大括号将条件框住,避免运行时程序语句丢失。
2、程序需要接收一个浮点数,因此用float表示。


实验3.3.2(鸡兔同笼问题)

#include<stdio.h>
main()
{
	int h,f,x,y;
	printf("鸡兔总数,鸡兔脚总数:");
	scanf("%d,%d",&h,&f);
	if(x>0&&y>0)
	{
		x=(4*h-f)/2;
		y=(f-2*h)/2;
		printf("鸡有%d  兔有%d\n",x,y);
	}
    else 
	  printf("输入错误!\n");
	  
}

运行图

小结:

1、定义两个整型变量,因此使用int来定义。
2、对输入的数字进行差错控制,判断输入数据的正确性,若小于零,则进行报错。&&为“与”,使用此符号时,只有条件同时为真则判定为真,符合本题题意。
3、已知条件为鸡和兔的头数以及总脚数,则用这两个已知数将鸡和兔的数量进行表达,即x和y的表达式。


实验3.3.3

方法一、

#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;
	float a1,a2,a3,a4;
	printf("请输入一个点(x,y):");
	scanf("%f,%f",&x,&y);
	a1=(x-x1)*(x-x1)+(y-y1)*(y-y1);
	d1=sqrt(a1);
	a2=(x-x2)*(x-x2)+(y-y2)*(y-y2);
	d2=sqrt(a2);
	a3=(x-x3)*(x-x3)+(y-y3)*(y-y3);
	d3=sqrt(a3);
	a4=(x-x4)*(x-x4)+(y-y4)*(y-y4);
	d4=sqrt(a4);
	if(d1>1&&d2>1&&d3>1&&d4>1)
	  h=0;
	 
	printf("该塔高度为%d",h);/*判断该点是否在塔外*/
	 
}
  

方法二、

#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=(x-x1)*(x-x1)+(y-y1)*(y-y1);
    d2=(x-x2)*(x-x2)+(y-y2)*(y-y2);
    d3=(x-x3)*(x-x3)+(y-y3)*(y-y3);
    d4=(x-x4)*(x-x4)+(y-y4)*(y-y4);
    if(d1>1&&d2>1&&d3>1&&d4>1)
	h=0;
    printf("该塔高度为%d",h);/*判断该点是否在塔外*/
	 
}
  

运行图

小结:

1、本例较为特殊,两点距离公式为两点各横纵坐标之差的平方和的算术平方根,而本题圆的半径为1,1的平方仍为1,所以本题的距离平方可开可不开,以上是两种方法的区别,第一种为开方时的的算法,第二种则未开平方。同时应注意开平方时要添加头文件<math.h>,才可以使用数学公式。
2、平方则为两个相同的数字相乘,而非使用角标!


第四章实验目的:

1、掌握C语言逻辑值的表示方法(0代表“假”,1代表“真”。)
2、学会正确使用关系表达式和逻辑表达式。
3、掌握各种形式的if语句语法和使用方法。注意if语句中if和else的匹配关系,以及if语句的嵌套。
4、掌握swich语句的语法和使用方法。注意swich语句中break语句的用法及swich语句的嵌套。
5、能独立编写分支结构程序并调试通过。
6、用if语句、swich语句解决简单的应用问题并上机实现。

实验4.2.4

#include <stdio.h>
int main()
{
	float x,y;
	char op;
	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");
	}
	return 0;
 } 

运行图

1、考虑差错控制,(若为“+++”,程序会如何运行),所以程序开头便是“%f%c%f”是用float声明两个变量,用于保存操作数的值,用char型声明一个变量,用于保存操作符(+、-、*、/)。

2、考虑输入非法操作符的情况,进行程序报错。


实验4.3.1

#include<stdio.h>
main()
{
	int l,w,h;
	printf("请输入箱子的长、宽、高:\n");
	scanf("%d%d%d",&l,&w,&h);
	if(l==w&&l==h&&w==h)
	  printf("该箱子是正方体。\n");
	  else 
	    printf("该箱子是长方体。\n");
	    return 0;
	
}
	
	

运行图

#include<stdio.h>
main()
{
	int l,w,h;
	printf("请输入箱子的长、宽、高:\n");
	scanf("%d%d%d,&l,&w,&h");
	if(l==w&&l==h&&w==h)
	  printf("该箱子是正方体。\n");
	  else 
	    printf("该箱子是长方体。\n");
	    return 0;
	
}
	
	


运行图

小结

1、图一正常运行,可是图二却运行失败,这是为什么呢?

两代码图的对比可以看出取地址符&被括进了双引号内,无法正常运行导致报错。
2、“a=b”是赋值,而“a==b”则为判断关系了,要记清哦。还有&&符号(与,一假则假,全真为真)。


实验4.3.2

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


#include <stdio.h>
int main()
{
	double d,m,g;
	float s;
	printf("请输入打印纸、墨盒、光盘的数量:\n");
	scanf("%lf%lf%lf",&d,&m,&g);
	s=18*d+132*m+4.5*g;
	if(s>500)
	   s=0.90*s;
	else if(s>400)
	   s=0.92*s;
	else if(s>300)
	   s=0.93*s;
	else if(s>200)
	   s=0.94*s;
	else if(s>100)
	   s=0.95*s;
	else
       s=s;
	printf("应付款数=%.2f\n",s);
}


运行图:


小结

1、使用swich语句时,应注意变量的设定及数量问题。case应从0开始,条件结束后要加break结束程序,否则程序会一直运行,不会结束!!!
2、注意运算符的优先级问题。

实验4.3.3

#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天。\n",year,month,days);/*输出天数*/ 
    return 0;
}



运行图:

小结

*在上面case的数值选择中,1、3、5、7、8、10、12月均为31天,所以可归为一类,直至12循环运行结束,break跳出,月份天数为31天。*


实验小结:

1、总结所学内容,归纳知识点

*学习C语言的路上,有同学,有老师,可以看到自己察觉不出来的错误,平时要学会沟通交流,增加学习经验。
*if语句,swich语句,条件为复合语句时,一定不可以忘记花括号。
*记熟关键词以及优先级问题,会对学习C语言有很大帮助。
2、小伙伴作业建议[https://www.cnblogs.com/NINE0406/p/14678194.html]
*具体问题具体分析,加上一些颜色标注会更加清晰明了,更加美观。

第四章知识点思维导图:


posted @ 2021-04-19 21:46  余下的林  阅读(292)  评论(0编辑  收藏  举报