第一章 程序入门设计
2015-10-28 18:55
302 查看
内容:
1.1算术表达式
1.2变量及其输入
1.3顺序结构程序设计
1.4分支结构程序设计
[注解]:①C语言的概述及发展史:C99、C11及其它 ②数据类型与输入格式
1.1算术表达式
1-1 计算并输出1+2的值
3
修改1-1,输出3-4、5*6、8/4、8/5
-1
30
2
1
-1
对比:
-1
-1
1
引申:
-3
3
-3
为什么是1而不是1.6?为什么不是-1.6而是-1?
1-2 计算并输出8/5的值,保留小数点后一位
1.6
修改:%.1f->%.2f或者%f 8./5->8/5 %.1f->%d
1.60
1.600000
0.0
0.00000
为什么是0.0和0.00000呢?①
-1717986918
为什么是这个结果呢?②
问题①②涉及:整数和浮点数的编码
这个问题可能也跟计算机深层的东西有关,如果有很好的解答,会跟大家分享
这里有个注意点:-1717986918(虽然书里没讲,但是对于这么与众不同的数据,我还是满怀好奇的,对于这个特殊的数,在查阅有关资料之后,再分享出来)
这是一个比较合理的解释,不过可能要学习计算机更深层的东西才能完全理解:http://zhidao.baidu.com/link?url=NWXrjH-GvpPuoTXQlJ-nsj-BnavLCf76fFrVtdZl3nE1askseYm7GDQ3tBMQYKKsrPpYRFiEoz2fYRkTH87R-uddvWwf-na45n-WujF0TC_
1-3 复杂的程序计算(某些数学运算符的表示)
1.70695951
1.2 变量及其输入
1-4 a+b的问题
1 5
6
1-5 圆柱体的表面积
输入底面半径r和高h,求圆柱体表面积(保留三位小数)
3.5 9
Area = 274.889
这里要注意的点是:%lf%lf—–>如果是%f%f,可以编译一下看看结果
PI求法:
1、一般:#define PI 3.14
2、这里:const double PI = acos(-1);
1-6 三位数反转
120
021
理解:%03d的用意
上面是对于三位数的,下面是int 数通用的:[也是hdoj中金山的一道题]
1-7 交换两个变量a、b
最简单的就是(keep it simple and stupid:kiss):
用指针实现:
1-8 鸡兔同笼
总数:n,总脚数:m
1-9 三整数排序(从小到大)
下面使用指针实现交换:
关于数据类型及格式输入符
123454321
[Warning] integer overflow in expression [-Woverflow]
-539247567
修改如下:
[Warning] integer overflow in expression [-Woverflow]
-539247567
再次修改:
本章有7道习题,5个问题
·平均数
·温度
·连续和
·正弦余弦
·打折
·三角形
·年份
问题:int、double的范围、运算符的优先性
注:一些个人课后题解题想法在:“ 算法竞赛课后习题解题”(类别)
1.1算术表达式
1.2变量及其输入
1.3顺序结构程序设计
1.4分支结构程序设计
[注解]:①C语言的概述及发展史:C99、C11及其它 ②数据类型与输入格式
1.1算术表达式
1-1 计算并输出1+2的值
#include<stdio.h> int main() { printf("%d\n", 1+2); return 0; }
3
修改1-1,输出3-4、5*6、8/4、8/5
#include<stdio.h> int main() { printf("%d\n", 3-4); return 0; }
-1
#include<stdio.h> int main() { printf("%d\n", 5*6); return 0; }
30
#include<stdio.h> int main() { printf("%d\n", 8/4); return 0; }
2
#include<stdio.h> int main() { printf("%d\n", 8/5); return 0; }
1
#include<stdio.h> int main() { printf("%d\n", -8/5); return 0; }
-1
对比:
#include<stdio.h> int main() { printf("%d\n", (-8)/5); printf("%d\n", 8/(-5)); printf("%d\n", (-8)/(-5)); return 0; }
-1
-1
1
引申:
#include<stdio.h> int main() { printf("%d\n", (-8)%5); printf("%d\n", 8%(-5)); printf("%d\n", (-8)%(-5)); return 0; }
-3
3
-3
为什么是1而不是1.6?为什么不是-1.6而是-1?
1-2 计算并输出8/5的值,保留小数点后一位
#include<stdio.h> int main() { printf("%.1f\n", 8.0/5.0); return 0; }
1.6
修改:%.1f->%.2f或者%f 8./5->8/5 %.1f->%d
#include<stdio.h> int main() { printf("%.2f\n", 8.0/5.0); return 0; }
1.60
#include<stdio.h> int main() { printf("%f\n", 8.0/5.0); return 0; }
1.600000
#include<stdio.h> int main() { printf("%.1f\n", 8/5); return 0; }
0.0
#include<stdio.h> int main() { printf("%f\n", 8/5); return 0; }
0.00000
为什么是0.0和0.00000呢?①
#include<stdio.h> int main() { printf("%d\n", 8.0/5.0); return 0; }
-1717986918
为什么是这个结果呢?②
问题①②涉及:整数和浮点数的编码
这个问题可能也跟计算机深层的东西有关,如果有很好的解答,会跟大家分享
这里有个注意点:-1717986918(虽然书里没讲,但是对于这么与众不同的数据,我还是满怀好奇的,对于这个特殊的数,在查阅有关资料之后,再分享出来)
这是一个比较合理的解释,不过可能要学习计算机更深层的东西才能完全理解:http://zhidao.baidu.com/link?url=NWXrjH-GvpPuoTXQlJ-nsj-BnavLCf76fFrVtdZl3nE1askseYm7GDQ3tBMQYKKsrPpYRFiEoz2fYRkTH87R-uddvWwf-na45n-WujF0TC_
1-3 复杂的程序计算(某些数学运算符的表示)
#include<stdio.h> #include<math.h> int main() { printf("%.8f\n", 1+2*sqrt(3)/(5-0.1)); return 0; }
1.70695951
1.2 变量及其输入
1-4 a+b的问题
#include<stdio.h> int main() { int a, b; scanf("%d%d", &a, &b); printf("%d\n", a+b); return 0; }
1 5
6
1-5 圆柱体的表面积
输入底面半径r和高h,求圆柱体表面积(保留三位小数)
#include<stdio.h> #include<math.h> int main() { double r, h, area; scanf("%lf%lf", &r, &h); const double PI = acos(-1); area = 2*PI*r*r + 2*PI*r*h; printf("Area = %.3f\n", area); return 0; }
3.5 9
Area = 274.889
这里要注意的点是:%lf%lf—–>如果是%f%f,可以编译一下看看结果
PI求法:
1、一般:#define PI 3.14
2、这里:const double PI = acos(-1);
1-6 三位数反转
#include<stdio.h> int main() { int num; scanf("%d", &num); printf("%d%d%d\n", num%10, num/10%10, num/100); return 0; }
#include<stdio.h> int main() { int num; scanf("%d",&num); int a = num/100; int b = num/10%10; int c = num%10; int sum = c*100 + b*10 + a; printf("%03d\n", sum); return 0; }
120
021
理解:%03d的用意
上面是对于三位数的,下面是int 数通用的:[也是hdoj中金山的一道题]
#include<stdio.h> int main() { int num; scanf("%d", &num); while(num/10){ printf("%d", num%10); num /= 10; } printf("%d\n", num); return 0; }
1-7 交换两个变量a、b
最简单的就是(keep it simple and stupid:kiss):
#include<stdio.h> int main() { int a, b, temp; scanf("%d%d", &a, &b); printf("%d %d\n", b, a); return 0; }
#include<stdio.h> int main() { int a, b; scanf("%d%d", &a, &b); printf("a = %d, b = %d\n", a, b); int temp = a; a = b; b = temp; printf("a = %d, b = %d\n", a, b); return 0; }
#include<stdio.h> int main() { int a, b; scanf("%d%d", &a, &b); a = b - a; b = b - a; a = b + a; printf("%d %d\n", a, b); return 0; }
#include<stdio.h> int main() { int a, b; scanf("%d%d", &a, &b); a = a + b; b = a - b; a = a - b; printf("%d %d\n", a, b); return 0; }
#include<stdio.h> int main() { int a, b, temp; scanf("%d%d", &a, &b); a = a^b; b = a^b; a = a^b; printf("%d %d\n", a, b); return 0; }
用指针实现:
#include<stdio.h> void exchang(int *i, int *j){ int temp; temp = *i; *i = *j; *j = temp; } int main() { int a, b; scanf("%d%d", &a, &b); exchang(&a, &b); printf("%d %d\n", a, b); return 0; }
1-8 鸡兔同笼
总数:n,总脚数:m
#include<stdio.h> int main() { int a, b, m, n; scanf("%d%d", &n, &m); a = (4*n - m)/2; b = (m - 2*n)/2; if(m%2==1 || a<0 || b<0){ printf("No answer"); } else{ printf("%d %d\n", a, b); } return 0; }
#include<stdio.h> int main() { int n, m; scanf("%d%d", &n, &m); if((4*n-m)/2>0 && (m-2*n)/2>0){ printf("%d %d\n", (4*n-m)/2, (m-2*n)/2); } else { printf("No answer\n"); } return 0; }
1-9 三整数排序(从小到大)
#include<stdio.h> int main() { int a, b, c, temp; scanf("%d%d%d", &a, &b, &c); if(a>b){ temp = a; a = b; b = temp; } if(a>c){ temp = a; a = c; c = temp; } if(b>c){ temp = b; b = c; c = temp; } printf("%d %d %d\n", a, b, c); return 0; }
下面使用指针实现交换:
#include<stdio.h> int swap(int *i, int *j) { int temp; temp = *i; *i = *j; *j = temp; return 0; } int main() { int a, b, c; scanf("%d%d%d", &a, &b, &c); int *x = &a; int *y = &b; int *z = &c; if(a>b) swap(x, y); if(a>c) swap(x,z); if(b>c) swap(y,z); printf("%d %d %d\n", a, b, c); return 0; }
#include<stdio.h> void getChange(int *i, int *j){ int temp = *i; *i = *j; *j = temp; } int main() { int a, b, c; scanf("%d%d%d", &a, &b, &c); if(a>b){ getChange(&a, &b); } if(a>c){ getChange(&a, &c); } if(b>c){ getChange(&b, &c); } printf("%d %d %d\n", a, b, c); return 0; }
关于数据类型及格式输入符
#include<stdio.h> int main() { printf("%d\n", 11111 * 11111); return 0; }
123454321
#include<stdio.h> int main() { printf("%d\n", 111111 * 111111); return 0; }
[Warning] integer overflow in expression [-Woverflow]
-539247567
修改如下:
#include<stdio.h> int main() { printf("%ld\n", 111111 * 111111); return 0; }
[Warning] integer overflow in expression [-Woverflow]
-539247567
再次修改:
#include<stdio.h> int main() { printf("%lld\n", 111111 * 111111); return 0; }
本章有7道习题,5个问题
·平均数
·温度
·连续和
·正弦余弦
·打折
·三角形
·年份
问题:int、double的范围、运算符的优先性
注:一些个人课后题解题想法在:“ 算法竞赛课后习题解题”(类别)
相关文章推荐
- 微信企业号
- Windows资源文件里VarFileInfo的Translation(EXE的语言描述信息)
- JS会自动调用toString()方法来显示日期(即“Date对象的内容”)
- [LeetCode]题解(python):031-Next Permutation
- 判断一个数是否是素数
- iOS7时iPAD旋转的键盘需要特殊处理
- iOS集合 学习笔记
- Java实现增加天数得到新的日期
- CentOS 6.6下Xen虚拟化实战
- poi操作word文档,以07版本为参考,将word文档中图片替换为文本(替换文本也一样),读图片可选文字内容
- 套题 2011福州区域赛(3/8)
- 出现次数超过一半的数字
- 汇编SUB和MUL的CF位
- win7 excel DCOM配置 / 远程读excel
- redis安装笔记
- JS中的自带对象Date
- 《转》---google面经
- servlet的层级结构和常用的类
- RESTful Web Services - Methods
- Linux下php安装Redis扩展