习题11-8 单链表结点删除(20 分)

习题11-8 单链表结点删除(20 分)

本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中所有存储了某给定值的结点删除。链表结点定义如下:

1
2
3
4
struct ListNode {
int data;
ListNode *next;
};

函数接口定义:

1
2
struct ListNode *readlist();
struct ListNode *deletem( struct ListNode *L, int m );

函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。

函数deletem将单链表L中所有存储了m的结点删除。返回指向结果链表头结点的指针。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <stdlib.h>

struct ListNode {
int data;
struct ListNode *next;
};

struct ListNode *readlist();
struct ListNode *deletem( struct ListNode *L, int m );
void printlist( struct ListNode *L )
{
struct ListNode *p = L;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}

int main()
{
int m;
struct ListNode *L = readlist();
scanf("%d", &m);
L = deletem(L, m);
printlist(L);

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

1
2
10 11 10 12 10 -1
10

输出样例:

1
11 12

习题11-7 奇数值结点链表(20 分)

习题11-7 奇数值结点链表(20 分)

本题要求实现两个函数,分别将读入的数据存储为单链表、将链表中奇数值的结点重新组成一个新的链表。链表结点定义如下:

1
2
3
4
struct ListNode {
int data;
ListNode *next;
};

函数接口定义:

1
2
struct ListNode *readlist();
struct ListNode *getodd( struct ListNode **L );

函数readlist从标准输入读入一系列正整数,按照读入顺序建立单链表。当读到−1时表示输入结束,函数应返回指向单链表头结点的指针。

函数getodd将单链表L中奇数值的结点分离出来,重新组成一个新的链表。返回指向新链表头结点的指针,同时将L中存储的地址改为删除了奇数值结点后的链表的头结点地址(所以要传入L的指针)。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <stdlib.h>

struct ListNode {
int data;
struct ListNode *next;
};

struct ListNode *readlist();
struct ListNode *getodd( struct ListNode **L );
void printlist( struct ListNode *L )
{
struct ListNode *p = L;
while (p) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}

int main()
{
struct ListNode *L, *Odd;
L = readlist();
Odd = getodd(&L);
printlist(Odd);
printlist(L);

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

1
1 2 2 3 4 5 6 7 -1

输出样例:

1
2
1 3 5 7 
2 2 4 6

习题11-6 查找子串(20 分)

习题11-6 查找子串(20 分)

本题要求实现一个字符串查找的简单函数。

函数接口定义:

1
char *search( char *s, char *t );

函数search在字符串s中查找子串t,返回子串t在s中的首地址。若未找到,则返回NULL。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#define MAXS 30

char *search(char *s, char *t);
void ReadString( char s[] ); /* 裁判提供,细节不表 */

int main()
{
char s[MAXS], t[MAXS], *pos;

ReadString(s);
ReadString(t);
pos = search(s, t);
if ( pos != NULL )
printf("%d\n", pos - s);
else
printf("-1\n");

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例1:

1
2
The C Programming Language
ram

输出样例1:

1
10

输入样例2:

1
2
The C Programming Language
bored

输出样例2:

1
-1

习题11-5 指定位置输出字符串(20 分)

习题11-5 指定位置输出字符串(20 分)

本题要求实现一个函数,对给定的一个字符串和两个字符,打印出给定字符串中从与第一个字符匹配的位置开始到与第二个字符匹配的位置之间的所有字符。

函数接口定义:

1
char *match( char *s, char ch1, char ch2 );

函数match应打印s中从ch1ch2之间的所有字符,并且返回ch1的地址。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>

#define MAXS 10

char *match( char *s, char ch1, char ch2 );

int main()
{
char str[MAXS], ch_start, ch_end, *p;

scanf("%s\n", str);
scanf("%c %c", &ch_start, &ch_end);
p = match(str, ch_start, ch_end);
printf("%s\n", p);

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例1:

1
2
program
r g

输出样例1:

1
2
rog
rogram

输入样例2:

1
2
program
z o

输出样例2:

1
2
(空行)
(空行)

输入样例3:

1
2
program
g z

输出样例3:

1
2
gram
gram

习题11-4 字符串的连接(15 分)

习题11-4 字符串的连接(15 分)

本题要求实现一个函数,将两个字符串连接起来。

函数接口定义:

1
char *str_cat( char *s, char *t );

函数str_cat应将字符串t复制到字符串s的末端,并且返回字符串s的首地址。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <string.h>

#define MAXS 10

char *str_cat( char *s, char *t );

int main()
{
char *p;
char str1[MAXS+MAXS] = {'\0'}, str2[MAXS] = {'\0'};

scanf("%s%s", str1, str2);
p = str_cat(str1, str2);
printf("%s\n%s\n", p, str1);

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

1
2
abc
def

输出样例:

1
2
abcdef
abcdef

习题11-3 计算最长的字符串长度(15 分)

习题11-3 计算最长的字符串长度(15 分)

本题要求实现一个函数,用于计算有n个元素的指针数组s中最长的字符串的长度。

函数接口定义:

1
int max_len( char *s[], int n );

其中n个字符串存储在s[]中,函数max_len应返回其中最长字符串的长度。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#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;
}

/* 你的代码将被嵌在这里 */

输入样例:

1
2
3
4
5
4
blue
yellow
red
green

输出样例:

1
6

习题11-2 查找星期(15 分)

习题11-2 查找星期(15 分)

本题要求实现函数,可以根据下表查找到星期,返回对应的序号。

序号 星期
0 Sunday
1 Monday
2 Tuesday
3 Wednesday
4 Thursday
5 Friday
6 Saturday

函数接口定义:

1
int getindex( char *s );

函数getindex应返回字符串s序号。如果传入的参数s不是一个代表星期的字符串,则返回-1。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#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:

1
Tuesday

输出样例1:

1
2

输入样例2:

1
today

输出样例2:

1
wrong input!

习题11-1 输出月份英文名(15 分)

习题11-1 输出月份英文名(15 分)

本题要求实现函数,可以返回一个给定月份的英文名称。

函数接口定义:

1
char *getmonth( int n );

函数getmonth应返回存储了n对应的月份英文名称的字符串头指针。如果传入的参数n不是一个代表月份的数字,则返回空指针NULL。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>

char *getmonth( int n );

int main()
{
int n;
char *s;

scanf("%d", &n);
s = getmonth(n);
if ( s==NULL ) printf("wrong input!\n");
else printf("%s\n", s);

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例1:

1
5

输出样例1:

1
May

输入样例2:

1
15

输出样例2:

1
wrong input!

习题10-8 递归实现顺序输出整数(15 分)

习题10-8 递归实现顺序输出整数(15 分)

本题要求实现一个函数,对一个整数进行按位顺序输出。

函数接口定义:

1
void printdigits( int n );

函数printdigits应将n的每一位数字从高位到低位顺序打印出来,每位数字占一行。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

void printdigits( int n );

int main()
{
int n;

scanf("%d", &n);
printdigits(n);

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

1
12345

输出样例:

1
2
3
4
5
1
2
3
4
5

习题10-7 十进制转换二进制(15 分)

习题10-7 十进制转换二进制(15 分)

本题要求实现一个函数,将正整数n转换为二进制后输出。

函数接口定义:

1
void dectobin( int n );

函数dectobin应在一行中打印出二进制的n。建议用递归实现。

裁判测试程序样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

void dectobin( int n );

int main()
{
int n;

scanf("%d", &n);
dectobin(n);

return 0;
}

/* 你的代码将被嵌在这里 */

输入样例:

1
10

输出样例:

1
1010
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×