C语言上机练习题 (1)

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

上机任务十三答案

实验内容:

1.打开程序mod13_1.c,程序填空。程序要求:fac函数通过指针返回n!,主函数定义指针,调用fac函数,打印结果。

#include

void fac(float *f,int n)

{ int i;

float y=1;

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

y=y*i;

*f=y;

}

void main( )

{ int m;

float k;

printf("input m:");

scanf("%d",&m);

fac(&k,m);

printf("result=%f",k);

}

2.打开程序mod13_2.c,编写一个函数实现将一个字符串s1中的数字字符复制到另一字符串s2中,函数定义void nc (char *s1, char *s2)。

#include

#include

void nc(char *s1,char *s2)

{int i,j=0;

for(i=0;s1[i]!='\0';i++) 或者 for(i=0;i

if(s1[i]>='0'&&s1[i]<='9')

{s2[j]=s1[i];j++;}

s2[j]='\0';

}

void main()

{char str[80],c[80];

printf("input string:");

gets(str);

nc(str,c);

printf("the digit string is: %s\n",c);

}

或者 nc函数也可以用指针实现:

void nc(char *s1,char *s2)

{

for( ;*s1!='\0';s1++) 或者 for( ;*s1;s1++)

if(*s1>='0'&& *s1<='9')

{*s2=*s1;s2++;}

*s2=0;

}

3.打开程序mod13_3.c,课本P234页,例7.33用递归方法实现输出斐波那契数列前20项。

#include

int fib(int n)

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

return 1;

else

return fib(n - 2)+fib(n - 1);

}

void main()

{ int i;

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

{ printf("%12d",fib(i));

if (i%5==0) printf("\n");

}

printf("\n");

}

4.打开程序mod13_4.c,编写一个函数实现用“折半”查找一个数是否在一个有序的数组中,若在数组中,则输出该数在数组中的位置,若不在则输出“not found”。

#include

int search(int a[], int n, int key)

{int top,bottom, mid,result=-1;

if (key>=a[0]&&key<=a[n-1])

{top = 0; bottom = n-1;

while(top<=bottom && result==-1)

{mid =(top+bottom)/2;

if(a[mid]==key)

result=mid;

else if (a[mid]

top=mid+1;

else

bottom=mid-1;

}

}

return (result);

}

void main( )

{ int a[10]={1,7,9,12,23,35,43,51,68,89};

int k,f;

printf("input search num:");

scanf("%d",&k);

f=search(a,10,k);

if (f==-1)

printf("not found\n");

else

printf("%d is the %d element of array\n",k,f);

getch();

}

5.打开程序mod13_5.c,编写一个函数实现用牛顿迭代法求一元方程ax3+bx2+cx+d=0的在1附近根,函数定义float s(float a,float b,float c,float d) ;测试数据:a b c d 输入1 2 3 4,输出-1.650629。

#include

#include

float s(float a,float b,float c,float d)

{float x=1,x0,f,f1;

do

{x0=x;

f=((a*x0+b)*x0+c)*x0+d;

f1=(3*a*x0+2*b)*x0+c;

x=x0-f/f1;

} while (fabs(x-x0)>=1e-5);

return(x);

}

void main()

{float a,b,c,d;

printf("input a b c d\n");

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

printf("x=%f\n",s(a,b,c,d));

}

相关文档
最新文档