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("請輸入一個大寫字母;\n");
    char ch;
    scanf("%c",&ch);
    printf("小寫字母為%c %c %c\n",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位的正整數;\n");
    scanf("%d",&x);
    a=x/100;
    b=(x%100)/10;
    c=x%10;
    y=c*100+b*10+a;
    printf("%d:%d\n",x,y);
    return 0;
}

 問題分析:編寫這個程序時沒出現什么問題,主要是自己沒想到怎么將三位數的位數取出來,老師在我們實驗之前給了我們提示,所以便成功了。

(3)2.3.5 順序結構應用程序  

問題的簡單描述:編寫一個程序,用於醫院收費處出納算賬。要求輸入所在醫院費用(西葯房、檢查費、材料費、床位費、觀察費和護理費),打印出應付錢數,再輸入病人所付錢數,打印出應找的錢數。

實驗代碼:

#include<stdio.h>
int main()
{
    float x,j,c,hj,fk,zh,cw,g,f;
    printf("輸入西葯費,檢查費,材料費,床位費,觀察費,護理費:\n");
    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("計算結果:\n");
    printf("病人付款=%6.2f元\n應付款=%6.2f元應找回=%6.2f\n",fk,hj,zh); 
    return 0;
}

 問題分析:第一次編寫的時候,沒有在scanf的變量里加入&,導致自己無法編譯成功,卻自己沒有發現問題,在同學幫助下找到問題並解決了。而后又發現在scanf里多加了一個%f,導致輸入數據時多了一個字節,按回車沒有得到任何東西,刪掉之后便可以正常運行。

2、實驗練習:

(1)3.3.1  制定數學函數的計算方法

問題的簡單描述:有一函數:y=

實驗代碼:

#include<stdio.h>
main()
{
    float x,y;
    printf("請輸入x的值:\n");
    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);  
    
}

 問題分析:編譯代碼時對於if else不熟悉,所以不知道如何下手,編譯怎么樣的代碼才能判斷變量的值與常量的大小。經過與同學間的探討和書籍上的例題的提醒,我便理解了if  else的用法,問題也就成功解決了。

(2)3.3.2   雞兔同籠問題。

問題的簡單描述:用流程圖描述求解雞兔同籠問題的算法:已知雞兔的總頭數有h(head),總腳數有f(feet),求雞兔各多少只?

實驗代碼:

#include<stdio.h>
main()
{
    int h,f,x,y;
    printf("雞兔總數,雞兔腳數:\n");
    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");
}

 問題分析:編寫代碼時太依賴書籍,書上的程序模板是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個實驗。在實驗中,也發現了不少的問題。對鍵盤的不熟練,特別是對於#%&*位置的不了解,每次編寫代碼的時候都要去慢慢摸索;對於代碼的記憶不好,會忘記一些代碼怎么輸入,導致卡殼;對於細節的把握也不仔細,容易忘掉在語句后面添加分號,在編譯時出現錯誤。但是,這次試驗中,收獲的還是更多,學到了很多代碼和理解了一點優先級,通過自己編寫代碼,對於記憶也有很大的幫助。最主要的是,學到了去如何找到問題,並且有了解決的方向,可以尋求同學和老師的幫忙,也可以運用百度搜索,遇到問題要及時解決。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM