第二次实验报告

C程序设计实验报告

姓名:揭子奇 实验地点:一教522 实验时间:2021.4.15

一、实验目的与要求

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

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

3、熟练掌握C语言运算符的优先级、结合性、运算规则、运算对象类型等。掌握C语言逻辑值的表示方法(0代表“假”,1代表“真”)。

4、学会正确的使用逻辑表达式和关系表达式。

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

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

7、能独立编写分支结构程序并测试通过。

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

二、实验内容

1、实验3.3.1

(1)、问题描述:输入x值,输出满足函数关系的y值。
(2)、实验代码

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

image
问题分析:if...else嵌套中,注意匹配规则,else与它上一个最近的未配对的if配对。

三、实验3.3.2

(1)、问题描述:假如知道鸡和兔的总头数h,鸡和兔的总脚数f,请设计算法,计算出鸡和兔分别有多少只。
(2)、实验代码

void main()
{
	int h,f,x,y;
	printf("鸡兔总数,鸡兔脚总数:");
	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");
	}
	
}

image
(3)、问题分析:if判断输入的数值h和f是否为正数,如果是,则进行运算,如果不是,则提示输出错误。

实验3.3.3

(1)、问题描述:输入一个坐标,若在任意一个圆塔内则输出圆塔10,否则输出0.
(2)实验代码

#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("该塔的高度为10");

image
(3)、问题分析:本题没有太大问题。

实验4.3.1

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

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

image
(3)、问题分析:注意一个等号表赋值,两个等号表判断。

实验4.3.2

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

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

image
(3)、问题分析:switch常量表达式的值必须要是整数或字符,不能为一个判断式。

实验4.3.3

(1)、问题描述:设计一种算法,输入年、月的数值,输出该月的天数
(2)、实验代码

#include<stdlib.h>
void 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;
}

image
(3)、问题分析:闰年的判断是是否可以被4整除且不能被100整除或能被400整除。

案例三

(1)、问题描述:模拟计算机的运行。
(2)试验代码

int main()
{
	float x,y;
	char op;
	for(;;)
	{
		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;
}

image
(3)、问题分析:利用循环结构实现了多次运算,但是不能自动弹出。

三、实验小结

1.通过这次实验我对if和switch语句使用更加熟练了,了解了if和else的配对规则。
2.掌握使用多个if语句时应使用大括号
3.掌握switch语句中没有遇到break语句将一直进行,直到break才会结束。

四、建议

丁哲航的作业内容完整,但是缺少部分了细节的分析。

五、思维导图

image

posted @ 2021-04-19 21:55  JZQi  阅读(83)  评论(1编辑  收藏  举报