第二章:循环结构程序设计
2018-10-19-16:25:34
随学笔记
小计:
<1>: for语句 [for(初始化;条件;调整) ] 执行时先完成赋值操作,判断满足条件后执行循环体,之后的每次执行都是先完成调整操作,判断满足条件后继续执行循环体,不满足条件就退出循环。
1 #include <cstdio> 3 #include <iostream> 4 using namespace std; 5 6 int main() 7 { 8 for(int i=0;i<0;i++) 9 printf("%d\n",i); 10 return 0; 11 } 12 //程序无输出内容
<2>: 判断一个数是否为完全平方数
利用恒等式1+3+5+7+···+2*n-1=n*n;
1 #include <cstdio> 2 #include <iostream> 3 using namespace std; 4 bool isSqrt(int n); 5 6 int main() 7 { 8 int n; 9 while(~scanf("%d",&n)){ 10 if(isSqrt(n)){ 11 printf("isSqrt\n"); 12 continue; 13 } 14 printf("isn't sqrt\n"); 15 } 16 return 0; 17 } 18 bool isSqrt(int n){ 19 for(int i=1;n>0;i+=2) 20 n-=i; 21 return 0==n; 22 }
<3>: floor函数:其功能是“向下取整”,或者说“向下舍入”,即取不大于x的最大整数(与“四舍五入”不同,下取整是直接取按照数轴上最接近要求值的左边值,即不大于要求值的最大的那个值。
1 #include <cstdio> 2 #include <cmath> 3 #include <iostream> 4 using namespace std; 5 6 int main() 7 { 8 double c=3.3; 9 printf("%.1f",floor(c)); 10 return 0; 11 } //程序输出为3.0//double floor(double n);//floor()函数头文件为#include<cmath>
<4>: 浮点数运算可能存在误差,浮点数比较时要考虑到浮点误差。
1 #include <cstdio> 2 #include <cmath> 3 #include <iostream> 4 using namespace std; 5 bool isSqrt(int n); 6 7 int main() 8 { 9 int n; 10 while(~scanf("%d",&n)){ 11 if(isSqrt(n)){ 12 printf("isSqrt\n"); 13 continue; 14 } 15 printf("Isn't sqrt\n"); 16 } 17 return 0; 18 } 19 bool isSqrt(int n){ 20 if(sqrt(n)==floor(sqrt(n)+0.5))//浮点运算误差较小,不会超过0.5 21 return true; 22 return false; 23 }
<5>: while语句和do-while语句用法相同,唯一的区别是while先判断条件是否成立,成立即开始循环,do-while则是先做一次再判断是否成立,随后便和while一样运作。
可以利用do-while的这一特性解决一些特殊的问题(循环终止判断在计算之后的情况很适用于do-while语句)。
例如求integer的位数:
1 #include <cstdio> 2 #include <iostream> 3 using namespace std; 4 5 int main() 6 { 7 int n; 8 while(~scanf("%d",&n)){ 9 int cnt=0; 10 do{ 11 n/=10; 12 cnt++; 13 }while(n);//do-while语句避免了需要考虑n==0的情况 14 printf("%d\n",cnt); 15 } 16 return 0; 17 }
<6>: int_32, int_64, uint_32,uint_64(C语言数据类型)
C99规定int至少是16位,却没有具体的值,所以C99规定了以上数据类型,算法竞赛平台一般相对稳点,int为32位数。
1 #include <cstdio> 2 #include <iostream> 3 using namespace std; 4 5 int main() 6 { 7 /* 8 typedef int int32_t; typedef unsigned int32_t uint32_t 9 typedef long long int int64_t; typedef unsigned long long int uint64_t; 10 */ 11 printf("%d\n",sizeof(int32_t));//put 4 12 printf("%d\n",sizeof(int64_t));//put 8 13 /* 14 int32_t -2147483648~2147483647 15 uint32_t 0~4294967295 16 int64_t -9223372036854775808~9223372036854775807 17 uint64_t 0~18446744073709551615 18 */ 19 return 0; 20 }
<7>: C语言中long long int 在linux下输入格式为%lld,在windows下输入为%I64d。
<8>: 函数clock()返回程序目前为止的运行时间,这个时间除以常数CLOCKS_PER_SEC之后得到的值以秒为单位。
1 #include <cstdio> 2 #include <ctime> 3 #include <iostream> 4 using namespace std; 5 6 int main() 7 { 8 printf("Time is %.2f S\n",(double)clock()/CLOCKS_PER_SEC); 9 return 0; 10 }
<10>: scanf函数在遇到空格,回车换行时会自动结束。
<11>: C语言文件读写。
函数名:freopen
声明:FILE *freopen( const char *path, const char *mode, FILE *stream ); 所在文件: #include<cstdio> 参数说明: path: 文件名,用于存储输入输出的自定义文件名。 mode: 文件打开的模式。和fopen中的模式(如r-只读, w-写)相同。 stream: 一个文件,通常使用标准流文件。 返回值:成功则返回一个path所指定文件的指针;失败返回NULL。(一般可以不使用它的返回值) 功能:实现重定向,把预定义的标准流文件定向到由path指定的文件中。标准流文件具体是指stdin、stdout和stderr。其中stdin是标准输入流,默认为键盘;stdout是标准输出流,默认为屏幕;stderr是标准错误流,一般把屏幕设为默认。
1 #include <cstdio> 2 #include <iostream> 3 using namespace std; 4 5 int main() 6 { 7 int a,b; 8 freopen("in.txt","r",stdin); //输入重定向,输入数据将从in.txt文件中读取 "r":为了输入数据,只读 9 freopen("out.txt","w",stdout); //输出重定向,输出数据将保存在out.txt文件中 "w":为了输出数据,只写 10 while(~scanf("%d %d",&a,&b)) 11 printf("%d\n",a+b); 12 fclose(stdin);//关闭重定向输入 13 fclose(stdout);//关闭重定向输出 14 return 0; 15 }
//重定向使用完毕后记得要取消重定向
习题2-5 分数化小数
思路:分步输出
1 #include <cstdio> 2 #include <iostream> 3 using namespace std; 4 5 int main() 6 { 7 int a,b,c,Case=0; 8 while(~scanf("%d %d %d",&a,&b,&c)&&(a|b|c)){ 9 printf("Case %d : %d.",++Case,a/b); 10 while(--c>0){ 11 a*=10; 12 printf("%d",a/b); 13 a%=b; 14 } 15 a*=10; 16 printf("%d\n",a/b>5?(a/b+1):(a/b)); 17 } 18 return 0; 19 }
习题2-6 排列
简单将每一位初始化为1,最后将各位相加结果为9即输出。
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 using namespace std; 5 6 int main() 7 { 8 int index[10]; 9 for(int i=123;i<=321;i++){ 10 memset(index,0,sizeof(index)); 11 index[i/100]=1; 12 index[i/10%10]=1; 13 index[i%10]=1; 14 int j=i*2; 15 index[j/100]=1; 16 index[j/10%10]=1; 17 index[j%10]=1; 18 int k=i*3; 19 index[k/100]=1; 20 index[k/10%10]=1; 21 index[k%10]=1; 22 int sum=0; 23 for(int h=1;h<10;h++) 24 sum+=index[h]; 25 if(sum==9) 26 printf("%d\t%d\t%d\n",i,j,k); 27 } 28 return 0; 29 }
转载于:https://www.cnblogs.com/bianjunting/p/9817171.html
第二章:循环结构程序设计相关推荐
- 第二章 循环结构程序设计
第二章 笔记 aabb 阶乘之和 水仙花数 韩信点兵 倒三角形 子序列的和 分数化小数 排列 扩展 笔记 1.函数 double floor(double x) 向下取整,返回不超过x的最大整数:函数 ...
- 《算法竞赛入门经典》 第二章 循环结构程序设计 习题
注:这里为了便于测试,直接使用stdin,stdout进行输出,没有进行文件读写操作. 习题2-1 位数(digit) 输入一个不超过10^9的正整数,输出它的位数.例如12735的位数是5.请不要使 ...
- c语言第四章循环程序设计,C语言程序设计教程第4章-循环结构程序设计
<C语言程序设计教程第4章-循环结构程序设计>由会员分享,可在线阅读,更多相关<C语言程序设计教程第4章-循环结构程序设计(42页珍藏版)>请在人人文库网上搜索. 1.C语言程 ...
- 沈阳师范大学大一上册C语言PTA题目集以及答案(第三章 循环结构程序设计 编程题篇)
沈阳师范大学大一上册C语言PTA题目集以及答案(第三章 循环结构程序设计 编程题篇) 7-1 求阶乘序列前N项和 (15分) 本题要求编写程序,计算序列 1!+2!+3!+⋯ 的前N项之和. 输入格式 ...
- c语言设计第六章答案,c语言第六章 循环结构程序设计(习题册答案)
第六章 循环结构程序设计 基础练习(A) 一.选择题 1.C语言中while和do-while循环的主要区别是(A). A) do-while的循环体至少无条件执行一次 B) while的循环控制条件 ...
- 第6章 循环结构程序设计
第6章 循环结构程序设计 声明:文中观点仅代表个人,其中文字.图片未经本人许可,不得部分或全部转载,违者所造成影响后后果自负!联系本人方式:80368704@qq.com QQ:8036870 ...
- c语言如何实现一只蜗牛爬的循环,[工程科技]第五章 循环结构程序设计c语言程序设计.ppt...
[工程科技]第五章 循环结构程序设计c语言程序设计 第5章 循环结构程序设计 while语句 while语句 do while语句 do while语句 do while语句 do while语句 d ...
- C语言总结(第5章循环结构程序设计)
第5章循环结构程序设计 结构化程序设计的3种基本结构: 循环结构 顺序结构 选择结构 5.2用while语句实现循环 while循环和for循环的区别_FutureForXHF的博客-CSDN博客_w ...
- C语言程序设计第五章循环结构程序设计总结
5.1 引例 例5.1计算人口有规律增长的数量. 1.文字描述 2.流程图 3.代码及运行结果 例5.2使用while循环有规律累加值为止的编写程序 1.文字描述 2.流程图 3.代码及运行结果 . ...
- 第五章 循环结构程序设计习题(2)
目录 3.阅读程序题. (20)文字 (20)代码 (20)运行结果 4.完善程序题. (5)文字 (5)代码 (5)运行结果 (6)文字描述 (6)代码 (6)运行结果 (8)文字描述 (8)代 ...
最新文章
- Oracle字符集的查看查询和Oracle字符集的设置修改
- Spring Boot中使用MongoDB数据库
- python加载html表格数据,使用python 3.6获取html表格行数据美丽的汤
- Lindley equation
- python多分支结构实例_JS优化多分支结构(经典)
- 李洋疯狂C语言之有关“you are come from shanghai”逆序(二)
- 服务网关zuul之二:过滤器--请求过滤执行过程(源码分析)
- C#LeetCode刷题-动态规划
- java 状态机_Java 数据持久化系列之池化技术
- PostgreSQL的backuplabel file 初步学习
- 如何删除oracle软件,如何用静默方式删除oracle软件
- CentOS下通过yum安装svn及配置
- html屏幕共享,屏幕共享
- xp系统怎样安装传真服务器,ghost xp安装传真服务教程
- Ubuntu Linux
- 推荐一个可以连gmail的邮箱
- 从Sklearn Bunch对象到Pandas DataFrame对象的转换
- bitbucket配置_用Bitbucket搭建博客初探
- 高仿滴滴打车 android,仿滴滴出行页面Demo
- Java io流 解压缩多个文件 损坏问题解决
热门文章
- java异常_深入理解java异常处理机制
- UGUI 在面板经常使用的表格布局制作
- php为什么发送不到sql,PHP-为什么我的Ajax无法执行我的SQL查询?
- arm linux 识别新硬盘_想玩树莓派却不会Linux?能装Windows的树莓派来了
- Java线程状态转换
- [渝粤教育] 江西财经大学 实用英语演讲 参考 资料
- 23种设计模式(十九)数据结构之组合模式
- 经典机器学习系列(七)【聚类分析】
- 上拉电阻与下拉电阻介绍
- 求解偏微分方程开源有限元软件deal.II学习--Step 8