zoukankan      html  css  js  c++  java
  • C语言实验报告

    C程序设计实验报告

    实验项目:基本的程序语句实验;程序的简单算法设计实验

    姓名:魏志远    实验地点:第一教学楼514教室    实验时间:3月19号

    一、实验目的与要求

    1、

    (1)掌握C语言几种基本数据类型,如整型(int)、字符型(char)、单精度(float)、双精度(double),以及由这些基本类型构成的常量和变量的使用方法。

    (2)掌握C语言的运算符和表达式的正确使用。

    (3)掌握自增(++)和自减(--)运算符的正确使用。

    (4)掌握基本的输入输出函数scanf()、getchar()、printf()、和putchar()函数的基本功能、调用方法、输入输出格式控制规定。

    (5)能独立编写顺序结构程序并调试通过。

    (6)用表达式语句、输入输出语句解决简单的应用问题并上机实现。

    2、

    (1)掌握结构化程序的算法描述方法。

    (2)了解C语言的基本语法要素,能熟练地将算大描述转化为C语言程序。

    (3)熟练掌握C语言的运算符,即运算符的优先级和结合性、运算规则、运算对象类型

    二、实验内容

    1、实验练习:

    (1)2.3.3 字符和ASCII码

    问题的简单描述:从键盘输入一个大写字母,要求转换成小写字母输出,并输出这个小写字母和相邻的二个字母,以及他们的ASCII码值。

    实验代码:

    #include<stdio.h>
    main()
    {
        printf("请输入一个大写字母;
    ");
        char ch;
        scanf("%c",&ch);
        printf("小写字母为%c %c %c
    ",ch+31,ch+32,ch+33);     
        printf("ASCII码为%d %d %d",ch+31,ch+32,ch+33);
    }

     问题分析:开始想使用自增自减的方式来运算3个相邻的数,然后发现得出的结果与同学间的不一样,得出错误的结果,因此去求教了同学,在得到同学的展示和提醒之后,发现可以在printf输出函数里面给我输出的结果赋值,就可以很容易的得出正确结果。

    (2)2.3.4 运算符与表达式的应用

    问题的简单描述:从键盘输入一个三位整数,将输出的该数的逆序数。例如,输入123,输出321.

    实验代码:

    #include<stdio.h>
    main()
    {
        int a,b,c,x,y;
        printf("请输入一个3位的正整数;
    ");
        scanf("%d",&x);
        a=x/100;
        b=(x%100)/10;
        c=x%10;
        y=c*100+b*10+a;
        printf("%d:%d
    ",x,y);
        return 0;
    }

     问题分析:编写这个程序时没出现什么问题,主要是自己没想到怎么将三位数的位数取出来,老师在我们实验之前给了我们提示,所以便成功了。

    (3)2.3.5 顺序结构应用程序  

    问题的简单描述:编写一个程序,用于医院收费处出纳算账。要求输入所在医院费用(西药房、检查费、材料费、床位费、观察费和护理费),打印出应付钱数,再输入病人所付钱数,打印出应找的钱数。

    实验代码:

    #include<stdio.h>
    int main()
    {
        float x,j,c,hj,fk,zh,cw,g,f;
        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的变量里加入&,导致自己无法编译成功,却自己没有发现问题,在同学帮助下找到问题并解决了。而后又发现在scanf里多加了一个%f,导致输入数据时多了一个字节,按回车没有得到任何东西,删掉之后便可以正常运行。

    2、实验练习:

    (1)3.3.1  制定数学函数的计算方法

    问题的简单描述:有一函数:y=

    实验代码:

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

     问题分析:编译代码时对于if else不熟悉,所以不知道如何下手,编译怎么样的代码才能判断变量的值与常量的大小。经过与同学间的探讨和书籍上的例题的提醒,我便理解了if  else的用法,问题也就成功解决了。

    (2)3.3.2   鸡兔同笼问题。

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

    实验代码:

    #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
    ",x,y);
        }
        else
        printf("输入错误!
    ");
    }

     问题分析:编写代码时太依赖书籍,书上的程序模板是if (x>0&&y>0),而真实需要的是if  (h>0&&f>0),像书上模板的代码,编译时不会出现问题,但在运行时却没有结果,得到的一直显示输入错误,与同学商讨后才发现问题,成功解决了。

    (3)3.3.3   根据平面坐标,输出圆塔的高度。

    问题的简单描述:有4个圆塔,圆心分别为(2,2)、(-2,2)、(2,-2)、(-2,-2),圆半径为1。这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((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);
    }

     问题分析:在实验时,出现了一个问题,就是对于平方的表达,一般我们了解到的是^2,但是在C语言中却表达不出来,在邀请同学讲解的时候发现了都是(x1-x)*(x1-x)运算,而老师就在网上查找了,发现在C语言中编码要用pow,例如 double a = pow(3.14, 2);  // 计算3.14的平方。所以我发现遇到问题要去动手解决问题。

    三、实验小结(在本次实验中收获与不足)

            在大学第一次C语言的实验中,共进行了6个实验。在实验中,也发现了不少的问题。对键盘的不熟练,特别是对于#%&*位置的不了解,每次编写代码的时候都要去慢慢摸索;对于代码的记忆不好,会忘记一些代码怎么输入,导致卡壳;对于细节的把握也不仔细,容易忘掉在语句后面添加分号,在编译时出现错误。但是,这次试验中,收获的还是更多,学到了很多代码和理解了一点优先级,通过自己编写代码,对于记忆也有很大的帮助。最主要的是,学到了去如何找到问题,并且有了解决的方向,可以寻求同学和老师的帮忙,也可以运用百度搜索,遇到问题要及时解决。

  • 相关阅读:
    归并排序(Merge Sort)
    AtCoder AGC035D Add and Remove (状压DP)
    AtCoder AGC034D Manhattan Max Matching (费用流)
    AtCoder AGC033F Adding Edges (图论)
    AtCoder AGC031F Walk on Graph (图论、数论)
    AtCoder AGC031E Snuke the Phantom Thief (费用流)
    AtCoder AGC029F Construction of a Tree (二分图匹配)
    AtCoder AGC029E Wandering TKHS
    AtCoder AGC039F Min Product Sum (容斥原理、组合计数、DP)
    AtCoder AGC035E Develop (DP、图论、计数)
  • 原文地址:https://www.cnblogs.com/1820678379wzy/p/10586670.html
Copyright © 2011-2022 走看看