《C語言程序設計》(江寶釧著)實驗五答案_第1頁
《C語言程序設計》(江寶釧著)實驗五答案_第2頁
《C語言程序設計》(江寶釧著)實驗五答案_第3頁
《C語言程序設計》(江寶釧著)實驗五答案_第4頁
《C語言程序設計》(江寶釧著)實驗五答案_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、5.4 實驗五 函數與預處理一、實驗目的與要求 1. 掌握C語言函數的定義方法、函數的聲明及函數的調用方法。2. 理解函數實參與形參的對應關系以及“值傳遞”的方式。3. 掌握全局變量和局部變量動態變量、靜態變量的概念和使用方法。4. 掌握動態存儲分配的方法。5. 掌握宏定義和文件包含處理方法。6. 實驗4學時二、實驗內容1程序驗證與改錯題(1) 程序驗證題 下面程序執行的結果是什么 void swap(int x, int y) int temp; temp=x; x=y; y=temp;void main() int a,b; scanf(“%d%d”, &a,&b); if

2、(a>b) swap(a, b); printf(“%dt %d”, a,b);思考:為什么a,b的值沒有交換?答:修改后的函數為#include<stdio.h>void swap(int &x, int &y)int temp;temp=x;x=y;y=temp;void main()int a,b;scanf("%d%d",&a,&b); swap(a,b); /if語句被去掉/printf("%dt %dn", a,b); 因為調用函數中改變的是形參而非實參,加上&,其意義是改變實參的地址

3、。If語句中,只有當a>b時才交換a,b的值 去掉后 在任何情況下都交換a,b的值 調用函數fun計算:m=1+2+3+4+9+10,并輸出結果。請驗證下面的程序是否符合題目要求。#include”stdio.h”int fun(int n) int m, i;for (i=1; i<=n; i+) m+=i;return m;void main() printf("m=%dn", fun(10);在上面程序的基礎上,修改程序. 計算m=1-2+3-4+9-10。答:#include<stdio.h>int fun(int n) int m=0,i;

4、for (i=1;i<=n;i+)if(i%2=1)m+=i;elsem-=i;return m;void main()printf("m=%dn",fun(10);2程序改錯題 以下程序的功能是利用自定義函數計算一無符號的整數各位數字的乘積。#include<stdio.h>unsigned f(unsigned num) unsigned k=0; do k*=num/10; num/=10; while(k); return k; void main() int x; printf(“input x=:n”); scanf(“%d”, x); pri

5、ntf(“%d”, f(x);答:#include<stdio.h>unsigned f(unsigned num) unsigned k=1; do k*=num%10; num/=10; while(num!=0); return k; void main() int x; printf("input x=:n"); scanf("%d",&x); printf("%d", f(x);2一般編程題編程題1 編寫一函數,把輸入的4個數字字符轉換成一個int數據存放,如輸入4123這字符轉換為4123這個整數,并通

6、過主函數驗證結果。答:#include<stdio.h>int f(char c)int a;a=int(c)-48;return a;void main()int a,b=0;char c;while(c=getchar()!='n')a=f(c);b=b*10+a;printf("%dn",b);printf("%d+%d=%dn",b,b,b+b);printf("n");編程題2 編寫程序求:1*1*1+2*2*2+3*3*3+4*4*4+5*5*5提示:主函數用來現實結果,f1( )函數用來求一個

7、數的立方,f2( )函數用來求和。#include <stdio.h>int f1(int n)int f2(int m)void main() 答:1解使用庫函數#include<stdio.h>void main()int i=4;char temp;int result=0;temp=getchar();while(temp!='n')result*=10;result+=(int)temp-48);temp=getchar();printf("%cn",temp);printf("%dn",result);

8、2解使用stdlib 庫函數中的atoi ()函數# include <stdio.h># include <stdlib.h>void main ()int num;char str30;gets(str);num = atoi(str);printf("num to int:%dn",num);編程題3 定義兩個帶參數的宏,將兩個參數的值相加和相減,并寫出程序,輸入兩個數作為使用宏時的實參。輸出相加和相減后的和與差。答:#include <stdio.h>#define P(m,n) m+n;#define Q(m,n) m-n;vo

9、id main()int m,n,p,q;scanf("%d %d",&m,&n);p=P(m,n);q=Q(m,n);printf("%d=%d+%dn",p,m,n);printf("%d=%d-%dn",q,m,n);編程題4 編程輸出2到10000之間的所有完數。所謂完數是指因子之和與它本身相等的數。如6=1+2+3,6是一個完數。要求:定義函數 factor(m) 判斷m是否為完數;由主函數調用它,來對所有2到10000之間的所有數進行判斷。#include <stdio.h>#include &

10、lt;math.h>int factor(int m) int i,s=0; void main() int i,m,sum; 答:#include <stdio.h>#include <math.h>int factor(int m) int i,s=0;for(i=1;i<m;i+)if(m%i=0)s+=i;if(s=m)return s;elsereturn 0;void main() int i,m,sum;m=10000;for(i=2;i<=m;i+)sum=factor(i);if(sum>0)printf("%d &q

11、uot;,sum);printf("n");3較難編程題編程題1 用函數調用實現求兩個數的最大公因子和最小公倍數答:#include <stdio.h>#include <math.h>int f(int m,int n) int i;for(i=1;i+)if(m=n)break;if(m>n)m=m-n;elsen=n-m;return n;int g(int x,int y,int z)int i;i=x*y/z;return i;void main()int a,b,c,d;scanf("%d %d",&a,

12、&b);c=f(a,b);d=g(a,b,c);printf("最大公因子:%dn",c);printf("最小公倍數:%dn",d);編程題2 用遞歸方法求1+2+3+并將其中素數去除后之和。#include <stdio.h>#include <math.h>int isprime (int number) long fact(int n) void main() int m,sum; 答:#include <stdio.h>#include <math.h>int isprime (int number) int i;for(i=2;i<number;i+)if(number%i=0)break;if(i=number)return 0;elsereturn number;lon

溫馨提示

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

評論

0/150

提交評論