Skip to content

Commit 104ce66

Browse files
committed
upload
1 parent ffddcf9 commit 104ce66

File tree

119 files changed

+3344
-185
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

119 files changed

+3344
-185
lines changed

C程序设计进阶/week2/Week2.md

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Week2
2+
3+
## 函数的定义与声明
4+
5+
三种函数调用的方式
6+
7+
- 独立语句
8+
- 表达式的一部分
9+
- 作为其他函数的实参
10+
11+
## 函数的调用过程
12+
13+
## 函数调用实例
14+
15+
## 变量的作用域
16+
17+
## 数组做函数参数
18+
19+
- 数组元素做参数
20+
- 数组名做参数
21+
22+
## 函数应用实例
23+
24+
25+

C程序设计进阶/week2/week2.pdf

3.46 MB
Binary file not shown.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
/*
2+
编程题#3:发票统计
3+
4+
注意: 总时间限制: 1000ms 内存限制: 65536kB
5+
6+
描述
7+
8+
有一个小型的报账系统,它有如下功能:
9+
10+
(1)统计每个人所报发票的总钱数
11+
12+
(2)统计每类发票的总钱数
13+
14+
将此系统简化为如下:假设发票类别共有A、B、C三种;一共有三个人,ID分别为1、2、3。
15+
16+
输入
17+
18+
系统输入包含三行,每行第一个数为人员ID(整型,1或2或3),第二个数为发票总张数(张数不超过100),之后是多个发票类别(字符型,A或B或C)和相应发票金额(单进度浮点型,不超过1000.0)。
19+
20+
输出
21+
22+
输出包含六行,前三行为每人(按ID由小到大输出)所报发票总钱数(保留两位小数),后三行为每类发票的总钱数(保留两位小数)。
23+
24+
样例输入
25+
1 5 A 1.0 A 2.0 C 1.0 B 1.0 C 1
26+
3 3 B 1 C 2 C 1
27+
2 4 B 1 A 1 C 1 A 1
28+
29+
样例输出
30+
1 6.00
31+
2 4.00
32+
3 4.00
33+
A 5.00
34+
B 3.00
35+
C 6.00
36+
*/
37+
38+
#include <iostream>
39+
#include <iomanip>
40+
using namespace std;
41+
42+
int main()
43+
{
44+
float bill[3][3] = { 0 };
45+
46+
for (int i = 0; i < 3; i++)
47+
{
48+
int id, n;
49+
cin >> id >> n;
50+
for (int j = 0; j < n; j++)
51+
{
52+
char type;
53+
float money;
54+
cin >> type >> money;
55+
switch (type)
56+
{
57+
case 'A':
58+
bill[id - 1][0] += money;
59+
break;
60+
case 'B':
61+
bill[id - 1][1] += money;
62+
break;
63+
case 'C':
64+
bill[id - 1][2] += money;
65+
break;
66+
}
67+
}
68+
}
69+
70+
for (int i = 0; i < 3; i++)
71+
{
72+
cout << i + 1 << ' ' << fixed << setprecision(2) << bill[i][0] + bill[i][1] + bill[i][2] << endl;
73+
}
74+
75+
char type[] = { 'A', 'B', 'C' };
76+
for (int i = 0; i < 3; i++)
77+
{
78+
cout << type[i] << ' ' << fixed << setprecision(2) << bill[0][i] + bill[1][i] + bill[2][i] << endl;
79+
}
80+
return 0;
81+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
/*
2+
编程题#2:四大湖
3+
4+
注意: 总时间限制: 1000ms 内存限制: 65536kB
5+
6+
描述
7+
8+
我国有4大淡水湖。
9+
10+
A说:洞庭湖最大,洪泽湖最小,鄱阳湖第三。
11+
12+
B说:洪泽湖最大,洞庭湖最小,鄱阳湖第二,太湖第三。
13+
14+
C说:洪泽湖最小,洞庭湖第三。
15+
16+
D说:鄱阳湖最大,太湖最小,洪泽湖第二,洞庭湖第三。
17+
18+
已知这4个湖的大小均不相等,4个人每人仅答对一个,
19+
20+
请编程按照鄱阳湖、洞庭湖、太湖、洪泽湖的顺序给出他们的大小排名。
21+
22+
输入
23+
24+
无。
25+
26+
输出
27+
28+
输出为4行,第1行为鄱阳湖的大小名次,从大到小名次分别表示为1、2、3、4;第2、3、4行分别为洞庭湖、太湖、洪泽湖的大小名次。
29+
30+
样例输入
31+
(无)
32+
33+
样例输出
34+
3
35+
2
36+
1
37+
4
38+
*/
39+
40+
#include <iostream>
41+
using namespace std;
42+
43+
int check(int guess[], int order[]);
44+
45+
46+
int main()
47+
{
48+
// 顺序:鄱阳湖、洞庭湖、太湖、洪泽湖
49+
int guessA[4] = { 3,1,0,4 };
50+
int guessB[4] = { 2,4,3,1 };
51+
int guessC[4] = { 0,3,0,4 };
52+
int guessD[4] = { 1,3,4,2 };
53+
54+
for (int i = 1; i <= 4; i++)
55+
{
56+
for (int j = 1; j <= 4; j++)
57+
{
58+
if (j == i)
59+
{
60+
continue;
61+
}
62+
for (int k = 1; k <= 4; k++)
63+
{
64+
if (k == i || k == j)
65+
{
66+
continue;
67+
}
68+
for (int l = 1; l <= 4; l++)
69+
{
70+
if (l == i || l == j || l == k)
71+
{
72+
continue;
73+
}
74+
int order[4] = { i, j, k, l };
75+
if (check(guessA, order) == 1 && check(guessB, order) == 1 && check(guessC, order) == 1 && check(guessD, order) == 1)
76+
{
77+
for (int m = 0; m < 4; m++)
78+
{
79+
cout << order[m] << endl;
80+
}
81+
return 0;
82+
}
83+
}
84+
}
85+
}
86+
}
87+
return 0;
88+
}
89+
90+
int check(int guess[], int order[])
91+
{
92+
int result = 0;
93+
for (int i = 0; i < 4; i++)
94+
{
95+
if (order[i] == guess[i])
96+
{
97+
result++;
98+
}
99+
}
100+
return result;
101+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/*
2+
编程题#1:寻找下标
3+
4+
注意: 总时间限制: 1000ms 内存限制: 65536kB
5+
6+
描述
7+
8+
已知一个整数数组x[],其中的元素彼此都不相同。找出给定的数组中是否有一个元素满足x[i]=i的关系,数组下标从0开始。
9+
10+
举例而言,如果x[]={-2,-1,7,3,0,8},则x[3] = 3,因此3就是答案。
11+
12+
输入
13+
14+
第一行包含一个整数n (0 < n < 100),表示数组中元素的个数。<br />第二行包含n个整数,依次表示数组中的元素。
15+
16+
输出
17+
18+
输出为一个整数,即满足x[i]=i的元素,若有多个元素满足,输出第一个满足的元素。若没有元素满足,则输出“N”。
19+
20+
样例输入
21+
第一组
22+
6
23+
-2 -1 7 3 4 8
24+
第二组
25+
6
26+
9 9 9 9 9 9
27+
28+
样例输出
29+
第一组
30+
3
31+
第二组
32+
N
33+
*/
34+
#include <iostream>
35+
using namespace std;
36+
37+
int main()
38+
{
39+
int n = 0;
40+
int a[100];
41+
42+
cin >> n;
43+
for (int i = 0; i < n; i++)
44+
{
45+
cin >> a[i];
46+
}
47+
48+
for (int i = 0; i < n; i++)
49+
{
50+
if (a[i] == i)
51+
{
52+
cout << i << endl;
53+
return 0;
54+
}
55+
}
56+
cout << "N" << endl;
57+
return 0;
58+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
/*
2+
编程题#4:Tomorrow never knows?
3+
4+
来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)
5+
6+
注意: 总时间限制: 1000ms 内存限制: 65536kB
7+
8+
描述
9+
10+
甲壳虫的《A day in the life》和《Tomorrow never knows》脍炙人口,如果告诉你a day in the life,真的会是tomorrow never knows?相信学了计概之后这个不会是难题,现在就来实现吧。
11+
12+
读入一个格式为yyyy-mm-dd的日期(即年-月-日),输出这个日期下一天的日期。可以假定输入的日期不早于1600-01-01,也不晚于2999-12-30。
13+
14+
输入
15+
16+
输入仅一行,格式为yyyy-mm-dd的日期。
17+
18+
输出
19+
20+
输出也仅一行,格式为yyyy-mm-dd的日期
21+
22+
样例输入
23+
2010-07-05
24+
25+
样例输出
26+
1
27+
2010-07-06
28+
*/
29+
30+
#include <iostream>
31+
#include <iomanip>
32+
using namespace std;
33+
34+
bool isLeapYear(int year);
35+
bool isEndOfMonth(int month, int day, bool isLeapYear);
36+
bool isEndOfYear(int month, int day);
37+
38+
int main()
39+
{
40+
int year, month, day;
41+
char dash;
42+
cin >> year >> dash >> month >> dash >> day;
43+
if (isEndOfMonth(month, day, isLeapYear(year)))
44+
{
45+
if (isEndOfYear(month, day))
46+
{
47+
year++;
48+
month = 1;
49+
day = 1;
50+
}
51+
else
52+
{
53+
month++;
54+
day = 1;
55+
}
56+
}
57+
else
58+
{
59+
day++;
60+
}
61+
cout << year << '-'
62+
<< setfill('0') << setw(2) << month << '-'
63+
<< setfill('0') << setw(2) << day << endl;
64+
return 0;
65+
}
66+
67+
bool isLeapYear(int year)
68+
{
69+
return year % 400 == 0 || (year % 100 != 0 && year % 4 == 0);
70+
}
71+
72+
bool isEndOfMonth(int month, int day, bool isLeapYear)
73+
{
74+
int months[] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
75+
if (isLeapYear)
76+
{
77+
months[1] = 29;
78+
}
79+
80+
for (int i = 0; i < 12; i++)
81+
{
82+
if (day == months[month - 1])
83+
{
84+
return true;
85+
}
86+
}
87+
return false;
88+
}
89+
90+
bool isEndOfYear(int month, int day)
91+
{
92+
return month == 12 && day == 31;
93+
}

0 commit comments

Comments
 (0)