第一篇:C語言程序設(shè)計(jì)實(shí)驗(yàn)教案
C語言程序設(shè)計(jì)實(shí)驗(yàn)教案
目
錄
實(shí)驗(yàn)一visual c++編譯環(huán)境的使用..............................................................................2 實(shí)驗(yàn)二 順序程序設(shè)計(jì)...............................................................................................6 實(shí)驗(yàn)三 選擇結(jié)構(gòu)程序設(shè)計(jì)........................................................................................9 實(shí)驗(yàn)四 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)......................................................................................13 實(shí)驗(yàn)五 函數(shù)...........................................................................................................17 實(shí)驗(yàn)六 指針...........................................................................................................22 實(shí)驗(yàn)七 數(shù)組...........................................................................................................25 實(shí)驗(yàn)八 結(jié)構(gòu)體........................................................................................................32
實(shí)驗(yàn)一visual c++編譯環(huán)境的使用
實(shí)驗(yàn)?zāi)康模?/p>
1.掌握c程序設(shè)計(jì)編程環(huán)境visual c++,掌握運(yùn)行一個(gè)c程序設(shè)計(jì)的基本步驟,包括編輯、編譯、連接和運(yùn)行。
2.掌握c語言程序設(shè)計(jì)的基本框架,能夠編寫簡單的c程序。3.了解程序調(diào)試的思想,能找出并改正c程序中的語法錯(cuò)誤。實(shí)驗(yàn)內(nèi)容:
1.在“我的電腦”上新建一個(gè)文件夾,用于存放c程序,文件夾名字可以是學(xué)號姓名。2.調(diào)試示例,在屏幕上顯示一個(gè)短句“Hello World!”。
源程序
#include
Hello World!基本步驟:(要求熟練掌握)1)啟動VC++ “開始”->“程序”->“Microsoft Visual Studio 6.0”->“Microsoft Visual C++6.0”進(jìn)入VC++編程環(huán)境。2)新建文件(*.cpp)
“文件”->“新建”,單擊“文件”選項(xiàng)卡,選擇“C++Source Files”,修改文件保存“目錄”和“文件”(文件名),單擊“確定”。
3)編輯和保存(注意:源程序一定要在英文狀態(tài)下輸入,即字符標(biāo)點(diǎn)都要在半角狀態(tài)下,同時(shí)注意大小寫,一般都用小寫)
在編輯窗口輸入源程序,然后執(zhí)行“文件”->“保存”或“文件”->“另存為” 4)編譯(*.obj)
用來檢查語法錯(cuò)誤
“編譯”->“編譯”或Ctrl+F7,在產(chǎn)生的工作區(qū)隊(duì)話框中,選擇“是”。5)連接(*.exe)“編譯”->“構(gòu)件”或F7 6)運(yùn)行
“編譯”->“執(zhí)行”或Ctrl+F5 7)關(guān)閉程序工作區(qū)
“文件”->“關(guān)閉工作區(qū)” 8)打開文件
“文件”->“打開”
9)查看C源文件、目標(biāo)文件和可執(zhí)行文件的存放位置。
源文件在保存目錄下,目標(biāo)文件和可執(zhí)行文件在“保存目錄Debug”中
3.編程,在屏幕上顯示一個(gè)短句“this is my first c program.”。4.調(diào)試示例,在屏幕上顯示一個(gè)短句“welcome to you!”。源程序(有錯(cuò)誤的程序)#include
1)按照實(shí)驗(yàn)2中介紹的步驟1)~3)輸入上述源程序并保存。
2)編譯,“編譯”->“編譯”(Ctrl+F7),信息窗口中顯示編譯出錯(cuò)信息,如下圖所示。3)找出錯(cuò)誤,在信息窗口中依次雙擊出錯(cuò)信息,編輯窗口就會出現(xiàn)一個(gè)箭頭指向程序出錯(cuò)的位置,一般在箭頭的當(dāng)前行或上一行,可以找到出錯(cuò)語句。
第4行,出錯(cuò)信息:Welcome是一個(gè)未定義的變量,但Welcome并不是變量,出錯(cuò)的原因是Welcome前少了一個(gè)雙引號。
4)改正錯(cuò)誤,重新編譯,得下如下圖所示出錯(cuò)信息。
出錯(cuò)信息:“}”前少了分號。
5)再次改正錯(cuò)誤,在“}”前即printf()后加上“;”(英文狀態(tài)),生新編譯,顯示正確 6)連接,“編譯”->“構(gòu)件”(F7),出現(xiàn)如下出錯(cuò)信息。
出錯(cuò)信息:缺少主函數(shù)。
7)改正錯(cuò)誤,即把“mian”改為“main”后,重新連接,信息窗口顯示連接正確。8)運(yùn)行,“編譯”->“執(zhí)行”(Ctrl+F5),觀察結(jié)果是否與要求一致。5.改錯(cuò),改正下列程序中的錯(cuò)誤,在屏幕上顯示以下3行信息。
**************** Welcome **************** 源程序(有錯(cuò)誤的程序)#include
}
實(shí)驗(yàn)報(bào)告要求
將以上各題的源程序、運(yùn)行結(jié)果,以及實(shí)驗(yàn)中遇到的問題和解決問題的方法,以及實(shí)驗(yàn)過程中的心得體會,寫在實(shí)驗(yàn)報(bào)告上。
Printf(“
Welcome”)Printf(“****************n”);
實(shí)驗(yàn)二 順序程序設(shè)計(jì)
【實(shí)驗(yàn)?zāi)康摹?/p>
1.學(xué)會順序程序設(shè)計(jì)的思想
2.進(jìn)一步熟悉Turbo C集成編譯環(huán)境的使用,達(dá)到熟練使用的目的 3.熟練掌握各種數(shù)據(jù)類型的輸入輸出格式,并學(xué)會使用輸入輸出函數(shù) 4.學(xué)會使用表達(dá)式
【實(shí)驗(yàn)內(nèi)容】
1.在屏幕中輸出一行文字“Hello,Welcome!” 說明:
(1)只需要在屏幕中顯示一行文字即可 參考程序如下:
#include
printf(“Hello,Welcome!n”);}
2. 輸入一個(gè)華氏溫度,要求輸出攝氏溫度。公式為
輸出要求有文字說明,取兩位小數(shù)
說明:
(1)攝氏溫度F和華氏溫度c都應(yīng)用float類型變量存儲(2)注意表達(dá)式書寫中的各變量的順序問題(3)輸出時(shí)只需輸出兩位小數(shù) 參考程序如下:
#include
float F,c;
printf(“input F:”);
scanf(“%f”,&F);
c=5*(F-32)/9;
printf(“c=%.2fn”,c);}
3.輸入三角形三邊長a、b、c,求三角形周長和l面積s。用scanf輸入數(shù)據(jù),輸出計(jì)算結(jié)果,輸出時(shí)要求有文字說明,取消書店后兩位小數(shù)。說明:
(1)程序設(shè)計(jì)中使用的所有變量均為float類型 c?59?F?32?(2)三角形周長公式:l?a?b?c
a?b?c2(3)三角形面積公式;s?p(p?a)(p?b)(p?c),其中
p?
(4)注意應(yīng)保證輸入數(shù)據(jù)能夠構(gòu)成三角形
(5)需要使用開根號函數(shù)sqrt,在程序頂部加上#include
#include
float a,b,c,l,s;
float p;
printf(“input a,b,c:”);
scanf(“%f,%f,%f”,&a,&b,&c);
l=a+b+c;
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
printf(“l(fā)=%.2fn”,l);printf(“s=%.2fn”,s);}
4.設(shè)圓半徑r?1.5,圓柱高h(yuǎn)?3,求圓周長、圓面積、圓球表面積、圓球體積、圓柱體積。用scanf輸入數(shù)據(jù),輸出計(jì)算結(jié)果,輸出時(shí)要求有文字說明,取消書店后兩位小數(shù)。說明:
(1)程序設(shè)計(jì)中使用的所有變量均為float類型(2)圓周長公式:l?2?r(3)圓面積公式:S1??r(4)圓球表面積公式:S2?4?r
V1?4322(5)圓球體積公式:
?r3
(6)圓柱體積公式:V2??rh 參考程序如下:
#include
2main(){
float r=1.5,h=3;
float l,s1,s2,v1,v2;
l=2*PI*r;
s1=PI*r*r;
s2=4*PI*r*r;
v1=4*PI*r*r*r/3;
v2=PI*r*r*h;
printf(“l(fā)=%.2fn”,l);printf(“s1=%.2fn”,s1);printf(“s2=%.2fn”,s2);printf(“v1=%.2fn”,v1);printf(“v2=%.2fn”,v2);}
實(shí)驗(yàn)三 選擇結(jié)構(gòu)程序設(shè)計(jì)
【實(shí)驗(yàn)?zāi)康摹?/p>
1.了解C語言的邏輯運(yùn)算 2.學(xué)會使用if語句和switch語句 3.熟練掌握選擇結(jié)構(gòu)程序設(shè)計(jì)方法
【實(shí)驗(yàn)內(nèi)容】 1.有一函數(shù)
y? x
?x?1? ?1?x?10? 2x?
13x?11
?x?10?
寫一程序,輸入x,輸出y值 說明:
(1)根據(jù)輸入x的不同求y的值,使用if語句
(2)分別輸入三個(gè)分段中的三個(gè)數(shù),判斷輸出結(jié)果是否正確,測試程序正確與否 參考程序如下:
#include
float x,y;
printf(“input x:”);
scanf(“%f”,&x);
if(x<1)
y=x;
if(x>=1 && x<10)
y=2*x-1;
if(x>=10)
y=3*x-11;printf(“y=%fn”,y);}
2.從鍵盤輸入一個(gè)字符,可以是數(shù)字、字母、或是標(biāo)點(diǎn)符號,對輸入的字符進(jìn)行判斷,如果是數(shù)字則輸出“* is a number!”,如果是字母則輸出“* is a letter!”,如果是其他的字符怎輸出“* is the other!”(*為輸入的字符)說明:
(1)從鍵盤輸入一個(gè)字符,用char類型變量存儲(2)使用if語句作判斷(3)判斷條件根據(jù)輸入字符的ASCII碼值的范圍,具體的ASCII碼值參看書后的ASCII碼表
參考程序如下:
#include
char c;
printf(“input a char:”);
scanf(“%c”,&c);
if(c>=48 && c<=57)
printf(“%c is a number!n”,c);
else if((c>=65 && c<=90)||(c>=97 && c<=122))
printf(“%c is a letter!n”,c);
else
printf(“%c is the other!n”,c);}
3.輸入兩個(gè)實(shí)數(shù)a、b,保證變量a中存儲的是較大的數(shù),變量b中存儲的實(shí)較小的數(shù),并按照由大到小的順序輸出。說明:
(1)需要對輸入的兩個(gè)數(shù)進(jìn)行比較,判斷是否需要交換兩個(gè)數(shù)(2)按照從大到小的順序輸出兩個(gè)數(shù) 參考程序如下:
#include
float a,b;
float temp;
printf(“input a,b:”);
scanf(“%f,%f”,&a,&b);
if(a
{
temp=a;
} printf(“%f,%fn”,a,b);} 4.輸入一年份,判斷該年是否是閏年。說明:
(1)判斷閏年的條件:能夠被4整除,但不能被100整除或者能被100整除,又能被400整除
(2)使用一個(gè)變量來代表是否是閏年 a=b;b=temp;10(3)如果是閏年則輸出“* is a leap year!”,否則輸出“* is not a leap year!”。*代表輸入的年份
參考程序如下:
#include
int year;
int flag=0;
printf(“input a year:”);
scanf(“%d”,&year);
if((year%4==0 && year%100!=0)||(year%100==0 && year%400==0))
flag=1;
if(flag==1)
printf(“%d is a leap year!n”,year);
else
printf(“%d is not a leap year!n”,year);}
5.從鍵盤輸入一個(gè)月號,顯示輸出該月號的英文名稱 說明:
(1)使用if語句較為麻煩,因?yàn)樾枰?2次比較(2)使用switch語句
(3)如果輸入月份超出范圍,則應(yīng)當(dāng)輸出錯(cuò)誤信息 參考程序如下:
#include
int month;
printf(“input a month:”);
scanf(“%d”,&month);
switch(month)
{
case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: printf(“January!n”);printf(“February!n”);break;break;printf(“March!n”);break;printf(“April!n”);break;printf(“May!n”);break;printf(“June!n”);break;printf(“July!n”);break;printf(“August!n”);break;printf(“September!n”);break;case 10: printf(“October!n”);break;case 11: printf(“November!n”);break;case 12: printf(“December!n”);break;
} } default: printf(“input error!n”);12
實(shí)驗(yàn)四 循環(huán)結(jié)構(gòu)程序設(shè)計(jì)
【實(shí)驗(yàn)?zāi)康摹?/p>
1.學(xué)會使用while、do-while、for語句 2.熟練掌握循環(huán)結(jié)構(gòu)程序設(shè)計(jì)方法 3.掌握選擇結(jié)構(gòu)與循環(huán)結(jié)構(gòu)的嵌套
【實(shí)驗(yàn)內(nèi)容】
201.求和說明: ?n!n?1(即求1!+2!+??+20?。?/p>
(1)首先要求出每一項(xiàng)的n!的值
(2)然后把各項(xiàng)相加得到所求的值
(3)存儲求和運(yùn)算結(jié)果的變量的初始值應(yīng)為0(4)存儲求積運(yùn)算結(jié)果的變量的初始值應(yīng)為1 參考程序如下: ①使用while循環(huán)
#include
float sum=0;
float mid=1;
int n=1;
while(n!=21)
{
mid=mid*n;
} printf(“sum=%fn”,sum);}
②使用for循環(huán)
#include
float sum=0;
float mid=1;
int n;
for(n=1;n<=20;n++)
{
mid=mid*n;n++;sum=sum+mid;
sum=sum+mid;} printf(“sum=%fn”,sum);}
2.求出100到200以內(nèi)最大的素?cái)?shù)和最小的素?cái)?shù),并求出兩者的差值 說明:
(1)素?cái)?shù)的概念:只能被1和自身整除的正整數(shù)
(2)分別求出這個(gè)兩個(gè)素?cái)?shù),并輸出,輸出格式為:
big one:*
small one:*
最小的素?cái)?shù)正序找出
最大的素?cái)?shù)倒序找出
(3)求出兩者的差,并輸出,輸出格式為:
result:* 參考程序如下:
#include
int big,small;
int result;
} for(i=200;i>=100;i--){
int i,j;int flag;for(i=100;i<200;i++){ flag=0;for(j=2;j
} if(i%j==0){
} flag=1;break;if(flag==0){
} small=i;break;flag=0;for(j=2;j
{
} if(flag==0){
} big=i;break;if(i%j==0){ flag=1;break;}
} result=big-small;printf(“big:%dn”,big);printf(“small:%dn”,small);printf(“reslut:%dn”,result);}
3.輸入兩個(gè)正整數(shù)m和n,求其最大公約數(shù)和最小公倍數(shù) 說明:
(1)最大公約數(shù):能夠被m和n同時(shí)整除的最大正整數(shù)(2)最小公倍數(shù):m和n相乘的積除以最大公約數(shù)
(3)使用for循環(huán),將m和n同時(shí)除以1到m(m為m和n兩者中較小者),直到找出最大的正整數(shù)即為最大公約數(shù)(4)輸出格式如下:
The greatest common divisor is *!
The least common multiple is *!參考程序如下:
#include
printf(“input m,n:”);
scanf(“%d,%d”,&m,&n);if(m>n){
temp=m;m=n;
n=temp;} for(i=1;i<=m;i++){
if(n%i==0 && m%i==0)
great=i;} least=m*n/great;printf(“The greatest common divisor is %dn”,great);printf(“The least common multiple is %dn”,least);}
4.打印出所有的“水仙花數(shù)”,所謂“水仙花數(shù)”是指一個(gè)3位數(shù),其各位數(shù)字立方和等于該數(shù)本書。例如,153是一水仙花數(shù),因?yàn)?53?1?5?3 說明:(1)“水仙花數(shù)”是三位數(shù),所以范圍是從100到999(2)使用for循環(huán)
(3)循環(huán)中需要把數(shù)字的每一位都分離出來,然后求和,同原數(shù)字比較,進(jìn)行判斷 參考程序如下:
#include
int i;int temp;for(i=100;i<1000;i++){ a=i/100;b=(i-a*100)/10;c=i%10;temp=a*a*a+b*b*b+c*c*c;if(i==temp)printf(“%dn”,i);
33} }
實(shí)驗(yàn)五 函數(shù)
【實(shí)驗(yàn)?zāi)康摹?/p>
1.掌握C語言函數(shù)的定義、聲明以及函數(shù)的調(diào)用方法 2.了解主調(diào)函數(shù)和被調(diào)函數(shù)之間的參數(shù)傳遞方式 3.熟練掌握數(shù)組作為函數(shù)參數(shù)的用法
【實(shí)驗(yàn)內(nèi)容】
1.寫一個(gè)判斷素?cái)?shù)的函數(shù),在主函數(shù)輸入一個(gè)整數(shù),輸出是否素?cái)?shù)的信息。說明:
(1)判斷素?cái)?shù)的函數(shù)名為Prime(2)傳遞參數(shù)為int類型的變量(3)輸出格式為:
* is a prime!或者* is not a prime!參考程序如下:
#include if(num%i==0) { } flag=1;break;} if(flag==0)printf(“%d is a prime!n”,num);else printf(“%d is not a prime!n”,num);} main(){ int num;printf(“input a num:”);scanf(“%d”,&num);Prime(num);} 2.寫一個(gè)函數(shù),用“冒泡法”對輸入的10個(gè)數(shù)字由小到大順序排列,并輸出。說明: (1)排序的函數(shù)名為Sort(2)排序前后的輸入輸出都應(yīng)在主函數(shù)中完成(3)使用數(shù)組作為函數(shù)參數(shù)(4)使用“冒泡法”排序 參考程序如下: #include } } main(){ int num[10];int i;printf(“input 10 numbers:”);for(i=0;i<10;i++) scanf(“%d”,&num[i]);Sort(num);printf(“the sorted numbers:”);for(i=0;i<10;i++) printf(“%d ”,num[i]);} 3.寫一函數(shù),使給定的一個(gè)二維數(shù)組(5×5)轉(zhuǎn)置,即行列互換。說明: (1)使用5×5的二維數(shù)組存放數(shù)據(jù) (2)矩陣轉(zhuǎn)置的函數(shù)名為Turn(2)轉(zhuǎn)置前后的輸入輸出都應(yīng)在主函數(shù)中完成(3)使用數(shù)組作為函數(shù)參數(shù) for(j=0;j<9-i;j++){ } if(num[j]>num[j+1]){ temp=num[j]; } num[j]=num[j+1];num[j+1]=temp;18 參考程序如下: #include } } main(){ int num[5][5]={{1,2,3,4,5},{6,7,8,9,0},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}}; int i,j;printf(“Before array be turned:n”);for(i=0;i<5;i++){ for(j=0;j<5;j++)printf(“%2d ”,num[i][j]);for(j=i;j<5;j++){ } temp=num[i][j];num[i][j]=num[j][i];num[j][i]=temp; printf(“n”);} Turn(num);printf(“After array be turned:n”);for(i=0;i<5;i++){ } } 4.寫一函數(shù),使輸入的字符串反序存放,在主函數(shù)中輸入和輸出字符串。說明: (1)字符串反序的函數(shù)名為Reverse(2)反序前后的輸入輸出都應(yīng)在主函數(shù)中完成(3)使用數(shù)組作為函數(shù)參數(shù) for(j=0;j<5;j++)printf(“%2d ”,num[i][j]);printf(“n”);19(4)需要使用strlen函數(shù)得到字符串長度,需要在源文件頭部加入#include #include } } main(){ char str[50];printf(“input a string:”);scanf(“%s”,str);Reverse(str);printf(“After reversed is %sn”,str);} 5.寫一函數(shù),將兩個(gè)字符串連接。 說明: (1)連接兩個(gè)字符串的函數(shù)名為:Connect(2)將連個(gè)字符串存入兩個(gè)字符串?dāng)?shù)組中,要保證第一個(gè)字符串的長度能夠容納兩個(gè)字符串之和 (3)連接兩個(gè)字符串主要是找到第一個(gè)字符串的結(jié)尾,然后將第二個(gè)字符串連接到第二個(gè)字符串的后邊 (4)輸出格式為: The connected string is *!(5)使用數(shù)組作為函數(shù)參數(shù) (6)連接前后的字符串輸出都要在主函數(shù)中完成,自定義函數(shù)只完成連接功能 參考程序如下: #include