第二次C语言上机实验报告

                                                                              第二次C语言上机实验报告

姓名:张振东                                                                                                         实验地点:一教522                                                                    实验时间:2021.4.15

一、实验目的与要求

(1)掌握结构化程序的算法描述方法。

(2)了解C语言的基本语法要素,能熟练地将算法描述转化为C语言程序。

(3)熟练掌握C语言运算符的优先级、结合性、运算规则、运算对象类型等。

(4)掌握C语言逻辑值的表示方法(0代表“假”,1代表“真”)。

(5)学会正确的使用逻辑表达式和关系表达式。

(6)掌握各种形式的if语句语法和使用方法。注意if语句中if和else的匹配关系,以及if语句的嵌套。

(7)掌握switch语句的语法和使用方法。注意在switch语句中break语句的语法及switch语句的嵌套。

(8)能独立编写分支结构程序并测试通过。

(9)用if语句、switch语句解决简单的应用问题并上机实现。

二、实验内容

1、实验练习:3.3.1

(1)问题描述:自己设计合适的算法流程图。输入x值,输出满足函数关系的y值。

(2)实验代码:

#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的值为.2%f\n",y)
}

 

(3)问题分析:

·在使用if-else语句时,我们可以看到有if----else  if-----else,这类结构表示的是第一个if的判断如果不成立则转入第二个if的判断,第二个也不成立时则转入最后的else(后面的判断条件与上述所有的判断条件都没有重合);
·if后面的括号里写完条件表达式之后,且之后如果没有接{   },则直接接printf(),因为本题是输出y的值而有的题是每个条件输出不一样的值,所以需要每个条件表达式后都接一个printf(),本题却可只留最后一个printf()。

2、实验练习:3.3.2

(1)问题描述:用算法流程图描述求解鸡兔同笼问题的算法:已知鸡兔的总头数为h,总脚数为f,求鸡兔各有多少只?

(2)实验代码:

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

(3)问题分析:

·这个实验中我们要明确哪个是我们的已知量,哪些是我们的未知量,要以已知量来代换未知量,就是寻找到关系式。

3、实验练习:3.3.3

(1)问题描述:有四个圆塔,圆心分别为(2,2)、(-2,2)、(2,-2)、(-2,-2),圆半径为1,四个塔的高度均为10m,塔以外无建筑物。现输入任意一点的坐标,若该点的坐标在任意一个圆塔内,则输出圆塔的高度;若该点不在圆塔内,则输出0.

(2)实验代码:

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

(3)问题分析:

·在求两点间距离时,运用了两点间距离公式,引用数学公式头文件;
·求两点间距离时,平方用相乘的形式,而不能使用^2;

4、实验练习:4.3.1

(1)问题描述:读入三个表示箱子长、宽、高的整数值,判断并输出该箱子是正方体还是长方体。

(2)实验代码:

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

(3)问题分析:

·要注意用两个等于号,不能使用一个等号,这样的意思是赋值,会让条件一定对。

5、实验练习:4.3.2

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

(2)实验代码:

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

(3)问题分析:

·int main() 最后要接return;使用switch-----case结构我们要注意一个语句后的break要加上,break起到一个终止跳出的效果。(但当我使用if--else的结构,代码没有报错,但是却无法运行)
·float sum已经起到了一个定义变量的作用;
 

6、实验练习:4.3.3

(1)问题描述:输入某一年、月的数值,输出该月的天数。

(2)实验代码:

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

(3)问题分析:

·判断闰年的条件需要了解;
·switch···case语句与if----else结构的综合运用;
·case后不可直接接一个数字或是字符,需要空格再接;
·if(year%4==0&&year%100!=0||year%400==0)当中的“”与“或”多重运用;

三、实验小结

1.这次实验需要我们掌握简单的算法与基本的流程图绘制,了解题目对应所需要的条件,判断使用if--else还是switch----case还是综合运用让代码更简练,同时也适合版本的兼容性。
2.对于我们的知识上的问题,我们还是应该多翻书,来了解我们所要用的的代码的意思。
3.更多时候要依靠自己来寻找问题,而不是一味的想要他人来给你答案,这样发现的问题记得才更牢。

四、预习

 

 

posted @ 2021-04-18 19:56  逐渐东化  阅读(397)  评论(0)    收藏  举报