<C语言>如何一步一步根据简单的代码联想到更多的功能?(实现输入一个整数,输出比它小包括它本身的所有素数。)
2017-08-12 12:02
1186 查看
作者:wsg
时间:2017年8月12日
学习重要的是会举一反三,能够自我总结,自己思考!
题目:输入一个整数,输出比它小包括等于它的所有素数
1、把需要的基础功能做出来:首先,素数怎么求? 再者,怎么实现输出比它
4000
小包括它本身的素数?
2、这个程序输入为1或者负数的时候,能让程序输出错误提示,并且不会退出程序,再给机会重新输入吗?
(此时并没有实现输入正确的时候,程序也不会退出)
3、在2的基础上,让程序输入错误或者正确的时候都不会退出程序
4、实现第2或3步有哪几种实现方法?
一、素数的概念是只能被1和它本身整除的数,本来1也满足素数的定义,但是在数学上,1被规定为不是素数。
关于整除,联想到C语言中有个%求余或者取模,若一个数,挨个去%比它小或者等于的数,若i%j== 0的次数为2,
也就是j = 1或者j = i的时候,i即为素数。挨个除,想到for循环语句能够快速的实现。
程序运行:
二、输入1或者负数的时候提示输入错误,采用一个if判断语句得到很好的解决,if(nu<-=1) prntf();即可。怎么让提示了之后不退出呢,即想到C语言中有个无条件转移语句goto,打印从无之后即goto到输入这个数语句处即可。
三、既然输如为1或者负数的时候能够重更新输入,那么能不能输入正确的时候也能够一直运行下去呢?搜先我想到了使用一个"死循环"--while(1),程序一直循环在其中,除非人为地强制退出,否则不会自动退出。
四、第二步不是使用了goto语句实现了输入错误的时候能继续输入吗?那么能否使用goto来代替第三步中的while呢?
仔细思考过后,发现使用两个goto语句即可。第一个还是与第二步一样,使用在输入错误提示之后;第二个呢,则放在输出答案之后,程序结束(return 0)之前。
小编水平有限,如有不足或错误之处,欢迎指正。
时间:2017年8月12日
学习重要的是会举一反三,能够自我总结,自己思考!
题目:输入一个整数,输出比它小包括等于它的所有素数
1、把需要的基础功能做出来:首先,素数怎么求? 再者,怎么实现输出比它
4000
小包括它本身的素数?
2、这个程序输入为1或者负数的时候,能让程序输出错误提示,并且不会退出程序,再给机会重新输入吗?
(此时并没有实现输入正确的时候,程序也不会退出)
3、在2的基础上,让程序输入错误或者正确的时候都不会退出程序
4、实现第2或3步有哪几种实现方法?
一、素数的概念是只能被1和它本身整除的数,本来1也满足素数的定义,但是在数学上,1被规定为不是素数。
关于整除,联想到C语言中有个%求余或者取模,若一个数,挨个去%比它小或者等于的数,若i%j== 0的次数为2,
也就是j = 1或者j = i的时候,i即为素数。挨个除,想到for循环语句能够快速的实现。
/***************** 功能:输入一个整数,输出比它小包括它本身的所有素数 作者:wsg 时间:2017年8月11日 版本一 *****************/ #include <stdio.h> int main(int argc, char *argv[]) { int nu; printf("请输入一个正整数:\n"); scanf("%d", &nu); int i,j; printf("\n%d以内的所有素数是:\n", nu); for(i=1; i<=nu; i++) { int k = 0; for(j=2; j<=i; j++) { if(i%j == 0) { k++; } } if(k == 1) { printf("%d\t", i); } } printf("\n"); return 0; }
程序运行:
二、输入1或者负数的时候提示输入错误,采用一个if判断语句得到很好的解决,if(nu<-=1) prntf();即可。怎么让提示了之后不退出呢,即想到C语言中有个无条件转移语句goto,打印从无之后即goto到输入这个数语句处即可。
/***************** 功能:输入一个整数,输出比它小包括它本身的所有素数 作者:wsg 时间:2017年8月11日 版本二:如果输入的不是大于1的数,则重新输入 *****************/ #include <stdio.h> int main(int argc, char *argv[]) { int nu; LOOP: printf("请输入一个正整数:\n"); scanf("%d", &nu); if(nu<=1) //因为1满足素数的判断条件,但是规定1不是素数,所以要排除掉 { printf("非法输入!请重新输入!\n\n"); goto LOOP; } printf("\n%d以内的所有素数是:\n", nu); int i,j; for(i=1; i<=nu; i++) //判断是否是素数 { int k = 0; for(j=2; j<=i; j++) { if(i%j == 0) { k++; } } if(k == 1) /***k的作用就是限制i%j == 0的次数,因为j是从2开始的, 所以i%i == 0时就是本身才能整除本身,此时k=1.比如nu=7%(j=2;j<=7;j++),只有j=7时才会整除。 若nu = 6; 那么j=2或3或6的时候i%j == 0,此时k == 3,就不是素数,就不打印。 此段描述有点困难,作者能力有限,敬请谅解! ***/ { printf("%d\t", i); } } printf("\n"); return 0; }程序运行:
三、既然输如为1或者负数的时候能够重更新输入,那么能不能输入正确的时候也能够一直运行下去呢?搜先我想到了使用一个"死循环"--while(1),程序一直循环在其中,除非人为地强制退出,否则不会自动退出。
/***************** 功能:输入一个整数,输出比它小包括它本身的所有素数 作者:wsg 时间:2017年8月11日 版本三:使用了while循环语句使程序不会自动退出,可以连续输入输出 *****************/ #include <stdio.h> int main(int argc, char *argv[]) { while(1) { int nu; printf("请输入一个正整数:\n"); scanf("%d", &nu); if(nu<=1) //因为1满足素数的判断条件,但是规定1不是素数,所以要排除掉 printf("非法输入!请重新输入!\n\n"); if(nu>1) printf("\n%d以内的所有素数是:\n", nu); int i,j; for(i=1; i<=nu; i++) //判断是否是素数 { int k = 0; for(j=2; j<=i; j++) { if(i%j == 0) { k++; } } if(k == 1) /***k的作用就是限制i%j == 0的次数,因为j是从2开始的, 所以i%i == 0时就是本身才能整除本身,此时k=1.比如nu=7%(j=2;j<=7;j++),只有j=7时才会整除。 若nu = 6; 那么j=2或3或6的时候i%j == 0,此时k == 3,就不是素数,就不打印。 此段描述有点困难,作者能力有限,敬请谅解! ***/ { printf("%d\t", i); } } printf("\n"); } return 0; }运行结果:
四、第二步不是使用了goto语句实现了输入错误的时候能继续输入吗?那么能否使用goto来代替第三步中的while呢?
仔细思考过后,发现使用两个goto语句即可。第一个还是与第二步一样,使用在输入错误提示之后;第二个呢,则放在输出答案之后,程序结束(return 0)之前。
/***************** 功能:输入一个整数,输出比它小包括它本身的所有素数 作者:wsg 时间:2017年8月11日 版本四:goto语句实现与版本三一样的功能 *****************/ #include <stdio.h> int main(int argc, char *argv[]) { int nu; LOOP: printf("请输入一个正整数:\n"); scanf("%d", &nu); if(nu<=1) //因为1满足素数的判断条件,但是规定1不是素数,所以要排除掉 { printf("非法输入!请重新输入!\n\n"); goto LOOP; //goto LOOP: 无条件转移到LOOP处,程序又从LOOP出开始执行 } printf("\n%d以内的所有素数是:\n", nu); int i,j; for(i=1; i<=nu; i++) //判断是否是素数 { int k = 0; for(j=2; j<=i; j++) { if(i%j == 0) { k++; } } if(k == 1) /***k的作用就是限制i%j == 0的次数,因为j是从2开始的, 所以i%i == 0时就是本身才能整除本身,此时k=1.比如nu=7%(j=2;j<=7;j++),只有j=7时才会整除。 若nu = 6; 那么j=2或3或6的时候i%j == 0,此时k == 3,就不是素数,就不打印。 此段描述有点困难,作者能力有限,敬请谅解! ***/ { printf("%d\t", i); } } printf("\n"); goto LOOP; return 0; }运行程序:
小编水平有限,如有不足或错误之处,欢迎指正。
相关文章推荐
- 1.编写一个简单的C语言程序:根据输入的两个整数求平均值并且在终端输出,通过gcc编译器得到它的汇编程序文件。 2.编写一个C语言程序:打印输出所有“水仙花数”,用gdb调试程序(给出步骤)。所谓“
- 1.编写一个简单的C语言程序:根据输入的两个整数求平均值并且在终端输出,通过gcc编译器得到它的汇编程序文件。 2.编写一个C语言程序:打印输出所有“水仙花数”,用gdb调试程序(给出步骤)。所谓“
- Java实现输入一个整数将该整数之前的所有素数输出出来
- 输入任意一个大于2的正整数n,输出所有小于等于n的素数
- 问题:利用输入输出流重载实现一个整数数组的输入和输出。 要求:输入一个数组大小 及 所有元素的值,排序后输出该数组的所有元素。
- <C语言>编写一个程序,该程序读取输入直到遇到#字符,然后报告读取的空格数目、读取的换行数目以及读取的所有其他字符数目。
- 一个正整数有可能可以表示为n(n>=2)个连续的正整数之和,如:15=1+2+3+4+5,15=4+5+6,15=7+8 请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。
- [南阳OJ-No.24]素数距离问题|现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。 如果输入的整数本身就是素
- <C语言>实现简单的计算器(循环输入,加减乘除法可选)
- 输入一个表示整数的字符串,把该字符串转换成整数并输出(实现atoi函数功能)
- C语言用数组1. 简单约瑟夫环问题: N个人,编号从1~N围成一圈,输入一个数T,从1号开始报数,报到T的人出圈;下一人又从1开始报数,下一个报到T的人出圈,输出出圈顺序。 考虑问实现约瑟夫环问题
- (用指针方法处理)有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数。编写一个函数实现上述功能,在主函数中输入n个整数,并输出调整后的n个数
- 现在给出你一些数,要求你写出一个程序,输出这些整数相邻最近的素数,并输出其相距长度。如果左右有等距离长度素数,则输出左侧的值及相应距离。 如果输入的整数本身就是素数,则输出该素数本身,
- 编写函数,其功能是:将一个数字字符串转换为一个整数(不得调用C语言中提供的将字符串转换成整数的函数。)要求在主函数中输入该字符串并输出转换后的整数的值。
- 用C语言实现一个revert函数,它的功能是将输入的字符串在原串上倒序后返回
- 8.2写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。
- 一个简单的AJAX实现,基于C#的ASP.Net,包括服务器端的程序代码
- 输入一个正数n,输出所有和为n连续正整数序列
- 输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列。
- 编写一个函数,判断一个数是不是素数。在主函数中输入一个整数,输出是否是素数的信息