• 第一次实验报告


    C程序设计实验报告

    实验项目:

    1、字符与ASCII码
    2、运算符与表达式的运用
    3、顺序结构应用程序
    4、数学函数的算法描述
    5、鸡兔同笼的算法描述
    6、确定坐标的运算描述

    姓名:戴求  实验地点:教学楼514  实验时间:2019.3.09

    一、实验目的与要求

    1、字符与ASCII码

    • 了解字符在计算机中以ASCII码方式表示;
    • 了解字符的类型、字长其数的表示范围;
    • 熟练使用scanf()输入用户提供的数据;
    • 熟练使用printf()输入变量。

    2、运算符与表达式的应用

    • 掌握算数运算符的使用;
    • 正确定义程序中的变量;
    • 熟练使用scanf()输入用户提供的数据;
    • 熟练使用printf()输入变量。

    3、顺序结构应用程序

    • 掌握算数运算符的使用;
    • 正确定义程序中的变量;
    • 熟练使用scanf()输入用户提供的数据;
    • 熟练使用printf()输入变量。

    4、数学函数的算法描述

    • 用if语句根据条件的真假进行判断;
    • 掌握运算符的运算规则。

    5、鸡兔同笼的算法描述

    • 用if语句根据条件的真假进行判断;
    • 掌握运算符的运算规则。

    6、确定坐标的算法描述

    • 用if语句根据条件的真假进行判断;
    • 掌握运算符的运算规则。

    二、实验内容

    1、字符与ASCII码

    • 问题的简单描述:从键盘输入一个大写字母,要求转换成小写字母输出,并输出这个小写字母相邻的两个字母,以及它们的ASCII码值。
    • 实验代码:
    #include<stdio.h>
    main()
    {
    	char a,x,y,z;
    	printf("请输入一个大写字母:
    ",a);
    	scanf("%c",&a);
    	x=a+31;
    	y=a+32;
    	z=a+33;
    	printf("小写字母为:%c,%c,%c
    ",x,y,z);
    	printf("ASCII码值为:%d,%d,%d
    ",x,y,z);
    }
    
    • 问题分析:无。

    2、运算符与表达式的应用

    • 问题的简单描述:从键盘输入一个3位整数,将输出该数的逆序数。例如,输入123,输出321。
    • 实验代码:
    #include<stdio.h>
    int main()
    {
    	int a,b,c,x,y;
    	printf("请输入一个3位数的正整数:");
    	scanf("%d",&x);
    	c=x%10;
    	b=x%100/10;
    	a=x/100;
    	y=c*100+b*10+a;
    	printf("%d: %d
    ",x,y);
    	return 0;
    }
    
    • 问题分析:当我写完代码的时候,我编译并运行了,当我输入123的时候,它输出还是123。

    然后我检查了一下代码,我的a,b,c的运算错了,于是我调换了一下a和c的位置,再运行的时候就是正确的了。

    3、顺序结构的应用程序

    • 问题的简单描述:编写一个程序,用于医院收费处出纳算账。要求输入所在医院费用(西药费、检查费、材料费、床位费、观察费和护理费),打印出应付钱数,在输入病人所付款数,打印出应找的钱数(已知某病人,西药费268.2元,检查费600元,注射用材料费206元,床位费120元,观察费360元,护理费220元)。
    • 实验代码:
    #include<stdio.h>
    int main()
    {
    	float x,j,c,hj,fk,zh,cw,g,f;
    	/*其中x代表西药费;j代表检查费;c代表材料费;cw代表床位费;g代表观察费;
    	f代表护理费;hj代表应付款;fk代表病人付款;zh代表应找回的金额;*/ 
    	printf("输入西药费,检查费,材料费,床位费,观察费,护理费:
    ");
    	scanf("%f%f%f%f%f%f",&x,&j,&c,&cw,&g,&f);
    	hj=x+j+c+cw+g+f;
    	printf("应付款(元)%.2f
    ",hj);
    	printf("病人付款(元): 
    ");
    	scanf("%f",&fk);
    	zh=fk-hj;
    	printf("计算结果: 
    ");
    	printf("病人付款=%6.2f元
    应收款=%6.2f元
    应找回=%6.2f元
    ",fk,hj,zh);
    	return 0;
    }
    
    • 问题分析:在我编写完之后,我编译运行,发现结果全是错误的。

    然后我找了一下原因,也没发现自己的错误,所以我问了同组同学,他指出我的错误:

    原来我的scanf()里面输入的数据类型错了,我输成了每个字母所代表的费用,当我将其改过来,再次运行就正常了。

    4、数学函数的算法描述

    • 问题简单描述:

    请用流程图表示该函数的算法。输入x值,输出满足函数关系的y值。并用C语言编写程序进行检验。
    流程图如下:

    • 实验代码:
    #include<stdio.h>
    main()
    {
    	float x,y;
    	printf("请输入x的值:");
    	scanf("%f",&x);
    	if(x<1){
    		y=x;
    	}else if(x>=10){
    		y=3*x-1;
    	}else
    	    y=2*x-1;
    	 printf("y的值为%.2f
    ",y);
    }
    
    • 问题分析:当我在输入y=3x-1和y=2x-1的时候,我输入的是y=3x-1和y=2x-1,当运行的时候就是错的,所以我问了一下同组同学,得知,在C语言编程中,公式间的乘法只能用*。

    5、鸡兔同笼的算法描述

    • 问题简单描述:用流程图描述求解鸡兔同笼问题的算法:已知鸡兔的总头数为h(head),总脚数为f(feet),求鸡兔各有多少只?
      流程图如下:

    • 实验代码:
    main()
    {
    	int h,f,x,y;/*鸡兔的总头数为h(head),总脚数为f(feet)*/
    	printf("鸡兔总数,鸡兔总脚数:");
    	scanf("%d%d",&h,&f);
    	if (h>0&&f>0)
    	{
    		x=(4*h-f)/2;
    		y=(f-2*h)/2;
    		printf("鸡:%d  兔:%d
    ",x,y);
    	}
    	else 
    	printf("输入错误!
    ");
    }
    
    
    • 问题分析:当我照着实验指导书上输入相应代码的时候,编程完毕,我编译并运行,发现结果总是0。

    当我找错误的时候,我照着书上一个个对着,却没发现什么。在他们上去讲的时候,我才发现,是书上错了,我的if里面的条件不是x,y而是h,f,改过来运行之后就正确了。

    6、确定坐标的算法描述

    • 有四个圆塔,圆心分别为(2,2)、(-2,2)、(2,-2)、(-2,-2),,圆半径为1,如下图所示:

    这4个塔的高度均为10cm,塔以外无建筑物。现输入任一点的坐标,若该点坐标在任一圆塔内,则输出圆塔的高度;若不在圆塔内,则输出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)");
    	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);
    	}
    	else
    	{
    		h=10;
    		printf("改点高度为:%d",h);
    	}
    	
    }
    
    • 问题分析:我输完代码编译,它显示我错误。我检查了一下,发现我的次方公式不对,还有就是我的printf()中,总是把输出变量输入“”中,导致编译错误。在我改正之后,运行结果于是正确了。

    三、实验小结

    1、首先,通过此次C语言实验之后,我觉得我对C语言的语法还是不太熟悉,还需要通过大量练习来巩固。
    2、其次,在检查程序出问题时,还可以使用断点的方法来一步步检查,看程序哪里出了问题。
    3、最后,不能一味地相信书上的代码,因为,书上的代码不一定正确,还可能误导我们。因为我们惯性的认为书上的知识就是真确的,所以,导致了许多时候,自己检查的时候检查不出错误。

  • 相关阅读:
    [kuangbin带你飞]专题十六 KMP & 扩展KMP & ManacherK
    [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher J
    [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher I
    pat 1065 A+B and C (64bit)(20 分)(大数, Java)
    pat 1069 The Black Hole of Numbers(20 分)
    pat 1077 Kuchiguse(20 分) (字典树)
    pat 1084 Broken Keyboard(20 分)
    pat 1092 To Buy or Not to Buy(20 分)
    pat 1046 Shortest Distance(20 分) (线段树)
    pat 1042 Shuffling Machine(20 分)
  • 原文地址:https://www.cnblogs.com/daiqiu/p/10585448.html
Copyright © 2020-2023  润新知