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
问题描述:自己设计合适的算法流程图。输入x值,输出满足函数关系的y值。
代码:

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

问题分析:在三个y的表达函数中都没有添加分号,结果运行不出,之后问了同学知道y是给他定义了,也是一行,需要加分号,最后成功运行。

2、实验练习:3.3.2
问题描述:用算法流程图描述求解鸡兔同笼问题的算法:已知鸡兔的总头数为h,总脚数为f,求鸡兔各有多少只?
代码:

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

问题分析:主要是把x与y的表达是真确写出来,要注意数字与字母间的“ * ”号,不能直接数字与字母连在一起,这样的表达式会得不到正确结果,其他的语法错误就没什么太大问题

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

#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):\n");
	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);
}

问题分析:这个题中需要定义一个新的函数,需要运用数字头文件,否则函数会运行不出来。
注意定义的x与y是浮点型。
在最开始就要赋予h=10,否则超过了范围也会得不到想要的结果。
还有两点之间的距离公式是y=sqrt((x1-x2)(x1-x2)+(y1-y2)(y1-y2))
4、实验练习:4.3.1
问题描述:读入三个表示箱子长、宽、高的整数值,判断并输出该箱子是正方体还是长方体。
代码:

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

问题分析:注意关系运算符与赋值运算符的正确使用,即正确的是lwh,而不是l=w=h。

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

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

问题分析:case后面根据sum对应函数输出sum的值,一定要在每个语句后面写break,否则会一直执行下去,得不到正确结果。

6、实验练习:4.3.3
问题描述:输入某一年、月的数值,输出该月的天数。
代码:

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

问题分析:单独把二月拿出来分析判断是否为闰年,正确运用表达式,有三个条件,用了关系运算符来判断,其中与为“&&”,或为“||”。

三、实验小结

1、在本次实验中我更加清晰了if..else的用法,嵌套的位置是灵活的,原则上是可以任意深度,但是在一些复杂嵌套使用时一定要使用大括号,括号中的每一
行都是一个语句,需要记得写分号。还有多重if..else使用时要清楚if与else的配对,else总是与离他最近的上一个if配对。
2、同时也更加清楚了switch的用法,他的表达方式清楚明了,更加简洁,同时要注意break的使用,起中断和跳出的作用来构成独立的switch条件分支和循环语句。
3、当出现新函数时,需要重新定义一个函数,需要写一个数字头文件。

对同伴米思琪的建议:对自己的总结很认真,但是在写代码过程中经常出现低级错误,希望她能够更加细心,让自己的代码更准确。

四、预习第四章

posted @ 2021-04-18 16:34  luyuqing  阅读(212)  评论(0编辑  收藏  举报