第一章 程序入门设计
来源:互联网 发布:js select 触发事件 编辑:程序博客网 时间:2024/05/20 05:54
内容:
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的范围、运算符的优先性注:一些个人课后题解题想法在:“ 算法竞赛课后习题解题”(类别)
- 第一章 程序入门设计
- 第一章 设计模式入门(策略模式)
- 《我的程序路》第一章 Java入门
- 设计模式---第一章设计模式入门:策略模式
- 第一章 入门
- 第一章 入门
- 第一章 入门
- 第一章 入门
- 第一章 入门
- 第一章 入门
- 第一章 入门
- 〈数据库设计入门经典〉之第一章笔记
- X Window 程式设计入门--第一章 什麽是 X Window
- X Window 程式设计入门--第一章 什麽是 X Window
- 第一章 设计模式入门之策略模式【C++11版】
- 第一章 快速入门 编写简单的C++程序
- 第一部分C语言入门 第一章 程序的基本概念
- 第一章 JAVA入门(JAVA程序执行过程)
- poi操作word文档,以07版本为参考,将word文档中图片替换为文本(替换文本也一样),读图片可选文字内容
- iOS7时iPAD旋转的键盘需要特殊处理
- CentOS 6.6下Xen虚拟化实战
- Android 键盘显示/隐藏监听事件
- 微信企业号
- 第一章 程序入门设计
- Speculative Execution in Hadoop
- Oracle PL/SQL性能DBMS_PROFILE
- Spring常用注解汇总
- c++中dll介绍(详细)
- 2015 CCPC G题 【DFS 暴力】
- Android MusicPlayer
- 全排列(含递归和非递归的解法)
- LEETCODE-Valid Palindrome