精品午夜福利中文字av_国产成人综合网_av毛片免费观看网站_欧美影视国产综合_野花香视频中文免费观看_亚洲无码要在线视频_又粗又大又用力大交换好大好爽小静_欧美贵妇v办公室高跟鞋_亚洲国产高清a∨网站_免费中文少妇亚洲

知ing

大學(xué)C/C++語言程序設(shè)計(jì)實(shí)驗(yàn)教程

陽小華 羅晨暉 編 / 電子工業(yè)出版社

王大膽 上傳

查看本書


實(shí)驗(yàn)5 ?函數(shù)定義、聲明與調(diào)用

任務(wù)1 ?函數(shù)的定義和聲明

1.預(yù)測(cè)下面程序的輸出,并上機(jī)運(yùn)行驗(yàn)證結(jié)果。(結(jié)果:21

#include <stdio.h>

func(int a,int b)

{

??int c;

??c=a+b;

??return c;

}

main(?)

{

??int x=6,y=7,z=8,r;

??r=func((x--,y++,x+y),z--);

??printf("%d\n",r);

}

2.分析推測(cè)下面程序的輸出,并上機(jī)運(yùn)行驗(yàn)證結(jié)果。(結(jié)果:12

#include <stdio.h>

unsigned fun26(unsigned num)

{

??unsigned k=1;

??do

??{ k*=num%10;num/=10; }

??while(num);

??return ?k;

}

main(?)

{

??unsigned n=26;

??printf("%d\n",fun26(n));

}

3.求出以下程序的運(yùn)行結(jié)果,并描述程序所完成的功能。

結(jié)果:s=16。功能是:求xn次冪即24次冪。

#include <stdio.h>

main(?)

{

??int power(int x,int n);

??int x=2,n=4;

??printf("\ns=%d",power( x,n));

}

int power(int x,int n)

{

??int i,p=1;

??for(i=1;i<=n;i++)

????p=p*x;

??return(p);

}

4.上機(jī)調(diào)試下面計(jì)算兩個(gè)整數(shù)之和的程序,記錄系統(tǒng)給出的出錯(cuò)信息,指出出錯(cuò)原因并予以改正。

正確代碼為:

#include <stdio.h>

int sum( int a,int b) ?//函數(shù)不能嵌套定義,所以將sun函數(shù)拉到main函數(shù)外,同

{ ??????????????????????????時(shí)形參的每個(gè)參數(shù)前都必須要有類型

?

??{

??????return (a+b);

??}

main(?)

{

int x,y;

scanf("%d,%d",&x,&y);

??printf("%d\n",sum(x,y)); ?//形參與實(shí)參的個(gè)數(shù)要一致,所以將加號(hào)改成逗號(hào)。

?

}

?

5.上機(jī)調(diào)試下面判斷n是否是素?cái)?shù)的程序,函數(shù)fun中有邏輯錯(cuò)誤,調(diào)試并改正。

正確代碼為:

#include <stdio.h>

fun(int n)

{

??int k,yes=1;

??for(k=2;k<=n/2;k++)

????if(n%k==0) ?{yes=0; break;} ??//反證法證明,找到一個(gè)就跳出,否則會(huì)被后面覆蓋

????else ?yes=1;

??return ?yes;

}

main(?)

{

??int n;

??scanf("%d",&n);

??if(fun(n?)) ????//main函數(shù)中的函數(shù)調(diào)用fun()改成fun(n),因?yàn)閷?shí)參的個(gè)數(shù)應(yīng)與形參對(duì)應(yīng)

????printf("%d:yes!\n",n);

??else

????printf("%d:no!\n",n);

}

6.下面程序中,函數(shù)fun的功能是根據(jù)形參m計(jì)算公式T=1/1!+1/2!+1/3!++1/m!的值,上機(jī)調(diào)試,請(qǐng)改正程序中的錯(cuò)誤。當(dāng)從鍵盤輸入10時(shí),給出程序運(yùn)行的正確結(jié)果(按四舍五入保留10位小數(shù))。

正確代碼為:(輸入10時(shí)的結(jié)果:1.7182818011)

#include <stdio.h>

main(?)

{?double fun(int m); ?//先調(diào)用再定義,且不是能缺省的int型,請(qǐng)加上函數(shù)說明。

??int m;

??printf("\n input ?m:");

??scanf("%d",&m);

??printf("\n t=%12.10lf \n",fun(m));

}

double fun(int m)

{

??double fac,t=0.0;

??int i=1,j;

??for(i=1;i<=m;i++)

??{

????fac=1.0;

????for(j=1;j<=i;j++) ?fac=fac*j; ?//邏輯有誤,改為:for(j=1;j<=i;j++) ?fac=fac*j;這樣才表示求i!,原程序行是求im次方。

????t+=1.0/fac;

??}

??return t;

}

任務(wù)2 ?函數(shù)的嵌套調(diào)用

1.跟蹤調(diào)試下面程序,注意函數(shù)調(diào)用的過程中形參、實(shí)參的關(guān)系。記錄并分析結(jié)果;將形參a,b對(duì)應(yīng)改為x,y,使之與實(shí)參變量同名,記錄并分析結(jié)果。

#include <stdio.h>

main(?)

{

??int t,x=2,y=5;

??int swap(int,int);

??printf("(1) in main: x=%d,y=%d\n",x,y);

??swap(x,y);

??printf("(4) in main: x=%d,y=%d\n",x,y);

}

swap(int a,int b)

{

??int t;

??printf("(2) in swap: a=%d,b=%d\n",a,b);

??t=a;

??a=b;

??b=t;

??printf("(3) in swap: a=%d,b=%d\n",a,b);

}

結(jié)果:

(1) in main: x=2,y=5

(2) in swap: a=2,b=5

(3) in swap: a=5,b=2

(4) in main:?x=2,y=5

將形參a,b對(duì)應(yīng)改為x,y 結(jié)果:

(1) in main: x=2,y=5

(2) in swap: x=2,y=5

(3) in swap: x=5,y=2

(4) in main: x=2,y=5

結(jié)論:無論實(shí)參、形參是否同名,交換的只是子函數(shù)(swap)中兩個(gè)變量的值。主函數(shù)中的x,y的值沒有變。

2.若輸入23,求以下程序的運(yùn)行結(jié)果,分析函數(shù)嵌套調(diào)用的執(zhí)行過程。

#include <stdio.h>

long sum(int a,int b);

long factorial(int n);

main(?)

{

??int n1,n2;

??long a;

??scanf("%d,%d",&n1,&n2);

??a=sum(n1,n2);

??printf("a=%ld",a);

}

long sum(int a,int b)

{ ?

??long c1,c2;

??c1=factorial(a);

??c2=factorial(b);

??return(c1+c2);

}

long factorial(int n)

{ ??

??long rtn=1;

??int i;

??for(i=1;i<=n;i++)

????rtn*=i;

??return(rtn);

}

(結(jié)果為:a=8。程序功能:求n1!+n2! 即:2!+3?。?/span>

3.運(yùn)行下面程序,寫出運(yùn)行結(jié)果。

#include "stdio.h"

main(?)

{

??int i=5;

??void palin(int n);

??printf("please input 5 characters: ");

??palin(i);

??printf("\n");

}

void palin(int n)

{

??char next;

??if(n<=1)

??{

????next=getchar(?);

????printf("\n\0: ");

????putchar(next);

??}

??else

??{

?????next=getchar(?);

?????palin(n-1);

?????putchar(next);

??}

}

(程序功能:實(shí)現(xiàn)將從鍵盤輸入的5個(gè)字符逆序輸出。如輸入:abcde.輸出:edcba

?

4.寫出下面程序的輸出結(jié)果。

#include "stdio.h"

int abc(int u,int v);

main (?)

{

??int a=24,b=16,c;

??c=abc(a,b);

??printf("%d\n",c);

}

??int abc(int u,int v)

??{

????int w;

????while(v)

????{ w=u%v; u=v; v=w;}

????return u; ?

??}

(程序功能:求兩數(shù)的最大公約數(shù)即2416的最大公約數(shù)。結(jié)果:8

?

實(shí)驗(yàn)6 ?函數(shù)遞歸調(diào)用、變量的存儲(chǔ)類型及編譯預(yù)處理

任務(wù)1 ?函數(shù)的遞歸調(diào)用

1fact(j-1)*j

2gcd(n,m%n)

???m<n

3//for(j=0;j<=n-i;j++)

//printf("");//刪除這兩行,因?yàn)轫敻褫敵?,不要空行了?/span>

y==1||y==x

??z=c(x-1,y-1)+c(x-1,y)

4程序代碼如下

#include<stdio.h> ????????????????????????

fib(int n) ??????????????????????????????????????

{ ???????????????????????????????????????????????????????

int f; ????????????????????????????????????????

????if(n==1||n==2) ?????????????????????????????

f=1; ?????????????????????????????????????????????

else ?????????????????????????????????????????

f=fib(n-1)+fib(n-2);

return(f); ??????????????????????????????

}

main()

{

int n,i,s=0;

printf("Input n=");

scanf("%d",&n);

for(i=1;i<=n;i++)

???s=s+fib(i);

???????printf("n=%d,s=%d\n",n,s);

??}

任務(wù)2 ?變量的存儲(chǔ)類型與編譯預(yù)處理

1t1=4,t2=12,b=100

???a=2,b=4

2(1):1 ??(2):2 ??(3):11 ??(4):3 ??(5):2

37 ????8 ????9

4Y=7

5Y=3

612

???7

7.程序代碼如下:

#include "stdio.h"

#define MAX(A,B) (A)>(B)?(A):(B)

#define ZMAX(A,B,C) MAX(MAX(A,B),C)

main()

{ ?int a,b,c,t;

???printf("input a,b,c:");

???scanf("%d,%d,%d",&a,&b,&c);

???t=ZMAX(a,b,c);

???printf("max of a,b,c:%d\n",t);

}


查看更多