C語言程序設計實驗指導書_第1頁
C語言程序設計實驗指導書_第2頁
C語言程序設計實驗指導書_第3頁
C語言程序設計實驗指導書_第4頁
C語言程序設計實驗指導書_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

年4月19日C語言程序設計實驗指導書文檔僅供參考《C語言程序設計》實驗指導書課程編號:課程名稱:C語言程序設計實驗學時:44一、本實驗課的性質、任務與目的本實驗課目的是使學生掌握C語言編程的常見方法,熟悉該語言中的語法、詞法規(guī)則,為以后進行軟件開發(fā)和學習后繼專業(yè)課程打下基礎。經過學習能夠運用C語言中的各個知識點編寫能完成一定功能的程序。訓練學生進行復雜程序設計的技能和培養(yǎng)良好程序設計的習慣,其重要程度決不亞于知識的傳授。把高級語言的學習與程序設計、上機實踐緊密地結合起來,以提高學生能靈活運用新的知識分析問題和解決問題的能力。二、本實驗課所依據的課程基本理論本實驗課基于C語言的語法和詞法規(guī)則、數據的表示及算法的處理,而語法及算法正是高級語言程序設計的主要研究對象?!禖語言程序設計》的主要任務是:C語言是一種應用廣泛結構化程序設計語言,本課程介紹C語言的基本概念、基本語法和編程方法,重點描述C語言的結構化的特征,并經過本課程的學習,使學生掌握一定的結構化程序設計的知識,以及用C語言編寫程序的能力。三、實驗類型與要求在做每個實驗之前,讓學生對本次實驗相關的內容進行預習、算法設計、流程圖的設計、編寫程序,做好實驗的準備工作;寫出預習報告,畫出流程圖,要求獨立完成。說明:1、實驗類型:設計性;2、實驗要求:必做。四、每組人數與實驗學時數每組1人,實驗學時數44學時。五、考核方式與評分辦法實驗總成績=出勤情況*10%+實驗報告*20%+平時*30%+實驗表現*40%六、本實驗課配套教材或實驗指導書譚浩強.C程序設計.北京:清華大學出版社,3月第3版譚浩強.C程序設計題解與上機指導.北京:清華大學出版社,3月第3版譚浩強.C程序設計試題匯編.北京:清華大學出版社,3月第2版夏寬理.C語言程序設計.北京:中國鐵道出版社,2月第1版夏寬理.C語言程序設計上機指導與習題解答.北京:中國鐵道出版社,2月第1版王士元.C高級實用程序設計.北京:清華大學出版社,1996年1月第1版七、實驗報告要求在機器上交作業(yè),每次實驗成績分為優(yōu)、良、及格、不及格,未參加的為0分。要求認真書寫實驗報告。實驗報告編寫要求:1.實驗題目2.實驗要求3.程序流程圖4.調試過程(實驗過程出現的問題、解決的方法)5.程序代碼及運行結果。八、實驗內容實驗一:C語言運行環(huán)境的認識與簡單的C程序【目的與要求】1、了解TC環(huán)境下C語言的運行環(huán)境,熟悉編譯系統(tǒng)的操作環(huán)境。2、了解在該系統(tǒng)上如何編輯、編譯、連接和運行一個C程序。3、經過運行簡單的C程序,初步了解C源程序的特點。4、掌握和理解C程序中最基本的C語句?!緦嶒瀮热荨?、題目:由鍵盤輸入兩個整數,計算并輸出兩個數之和。2、程序如下:#include“stdio.h”voidmain(){inta,b,sum;printf(“Pleaseinputtwointegernumbers:\n”);scanf(“%d%d”,&a,&b);sum=a+b;printf(“%d+%d=%d”,a,b,sum);}3、具體操作:(1)輸入程序,然后進行編譯連接。若在編譯中有詞法或語法錯誤,則根據提示進行修改,再進行調試,直到沒有語法錯誤。(2)運行程序,依下列不同的方式輸入數據,查看程序執(zhí)行結果。①12_34↙②12↙34↙③12<Tab>34↙【實驗分析與討論】1、總結C程序的基本結構和書寫規(guī)則。2、分析調試過程中常見的錯誤提示和解決策略。實驗二:C語言程序的單步調試實驗三:選擇結構的程序設計【目的與要求】1、了解三種基本數據類型的定義。2、掌握各種不同運算符及其對應的表示式的使用。3、熟練掌握if語句和switch語句的使用【實驗內容】一、判斷方程ax2+bx+c=0有幾個解,若有,則輸出其解。1、算法分析:對于方程ax2+bx+c=0的解,存在以下情況:①a=0,不是一元二次方程;②b2-4ac=0,有兩個相等的實根;③b2-4ac>0,有兩個不等的實根;④b2-4ac<0,有兩個共軛復根。(1)定義變量:a,b,c,x1,x2,d(2)輸入a,b,c(3)if(a==0)不是一元二次方程elsed=b2-4ac根據d的取值,輸出方程根的情況:if(b2-4ac==0)x1=x2=-b/(2*a)elseif(b2-4ac>0)x1=(-b+sqrt(d))/(2*a)x2=(-b-sqrt(d))/(2*a)elsex1=(-b+sqrt(-d)i)/(2*a)x2=(-b-sqrt(-d)i)/(2*a)2、程序代碼:#include“stdio.h”#include“math.h”voidmain(){floata,b,c,x1,x2,d;printf(“請輸入ax2+bx+c=0方程三系數值:”);scanf(“%f%f%f”,&a,&b,&c);if(abs(a)<=1e-6)//a==0printf(“該方程非一元二次方程.\n”);else{d=sqr(b)-4*a*c;if(abs(d)<=1e-6)//sqr(b)-4*a*c==0printf(“該方程的兩個相等實根為:x1,x2=%4.2f”,-b/(2*a));elseif(abs(d)>1e-6){x1=(-b+sqrt(d))/(2*a);x2=(-b-sqrt(d))/(2*a);printf(“該方程的兩個不等實根為:x1=%4.2f,x2=%4.2f”,x1,x2);}else//sqr(b)-4*a*c<0printf(“該方程的兩個復數根為:x1=%4.2f+%4.2fi,x2=%4.2f-%4.2fi”,-b/(2*a),sqrt(-d)/(2*a),-b/(2*a),sqrt(-d)/(2*a));}}二、簡單的菜單程序設計。假設要求設計一菜單如下:主菜單1漢字2拼音3英文1、算法分析:根據要求使用輸出語句將上述菜單輸出,提示按要求選擇。運用if語句或switch語句,編寫分支結構。2、程序代碼:#include“stdio.h”voidmain(){inti;printf(“\n\n\n========主菜單========\n”);printf(“(中國)”)printf(“1漢字\n”);printf(“2拼音\n”);printf(“3英文\n”);printf(“請選擇:”);scanf(“%d”,&i);switch(i){case1:printf(“中國\n”);break;case2:printf(“China\n”);break;case3:printf(“Zhongguo\n”);break;}}【課后練習】1、判斷一年份是不是閏年。2、從鍵盤上輸入1-7之間的數字,輸出表示一個星期中對應某一天的英文單詞。【實驗分析與討論】1、總結分支選擇結構的設計方法與技巧。2、掌握簡單菜單的設計。實驗四:循環(huán)結構的程序設計【目的與要求】1、掌握三種循環(huán)語句在編程中的使用。2、理解break語句和continue語句在循環(huán)結構中的不同作用。3、了解循環(huán)的嵌套,學會窮舉算法與迭代算法。【實驗內容】一、輸入兩個正整數,求出它們的最大公約數與最小公倍數。1、算法分析:[輾轉相除法]對于兩個數m和n,將大數放在m中,小數放在n中,用n去除m,若余數為0,則n為最大公約數,否則將n作為m,余數作為n,再用n去除m,直到余數為0,則n為最大公約數。2、程序代碼:#include“stdio.h”#include“math.h”

voidmain(){intm,n,t,max,min;printf(“請輸入兩個正整數:”);scanf(“%d%d”,&m,&n);min=m*n;if(m<n){t=n;n=m;m=t;}while(n!=0){t=m%n;m=n;n=t;}printf(“最大公約數為:%d\n”,m);printf(“最小公倍數為:%d\n”,min/m);}二、將一張100元錢,換成10元,20元,50元零錢,問有多少種不同的換法(假設三種零錢每種都可不出現)。1、算法分析運用窮舉算法實現:考慮到三種零錢各種能夠不出現,則各自的張數范圍如下:10元0張到10張20元0張到5張50元0張到2張而且要考慮到共數只有一張100元票子。2、程序代碼:#include"stdio.h"voidmain(){intTencount,Twecount,Fifcount,i=0;for(Tencount=0;Tencount<=10;Tencount++) for(Twecount=0;Twecount<=5;Twecount++) for(Fifcount=0;Fifcount<=2;Fifcount++)if(Tencount*10+Twecount*20+Fifcount*50==100)printf("第%d種換法為:10元%d張20元%d張50元%d張\n",++i,Tencount,Twecount,Fifcount);}【課后練習】*1、求1—100之間,能被5整除的數之和。***2、判斷任一個數是否是質數。*****3、輸出一有規(guī)則的圖形,如右圖。****【實驗分析與討論】1、分析總結for語句,while語句,do-while語句的用法。2、巧用break語句和continue語句。實驗五:數組及其應用【目的與要求】1、掌握一維數組與二維數組的使用。2、掌握字符數組與字符串的區(qū)別與使用。3、熟練掌握與數組有關的算法(選擇排序與冒泡排序、查找與插入)。【實驗內容】一、輸入一個整數,將其插入一含有9個數的有序序列中,確保插入后其依然有序,。1、算法分析:①將待插入的數與序列中的每個數進行比較,找到其插入的具體位置i;②將從第i個數組元素開始,一直到原數組中的最后一個元素,整體往后移,空出一空間來存儲待插入的整數。2、程序代碼:#include"stdio.h"voidmain(){inta[10]={2,5,7,11,14,19,21,33,67},i,k,m;printf(“原數組為:”);for(i=0;i<9;i++)printf(“%4d”,a[i]);printf(“\n請輸入待插入的整數:”);scanf(“%d”,&m);for(i=0;i<9;i++)if(m<=a[i])break;//查找待插入的位置for(k=9;k>=i;k--)a[k]=a[k-1];//移位,準備插入新的整數a[i]=m;printf(“新數組為:”);for(i=0;i<10;i++)printf(“%4d”,a[i]);}二、編程實現:將字符串str2連接到字符串str1后,構成新的字符串str1。1、算法分析:本程序即實現字符串處理函數strcat()的功能。兩字符串str1和str2進行連接,要注意的是字符串的結束標志。2、程序代碼:#include"stdio.h"#include"string.h"voidmain(){charstr1[40],str2[20],i,j,len1,len2;printf("請輸入字符串str1:");gets(str1);len1=strlen(str1);printf("請輸入字符串str2:");gets(str2);len2=strlen(str2);for(i=len1,j=0;j<len2;i++,j++)str1[i]=str2[j];str1[i]='\0';printf("新的字符串str1為:");puts(str1);}【課后練習】判斷一方陣是不是對稱矩陣。實現兩個字符串拷貝的功能。運行折半查找法,在一個有序序列中查找某一特定的數。【實驗分析與討論】分析兩種基本排序算法的核心與兩者的不同之處。在實現字符串處理函數時的一些注意事宜及其實現方法。討論二維數組解決矩陣與行列式。實驗六:函數及其應用【目的與要求】1、掌握C中函數的定義、調用及設計。2、掌握函數嵌套調用、遞歸調用的設計。3、掌握變量、函數的作用域及存儲類?!緦嶒瀮热荨恳?、設計一個子函數對n個整數進行排序,由主函數從鍵盤接收若干個數,調用子函數進行排序,并在主函數中進行輸出顯示。1、算法分析:①子函數的設計以兩個參數來實現,一個是接收主函數傳來的數組首地址,另一個是持排序的整數個數,如fun(inta[],intn);②主函數的實現定義一整型數組,從鍵盤上接收若干個整數,調用子函數fun,再將最后的結果輸出。2、程序代碼:#include"stdio.h"voidfun(inta[],intn)//選擇排序算法{inti,j,t;for(i=0;i<n-1;i++)for(j=i+1;j<n;j++)if(a[i]>a[j]){t=a[i];a[i]=a[j];a[j]=t;}}voidmain(){inta[10],i;for(i=0;i<10;i++)scanf("%d",&a[i]);printf("輸入的數值序列為:");for(i=0;i<10;i++)printf("%4d",a[i]);printf("\n");fun(a,10);printf("輸入的數值序列為:");for(i=0;i<10;i++)printf("%4d",a[i]);}二、輸入任意兩數m,n的值,輸出下列表示式的值。S=1、算法分析編寫一函數fac(n),返回n!的值。編寫主函數,從鍵盤輸入m,n的值,調用上述fac()函數,計算表示式的值,并將其輸出。2、程序代碼#include“stdio.h”longfac(intn){if(n==1)return1;elsereturnn*fac(n-1);}voidmain(){intm,n,t;floats;printf(“pleaseinput2integernumbers:”);scanf(“%d%d”,&m,&n);if(m<n){t=m;m=n;n=t;}printf(“s=%f”,fac(m)/(fac(m-n)fac(n)));}【課后練習】若正整數A恰好出現在其平方數的右側,則稱A為一個同構數。如:5,6,76。求100以內的所有同構數。要求:(1)編寫一子函數intfun(intn),判斷給定正整數n是不是同構數,若是,返回1,否則,返回0。(2)編寫主函數,調用函數fun(),尋找并輸出100以內的所有同構數。(3)在輸出同構數的同時,要輸出其平方的值。運用遞歸,求任一個字符串的長度。【實驗分析與討論】被調函數的實現及調用過程。簡單遞歸問題的實現。實驗七:指針及其應用【目的與要求】1、了解指針的定義與應用。2、掌握使用指針變量的程序設計。了解使用函數指針的程序設計。了解使用指針數組的程序設計?!緦崿F內容】一、設計一程序,將兩個變量的值進行交換。算法分析:(1)編寫一個函數swap(int*p,int*q),交換兩個參數指針所指的數據。(2)編寫主函數,調用函數swap,將兩個變量的值進行交換。程序代碼:#include“stdio.h”voidswap(int*p,int*q);voidmain(){inta,b;printf(“請輸入兩個整數:”);scanf(“%d%d”,&a,&b);printf(“兩個數交換前順序為:a=%d,b=%d”,a,b);swap(&a,&b);printf(“兩個數交換后順序為:a=%d,b=%d”,a,b);}voidswap(int*p,int*q){intt;t=*p;*p=*q;*q=t;}二、編程實現:運用指針將字符串str2連接到字符串str1后,構成新的字符串str1。1、算法分析:本程序即實現字符串處理函數strcat()的功能。兩字符串str1和str2進行連接,要注意的是字符串的結束標志,并運用指向字符串的指針來實現。2、程序代碼:#include"stdio.h"#include"string.h"voidmain(){charstr1[20],str2[10],*p=str1,*q=str2,j,len1,len2;printf("請輸入字符串str1:");gets(str1);len1=strlen(str1);p=p+len1-1;printf("請輸入字符串str2:");gets(str2);len2=strlen(str2);for(j=0;j<len2;j++)*(++p)=*(q++);str1[len1+len2]='\0';printf("新的字符串str1為:");puts(str1);}【課后練習】1、運用指向數組的指針,求一數組中所有元素之和。2、【實驗分析與討論】實驗八:結構體及其應用【目的與要求】1、了解結構體類型的定義。2、掌握結構體類型變量的使用?!緦嶒瀮热荨坑?0個學生,每個學生包括學號、姓名、三門課的成績,從鍵盤輸入10個學生數據,要求輸出三門課中每一門課的平均成績,以及最高分學生的數據。1、算法分析:定義一個結構體類型,其中含有學號、姓名、三門課的成績、總分數據;先后根據要求解決上述問題。2、程序代碼:#include"stdio.h"typedefstructstu{intnumber;charname[4];floatlen1,len2,len3;floatscore;}student;voidmain(){studentstu[10];inti,flag;floatave[3],sum[3]={0,0,0},max=0;printf("請輸入10位同學的所有信息:");for(i=0;i<10;i++){scanf("%d%s%f%f%f",&stu[i].number,stu[i].name,&stu[i].len1,&stu[i].len2,&stu[i].len3);stu[i].score=stu[i].len1+stu[i].len2+stu[i].len3;if(stu[i].score>=max){max=stu[i].score;flag=i;}sum[0]+=stu[i].len1;sum[1]+=stu[i].len2;sum[2]+=stu[i].len3;}for(i=0;i<3;i++)ave[i]=sum[i]/3;printf("三門課的平均成績分別為");for(i=0;i<3;i++)printf("%6.2f",ave[i]);printf("\n最高分是:%d%s%6.2f%6.2f%6.2f",stu[flag].number,stu[flag].name,stu[flag].len1,stu[flag].len2,stu[flag].len3);}【實驗分析與討論】13個人圍成一圈,從第1個人開始順序報號1、2、3。凡報到“3”者退出圈子,找出最后留在圈子中的人原來的序號。實驗九:鏈表的處理【目的與要求】1、了解鍵表的相關概念。2、掌握單向鍵表的創(chuàng)立、編歷、插入、刪除等簡單處理。【內容】創(chuàng)立一個鏈表。#include"stdio.h"#include"stdlib.h"typedefstructlist{intdata;structlist*next;}list;voidmain(){list*head,*ptr;intnum,i;ptr=(list*)malloc(sizeof(list));head=ptr;printf("Pleaseinput5numbers:");for(i=0;i<5;i++){scanf("

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論