C语言博客作业--函数

本文详细解析了PTA实验作业中的三个编程挑战,包括逆序数输出、Fibonacci数列生成及组合数求解,分享了代码设计思路、调试过程中遇到的问题及解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、PTA实验作业

题目1:6-5 使用函数输出一个整数的逆序数

1. 本题PTA提交列表

1232103-20171118210849093-548799741.png

2. 设计思路

(1)定义整型变量count,m,j,k分别存放输入的数number的位数,number的值,循环次数,number每一位数的位数,并赋初值count=0,m=number
(2)number=number/10,count++
(3)当number!=0时重复步骤(2)求得number是一个count位数
(4)k=1,循环执行count-1次k=k10求得number的每一位数是第几位,number=number+m%10k将number的每一位数进行倒叙并累加
(5)判断m/10!=0若是则m=m/10确保每一位数都进行上述操作
(6)当count>0时循环执行(4)(5)并count--
(7)返回number的值

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

-1.倒叙时出现04321类答案。
解决办法:在m=m/10之前添加条件判断m/10!=0来判断number是否是0结尾,若是则去0

题目2:6-8 使用函数输出指定范围内的Fibonacci数

1. 本题PTA提交列表

1232103-20171118213338968-1392539549.png

2. 设计思路

int fib(int n)

(1)定义整型变量i,result,f1,f2分别存放循环次数,最终结果,该Fibonacci数的第前一项Fibonacci数,该Fibonacci数的第前二项Fibonacci数
(2)判断输入的项数n是否为1或者2,若是则return 1表示Fibonacci数第一项和第二项均为1
(3)result=f1+f2,f1=f2,f2=result
(4)当n>=3时循环执行n-2次步骤(2)实现每项Fibonacci数等于前两项之和
(5)return result

void PrintFN(int m,int n)

(1)定义整型变量a,count分别存放Fibonacci数的项数和判断区间[m,n]中是否有Fibonacci数,赋初值count=0
(2)a=1
(3)判断fib(a)>=m,若真则输出fib(a)的值且count=1。判断fib(a+1)<=n,若真则输出空格符
(4)当fib(a)<=n时重复执行步骤(3)
(5)判断count==0,若真则输出No Fibonacci number

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

- 1.当n=m时没有答案
解决办法:判断fib(a)与m,n的关系时用 >= 或 <=

题目3:7-1 求组合数

1. 本题PTA提交列表

1232103-20171118220107156-1979016337.png

2. 设计思路

(1)进行double fact(int n)函数声明
(2)定义整型变量m,n分别存放共有n个不同元素,取m个元素,定义浮点型变量result存放组合数结果
(3)输入m,n的值
(4)result=1.0fact(n)/(fact(m)fact(n-m))计算从n个不同元素取m个元素的组合数并输出
(5)定义函数double fact(int n)
(6)定义浮点型变量result存放n!并赋初值result=1
(7)判断n是否为0,若为0则return 1;否则循环执行n次result=result*n求出n!
(8)return resul

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

1.输出结果有小数
解决办法:输出格式改为%.0f
2.n=m时没有答案
解决办法:判断fact(n)中的n是否为0,若为0则返回1

二、同学代码结对互评

1.同学互评照片。

1232103-20171119104237624-1077699951.png

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

我的代码:1232103-20171118222438843-722500980.png

王林聪的代码:1232103-20171120232026696-1065562909.png

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

不同点和优劣势:我的代码先求出操作数是几位数然后再用嵌套循环结构依次逆序,变量繁多,结构复杂。而王林聪同学的代码仅用到一个变量N和一句while循环即求出结果,更加直观简洁。

我更喜欢王林聪同学的代码。

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

1232103-20171118223607374-666964676.png

四、本周学习总结

1.你学会了什么?

1.1 C语言哪些数据类型?

整型数据,实型数据,字符型数据

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

1.互换整型变量和字符型变量的定义和值时,整型数据的取值范围是有效的ASCII码

2.'a'和'A'是不同的字符型常量,'0'和0是不同类型的常量,前者是字符型常量,而后者是整型常量

1.3 自增自减运算符?

1.++n的运算顺序是:先执行n=n+1,再将n的值作为表达式++n的值

n++的运算顺序是:先将n的值作为表达式n++的值,再执行n=n+1

2.自增运算符和自减运算符的运算对象只能是变量,不能是常量或者表达式

1.4 运算符优先级?

课本p132

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

算术表达式,赋值表达式,关系表达式,逻辑表达式,条件表达式,逗号表达式

1232103-20171118225305687-923397690.png

错误原因:对字符型数据的加减原理还不理解透彻

1232103-20171119011136562-843958311.png

错误原因:没有明白逻辑表达式&&和||中一旦能得到表达式的结果就停止计算

1232103-20171119011338281-913216609.png

错误原因:没有掌握好逗号表达式的计算方式

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

字符转数字还不太熟练

3.循环结构考试总结

1.哪题做错了,怎么改?

1.第4,第5做错了
改进:4.
#include<stdio.h>
int main(void)
{
    int i,j,sum=0,m,k=1,count=0;
    scanf("%d",&m);
    if(m==0)
    printf("32");
    if(m<0)
    printf("0");
    else if(m>0){
    while(m>sum){
        sum=sum+k;
        k=2*k;
        count++;
    }
    printf("%d",32-count);
    }
    return 0;
}
改进:5.
#include<stdio.h>
int main(void)
{
    int count;
    char ch;
    scanf("%c",&ch);
    if(ch=='\n')
    printf("0");
    else
    while(ch!='.'){
        count=0;
        while(ch==' ')
        scanf("%c",&ch);
        while(ch!=' ' && ch!='.'){
        count++;
        ch=getchar();
       }
        while(ch==' ')
        scanf("%c",&ch);
        if(ch!=' ')
        printf("%d",count);
        if(ch!='.')
        printf(" ");
    }
    return 0;
}

2.考试结果满意么,怎么改进?

不太满意,应该平时作业多总结经验好在考试的时候能做得快些。

转载于:https://www.cnblogs.com/LHLH/p/7857952.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值