第五次作业
第五次PTA作业(判断素数)
1.实验代码:
#include <stdio.h> #include <math.h> int main() { int n, i, flag; long long x; scanf("%d", &n); while(n--) { scanf("%lld", &x); flag = 1; for(i = 2; i <= sqrt(x); i++) { if(x % i == 0) { flag = 0; break; } } if(x == 1 || flag == 0) printf("No\n"); else printf("Yes\n"); } return 0; }
设计思路:
(1)先认真审题,找到关于此题相关的解题方法和需要的C语言语法,因为是判断素数,所以需要数学函数,找到相应的关于math得正确语法来命名X,然后在纸上画好流程图,之后就可以进行编程了。
(2)流程图:
本题调试过程中遇到的问题及解决办法:
提交时间 | 状态 | 分数 | 题目 | 编译器 | 耗时 | 用户 |
---|---|---|---|---|---|---|
2018/12/16 18:54:28 |
答案正确
|
10 | 7-1 | C (gcc) | 15 ms | 2018024038 |
因为这道题书上有相关类似的,所以大问题没有,主要是如何让n进行循环,即使用n--这个方法在while语句中循环即可,先判断n是否等于0,如果等于0,就不循环。如果不等于0,就进入循环,同时n的值减1.一直等到n=0才退出while循环。最后按照流程图进行编程即可。
PTA第五次作业(统计一行文本的单词个数)
(1).实验代码:
#include <stdio.h> int main() { char a; int cnt=0,countword=0; while(1){ scanf("%c",&a); if(a=='\n'){ break; }else if(a!=' '){ if(a>='a'&&a<='z'||a>='A'&&a<='Z'||a>='0'&&a<='9') { countword++; cnt++; } while(1){ scanf("%c",&a); if(a==' '||a=='\n'){ break; } cnt++; } if(cnt>1){ if(a>='a'&&a<='z'||a>='A'&&a<='Z'||a>='0'&&a<='9') countword++; } if(a=='\n'){ break; } } } printf("%d",countword); return 0; }
(2)设计思路:
首先认真读题,此题要求是统计文本单词数,而不是字母数,而且应该注意每个单词之间的空格会不会影响到文本数量得统计,所以利用语法中的while(1)直接进行有回车和空格得循环,其次在while得循环体中,保证当cnt得单词长度大于一时,这个单词中的字母是否符合要求,这样可以防止运行时文本统计出现差错,最后按照流程图进行编程即可。
流程图:
本题调试过程中遇到的问题及解决办法:
这道题的思路并不难,但是要知道如何能让回车空格和单词之间的转换,以防止运行时出现错误的文本统计,其中合理运用while循环语句,同时在while语句中,用if语句进行分支选择,然后用好大括号或者break来走出if的语句,在画框图时,很乱,但是要乱中有序,一个循环体是一个循环体,每个循环体的if语句是一个if语句的画,否则很难画出正确的流程图,画好之后,按照流程图进行编程即可。其中应该知道一个语法:while(0)就是一次都不执行循环,等同于while(0!=0)
while(1)就是永远执行循环,可以在循环中通过break跳出循环,等同于while(0==0)
二、总结和学习进度条:
近几周的分支与循环结构这两个基本而重要的语句让我最近的解题思路变得很好,因为最近的PTA作业基本都是运用这两种语句来进行编程,这是最后一次PTA作业,其中刚刚那道超极长的流程图让我有所感悟,这道题中,运用了多个while语句,其中每个while语句中还有多个if-else的分支语句,然后在if语句中还需要一堆的大括号来进行分隔,有的if语句还需要用break跳出分支,但是只有这样的复杂的复合语句才能把每个单词与之后紧接的空格分开,使得程序运行的更加精准,所以我这周最大的感悟就是想要学好本学期的C,就要将最基本的三大语句运用到极限,把这三大语句的基本功练好。