c程序设计实验报告

c程序设计实验报告

姓名:贺煜林 实验地点:一教524教室 实验时间:2021.4.15

一、实验目的及要求

1、第三章实验目的的要求:

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

2、第四章实验目的及要求:

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

二、实验内容

1、实验3-3-1

(1)问题描述:有一函数:

输人x值,输出满足函数关系的y值,并用C语言编写程序进行检验。
(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的值为%.2f\n",y); 
}

(3)问题分析:
语句中数字和变量中的乘号()不能省略,如y=2x-1,不能写成y=2x-1。

2、实验3-3-2

(1)问题描述:
已知鸡兔的总头数为h (head),总脚数为f(feet),求鸡兔各有多少只?
(2)实验代码:

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

(3)问题分析:
代码整个流程不是很难,稍较困难部分为求x和y的表达试。

3、实验3-3-3

(1)问题分析:
有4个圆塔,圆心分别为(2,2)、(-2,2)、 (2,-2)、(-2,-2), 圆半径为1,如图3-3所示。这4个塔的高度均为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(pow(x-x1,2)+pow(y-y1,2));
	d2=sqrt(pow(x-x2,2)+pow(y-y2,2));
	d3=sqrt(pow(x-x3,2)+pow(y-y3,2));
	d4=sqrt(pow(x-x4,2)+pow(y-y4,2));
	if(d1>1&&d2>1&&d3>1&&d4>1)
	h=0;
	printf("该塔高度为%d",h); 
}

(3)问题分析
一开始平方函数不知道如何表达,如d1表达试写成d1=sqrt((x-x1)2)+(y-y1)2),运行时发现报错,后改成d1=sqrt((x1-x)(x1-x)-(y1-y)(y1-y)),但感觉还是有点啰嗦的感觉,于是想有没有更简单的方法,最终在室友的帮助下学会用pow函数来表示d1。

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&&l==h&&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>
main()
{
int x,y,z,d;
float a=18,b=132,c=4.5,sum,e; 
printf("请输入打印纸,墨盒,光盘的数量;\n");
scanf("%d%d%d",&x,&y,&z);
sum=a*x+b*y+c*z;
d=sum/100;
switch(d)
{
    case 0:e=sum;break;
    case 1:e=sum*0.95;break;
    case 2:e=sum*0.94;break;
    case 3:e=sum*0.93;break;
    case 4:e=sum*0.92;break;
    default:e=sum*0.9;
}
printf("应付款数=%.2f",e);
}

(3)问题分析:
求出为sum时,用d=sum/100计算出sum的百位数字,能更好的方便接下来用switch...case...语句中的表达,已达到后面计算相应优惠的目的。

6、实验4-3-3

(1)问题描述:输人某一年、月的数值,输出该月的天数。
(2)实验代码:
用switch...case...语句表达

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

用if...else...语句表达

#include <stdio.h>
main()
{
	int year,month,days;
	printf("please enter year and month:\n");
	scanf("%d%d",&year,&month);
	if(month==2)
	    if((year%4==0&&year%100!=0)||year/400==0)
	    days=29;
	    else days=28;
	else if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
	    days=31;
	    else days=30;
	printf("%d年%d月有%d天",year,month,days);
}

(3)问题分析
在第一个switch...case...语句代码中判断二月的天数时需嵌入用if...else...语句来判断二月是否为润月。
在第二个if...else...语句代码中,在一个表达式运算后有两个以上的分支时,可以在嵌入一个if...else...语句。

三、实验总结

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

(1)算法不是唯一的,对于同一个问题,可以设计多种不同算法
(2)if的合理嵌套可以实现多分支选择,并且其通用性比 switch 更好,但使用时需注意else于if的配对
(3)过多的 if..else 嵌套会造成程序代码过长,降低程序的可读性。
(4)switch 语句也是一种多分支选择语句,其可读性比计语句强。
(5)要注意在 switch 语句中正确地使用 break 语句,以使程序能正常地从 switch 分支中跳出,避免发生逻辑错误。
(6)对于 switch 语句,必须设置 default 标号,用于处理 switch 语句中表达式的值不在 case 标号集的范围内的情况。由 default标号来决定执行什么语句,可避免出现逻辑错误。
(7)在if语句的结构中也可以内嵌一个 switch 结构的语句,同样,在 switch 语句的结构中也可以内嵌一个if结构的语句

2查看你的学习伙伴的作业,并对他的作业提出建议

对学习伙伴付余的建议:代码逻辑比较清晰,但是总结较少,希望下次能够补充的更多一点

四、预习第四章

归纳第四章知识要点并制作思维导图

posted @ 2021-04-18 18:46  HEYULIN  阅读(236)  评论(0编辑  收藏  举报