1
0
mirror of https://github.com/renbaoshuo/202401-programming-assignments.git synced 2024-12-16 15:44:39 +00:00

【实践课外】14.指针2

This commit is contained in:
Baoshuo Ren 2024-12-04 12:45:47 +08:00
parent 7040d88fe2
commit c7b7c64b35
Failed to extract signature
14 changed files with 428 additions and 0 deletions

View File

@ -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;
}

View File

@ -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 <stdio.h>
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
```

View File

@ -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);
}

View File

@ -0,0 +1,46 @@
# 6-2 冒泡排序
输入n1<=n<=10个整数将它们从小到大排序后输出要求编写函数bubble()实现冒泡排序算法。
### 函数接口定义:
```c++
void bubble (int a[ ], int n);
```
其中 a为数组n为数据个数。
### 裁判测试程序样例:
```c++
#include <stdio.h>
void bubble (int a[ ], int n);
int main(void)
{
int n, a[10];
int i;
scanf("%d", &n);
for (i=0; i<n;i++)
scanf("%d",&a[i]);
bubble(a,n);
for (i=0; i<n; i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
/* 请在这里填写答案 */
```
### 输入样例:
```in
8
7 3 66 3 -5 22 -77 2
```
### 输出样例:
```out
-77 -5 2 3 3 7 22 66
```

View File

@ -0,0 +1,15 @@
void fun(char *s, char *t) {
int len = strlen(s);
for (int i = len - 1; i >= 0; i--) {
*t = s[i];
t++;
}
for (int i = 0; i < len; i++) {
*t = s[i];
t++;
}
*t = '\0';
}

View File

@ -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 <stdio.h>
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
```

View File

@ -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;
}

View File

@ -0,0 +1,53 @@
# 6-4 计算最长的字符串长度
本题要求实现一个函数用于计算有n个元素的指针数组s中最长的字符串的长度。
### 函数接口定义:
```c++
int max_len( char *s[], int n );
```
其中`n`个字符串存储在`s[]`中,函数`max_len`应返回其中最长字符串的长度。
### 裁判测试程序样例:
```c++
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#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
```

View File

@ -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;
}

View File

@ -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 <stdio.h>
#include <string.h>
#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!
```

View File

@ -0,0 +1,21 @@
#include <stdio.h>
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;
}

View File

@ -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
```

View File

@ -0,0 +1,32 @@
#include <stdio.h>
#include <string.h>
#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;
}

View File

@ -0,0 +1,23 @@
# 7-2 查找奥运五环色的位置
奥运五环的5种颜色的英文单词按一定顺序排列{"red", "blue", "yellow", "green", "black" },定义指针数组并初始化,输入任意一个颜色的英文单词,从已有颜色中查找并输出该颜色的位置值,若没有找到,则输出"Not Found"。
### 输入格式:
输入一个代表颜色的单词。
### 输出格式:
输出单词对应的位置值如果未找到输出Not Found。
### 输入样例:
```in
yellow
```
### 输出样例:
```out
3
```