第一篇:C語言實驗報告
實驗一 C程序的運行環境和方法
一、實驗目的
1.了解所用的計算機系統。
2.了解在該系統上如何進行編輯、編譯、連接和運行一個C程序。3.通過運行簡單的C程序了解C程序的特點。
二、實驗內容和步驟
1.熟悉所用的系統。了解Windows資源管理器的使用方法:文件的查看、復制、運行等方法,Visual C++所在目錄,文本文件的建立方法。2.進入Visual C++,并新建一個C++源程序文件。
3.熟悉Visual C++的集成環境,了解各菜單項有哪些子菜單。4.輸入下面的程序(教材中的例1.1),注意區分大小寫。
#include
5.關閉工作區,新建一個程序,然后對教材中的例1.2重復4中的操作(即只將程序改為例1.2中的程序,其它操作步驟相同)。其程序為:
#include
6.關閉工作區,新建一個程序,然后輸入并運行一個需要在運行時輸入數據的程序
#include
printf(“input a and b:n”);scanf(“%d,%d”,&a,&b);c=max(a,b);printf(“nmax=%dn”,c);} int max(int x,int y){int z;if(x>y)z=x;else z=y;return(z);}(1)運行程序,若程序有錯,則修改錯誤后繼續運行程序,當沒有錯誤信息時輸入:2,5并按Enter鍵,查看運行結果。
其運行結果為:
(2)將程序的第三行改為:int a;b;c;然后按F9看結果如何,將其修改為int a,b,c;將子程序max的第3,4行合并為一行,運行程序,看結果是否相同。將程序的第三行改為:int a;b;c;運行結果為:
將子程序max的第3,4行合并為一行,運行程序,其結果相同,結果為:
7.運行一個自己編寫的程序,程序的功能是輸出兩行文字。其程序為:
#include
實驗二 數據類型、運算符和表達式
一、實驗目的
1.掌握C語言數據類型,熟悉如何定義一個整型、字符型和實型的變量,以及對它們賦值的方法。
2.掌握不同數據類型之間賦值的規律。
3.學會使用C的有關算術運算符,以及包含這些運算符的表達式,特別是自加(++)和自減(――)運算符的使用。
4.進一步熟悉C程序的編輯、編譯、連接和運行的過程。
二、實驗內容和步驟
1.輸入并運行下面的程序 #include
(2)加入下面的一個語句作為“}”前的最后一個語句:
printf(“%d,%dn”,c1,c2);其結果為:
(3)將第3行改為:
int c1,c2;然后再運行程序,并觀察結果是否相同。相同,其結果為:
(4)將第3行改為int c1,c2;將第4,5行依次改為:
c1=a;c2=b;c1=“a”;c2=“b” c1=300;c2=400;每改為一次后運行程序,觀察結果。其程序為:
#include
2.分析教材第3章習題3.5中的程序的運行結果,然后輸入該程序并運行,將運行結果與前面分析的結果對比。其程序為:
#include
3.輸入并運行下面的程序
#include
printf(“%u,%un”,a,b);printf(“%u,%un”,c,d);c=a=e;d=b=f;printf(“%d,%dn”,a,b);printf(“%u,%un”,c,d);} 請對照程序和運行結果分析: 運行結果為:
(1)將一個負整數賦給一個無符號的變量,會得到什么結果。畫出它們在內存中的表示形式。
(2)將一個大于32767的長整數賦給一個整型變量,會得到什么結果。畫出它們在內存中的表示形式。
(3)將一個長整數賦給無符號的變量,會得到什么結果。畫出它們在內存中的表示形式。4.輸入習題3.10(1)運行程序,注意i,j,m,n的值。(2)將第4,5行改為:
m=i++;n=++j;再運行。(3)將程序改為:
#include
5.按習題3.6的要求編程并上機運行:
要將“China”譯成密碼,密碼規律是:用原來的字母后面第4個字母代替原來的字母。例如,字母“A”后面第4個字母是“E”,用“E”代替“A”,因此,“China”應譯為“Glmre”。請編一程序,用賦初值的方法使c1、c2、c3、c4、c5這5個變量的值分別為’C’,'h', 'i','n', 'a',經過計算,使c1、c2、c3、c4、c5分別變為:'G','l','m',r','e',并輸出.程序提示:
main函數算法如下:
定義char型變量 c1,c2,c3,c4,c5;給字符型變量賦值 c1=c1+4;c2=c2+4;c3=c3+4;c4=c4+4;c5=c5+4;輸出c1,c2,c3,c4,c5 其程序為: #include
實驗三 最簡單的C程序設計
一、實驗目的
1.掌握C語言中使用最多的一種語句――賦值語句的使用方法。2.掌握各種類型數據的輸入輸出方法,能正確使用各種格式輸出符。
二、實驗內容和步驟
1.掌握各種格式輸出符的使用方法。#include
double f,g;long n,m;unsigned p,q;a=61;b=62;c1='a';c2='b';d=3.56;e=-6.87;f=3156.890121;g=0.123456789;m=50000;n=-60000;p=32768;q=40000;printf(“a=%d,b=%dnc1=%c,c2=%cnd=%6.2f,e=%6.2fn”,a,b,c1,c2,d,e);printf(“f=%15.6f,g=%15.12fnm=%ld,n=%ldnp=%u,q=%un”,f,g,m,n,p,q);}(1)運行此程序并分析運行結果。其結果為:
(2)在此基礎上,修改程序的第9-14行:
a=61;b=62;c1=a;c2=b;f=3156.890121;g=0.123456789;d=f;e=g;p=a=m=50000;q=b=n=-60000;運行程序,分析運行結果。其結果為:
(3)將9-14行改為以下的scanf語句,即用scanf函數接收從鍵盤輸入的數據:
scanf(“%d,%d,%c,%c,%f,%f,%lf,%lf,%ld,%ld,%u,%u”,&a,&b,&c1,&c2,&d,&e,&f,&g,&m,&n,&p,&q);運行程序(無錯誤的情況下)輸入數據如下:
61,62,a,b,3.56,-6.87,3156,890121,0.123456789,50000,-60000,32768,40000 其結果為:
2.按習題3.8的要求編寫程序并運行:
設圓半徑r=1.5,圓柱高h=3,求圓周長、圓面積,圓球表面積、圓球體積、圓柱體體積。用scanf輸入數據,輸出計算結果,輸出時要有文字說明,取小數后2位數字。其程序為:
#include
3.編寫程序,用getchar函數輸入兩個字符給c1,c2,然后分別用putchar函數和printf函數輸出這兩個字符。其程序為:
#include
c1=getchar();c2=getchar();printf(“用putchar語句輸出結果為:”);putchar(c1);putchar(c2);printf(“n”);printf(“用printf語句輸出結果為:”);printf(“%c%cn”,c1,c2);} 其運行結果為:
實驗四 選擇結構程序設計
一、實驗目的
1.了解C語言表示邏輯值的方法。
2.學會正確使用邏輯運算符和邏輯表達式的方法。3.熟悉if語句和switch語句。4.結合程序掌握一些簡單的算法。5.學習調試程序的方法。
二、實驗內容
本實驗要求編程解決以下問題,然后上機調試運行程序。
x?1?x?1?x?101.y??2x?1?3x?11x?10?
用scanf函數輸入x的值,求y的值。
其程序為:
#include
else y=3*x-11;printf(“x=%d,y=%dn”,x,y);} 運行結果為:
2.給出一個百分制的成績,要求輸出成績等級A,B,C,D,E,90分及以上為A,80-89為B,70-79為C,60-69為D,60分以下為E。要求從鍵盤輸入成績,然后輸出相應等級,分別用if語句和switch語句實現。(1)使用if語句的程序如下: #include
(2)使用switch語句程序如下: #include
printf(“成績是%-5.1f,相應的等級是%cn”,score,grade);} 其運行結果與使用if語句運行結果一樣。
3.編程實現:輸入一個不多于5位的正整數,要求:(1)輸出它是幾位數,(2)分別輸出每一位數字,(3)按逆序輸出各位數字,如原數為321,則應輸出123。應準備以下測試數據
要處理的數為1位正整數; 要處理的數為2位正整數; 要處理的數為3位正整數; 要處理的數為4位正整數; 要處理的數為5位正整數;
除此之外,程序還應當對不合法的輸出作必要的處理。例如: 輸入負數;
輸入的數超過5位; 其程序為:
#include
{ int num,indiv,ten,hundred,thousand,ten_thousand,place;printf(“請輸入一個整數(0-99999):n”);scanf(“%d”,&num);if(num>99999)printf(“輸入的數超過5位!n”);else if(num<0)printf(“輸入的數是一個負數!n”);else { if(num>9999)place=5;else if(num>999)place=4;else if(num>99)place=3;else if(num>9)place=2;else place=1;if(num>99999||num<0)printf(“enter num is error!n”);printf(“位數:%dn”,place);printf(“每位數字為:”);ten_thousand=num/10000;thousand=(int)(num-ten_thousand*10000)/1000;hundred=(int)(num-ten_thousand*10000-thousand*1000)/100;ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10;indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10);switch(place){case 5:printf(“%d,%d,%d,%d,%d”,ten_thousand,thousand,hundred,ten,indiv);printf(“n反序數字為:”);printf(“%d%d%d%d%d”,indiv,ten,hundred,thousand,ten_thousand);break;case 4:printf(“%d,%d,%d,%d”,thousand,hundred,ten,indiv);printf(“n反序數字為:”);printf(“%d%d%d%d”,indiv,ten,hundred,thousand);break;case 3:printf(“%d,%d,%d”,hundred,ten,indiv);printf(“n反序數字為:”);printf(“%d%d%d”,indiv,ten,hundred);break;case 2:printf(“%d,%d”,ten,indiv);printf(“n反序數字為:”);11
printf(“%d%d”,indiv,ten);break;case 1:printf(“%d”,indiv);printf(“n反序數字為:”);printf(“%d”,indiv);break;} printf(“n”);return 0;} }
4.編程實現:輸入4個整數,要求按由小到大的順序輸出。得到正確結果后,修改程序使之按由大到小的順序輸出。由小到大順序輸出其程序為: #include
if(a>d){t=a;a=d;d=t;} if(b>c){t=b;b=c;c=t;} if(b>d){t=b;b=d;d=t;} if(c>d){t=c;c=d;d=t;} printf(“排序結果為:n”);printf(“%d %d %d %dn”,a,b,c,d);} 其運行結果為:
由大到小順序輸出其程序為: 將上面程序第十九行改為:
printf(“%d %d %d %dn”,d,c,b,a);其運行結果為:
5.已知a=12,b=6,要求輸入一個算術運算符(+、-、*、/),對a,b進行算術運算,并輸出結果。其程序為:
#include
實驗五 循環控制
一、實驗目的
熟悉使用while語句,do-while語句和for語句實現循環的方法。掌握在程序設計中用循環的方法實現一些常用算法(如窮舉、迭代、遞推等)。
二、實驗內容
1.上機完成習題6.1:輸入兩個正整數m和n,求出它們的最大公約數和最小公倍數。
輸入時,使m 修改程序使對任何的整數都能得到正確的結果。其程序為: #include 2.編寫程序利用公式:e?1?其程序為: #include 111????求e的近似值,精確到小數后6位 1!2!n! void main(){ int n,i;double e,p,t;printf(“輸入n的值:n”);scanf(“&d”,&n);e=1;t=1;p=1;i=1;while(t>=1e-7){e=e+t;i++;p=p*i;t=1.0/p;} printf(“The e is %fn”,e);} 其運行結果為: 3.編程求1到n中能被3或7整除的數之和。分別用for循環語句和while循環語句完成本題。 用for循環,其程序為: #include 用while循環語句,其程序為: #include int i=1,n,sum=0;printf(“請輸入一個整數:n”);scanf(“%d”,&n);while(i<=n){ if(i%3==0||i%7==0)sum=sum+i;i++;} printf(“The sum is %dn”,sum);} 4.上機完成習題6.10:猴子吃桃問題。猴子第一天摘下若干個桃子,當即吃了一半,還不過癮,又多吃了一個。第二天早上又將剩下的桃子吃掉了一半,又多吃了一個。以后每天早上都吃了前一天剩下的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少桃子。 在得到正確結果后,修改題目,改為每天早上都吃了前一天剩下的一半加二個,請修改程序,并運行,檢查運行結果是否正確。其程序為: #include 實驗六 數組 一、實驗目的 1.掌握一維數組與二維數組的定義、賦值及輸入輸出方法。2.掌握字符數組和字符串函數的使用。 3.掌握與數組有關的算法(特別是排序算法) 二、實驗內容 1.用選擇法對10個整數排序。10個整數用scanf函數輸入。其程序為: #include 2.有15個數存放在一個數組中,輸入一個數要求用折半查找法找出該數是數組中的第幾個元素的值,如果該數不在數組中,則輸出無此數,要找的數用scanf函數輸入。其程序為: #include sign=0; top=0; bott=N-1; if(numbera[N-1]) loca=-1; while((!sign)&&(top<=bott)) { mid=(bott+top)/2; if(number==a[mid]) {loca=mid; printf(“Has found %d,its position is %dn”,number,loca+1); sign=1; } else if(number bott=mid-1; else top=mid+1; } if(!sign||loca==-1) printf(“cannot find %d.n”,number); printf(“continue or not(Y/N)?”); scanf(“%c”,&c); if(c=='N'||c=='n') flag=0;} return 0;} 其運行結果為: 3.將兩個串連接起來,不要用strcat函數。其程序為: #include