第二次实验报告

C程序设计实验报告

姓名:赖芳 实验地点:一教524 实验时间:2021.4.15

一、实验目的与要求

1、巩固学生对简单算法概念的理解,用if语句根据条件的真假进行判断的方法,正确使用运算符。
2、巩固学生对if分支语句的理解,正确使用C语言逻辑运算和关系运算,正确使用关系表达式和逻辑表达式,if……else语句的使用方法。
3、巩固对编程概念的理解,正确使用算数运算符和运算规则,switch……case语句的使用方法。
4、巩固对switch分支语句的理解,会正确使用switch中的表达式,switch……case语句的语法级使用方法。
5、注意switch语句的控制流程,在switch语句中break语句的用法。switch……case结构与if……else嵌套结构之间的转换。

二、实验内容

1、实验练习:3.3.1
实验代码
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、对于x,y要使用浮点数float表示
2、if后面的括号后不要加逗号

2、实验练习:3.3.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");
}

问题分析

1、要定义好变量
2、对于变量要有一个范围
3、对于乘法的表达是用*表示

3、实验练习:3.3.3
实验代码
#include <stdio.h>
#include <math.h>
main()
{
	int h=10;
        floatx1=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、实验练习:模拟简单计算器
实验代码
#include <stdio.h>
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;
 } 

问题分析

要考虑到除数为零时的情况

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

问题分析

对于表达长宽高都相等时中间要用逻辑与连接,而不能单纯用等号连接

3、实验练习:4.3.2(if else)
实验代码
#include <stdio.h>
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、首先要定义好变量,然后计算总数的表达式要正确
2、对于if else括号后面不要加逗号
3、在scantf中最后一个逗号要加在引号的外面

3、实验练习:4.3.2(switch case)
实验代码
#include <stdio.h>
main()
{
	double d,m,g,s;
    int y;
    printf("请输入打印纸、墨盒、光盘的数量:\n");
    scanf("%lf,%lf,%lf",&d,&m,&g);
    s=18*d+132*m+4.5*g;
    y=s/100;
    switch (y)
    {
    	case 0:s=s;break;
    	case 1:s=0.95*s;break;
        case 2:s=0.94*s;break;
        case 3:s=0.93*s;break;
        case 4:s=0.92*s;break;
        default :s=0.90*s;break;
    }
    printf("应付款数=%.2f",s);
}

问题分析

1、首先要定义好变量,然后计算总数的表达式要正确
2、在case后面要加上break才不会对后面的内容继续执行
3、在scantf中最后一个逗号要加在引号的外面

3、实验练习: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;
}

问题分析

在运行时如果代码中的scantf中的没有加逗号,那么在运行输入数据时也不能加逗号,否则会运行不出来;如果加了逗号,那么在运行输入数据时要切换成英文的逗号输入

三、实验小结

1、学习了if else和switch case的用法,知道了if else应当如何嵌套和switch case如何使用,用起来更加熟练
2、if后面的语句如果有多个,要用一个大括号括起来
3、case后面的表达式是常量表达式
4、对简单算法与编程有了一个大概的了解
学习伙伴胡思思的作业:作业做的很认真,对于自己的问题也能够及时解决

四、预习第四章

posted @ 2021-04-20 20:49  TodayLF  阅读(65)  评论(0编辑  收藏  举报