• C语言博客作业--函数


    一、PTA实验作业

    题目1:使用函数输出水仙花数

    1. 本题PTA提交列表

    2.设计思路

    -水仙花数判断(int narcissistic( int number )):
    • 1.计算接收的数字number的位数,即幂数 for(i=number;i>0;i/=10) n++;
    • 2.计算各位数的n次幂之和 (i=number;i>0;i/=10) sum+=pow(i%10,N);
    • 3.当各位数n次幂之和sum==number,返回1,否则返回0;
    -打印m到n之间的水仙花数:
    • 调用narcissistic()函数判断m到n之间的各数是否为水仙花数,输出其间所有水仙花数for(v=m+1;v<=n-1;v++) if(narcissistic(v)) printf("%d ",v);

    3.本题调试过程碰到问题及PTA提交列表情况说明。

    • 无问题.

    题目2:求组合数

    1. 本题PTA提交列表

    2.设计思路

    -定义fact()函数计算阶乘:
    • 定义初始化为1的变量flag
    • 计算并返回接收数字的阶乘 for(int i=1;i<=x;i++) fact*=i; return fact;
    -主函数:
    • 定义变量m,n.输入m和n
    • 输出组合数result = fact(n)/( fact(m)*fact(n-m) ).

    3.本题调试过程碰到问题及PTA提交列表情况说明。

    • 无问题

    题目3:使用函数验证哥德巴赫猜想

    1. 本题PTA提交列表

    2.设计思路

    -定义prime()函数判断素数:
    • for(int i=2;i<=sqrt(num);i++) if(p%i==0) break;
      if(i>sqrt(num)&&num!=1) return 1;
      return 0;
    -输出分解式
    • 1.定义其中一个因子为p,则另一个因子为n-p
    • 2.循环判断p及num-p是否都为素数.
    • 3.因要求输出所有解中p最小的解,初设p为3,每完成一次循环p+=2
    • 4.当满足条件时,输出n=p+(n-p). 并退出循环
      if(prime(p))
      if(prime(n-p))
      {
      printf("%d=%d+%d",n,p,n-p);
      break;
      }

    3.本题调试过程碰到问题及PTA提交列表情况说明


    一开始判断条件写错 p != 1 写成 i != 1导致输出全错. 改正后解决问题.

    二、同学代码结对互评

    1.同学互评照片。

    2.我的代码、互评同学代码截图

    我的代码
    int fib( int n )
    {
    	int flag,flag1=1,flag2=1;
    	if(n==1||n==2) return 1;
    	for(int i=3;i<=n;i++)
    	{
    		flag=flag1+flag2;
    		flag1=flag2;
    		flag2=flag;
    	}
    	return flag;
    }
    void PrintFN( int m, int n )
    {
    	for(int u=1;fib(u)<=n;u++){
    		if(fib(u)>=m){
    			printf("%d",fib(u));
    			if(fib(u+1)>n) return ;
    			printf(" ");
    		}
    	}
        printf("No Fibonacci number");
    }
    
    陈文杰的代码
    int fib( int n )
    {
        int count=0,total=0,middle=0,i;
        for(i=1;i<n;i++)
        {
            middle=count;
            total=total+middle;
            count=total-middle;
        }
        return total;
    }
    void PrintFN( int m, int n )
    {
    	int j,i,judge=0;
    	if(m==1||m==0)
    	printf("1 ");
    	for(i=m;i<=n;i++)
    	{         
    		for(j=1;j<=100;j++)
    		{
    			if(fib(j)==i)
    			{
    				printf("%d",i);
    				judge=i;
    				i=10001;
    			}
    		}
    	}
    	if(judge!=0)
    	{
    		for(i=judge+1;i<=n;i++)
    		for(j=1;j<=100;j++) if(fib(j)==i) printf(" %d",i);
        }
    	if(judge==0) printf("No Fibonacci number");
    }
    

    3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。

    • 陈文杰用judge变量判断是否存在Fibonacci数.我的代码中,一旦满足m<=fib(u)<=n,即存在Fibonacci数时,函数便只会在循环内结束调用,否则将在循环结束时输出No Fibonacci number并结束函数调用.
    • 我更喜欢我的代码.

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

    四、本周学习总结

    1.你学会了什么?

    1.1 C语言哪数据类型?

    • 空类型(void); 整型(int),短整型(short),长整型(long); 单精度浮点型(float),双精度浮点型(double); 字符型变量(char).

    1.2 字符型数据需要注意地方?

    • 字符型变量的输入只能接收一个字符.
    • 可以输出为整型或浮点型.
    • 可以用转义字符的方式输入.

    1.3 自增自减运算符?

    • 自增(自减)运算符为单目运算符.即只需要一个变量.
    • 运算符:++(--)能使变量的值增加(减少)1
    • 如果运算符前置,则先运算再对表达式赋值;如果后置,则先对表达式赋值再进行运算.

    1.4 运算符优先级?

    1.5 C语言哪些表达式?课堂派哪里做错,做错的请在这里分析原因?

    • 算术表达式(+ - * /)
    • 关系表达式(> >= < <= == !=)
    • 赋值表达式(-= += *= /= %= =)
    • 条件表达式:exp?:exp1,exp2; 当exp为真时,表达式的值为exp1的值,否则为表达式2的值.
    • 逗号表达式:表达式1,表达式2...表达式n 其表达式的值为表达式n的值.
    • 逻辑表达式:!,&&,||

    2.本周的内容,你还不会什么?

    • 基本理解.

    3.循环结构考试总结

    • 做第五题的时候有点急,改来改去发现在第一次提交的代码中加入一些判断就可以通过.
    • 本次考试结果能接受.
  • 相关阅读:
    第一课基础知识
    Linux基础命令
    IO&Process基础知识
    caffe-windows 运行matlab 接口的例子
    process 3d image using caffe
    caffe-windows配置 cuda6.5+vs2012
    cuda7.0安装windows+vs2012
    SGD步长
    Exercise: Convolutional Neural NetworkCNN的反向求导及练习
    Create sparse matrix:sparse
  • 原文地址:https://www.cnblogs.com/wu98/p/7857217.html
Copyright © 2020-2023  润新知