二、PTA实验作业(函数)

题目一:

1.本题PTA提交列表:

 2.设计思路(包括流程图),主要描述题目算法

    //由题目,设计思路如下

     1.该题目可以将一个公式拆分为三个子函数

     2.声明一个fact()子函数用于求分子n!;然后多次调用这个函数

     3.最后在主函数中调用三次函数组合成一个公式就可的到最终的结果

     4.流程图如下:

     最终的代码如下:

#include<stdio.h>
double fact(int i);
main()
{
	int i,n,m,N,M,B,result;
	scanf("%d %d",&m,&n);
	N=fact(n);
	M=fact(m);
	B=fact(n-m);
	result=N/(B*M);
	printf("result = %d",result);
	
	
}
double fact(int i)
{
	int j,s=1;
	for(j=1;j<=i;j++)
		s=s*j;
	return s;
}

  

3.本题调试过程碰到的问题及PTA提交的情况说明(**注意:调试过程必须截图说明如何调试,如何解决问题,PTA提交的列表中的每一个错误详细说明为什么及如何解决)

        编译上传之后出现部分错误,多次修改之后还是有错误,与同学对比,也没有结果,便不了了之

题目二:

1.本题PTA提交列表:

 2.设计思路(包括流程图),主要描述题目算法

      //由题目,设计思路如下

      1.利用for()循环语句和数学公式sqrt(),先声明一个函数用于求2的指数幂之和

      2.在主函数中需要定义整型变量n,result;

      3.输入n的值,并且把n的值传递给子函数

      4.最后根据题目要求输出子函数返回的值

      5.流程图如下:

      最终的代码如下:

#include<stdio.h>
#include<math.h> 
double fact(int i);
main()
{
    int i,j,k,result=0;
    scanf("%d",&i);
    for(j=1;j<=i;j++){
        k=pow(2,j);
        result+=k;
    }
    printf("result = %d",result);    
}
double fact(int i)
{
    int s;
    s=pow(2,i);
    return s;
}

3.本题调试过程碰到的问题及PTA提交的情况说明(**注意:调试过程必须截图说明如何调试,如何解决问题,PTA提交的列表中的每一个错误详细说明为什么及如何解决)

     一开始忘记参照题目格式,出现格式错误,后来修改之后,便正确了

题目三:

  1.本题PTA提交列表:

2.设计思路(包括流程图),主要描述题目算法

    //由题目,设计思路如下

     1.该题目可以将一个公式拆分为两个子函数

     2.声明一个sushu()子函数用于判断素数,另外一个用来控制循环

     3.最后在主函数中函数

     4.流程图如下:

     最终的代码如下:

#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
");
        else if(x==0)
        printf("No
");
    }
}

3.本题调试过程碰到的问题及PTA提交的情况说明(**注意:调试过程必须截图说明如何调试,如何解决问题,PTA提交的列表中的每一个错误详细说明为什么及如何解决)

在第一次编写之后,总是运行不出正确答案,后来发现,自己粗心,把1当做素数来判断,导致出现问题,后加以修改,便成功的出所要的语句。

二、同学代码互评

   1.我的代码:

#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
");
        else if(x==0)
        printf("No
");
    }
}

   2.同学:李嘉林

      同学的代码:

#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
");
}
}

   3.我和同学的代码有哪些不同?各自有哪些优势?你更喜欢那种代码的风格?

李同学的代码更短,也更简单,我思考问题复杂化了,我的更适合新手,比较喜欢她的代码

三、截图本周题目集的PTA最后排名

四、本周学习总结

  1.本周你学会了什么?

   1.本周学会简单的声明一个函数,调用函数;

   2.以及声明函数过程的参数的选择

   3.学会了如何把一个复杂的函数拆分为多个简单的函数 

  2.本周的内容,还有那些内容不会?

   1. 一些较复杂的函数还不会如何声明,比如指数型的函数,对于参数总是容易弄错

原文地址:https://www.cnblogs.com/LSCOOLYI/p/8138207.html