Skip to content

Commit e78bd45

Browse files
committed
update
1 parent 82ad6da commit e78bd45

33 files changed

+322
-390
lines changed
+33-16
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,51 @@
1-
# 课程大纲
1+
# 计算导论与C语言基础
22

3-
## week01
3+
## 课程介绍
44

5-
计算机基础原理
5+
这是北京大学在Coursera上开设程序设计与算法专项课程的第一门课,讲师是李戈老师,讲课幽默风趣。个人认为这算是一个不错的程序设计入门课,老师自己发明了一套“从感兴认识程序到理性认识程序”的学习方法。
66

7-
## week02
7+
相比授课,更加重要的是本课程提供的习题,这些习题都是从北大学生的作业里提炼出来的,由于是网课,数量自然少很多,但质量并不低。此外还提供了题目在POJ的链接,所有习题都可以先在POJ尝试提交,获得一个及时反馈。
88

9-
计算机历史及其发展趋势
9+
总的来说这门课还是比较基础,真的安排12周学完的话太长了,建议最好在一个月内完成吧。
1010

11-
## week03
1211

13-
程序运行的基本原理
12+
13+
## 课程主要内容
1414

1515
> 前三章都是计算机的一些概论性质的内容,不是特别重要。week4开始就有编程作业了
1616
17-
## week04
17+
week01:计算机基础原理
18+
19+
week02:计算机历史及其发展趋势
20+
21+
week03:程序运行的基本原理
22+
23+
week04:编程基本概念(变量、控制流等等)
24+
25+
week05:结构化程序设计,用样例介绍如何把现实问题抽象成程序问题
26+
27+
week06:C语言发展历史,程序设计语言构成
28+
29+
week07:数据类型
30+
31+
week08:运算符
32+
33+
week09:分支与循环语句
1834

19-
编程基本概念(变量、控制流等等)
35+
week10:数组
2036

21-
## week05
37+
week11:字符串
2238

23-
结构化程序设计,用样例介绍如何把现实问题抽象成程序问题
39+
week12:期末测试
2440

25-
## week06
41+
除了个别周外,每周都有课后习题。
2642

27-
C语言发展历史
2843

29-
程序设计语言构成
3044

31-
## week07
45+
## 习题集
3246

33-
数据类型
47+
课程中有一些编程练习题,基于这门课的知识只能用比较“笨”的方法去实现,但实际上是一些很经典的算法题目,特地整理在这里,方便以后学算法的时候进行回顾。
3448

49+
- week07_03:找出第k大的数
50+
- week08_05:找和为k的两个数
51+
-

1.计算导论与C语言基础/week07/成绩判断.cpp renamed to 1.计算导论与C语言基础/week07/02_成绩判断.cpp

-32
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,3 @@
1-
/*
2-
成绩判断
3-
4-
描述
5-
6-
输入一个0--100的分数,判断分数代表什么等级。
7-
8-
95<=分数<=100, 输出1
9-
10-
90<=分数<95,输出2
11-
12-
85<=分数<90,输出3
13-
14-
80<=分数<85,输出4
15-
16-
70<=分数<80,输出5
17-
18-
60<=分数<70输出6
19-
20-
分数 < 60;输出7.
21-
22-
输入
23-
24-
n
25-
26-
输出
27-
28-
m
29-
30-
样例
31-
*/
32-
331
#include <iostream>
342
using namespace std;
353

1.计算导论与C语言基础/week07/找出第k大的数.cpp renamed to 1.计算导论与C语言基础/week07/03_找出第k大的数.cpp

-22
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,3 @@
1-
/*
2-
找出第k大的数
3-
4-
描述
5-
6-
用户输入N和K,然后接着输入N个正整数(无序的),程序在不对N个整数排序的情况下,找出第K大的数。注意,第K大的数意味着从大到小排在第K位的数。
7-
8-
输入
9-
10-
N
11-
12-
K
13-
14-
a1 a2 a3 a4 ..... aN
15-
16-
输出
17-
18-
b
19-
*/
20-
211
#include <iostream>
222
using namespace std;
233

@@ -29,9 +9,7 @@ int main()
299
int *a = new int[n];
3010

3111
for (int i = 0; i < n; i++)
32-
{
3312
cin >> a[i];
34-
}
3513

3614
for (int i = 0; i < n; i++)
3715
{

1.计算导论与C语言基础/week07/人民币支付.cpp renamed to 1.计算导论与C语言基础/week07/04_人民币支付.cpp

-16
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,3 @@
1-
/*
2-
人民币支付
3-
4-
描述
5-
6-
从键盘输入一指定金额(以元为单位,如345),然后输出支付该金额的各种面额的人民币数量,显示100元,50元,20元,10元,5元,1元各多少张,要求尽量使用大面额的钞票。
7-
8-
输入
9-
10-
一个小于1000的正整数。
11-
12-
输出
13-
14-
输出分行,每行显示一个整数,从上到下分别表示100元,50元,20元,10元,5元,1元人民币的张数
15-
*/
16-
171
#include <iostream>
182
using namespace std;
193

1.计算导论与C语言基础/week07/README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ PS:分子和分母都没有为0的情况,也没有出现负数的情况
135135

136136
每个冒号之后有一个空格。
137137

138-
输出可以用 cout<<fixed<<setprecision(2) << f; 来保留f后面的两位小数。
138+
输出可以用 `cout<<fixed<<setprecision(2) << f;` 来保留f后面的两位小数。
139139

140140

141141

@@ -227,9 +227,9 @@ b
227227

228228
### 解题思路
229229

230-
一开始还想着不排序岂不是很复杂?其实只要遍历每个数,求出比他大的个数,如果为k-1个,那么这个数就是第k大的数。但这个方法效率非常低。
231-
230+
我用了最简单,也是效率最低的方法,遍历每个数,求出比他大的个数,如果为k-1个,那么这个数就是第k大的数。
232231

232+
网上也有利用算法知识解决的,快速排序等等,因为还没学到这部分内容先跳过。
233233

234234
## 编程题#4:人民币支付
235235

1.计算导论与C语言基础/week08/点评赛车.cpp renamed to 1.计算导论与C语言基础/week08/00_点评赛车.cpp

-36
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,3 @@
1-
/*
2-
点评赛车
3-
4-
描述
5-
6-
4名专家对4款赛车进行评论
7-
8-
1)A说:2号赛车是最好的;
9-
10-
2)B说:4号赛车是最好的;
11-
12-
3)C说:3号赛车不是最好的;
13-
14-
4)D说: B说错了。
15-
16-
事实上只有1款赛车最佳,且只有1名专家说对了,其他3人都说错了。
17-
18-
请编程输出最佳车的车号,以及说对的专家。
19-
20-
输入
21-
22-
无输入。
23-
24-
输出
25-
26-
输出两行。第一行输出最佳车的车号(1-4中的某个数字)。第二行输出说对的专家(A-D中的某个字母)。
27-
*/
28-
291
#include <iostream>
302
using namespace std;
313

@@ -42,21 +14,13 @@ int main()
4214
{
4315
cout << best << endl;
4416
if (a)
45-
{
4617
cout << "A" << endl;
47-
}
4818
else if (b)
49-
{
5019
cout << "B" << endl;
51-
}
5220
else if (c)
53-
{
5421
cout << "C" << endl;
55-
}
5622
else if (d)
57-
{
5823
cout << "D" << endl;
59-
}
6024
}
6125
}
6226
return 0;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#include <iostream>
2+
using namespace std;
3+
4+
int main()
5+
{
6+
int a = 0;
7+
int input = 0;
8+
int sum = 0;
9+
10+
cin >> a;
11+
for (int i = 0; i < 5; i++)
12+
{
13+
cin >> input;
14+
if (input < a)
15+
sum += input;
16+
}
17+
18+
cout << sum << endl;
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#include <iostream>
2+
using namespace std;
3+
4+
int main()
5+
{
6+
int n = 0;
7+
cin >> n;
8+
9+
10+
while (n--)
11+
{
12+
float dist = 0;
13+
cin >> dist;
14+
if ((dist / 3 + 50) < (dist / 1.2f))
15+
{
16+
cout << "Bike" << endl;
17+
}
18+
else if (((dist / 3 + 50) > (dist / 1.2f)))
19+
{
20+
cout << "Walk" << endl;
21+
}
22+
else
23+
{
24+
cout << "All" << endl;
25+
}
26+
}
27+
return 0;
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#include <iostream>
2+
using namespace std;
3+
4+
int main()
5+
{
6+
int N = 0, K = 0;
7+
while (cin >> N >> K)
8+
{
9+
int money = N;
10+
float price = 200;
11+
bool canBuy = false;
12+
for (int i = 1; i <= 20; i++)
13+
{
14+
if (money >= price)
15+
{
16+
cout << i << endl;
17+
canBuy = true;
18+
break;
19+
}
20+
money += N;
21+
price *= (1 + K / 100.0);
22+
}
23+
if (!canBuy)
24+
{
25+
cout << "Impossible" << endl;
26+
}
27+
}
28+
return 0;
29+
}

1.计算导论与C语言基础/week08/找和为K的两个元素.cpp renamed to 1.计算导论与C语言基础/week08/04_找和为K的两个元素.cpp

-18
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,3 @@
1-
/*
2-
找和为k的两个元素
3-
4-
描述
5-
6-
在一个长度为n(n < 1000)的整数序列中,判断是否存在某两个元素之和为k。
7-
8-
输入
9-
10-
第一行输入序列的长度n和k,用空格分开。
11-
12-
第二行输入序列中的n个整数,用空格分开。
13-
14-
输出
15-
16-
如果存在某两个元素的和为k,则输出yes,否则输出no。
17-
*/
18-
191
#include <iostream>
202
using namespace std;
213

1.计算导论与C语言基础/week08/自整除数.cpp renamed to 1.计算导论与C语言基础/week08/05_自整除数.cpp

-16
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,3 @@
1-
/*
2-
自整除数
3-
4-
描述
5-
6-
对一个整数n,如果其各个位数的数字相加得到的数m能整除n,则称n为自整除数.例如21,21%(2+1)==0,所以21是自整除数.现求出从10到n(n < 100)之间的所有自整除数.
7-
8-
输入
9-
10-
有一行,整数n,(10 <= n < 100)
11-
12-
输出
13-
14-
有多行.按从小到大的顺序输出所有大于等于10,小于等于n的自整除数,每行一个自整除数.
15-
*/
16-
171
#include <iostream>
182
using namespace std;
193

1.计算导论与C语言基础/week08/README.md

-19
Original file line numberDiff line numberDiff line change
@@ -33,29 +33,12 @@
3333
### 样例输入
3434

3535
```
36-
1
37-
38-
39-
40-
41-
42-
43-
44-
45-
4636
(无)
47-
48-
49-
50-
51-
52-
5337
```
5438

5539
### 样例输出
5640

5741
```
58-
1
5942
A
6043
```
6144

@@ -172,8 +155,6 @@ Bike
172155
40 8
173156
```
174157

175-
###
176-
177158
### 样例输出
178159

179160
```

0 commit comments

Comments
 (0)