第1章 程序设计入门
2015-11-19 14:58
309 查看
1.1 算术表达式
浮点数/浮点数 = 浮点数,整数先变成浮点数再进行浮点数运算,整数/整数 = 整数;sqrt函数声明:double sqrt(double);此时应该#include <math.h>#include <stdio.h> #include <math.h> int main() { printf("%d\n", 8/5.0); printf("%f\n", 8/5.0); printf("%.3f\n", 1 + 2 * sqrt(3.0)/(5 - 0.1)); return 0; }
上面第一行输出以补码格式输出,故要注意格式。
1.2 变量及其输入
例题1.1 圆柱体的表面积#include <stdio.h> #include <math.h> int main() { const double pi = 2 * asin(1.0);//acos(-1.0) double r, h; scanf("%lf%lf", &r, &h); //注意以lf格式输入,否则高位不为0,使结果出错 double s = 2 * pi * r * r + 2 * pi * r * h; printf("Area = %.3f\n", s); return 0; }
尽量用const关键字来声明常数,double要以lf格式输入,否则存储单位高位不为0导致结果变大
1.3 顺序结构程序设计
例题1.2 三位数反转算法一:将各位分离,反序输出
#include <stdio.h> int main() { int n; scanf("%d", &n); printf("%d%d%d", n%10, n/10%10, n/100); return 0; }
算法二:将反转后的数存到变量m中,%03d来输出则25表现为025
#include <stdio.h> int main() { int n, m; scanf("%d", &n); m = n%10*100 + n/10%10*10 + n/100; printf("%03d\n", m); return 0; }
例题1.3 交换变量
算法一:使用中间变量
t = a; a = b; b = t;
算法二:不使用中间变量,只适合定义了加减法的数据类型才可以使用它
a = a + b; b = a - b; a = a - b;
算法三:输出时交换位置,即黑盒测试
scanf("%d%d", &a, &b); printf("%d %d\n", b, a);
1.4 分支结构程序设计
例题1.4 鸡兔同笼(已知总头数和总脚数)算法一:鸡有a只,兔有b只,已知头共n个,脚共m个,则可联立方程组a + b = n;2n + 4b = m;解得a = (4n - m)/2;b = n - a;
#include <stdio.h> int main() { int n, m; scanf("%d%d", &n, &m); int a, b; a = (4*n - m)/2; //m为偶数时才能保证a和b为整数 b = n - a; if(a < 0 || b < 0 || m % 2 == 1) //去掉解不成立情况 printf("No Answer\n"); else printf("%d %d\n", a, b); return 0; }算法二:用枚举法,循环为i:0-->a,对每个j = n - a,进行if(2i + 4j == m)的判断,判断正确则输出满足条件的解。
#include <stdio.h> int main() { int n, m; scanf("%d%d", &n, &m); int i, j, k = 0; //k用来做有无解的标记 for(i = 0; i < n; i++){ j = n - i; if(2 * i + 4 * j == m){ k = 1; printf("%d %d\n", i, j); break; } } if(k == 0) printf("No Answer\n"); return 0; }
例题1.5 三整数由小到大排序
算法一:3个整数a,b,c,有3 * 2 * 1 = 6种排序情况(abc,acb,bac,bca,cab,cba),输入a,b,c,对这6种排序情况分别进行判断。
#include <stdio.h> int main() { int a, b, c; scanf("%d%d%d", &a, &b, &c); if(a <= b && b <= c) printf("%d %d %d\n", a, b, c); else if(a <= c && c <= b) printf("%d %d %d\n", a, c, b); else if(b <= a && a <= c) printf("%d %d %d\n", b, a, c); else if(b <= c && c <= a) printf("%d %d %d\n", b, c, a); else if(c <= a && a <= b) printf("%d %d %d\n", c, a, b); else if(c <= b && b <= a) printf("%d %d %d\n", c, b, a); return 0; }
算法二:输入abc后,我们用a存放最小值,b存放较小值,c存放最大值,故先对a和b,a和c比较,交换变量使a存放最小值;再对b和c比较,交换变量使b存放较小值。
#include <stdio.h> int main() { int a, b, c; scanf("%d%d%d", &a, &b, &c); int t; if(a > b) {t = a; a = b; b = t;} if(a > c) {t = a; a = c; c = t;} if(b > c) {t = b; b = c; c = t;} printf("%d %d %d\n", a, b, c); return 0; }
1.5注解与习题
编译器是将源代码变成机器可以直接执行的指令。C99中double的输出必须用%f,而C89和C++可用%lf。printf("%%d\\n"); //输出%d\n习题1.6 三角形(判断是否为直角三角形,是则输出yes,否则输出no,如果根本无法构成三角形,输出not a triangle)
<span style="font-size:10px;">#include <stdio.h> int main() { int a, b, c; scanf("%d%d%d", &a, &b, &c); if(a < b + c && b < a + c && c < a + b){ if(a*a + b*b == c*c || a*a + c*c == b*b || b*b + c*c == a*a) printf("yes\n"); else printf("no\n"); } else printf("not a triangle\n"); return 0; }
习题1.7 判断是否为闰年(是输出yes,否输出no)
<span style="font-size:10px;">#include <stdio.h> int main() { int year; scanf("%d", &year); if(year % 4 == 0 && year %100 != 0 || year % 400 == 0) printf("yes\n"); else printf("no\n"); return 0; }
相关文章推荐
- java 深入技术一
- 标准C++中的string类的用法总结
- linux文件操作
- MySQL学习笔记
- 隐藏nginx,apache,tomcat,varnish版本信息
- 隐藏nginx,apache,tomcat,varnish版本信息
- 3-3蛇形填数
- elasticsearch-2.0.0 搭建集群的最简易配置
- UItableView系列——代理
- fresco使用文档地址
- MyFirst程序详解
- Thread.UncaughtExceptionHandler(为每一个Thread对象加一个异常处理器)
- SAP运行时状态条显示
- 转:Tomcat安装配置及站点说明
- 通过对源代码的反向工程学习CoreData架构
- linux 安装 tomcat
- Gradle
- Mybatis动态SQL
- LeetCode—306 Additive Number
- CSDN标题