C语言I博客作业09
| 这个作业属于哪个课程 | https://bbs.csdn.net/topics/603700727 |
|---|---|
| 这个作业要求在哪里 | https://bbs.csdn.net/forums/csuft_swxy_C?category=0&typeId=17327 |
| 这个作业的目标 | <学习函数> |
| 学号 | <20218584> |
1. PTA作业
1.1 6-1 统计各位数字之和是5的数
本题要求实现两个函数:一个函数判断给定正整数的各位数字之和是否等于5;另一个函数统计给定区间内有多少个满足上述要求的整数,并计算这些整数的和。
函数接口定义:
int is( int number );
void count_sum( int a, int b );
函数is判断number的各位数字之和是否等于5,是则返回1,否则返回0。
函数count_sum利用函数is统计给定区间[a, b]内有多少个满足上述要求(即令is返回1)的整数,并计算这些整数的和。最后按照格式
count = 满足条件的整数个数, sum = 这些整数的和
进行输出。题目保证0<a≤b≤10000。
裁判测试程序样例:
#include <stdio.h>
int is( int number );
void count_sum( int a, int b );
int main()
{
int a, b;
scanf("%d %d", &a, &b);
if (is(a)) printf("%d is counted.\n", a);
if (is(b)) printf("%d is counted.\n", b);
count_sum(a, b);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
104 999
结尾无空行
输出样例:
104 is counted.
count = 15, sum = 3720
结尾无空行
1.1.1 代码截图
1.1.2 数据处理
数据表达:定义了整型变量x,a,b,sum
数据处理:输入一个值number,用函数is和if语句判断number的各位数字之和是否等于5,是则返回1,否则返回0,后函数count_sum利用函数is统计给定区间[a, b]内有多少个满足上述要求,用到了for循环,将所有满足条件的值求和,最后按格式输出。
1.1.3 PTA提交列表及说明
多种错误:括号使用过多,已混淆,最后使用了return 0; 返回值使用错误,只算了number为两位数的情况,等于号少打一个="="。
1.2 6-2 使用函数输出水仙花数
水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13+53+3^3
。 本题要求编写两个函数,一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。
函数接口定义:
int narcissistic( int number );
void PrintN( int m, int n );
函数narcissistic判断number是否为水仙花数,是则返回1,否则返回0。
函数PrintN则打印开区间(m, n)内所有的水仙花数,每个数字占一行。题目保证100≤m≤n≤10000。
裁判测试程序样例:
#include <stdio.h>
int narcissistic( int number );
void PrintN( int m, int n );
int main()
{
int m, n;
scanf("%d %d", &m, &n);
if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
PrintN(m, n);
if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
153 400
输出样例:
153 is a narcissistic number
370
371
1.1.1 代码截图
1.1.2 数据处理
数据表达:定义了i,n,m,sum,x,y几个整型变量,用到了循环结构和顺序结构。
数据处理:首先用函数narcissistic判断number是否为水仙花数,定义了多个整型变量,用while循环和for循环找出水仙花数,再利用if语句判断输出,之后用函数PrintN打印开区间(m, n)内所有的水仙花数,并使每个数字占一行,此处用for循环和if结构进行处理,找出满足条件的水仙花数则打印输出。
1.1.3 PTA提交列表及说明
编译错误:使用number表示不同符号使未声明,for循环中的分号错用逗号表示,定义的部分整型变量没有赋初值。
部分错误:m,sum没有赋初值,n和number乱套用。
6-3 使用函数验证哥德巴赫猜想
本题要求实现一个判断素数的简单函数,并利用该函数验证哥德巴赫猜想:任何一个不小于6的偶数均可表示为两个奇素数之和。素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。
函数接口定义:
int prime( int p );
void Goldbach( int n );
其中函数prime当用户传入参数p为素数时返回1,否则返回0;函数Goldbach按照格式“n=p+q”输出n的素数分解,其中p≤q均为素数。又因为这样的分解不唯一(例如24可以分解为5+19,还可以分解为7+17),要求必须输出所有解中p最小的解。
裁判测试程序样例:
#include <stdio.h>
#include <math.h>
int prime( int p );
void Goldbach( int n );
int main()
{
int m, n, i, cnt;
scanf("%d %d", &m, &n);
if ( prime(m) != 0 ) printf("%d is a prime number\n", m);
if ( m < 6 ) m = 6;
if ( m%2 ) m++;
cnt = 0;
for( i=m; i<=n; i+=2 ) {
Goldbach(i);
cnt++;
if ( cnt%5 ) printf(", ");
else printf("\n");
}
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
89 100
结尾无空行
输出样例:
89 is a prime number
90=7+83, 92=3+89, 94=5+89, 96=7+89, 98=19+79
100=3+97,
结尾无空行
1.1.1 代码截图
1.1.2 数据处理
数据表达:定义了整型变量n,p,q,用到了顺序结构和循环结构,同时用到了函数prime和 Goldbach。
数据处理:先判断题中提示的当输入为1和2时的输出,再用for循环判断输入数p是否能整除除自己本身和1以外的数字,若满足条件则输出1,不满足输出0。后用函数Goldbach和for循环,取得输出所有解中p最小的解。
裁判测试程序样例:
1.1.3 PTA提交列表及说明
答案正确:在室友的帮助下一次性通过
6-4 使用函数求素数和
使用函数求素数和
prime§, 其中函数prime当用户传入参数p为素数时返回True,否则返回False. PrimeSum(m,n),函数PrimeSum返回区间[m, n]内所有素数的和。题目保证用户传入的参数1<=m<n。
函数接口定义:
在这里描述函数接口:
prime§,返回True表示p是素数,返回False表示p不是素数
PrimeSum(m,n),函数返回素数和
裁判测试程序样例:
/* 请在这里填写答案 */
m,n=input().split()
m=int(m)
n=int(n)
print(PrimeSum(m,n))
输入样例:
在这里给出一组输入。例如:
1 10
结尾无空行
输出样例:
在这里给出相应的输出。例如:
17
结尾无空行
1.1.1 代码截图
1.1.2 数据处理
数据表达:定义了变量P
数据处理:用到了if语句进行条件判断
1.1.3 PTA提交列表及说明
完全看不懂,百度搜索得答案,发现当我增减空格提交时,提交结果不一样。
2. 本章学习总结
2.1 学习进度条
| 周/日期 | 这周所花的时间 | 代码行 | 学习到的知识点简介 | 目前比较迷茫的问题 |
|---|---|---|---|---|
| 12.06–12.12 | 15h | 210 | 函数 | Python,二维数组,编译过程中各知识点的排布 |
2.2 积累代码行和博客字数
2.3 学习感悟
本周的PTA作业涉及到函数领域,有一个新的知识的,感觉好难好难,每次看到题目都是一脸懵逼,无从下手,每次都无法直接独立的完成编程题,必须要依靠他人代码或者是室友帮助才能够理解编译过程,在完成作业的过程中惊喜在一点点积累,挫败感也在一点点,与此同时,有待完成,有待深入学习的C语言基础知识点也在一步步积累。
