《C语言程序设计》实验报告(三)

C语言程序设计报告

实验项目:课堂练习4-3-1,4-3-2,4-3-3,4-3-4,4-3-4

姓名:余永祥 实验地点:家 实验时间:2020年3月25日

一、实验目的与要求

1.掌握c语言逻辑值的表示方法,0为假,1为真;

2.学会正确地使用关系表达式和逻辑表达式;

3.掌握各种形式的if语句语法和使用方法。if语句中if和else的匹配关系,以及if语句的嵌套;

4.熟练掌握switch语句的语法和使用方法,注意在switch语句中break语句的用法及switch语句的嵌套。

二、实验内容

1.实验练习:

实验4-3-1

实验代码:

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

出现问题:由于“lwh”错误判断

解决方法:改为“lw&&lh&&w==h”

2.实验练习:

实验4-3-2

实验代码:

#include<stdio.h>
main()
{
	int a,b,c;
	double x,y;
	printf("请输入打印纸、墨盒、光盘的数量:");
	scanf("%d,%d,%d",&a,&b,&c);
	x=18*a+132*b+4.5*c;
	switch(x>500)
	{
		case 1:y=0.9*x;
		printf("应付款数=%.2f",y);
		break;
		case 0:switch(x>400)
		{
			case 1:y=0.92*x;
			break;
			case 0:switch(x>300)
			{
				case 1:y=0.93*x;
				break; 
				case 0:switch(x>200)
				{
					case 1:y=0.94*x;
					break;
					case 0:switch(x>100)
					{
						case 1:y=0.95*x;
						break;
						case 0:y=x;
						break;
					}
				}
			}
		}
	}
	 return 0;
}

出现问题:switch语句后面只能跟整形

解决方法:调整

另一个代码:

#include<stdio.h>
#include<limits.h>
main()
{
	int a,b,c;
	double x,y;
	printf("请输入打印纸、墨盒、光盘的数量:");
	scanf("%d,%d,%d",&a,&b,&c);
	x=18*a+132*b+4.5*c;
	switch((int)x)
	{
		case 500 ... INT_MAX:y=0.9*x;
		break;
		case 400 ... 499:y=0.92*x;
		break;
		case 300 ... 399:y=0.93*x;
		break;
		case 200 ... 299:y=0.94*x;
		break;
		case 100 ... 199:y=0.95*x;
		break;
		default:printf("输入错误。"); 
	 } 
	if(x>0)
	printf("应付款数=%.2f",y);
	return 0;
}

3.实验练习:

实验4-3-3

实验代码:

#include<stdio.h>
int main()
{
	int year,month,days;
	printf("Please enter year and mmonth:
");
	scanf("%d %d",&year,&month);
	switch(month)
	{
		case 2:if(year%400==0||(year%4==0&&year%100!=0))
				days=29;
				else
				days=28;
				break;
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:days=31;
		case 4:
		case 6:
		case 9:
		case 11:days=30;
	}
	printf("%d年%d月有%d天。",year,month,days);
	return 0;
}

出现问题:频繁的出现语法错误

解决方法:熟练在中文和英文输入法间及时的切换

4.实验练习:

实验4-3-4

实验代码:

#include<stdio.h>
main()
{
	int x,n,y;
	float sum=0.0;
	printf("请选择:1.日用品  2.文具  3.食品
");
	scanf("%d",&x);
	switch(x)
	{
		case 1:printf("请选择:1.牙刷(3.5元/支)  2.牙膏(6.2元/支)
");
		       printf("        3.肥皂(2元/块)  4.毛巾(8.6元/条)
");
		       scanf("%d",&y);
		       printf("数量?");
		       scanf("%d",&n);
		       switch(y)
		       {
		       	case 1:sum=3.5*n;
		       	break;
		       	case 2:sum=6.2*n;
		       	break;
		       	case 3:sum=2*n;
		       	break;
		       	case 4:sum=8.6*n;
		       	break;
			   }
			   break;
		case 2:printf("请选择:1.笔(3元/支)  2.笔记本(1.2元/本)
");
		       printf("        3.文件夹(12元/个)  4.文具盒(8.6元/个)
");
		       scanf("%d",&y);
		       printf("数量?");
		       scanf("%d",&n);
		       switch(y)
			    {
		       	case 1:sum=3*n;
		       	break;
		       	case 2:sum=1.2*n;
		       	break;
		       	case 3:sum=12*n;
		       	break;
		       	case 4:sum=8.6*n;
		       	break;
			   }
			   break;
		case 3:printf("请选择:1.白糖(3.6元/包)  2.盐(1元/包)
");
		       printf("        3.饼(2元/个)  4.方便面(3.6元/包)
");
		       scanf("%d",&y);
		       printf("数量?");
		       scanf("%d",&n);
		       switch(y)
			    {
		       	case 1:sum=3.6*n;
		       	break;
		       	case 2:sum=1*n;
		       	break;
		       	case 3:sum=2*n;
		       	break;
		       	case 4:sum=3.6*n;
		       	break;
			   }
			   break;	   	   
	}
	printf("总计:%.2f元",sum);
	return 0;
}

出现问题:break遗漏

解决方法:熟练

5.实验练习:

4-3-5

实验代码:

#include<stdio.h>
int main()
{
	
	int num=20;
	//出错5<num<10的原因是运算符优先级,先计算5<num的值为1 ,原式变为1<10 
	printf("%d",5<num<10) ;
	if(5<num&&num<10)
		printf("%d in range(5,10)!
",num);
	else
		printf("%d out range(5,10)!
",num);
		
	
	double x=1000/3.0;
	double y=x-333.0;
	double z=3*y-1.0;
	printf("x=%.64lf
",x);
	printf("y=%.64lf
",y);
	printf("z=%.64lf
",z);
	if(z==0) printf("z==0
");
		else printf("z不等于0
");
		
	
	return 0;
	
}

出现问题:无

解决方法:无

三、计算机设计

第一版

#include<stdio.h>
main()
{
	float x,y,z;
	char c,f;
	do
	{
	printf("请输入依次数字、符号、数字:
");
	scanf("%f%c%f",&x,&c,&y);
	switch(c)
	{
		case'+':z=x+y;
		printf("计算结果为:%f
",z);
		break;
		case'-':z=x-y;
		printf("计算结果为:%f
",z);
		break;
		case'/':z=x/y;
		printf("计算结果为:%f
",z);
		break;
		case'*':z=x*y;
		printf("计算结果为:%f
",z);
		break;
		default:printf("输入错误.
");
	}
	printf("输入r继续,其他退出
");
	scanf("%c",&f);
}while(f='r')
}

问题:难以循环

第二版

#include<stdio.h>
#include<conio.h>
int main()
{
	float x,y,z;
	char c,f;
	do
	{
		cxks:printf("请输入依次数字、符号、数字:
");
		scanf("%f%c%f",&x,&c,&y);
		switch(c)
		{
			case'+':z=x+y;
			printf("计算结果为:%f
",z);
			break;
			case'-':z=x-y;
			printf("计算结果为:%f
",z);
			break;
			case'/':z=x/y;
			printf("计算结果为:%f
",z);
			break;
			case'*':z=x*y;
			printf("计算结果为:%f
",z);
			break;
			default:printf("输入错误.
");
		}
		printf("按下任意键继续,Esc退出:
");
		while(getchar()!='
');
		//scanf("%c",&f);
		f=getch();
	}while(f!=27);
	

	return 0;
}

四、实验小结

收获:

1.对选择的语句更熟悉了,对switch的了解加深;

2.学会了对付一些不同的递进选择的程序;

3.学会了分析一点的差错,比如,实验4-3-2中,如果输入错误,应该不输出y的值,所以加了if(x>0)这句,来调整输出,更加严谨;

4.对C语言更加熟悉了。

不足:

1.一开始时常忘记switch()中为整形数据;

2.break时常遗漏,导致程序出错;

3.对case后跟的数据不了解,应该为常数。

原文地址:https://www.cnblogs.com/GZ-1128-XZ/p/12595667.html