c语言博客作业-函数
一PTA实验作业
题目一6-9 使用函数验证哥德巴赫猜想
1.本题PTA提交列表
2.设计思路
第一个函数
- 1.定义i为循环变量
- 2.如果p=1,return 0;
- 3.使用for循环,for(i=2;i<p;i++){
if(p%i==0)return 0;
}
return 1; - 4.第二个函数,定义变量k,l,j,都用于控制循环次数
- 5.使用for循环,当k小于要分解的n时,进入下一步
- 6.使用for循环,当j小于n-k时,j递增
- 7.如果所有小于n-k的 j 都不能被n-k整除,说明n-k时素数,进入第八步。
- 8.使用for循环,令l从2递增到 k,如果所有的 l 都不能被 k 整除,说明 k 也是素数。进入第九步
- 9.输出算式n=k+(n-k)
3.本题调试过程碰到问题及PTA提交列表情况说明
- 在判断n-k是否为素数时,我使用的时 if ( n-k )%j0,就说明它非素数,但我忽略了当(n-k)=j时也符合该if语句,所以我在后续判断 k 是否为素数时的条件改为 if((n-k)j)才进入循环。一图为第一次的,二图为改正后的。
- 第一次写的时候忘了判断 k 是否为素数,当判断完n-k是素数就直接输出语句了
题目二6-8 使用函数输出指定范围内的Fibonacci数
1.本题PTA提交列表
2.设计思路
第一个函数
- 1.定义变量i控制循环次数,z为Fibonacci数,k,l辅助z的增值
- 2.如果n为1,返回1;如果n大于1,执行第三步
- 3.给z,k,l赋初值分别为1,1,0
- 4.for(i=2;i<=n;i++){
k=l;l=z;z=z+k;
} - 5.返回z。
第二个函数 - 6.定义变量同上
- 7.当m=n=1时,输出1 1
- 8.此外,给i赋初值为1,其他变量同上
- 9.如果m=1,但是n不等于1,输出1,同时 i 加一
- 10.同上循环步骤,找Fibonacci数,当z存在m,n范围内时输出,同时i加一。
- 11.当z大于n时结束循环,
- 12.如果i的值为1,说明没有Fibonacci数,输出No Fibonacci number。
3.本题调试过程碰到问题及PTA提交列表情况说明
这道题有一个很麻烦的地方是第一和第二的Fibonacci数都是1 ,所以在输出是有很多小错误,
- 第一个,忘记了当m=1时应该输出1
- 第二个,在第二个函数中,当m=1时,最开始我的代码只会输出一个1,因为我的代码实质上都是从第二个Fibonacci数开始找的,于是我在循环中添了if语句。当m=1时先输出一个1.
- 第三个不是1的问题,而是空格输出的问题,我的printf语句是输出“%d ”,但正确应该是“ %d”,这样就不会导致最后一个输出有问题。
- 第四个是最大的一个误解,就是当m=1,n=1时,我认为它的区间内只有一个Fibonacci数,只输出一个1,但正确是要输出两个1,这个区间意味的是Fibonacci数有那些个,而正好第一个和第二个Fibonacci数都在该区间内,且都为1.
题目三7-1求组合数
1.本题PTA提交列表
2.设计思路
- 1.主函数,定义m,n为输入值,result为结果
- 2.输入m,n,表达式result=fact(n,m),输出result
- 3.fact函数,定义浮点型变量i,sum1,sum2,sum3,i用于控制循环。
- 4.将这些变量都赋初值为1
- 5.for(i=1;i<=n;i++)
sum1=sum1*i; - 6.sum1,sum2同上
- 7.return sum1/(sum2*sum3);
3.本题调试过程碰到问题及PTA提交列表情况说明
- 本题一次过,没有问题。
二同学代码结对互评
1.互评照片
2.我的代码、互评同学代码截图
- 我的代码
int factorsum( int number )
{
int j,k;//j控制循环次数,使每个小于m的数都被m求余一次观察是否为其因子,
k=0;//k为各因子的和
for(j=1;j<=number;j++){
if(number%j==0)//如果m求余后为0,既是其因子,
k=k+j;//将因子加起来 ,从1加到其本身,
}
if(number==1)// 当m为1,输出k
return k;
else//当m为大于一的数,返回值需减其本身
return k-number;
}
void PrintPN( int m, int n )
{
int a,j,k,l;//a用于控制循环次数,l用于观察制定区间内非完数的个数
l=0;
for(a=m;a<=n;a++){
k=0;//赋初值,以防止上一次运算结果带入下一次运算
for(j=1;j<=a;j++){
if(a%j==0)
k=k+j;
}//运算每个a的因子值之和
if(a==1){//当a=1是为特殊情况
printf("1 = 1");
putchar('\n');
}
else if(a==k-a){//当a不等1时,判断其是否为完数
printf("%d = 1",a);//是的话,先输出必有的1,
for(j=2;j<a;j++){
if(a%j==0)
printf(" + %d",j);//其次输出各因子
}
putchar('\n');//算式之间要换行
}
else
l=l+1;//累加非完数的和
}
if(l==(n-m+1))
printf("No perfect number");//当该区间内没有完数,输出 No perfect number
}
- 林晓露的代码
int factorsum( int number )
{
int j,sum;
sum=0;
if(number==1)//把1的特殊情况单独讨论
return 1;
for(j=1;j<=number/2;j++){
if(number%j==0){
sum=sum+j;//计算整数因子和
}
}
return sum;
}
void PrintPN( int m, int n )
{
int k,j;
j=1;
for(k=m;k<=n;k++){
if(k==factorsum(k)){//若该数恰好等于除自身外的因子之和
printf("%d =",k);
if(k==1)//讨论1的特殊情况
printf(" 1");
for(j=1;j<=k/2;j++){
if(k%j==0){//在已知是完数的情况下循环输出因子
printf(" %d",j);
if(j<k/2){
printf(" +");
}
}
}
printf("\n");//每输出一个完数及其因子的表示形式后换行
}
}
if(j==1&&m!=1)//如果没进入内循环,j=1,且m不为1
printf("No perfect number");
}
3.我和同学代码不同在哪里?有哪些各自优势?你更喜欢哪种代码风格?如果同学代码有错的也请帮忙指出来哪里出问题。
- 在第一个函数中,我的循环变量是要小于number,这样我累加的因子和还累加了自身,返回时需减去,而她的循环变量是小于number/2,不会加上自身,比我简洁。
- 在第二个函数中,她的代码先进行了第一个函数的运用,判断输入的k是否为完数,而我的则是相当于将第一个代码又重新打了一遍,她比我简洁。
- 在判断区间内有无函数时,我新定义一个变量,每次输出算式时累加,通过变量的值观察是否输出算式,从而得知是否有完数,而她的代码直接判断是否进入循环而判断是否有完数,比我简洁。
- 我们两个的代码思路风格其实相近,但她的代码比我短很多,因为很多细节我写得比她复杂,所以我更喜欢她的代码。
三、截图本周题目集的PTA最后排名
四、本周学习总结
1.你学会了什么?
1.1 C语言哪些数据类型?
整数型(定点型)、实数型(浮点型)和字符型
1.2 字符型数据需要注意地方?
字符型常量指单个字符,且需加单引号,字符型变量的值可以是字符或整数,整型变量和字符型变量的值可以互换。
1.3 自增自减运算符?
自增运算符++,自减运算符--
1.4 运算符优先级?
逻辑运算符!>算术运算符>关系运算符>逻辑运算符&& ||>条件表达式>赋值运算符>逗号运算符
1.5 C语言哪些表达式?课堂派哪里做错,做错的请在这里分析原因?
算术表达式,赋值表达式,逻辑表达式,逗号表达式。课堂派的运算题我没做对,但是不知道++放在前面还是后面的运算差别。
第一题y的值不变还是3,因为t=4为真,就不再执行||后面的算式。第二题j的值还是为3.
2.本周的内容,你还不会什么?
对这些运算符的使用可能还存在误解,因为上课时老师让我们进行的运算我都没算对。
1.哪题做错了,怎么改?
后两道题一分没拿,倒数第二道是因为不知道如何将十进制转换成二进制,当时考试紧张没想起来,最后一道写了调试了,但是拿不到分
2.考试结果满意么,怎么改进?
不太满意,还是缺乏做题,所以像最后一题这样有难度一点就做不出来,改进的话多做题。
3.其他总结。
这次的考试其实我前三题做的挺快,有什么小错误通过printf语句也很快找到了,可是后两题的运算花了我一半多的时间,一是因为第四题我不知道怎么讲是禁止换成二进制,所以用了2*10的n次方的计算,虽然结果会对,但是运算过程中计算量太大,超出int 甚至double的范围,所以,我这道题没过,倒数二十分钟的时候我想着从最后一题拿点分,显然我太天真了。当时考完试的第一感觉就是我做的题量实在是太少了,不然不至于没及格。还是更努力点吧。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步