C语言上机练习题 (1)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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)); }