zoukankan      html  css  js  c++  java
  • C语言I博客作业03

    这个作业属于哪个课程 班级的链接
    这个作业要求在哪里 作业要求的链接
    这个作业的目标 1.要求学生掌握使用for循环语句;2.加深我们对所写代码的理解;3.总结这两周的学习。
    学号 20209188

    1.PTA实验作业

    1.1 求平方根序列前N项和

    —— 题目内容描述:计算平方根序列√1+√2+√3+⋯的前N项之和。可包含头文件math.h,并调用sqrt函数求平方根。

    1.1.1实验代码截图

    1.1.2数据处理

    • 数据表达:使用了浮点型sum与整数型N

    • 数据处理: sum使用了一个反复相加,使用了循环结构

    1.1.3 PTA提交列表及说明

    • 调用pow函数忘记输入 #include<math.h> 头文件

    • 没有看清题目要求,输出结果没有保留小数点后两位

    1.2 求简单交错序列前N项和

    —— 题目内容描述: 计算序列 1 - 1/4 + 1/7 - 1/10 + ... 的前N项之和。

    1.2.1 实验代码截图

    1.2.2 数据处理

    • 数据表达:使用了三个变量,一个整数型N,两个浮点型n,sum

    • 数据处理:使用了简单的循环结构

    1.2.3 PTA提交列表及说明

    • 码代码时把 printf 放在了 for 循环中

    • 一开始没有使用 &,导致报错

    1.3 求分数序列前N项和

    —— 题目内容描述:计算序列 2/1+3/2+5/3+8/5+... 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。

    1.3.1 实验代码截图

    1.3.2 数据处理

    • 数据表达:使用了整数型 N,i,和浮点型 sum , num1 , num2 , z

    • 数据处理:使用了简单的循环结构

    1.3.3 PTA提交列表及说明

    • 一开始num1,num2的初始赋值错误,导致输出结果错误

    • 一开始没有全部使用了整数型

    • 一开始没有看清题目,分子分母的特点没看清,以为只是简单的叠加变数

    2.阅读代码

    题目要求:找一份优秀代码,理解代码功能,并讲出你所选代码有点及可以学习的地方

    代码如下:

    include

    include

    include

    include

    include

    include

    include

    include

    include

    include<time.h>

    include

    define cl(a,b) memset(a,b,sizeof(a))

    define max(x,y) ((x)>(y)?(x):(y))

    define min(x,y) ((x)<(y)?(x):(y))

    define REP(i,n) for(int i=0;i<n;++i)

    define REP1(i,a,b) for(int i=a;i<=b;++i)

    define REP2(i,a,b) for(int i=a;i>=b;--i)

    define MP make_pair

    define LL long long

    define ULL unsigned long long

    define X first

    define Y second

    define MAXN 100050

    using namespace std;
    int p,b,n;
    struct node
    {
    int a,id;
    }q[MAXN];
    bool cmp(node a,node b)
    {
    return a.a<b.a||(a.ab.a&&a.id<b.id);
    }
    int qmod(int a,int b,int c)
    {
    int res=1;
    while(b)
    {
    if(b&1)
    res=((LL)resa)%c;
    a=((LL)a
    a)%c;
    b>>=1;
    }
    return res;
    }
    int main()
    {
    while(scanf("%d%d%d",&p,&b,&n)!=EOF){
    int m=sqrt(p1.0);
    while(m
    m<p)m++;
    int res=1;
    int tail=0;
    int a=qmod(b,m,p);
    for(int i=0;i<=m;++i)
    {
    q[tail].id=i;
    q[tail++].a=res;
    res=((LL)res*b)%p;
    }
    sort(q,q+tail,cmp);
    int h=0;
    for(int i=0;i<tail;++i)
    {
    if(i
    0||q[i].a!=q[i-1].a)
    {
    q[h++]=q[i];
    }
    }

    	int flag=0,ans;
    	res=n;
    	int ra=qmod(a,p-2,p);
    	for(int i=0;i<=m;++i)
    	{
    		int l=0,r=h-1;
    		while(r-l>1)
    		{
    			int mid=(l+r)>>1;
    			if(q[mid].a>res)r=mid;
    			else l=mid;
    		}
    		int pos=-1;
    		if(q[l].a==res)pos=l;
    		if(q[r].a==res)pos=r;
    		if(pos!=-1){
    			ans=i*m+q[pos].id;
    			flag=1;
    			break;
    		}
    		res=((LL)res*ra)%p;
    	}
    	if(flag==0)puts("no solution");
    	else
    		printf("%d\n",ans);
    }
    

    }

    ——优点:

    • 带代码的可读性高,变量的作用清晰明了

    • 思路清晰,多种可能都想到了

    • 运用多种判断,循环语法,把每一种语法的优点都发挥出来了

    • 运用了多种头文件,每一种头文件所拥有的函数的作用都有运用

    ——所学到的:

    • 做题前要把思路想清,要把所要使用的头文件都提前想好

    • 多用英文命名变量,是代码的可读性变高

    • 代码的使用要正确,多种语法都要熟记于心

    3.学习总结

    3.1 学习进度条

    周/日期 这周所花的时间 代码行 学到的知识点简介 目前比较迷惑的问题
    第8周/10.19~10.25 36 h 410 if-else语句,for循环
    第9周/10.26~11.1 36 h 840 数组的运用 二维数组的输入,和输出不太了解
    第10周/11.2~11.6 36 h 1290 本周复习 函数的定义不理解

    3.2 累积代码行和博客字数

    3.3 学习感悟

    • 通过几周的学习我深刻认识到了程序的魅力所在,尤其在写作业时可以使用不同的语句,但其在代码里面所代表的含义是一样的

    • 以前命名变量时没有考虑代码的可读性,但通过阅读一些好的代码我明白了代码可读性的重要性

  • 相关阅读:
    BUU-singal
    BUU-[GWCTF 2019]re3
    BUU-[2019红帽杯]xx
    BUU-BabyDriver
    BUU-simple CPP
    BUU-BJD hamburger competition
    BUU-Youngter-drive
    用于阻止div上的事件和div上的按钮的事件同时触发
    错误: java.lang.reflect.InvocationTargetException
    easy ui datagrid 让某行复选框不能选中
  • 原文地址:https://www.cnblogs.com/love0017/p/13942207.html
Copyright © 2011-2022 走看看