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 学习感悟

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

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

原文地址:https://www.cnblogs.com/love0017/p/13942207.html