PTA函数实验
题目一:7-1
1.本题PTA提交列表
2.设计思路(包括流程图),主要描述题目算法
1.分析题目要求的那个表达式
2.提取出里面的阶乘定义一个新的函数fact
3.使用定义的函数计算结果
最终得到代码
#include<stdio.h> double fact(double z) { double i,a=1; for (i=1;i<=z;i++) a=a*i; return a; } int main() { double x,y,m,n; scanf("%lf",&m); scanf("%lf",&n); y=fact(n-m); m=fact(m); n=fact(n); x=n/(y*m); printf("result=%.0f",x); }
执行后发现
经过检查后发现 在最后的输出的时候,在result和=之间少了空格
修改后的代码如下
#include<stdio.h> double fact(double z) { double i,a=1; for(i=1;i<=z;i++) a=a*i; return a; } int main() { double x,y,m,n; scanf("%lf %lf",&m,&n); y=fact(n-m); m=fact(m); n=fact(n); x=n/(m*y); printf("result = %.0lf",x); }
执行后
题目二:7-3
1.本题PTA提交列表
2.设计思路(包括流程图),主要描述题目算法
1.首先设计一个子函数,其中调用了math的pow函数
2.再设计含有一个循环的主函数
得到的代码如下
#include<stdio.h> #include<math.h> int fact(int i); main() { int i,j,k,sum=0; scanf("%d",&i); for(j=1;j<=i;j++){ k=pow(2,j); sum+=k; } printf("result = %d",sum); } int fact(int i) { int s; s=pow(2,i); return s; }
运行的结果如下
题目三:7-10
1.本题PTA提交列表
2.设计思路(包括流程图),主要描述题目算法
1.先定义一个函数用来判断输入的数是否为素数此步骤中与循环中判断素数的方法一致为了减少循环次数要使用到math函数中的sqrt函数
2.在主函数中使用一次循环用来输入n个数字,然后每个数字执行子函数然后输出结果
得到的代码如下
#include<stdio.h> #include<math.h> int sushu(int n) { int i; if(n==1) return 0; for(i=2;i<=sqrt(n);i++) { if(n%i==0) return 0; } return 1; } int main() { int a,n,i; scanf("%d",&a); for(i=0;i<a;i++) { scanf("%d",&n); if(sushu(n)) printf("Yes"); else printf("No"); } }
运行后发现如下
经过分析发现是以为我的判断语句没有将其放到所需要的if后面
修改后得到
#include<stdio.h> #include<math.h> int sushu(int n) { int i; if(n==1) return 0; for(i=2;i<=sqrt(n);i++) { if(n%i==0) { return 0; } } return 1; } int main() { int a,n,i; { scanf("%d",&a); } for(i=0;i<a;i++) { scanf("%d",&n); if(sushu(n)) { printf("Yes\n"); } else printf("No\n"); } }
运行后发现
二、同学代码互评
我的代码
#include<stdio.h> #include<math.h> int sushu(int n) { int i; if(n==1) return 0; for(i=2;i<=sqrt(n);i++) { if(n%i==0) { return 0; } } return 1; } int main() { int a,n,i; { scanf("%d",&a); } for(i=0;i<a;i++) { scanf("%d",&n); if(sushu(n)) { printf("Yes\n"); } else printf("No\n"); } }
同学杨良的代码
#include<stdio.h> #include<math.h> int ss(int m) { int i,k; if(m==1) return 0; k=(int)sqrt(m); for(i=2;i<=k;i++) if(m%i==0) break; if(i>k) return 1; else return 0; } main() { int N,m,x; int a[10]; scanf("%d",&N); for(m=0;m<N;m++){ scanf("%d",&a[m]); } for(m=0;m<N;m++) { x=a[m]; x=ss(x); if(x==1) printf("Yes\n"); else if(x==0) printf("No\n"); } }
我的代码相比较他的代码更加的简洁,思维简单清晰,他的代码相对较复杂
我更喜欢自己的代码
四、本周学习总结
1.本周你学会了什么?
1.本周学会如何简单的声明一个函数并且调用函数;
2.还有return0和return1的用法
3.知道了如何讲复杂的代码化为一个一个子函数代码
2.本周的内容,还有那些内容不会?
1.在一些概念方面还是容易出错,并且不能够自己独立的很好的写出代码,属于模仿别人代码的阶段。
1.本周你学会了什么?
1.本周学会如何简单的声明一个函数并且调用函数;
2.还有return0和return1的用法
3.知道了如何讲复杂的代码化为一个一个子函数代码
2.本周的内容,还有那些内容不会?
1.在一些概念方面还是容易出错,并且不能够自己独立的很好的写出代码,属于模仿别人代码的阶段。
2.还是需要多练习,将别人的代码变成自己的代码