diff --git a/【实践课外】14.指针2/6-1 鸡兔同笼问题.c b/【实践课外】14.指针2/6-1 鸡兔同笼问题.c new file mode 100644 index 0000000..41f2481 --- /dev/null +++ b/【实践课外】14.指针2/6-1 鸡兔同笼问题.c @@ -0,0 +1,14 @@ +int ChickenRabbit(int *chicken, int *rabbit, int head, int foot) { + if (head < 0 || foot < 0 || foot % 2 != 0 || foot > head * 4 || foot < head * 2) { + return 0; + } + + *chicken = (4 * head - foot) / 2; + *rabbit = head - *chicken; + + if (*chicken < 0 || *rabbit < 0 || *chicken + *rabbit != head) { + return 0; + } + + return 1; +} diff --git a/【实践课外】14.指针2/6-1 鸡兔同笼问题.md b/【实践课外】14.指针2/6-1 鸡兔同笼问题.md new file mode 100644 index 0000000..c0fa0a4 --- /dev/null +++ b/【实践课外】14.指针2/6-1 鸡兔同笼问题.md @@ -0,0 +1,58 @@ +# 6-1 鸡兔同笼问题 + + +《孙子算经》记载:“今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?” + +#### 函数原型 + +```c +int ChickenRabbit(int *chicken, int *rabbit, int head, int foot); +``` + +说明:head 和 foot 为头和脚的数量,chicken 和 rabbit 为指示鸡和兔数量的指针。若问题有解,则将鸡和兔的数量保存到 chicken 和 rabbit 所指示的变量中,函数值为 1(真);否则不改变 chicken 和 rabbit 所指示的变量,函数值为 0(假)。 + +#### 裁判程序 + +```c +#include + +int ChickenRabbit(int *chicken, int *rabbit, int head, int foot); + +int main() +{ + int h, f, c, r; + scanf("%d%d", &h, &f); + if (ChickenRabbit(&c, &r, h, f)) + { + printf("%d %d\n", c, r); + } + else + { + puts("None"); + } + return 0; +} + +/* 你的提交代码将被嵌在这里 */ +``` + +#### 输入样例1 +```in +35 94 + +``` +#### 输出样例1 +```out +23 12 + +``` +#### 输入样例2 +```in +30 71 + +``` +#### 输出样例2 +```out +None + +``` diff --git a/【实践课外】14.指针2/6-2 冒泡排序.c b/【实践课外】14.指针2/6-2 冒泡排序.c new file mode 100644 index 0000000..f5b54a0 --- /dev/null +++ b/【实践课外】14.指针2/6-2 冒泡排序.c @@ -0,0 +1,7 @@ +int cmp(const void *a, const void *b) { + return *(int *)a - *(int *)b; +} + +void bubble(int a[], int n) { + qsort(a, n, sizeof(int), cmp); +} diff --git a/【实践课外】14.指针2/6-2 冒泡排序.md b/【实践课外】14.指针2/6-2 冒泡排序.md new file mode 100644 index 0000000..ab04b2d --- /dev/null +++ b/【实践课外】14.指针2/6-2 冒泡排序.md @@ -0,0 +1,46 @@ +# 6-2 冒泡排序 + +输入n(1<=n<=10)个整数,将它们从小到大排序后输出,要求编写函数bubble()实现冒泡排序算法。 + +### 函数接口定义: +```c++ +void bubble (int a[ ], int n); +``` + +其中 a为数组,n为数据个数。 + +### 裁判测试程序样例: +```c++ + +#include +void bubble (int a[ ], int n); +int main(void) +{ + int n, a[10]; + int i; + scanf("%d", &n); + for (i=0; i= 0; i--) { + *t = s[i]; + t++; + } + + for (int i = 0; i < len; i++) { + *t = s[i]; + t++; + } + + *t = '\0'; +} diff --git a/【实践课外】14.指针2/6-3 字符串反正序连接.md b/【实践课外】14.指针2/6-3 字符串反正序连接.md new file mode 100644 index 0000000..56aa7f3 --- /dev/null +++ b/【实践课外】14.指针2/6-3 字符串反正序连接.md @@ -0,0 +1,35 @@ +# 6-3 字符串反正序连接 + +先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序连接到t串的后面。 + +### 函数接口定义: +```c++ +void fun (char *s, char *t); +``` + +其中` s `和 `t `都是用户传入的参数。函数先将在字符串`s`中的字符按逆序存放到`t`串中,然后把`s`中的字符按正序连接到`t`串的后面。 + +### 裁判测试程序样例: +```c++ +#include +void fun (char *s, char *t); +int main() +{ char s[100], t[100]; +scanf("%s", s); +fun(s, t); +printf("%s\n", t); +return 0; +} + +/* 请在这里填写答案 */ +``` + +### 输入样例: +```in +abcd +``` + +### 输出样例: +```out +dcbaabcd +``` diff --git a/【实践课外】14.指针2/6-4 计算最长的字符串长度.c b/【实践课外】14.指针2/6-4 计算最长的字符串长度.c new file mode 100644 index 0000000..83296b9 --- /dev/null +++ b/【实践课外】14.指针2/6-4 计算最长的字符串长度.c @@ -0,0 +1,12 @@ +int max_len(char *s[], int n) { + int max_len = 0; + + for (int i = 0; i < n; i++) { + int len = strlen(s[i]); + if (len > max_len) { + max_len = len; + } + } + + return max_len; +} diff --git a/【实践课外】14.指针2/6-4 计算最长的字符串长度.md b/【实践课外】14.指针2/6-4 计算最长的字符串长度.md new file mode 100644 index 0000000..9a8b79c --- /dev/null +++ b/【实践课外】14.指针2/6-4 计算最长的字符串长度.md @@ -0,0 +1,53 @@ +# 6-4 计算最长的字符串长度 + +本题要求实现一个函数,用于计算有n个元素的指针数组s中最长的字符串的长度。 + +### 函数接口定义: +```c++ +int max_len( char *s[], int n ); +``` +其中`n`个字符串存储在`s[]`中,函数`max_len`应返回其中最长字符串的长度。 + +### 裁判测试程序样例: +```c++ +#include +#include +#include + +#define MAXN 10 +#define MAXS 20 + +int max_len( char *s[], int n ); + +int main() +{ + int i, n; + char *string[MAXN] = {NULL}; + + scanf("%d", &n); + for(i = 0; i < n; i++) { + string[i] = (char *)malloc(sizeof(char)*MAXS); + scanf("%s", string[i]); + } + printf("%d\n", max_len(string, n)); + + return 0; +} + +/* 你的代码将被嵌在这里 */ +``` + +### 输入样例: +```in +4 +blue +yellow +red +green +``` + +### 输出样例: +```out +6 + +``` diff --git a/【实践课外】14.指针2/6-5 查找星期.c b/【实践课外】14.指针2/6-5 查找星期.c new file mode 100644 index 0000000..dc1fafd --- /dev/null +++ b/【实践课外】14.指针2/6-5 查找星期.c @@ -0,0 +1,11 @@ +const char WEEKDAYS[][10] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; + +int getindex(char *s) { + for (int i = 0; i < 7; i++) { + if (strcmp(s, WEEKDAYS[i]) == 0) { + return i; + } + } + + return -1; +} diff --git a/【实践课外】14.指针2/6-5 查找星期.md b/【实践课外】14.指针2/6-5 查找星期.md new file mode 100644 index 0000000..936fc14 --- /dev/null +++ b/【实践课外】14.指针2/6-5 查找星期.md @@ -0,0 +1,63 @@ +# 6-5 查找星期 + +本题要求实现函数,可以根据下表查找到星期,返回对应的序号。 + +| 序号 | 星期 | +|:-----: |:--------:| +| 0 | Sunday | +| 1 | Monday | +| 2 | Tuesday | +| 3 | Wednesday | +| 4 | Thursday | +| 5 | Friday | +| 6 | Saturday | + +### 函数接口定义: +```c++ +int getindex( char *s ); +``` +函数`getindex`应返回字符串`s`序号。如果传入的参数`s`不是一个代表星期的字符串,则返回-1。 + +### 裁判测试程序样例: +```c++ +#include +#include + +#define MAXS 80 + +int getindex( char *s ); + +int main() +{ + int n; + char s[MAXS]; + + scanf("%s", s); + n = getindex(s); + if ( n==-1 ) printf("wrong input!\n"); + else printf("%d\n", n); + + return 0; +} + +/* 你的代码将被嵌在这里 */ +``` + +### 输入样例1: +```in +Tuesday +``` + +### 输出样例1: +```out +2 +``` +### 输入样例2: +``` +today +``` + +### 输出样例2: +``` +wrong input! +``` diff --git a/【实践课外】14.指针2/7-1 C程序设计 实验5-7 数组指针作函数参数.c b/【实践课外】14.指针2/7-1 C程序设计 实验5-7 数组指针作函数参数.c new file mode 100644 index 0000000..a75e2dd --- /dev/null +++ b/【实践课外】14.指针2/7-1 C程序设计 实验5-7 数组指针作函数参数.c @@ -0,0 +1,21 @@ +#include + +int main() { + int m, n; + + scanf("%d%d", &m, &n); + + for (int i = 1; i <= m; i++) { + int sum = 0; + + for (int j = 1, x; j <= n; j++) { + scanf("%d", &x); + + sum += x; + } + + printf("%d %.1lf\n", sum, 1.0 * sum / n); + } + + return 0; +} diff --git a/【实践课外】14.指针2/7-1 C程序设计 实验5-7 数组指针作函数参数.md b/【实践课外】14.指针2/7-1 C程序设计 实验5-7 数组指针作函数参数.md new file mode 100644 index 0000000..85073af --- /dev/null +++ b/【实践课外】14.指针2/7-1 C程序设计 实验5-7 数组指针作函数参数.md @@ -0,0 +1,38 @@ +# 7-1 C程序设计 实验5-7 数组指针作函数参数 + +数组指针作函数参数 +输入m个学生(最多30人)n门课程(最多5门)的成绩,然后计算并打印每个学生各门课的总分和平均分。其中,m和n的值由用户从键盘输入。 + +### 输入格式: +输入顺序如下: +``` +学生个数m 课程数n +学生1课程1分数 学生1课程2分数 ... 学生1课程n分数 +学生2课程1分数 学生2课程2分数 ... 学生2课程n分数 +... +学生m课程1分数 学生m课程2分数 ... 学生m课程n分数 +``` +### 输出格式: + +每个学生总分(整数) 平均分(实数,保留1位小数) + + +### 输入样例: + +在这里给出一组输入。例如: + +```in +2 3 +61 62 70 +75 82 90 +``` + +### 输出样例: + +在这里给出相应的输出。例如: + +```out +193 64.3 +247 82.3 +``` + diff --git a/【实践课外】14.指针2/7-2 查找奥运五环色的位置.c b/【实践课外】14.指针2/7-2 查找奥运五环色的位置.c new file mode 100644 index 0000000..f668a3f --- /dev/null +++ b/【实践课外】14.指针2/7-2 查找奥运五环色的位置.c @@ -0,0 +1,32 @@ +#include +#include + +#define MAXS 80 + +int getindex(char *s); + +int main() { + int n; + char s[MAXS]; + + scanf("%s", s); + n = getindex(s); + if (n == -1) printf("Not Found\n"); + else printf("%d\n", n); + + return 0; +} + +/* 你的代码将被嵌在这里 */ + +const char DATA[][10] = {"", "red", "blue", "yellow", "green", "black"}; + +int getindex(char *s) { + for (int i = 0; i < 7; i++) { + if (strcmp(s, DATA[i]) == 0) { + return i; + } + } + + return -1; +} diff --git a/【实践课外】14.指针2/7-2 查找奥运五环色的位置.md b/【实践课外】14.指针2/7-2 查找奥运五环色的位置.md new file mode 100644 index 0000000..a839e2b --- /dev/null +++ b/【实践课外】14.指针2/7-2 查找奥运五环色的位置.md @@ -0,0 +1,23 @@ +# 7-2 查找奥运五环色的位置 + +奥运五环的5种颜色的英文单词按一定顺序排列{"red", "blue", "yellow", "green", "black" },定义指针数组并初始化,输入任意一个颜色的英文单词,从已有颜色中查找并输出该颜色的位置值,若没有找到,则输出"Not Found"。 + +### 输入格式: + +输入一个代表颜色的单词。 + +### 输出格式: + +输出单词对应的位置值,如果未找到,输出Not Found。 + +### 输入样例: + +```in +yellow +``` + +### 输出样例: + +```out +3 +```