C语言程序设计(第四版)—习题11程序设计题

1.输出月份英文名

输入月份,输出对应的英文名称。要求用指针数组表示12个月的英文名称。例如,输入5,输出May。试编写相应程序。

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

函数接口定义:

char *getmonth( int n );

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

裁判测试程序样例:

#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:

5

输出样例1:

May

输入样例2:

15

输出样例2:

wrong input!
char *getmonth( int n ){char *month[13] = {"","January","February","March","April","May","June",
"July","August","September","October","November","December"};if(n<1||n>12)return NULL;return month[n];
}

2.查找星期

定义一个指针数组,将下表的星期信息组织起来,输入一个字符串,在表中查找,若存在,输出该字符串在表中的序号,否则输出-1。试编写相应程序。

0Sunday
1Monday
2Tuesday
3Wednesday
4Thurday
5Friday
6Saturday

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

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

函数接口定义:

int getindex( char *s );

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

裁判测试程序样例:

#include <stdio.h>
#include <string.h>#define MAXS 80int 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:

Tuesday

输出样例1:

2

输入样例2:

today

输出样例2:

wrong input!
int getindex( char *s ){char *day[8] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};int i;int ind=-1;for(i=0;i<7;i++)if(strcmp(s,day[i]) == 0){ind = i;break;}return ind;
}

3.计算最长的字符串长度

输入n(n<10)个字符串,输出其中最长字符串的有效长度。要求自定义函数int max——len(char *s[ ],int n),用于计算有n个元素的指针数组s中最长的字符串的长度。试编写相应程序。

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

函数接口定义:

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

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

裁判测试程序样例:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>#define MAXN 10
#define MAXS 20int 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;
}/* 你的代码将被嵌在这里 */

输入样例:

4
blue
yellow
red
green

输出样例:

6
int max_len( char *s[], int n ){int len = strlen(s[0]);int i;for(i=1;i<n;i++)if(strlen(s[i])>len)len = strlen(s[i]);return len;
}

4.字符串的连接

输入两个字符串,输出连接后的字符串。要求自定义函数char *strcat(char *s,char *t),将字符串t复制到字符串s的末端,并且返回字符串s的首地址。试编写相应程序。

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

函数接口定义:

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

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

裁判测试程序样例:

#include <stdio.h>
#include <string.h>#define MAXS 10char *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;
}/* 你的代码将被嵌在这里 */

输入样例:

abc
def

输出样例:

abcdef
abcdef
char *str_cat(char *s, char *t)
{int len;int i;len = strlen(s);for (i = 0; t[i] != '\0'; i++){s[i + len] = t[i];}return s;
}

5.指定位置输出字符串

输入一个字符串后再输入两个字符,输出此字符串中从与第1个字符匹配的位置开始到与第2个字符匹配的位置结束的所有字符。例如,输入字符串“program”与2个字符 “r” 和 “g” 后,输出 “rog” 。要求自定义函数char *match(char *s,char ch1,char ch2) 返回结果字符串的首地址。试编写相应程序。

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

函数接口定义:

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

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

裁判测试程序样例:

#include <stdio.h>#define MAXS 10char *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:

program
r g

输出样例1:

rog
rogram

输入样例2:

program
z o

输出样例2:

(空行)
(空行)

输入样例3:

program
g z

输出样例3:

gram
gram
char *match( char *s, char ch1, char ch2 ) {while(*s!='\0') {if(*s==ch1) {for(char *s1=s; *s1!='\0'; s1++) {printf("%c",*s1);if(*s1==ch2)break;}printf("\n");return s;}s++;}printf("\n");return s;
}

6.查找子串

输入两个字符串s和t,在字符串s中查找子串t,输出起始位置,若不存在,则输出-1。要求自定义函数char *search(char *s,char *t)返回子串t的首地址,若未找到,则返回NULL。试编写相应程序。

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

函数接口定义:

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

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

裁判测试程序样例:

#include <stdio.h>
#define MAXS 30char *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);elseprintf("-1\n");return 0;
}/* 你的代码将被嵌在这里 */

输入样例1:

The C Programming Language
ram

输出样例1:

10

输入样例2:

The C Programming Language
bored

输出样例2:

-1
char *search(char *s,char *t){int i=0,j=0,l;while(s[i]!='\0'&&t[j]!='\0'){if(s[i]==t[j]){++i;++j;}else{i=i-j+1;j=0;}}if(j==strlen(t)){//一定是等于号l=i-strlen(t);return s+l;}else return NULL;//这个null不能用双引号括起来
}

7.奇数值结点链表

输入若干个正整数(输入-1为结束标志)建立一个单向链表,头指针为L,将链表L中奇数值的结点重新组成一个新的链表NEW,并输出新建链表的信息。试编写相应程序。

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

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

函数接口定义:

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

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

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

裁判测试程序样例:

#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 2 2 3 4 5 6 7 -1

输出样例:

1 3 5 7 
2 2 4 6 
struct ListNode *readlist() {//创建_不带头结点的单链表struct ListNode *head = NULL, *p = NULL;int n;do {scanf("%d", &n);if(n != -1){struct ListNode *temp = ( struct ListNode *)malloc(sizeof( struct ListNode));temp->data = n;temp->next = NULL;if(p == NULL)//创建首结点head = temp;elsep->next = temp;p = temp;}if(n == -1)break;}while(n != -1);return head;
}struct ListNode *getodd( struct ListNode **L ) {struct ListNode *begin, *Next, *p, *result = NULL; //起始指针,后继指针,遍历指针begin = *L;Next = begin->next;int flag1, flag2 = 0, flag3 = 0;*L = NULL;
//采用遍历算法,从首元节点至倒数第二个结点,根据结点数据的奇偶分别进行连接while (Next) {flag1 = 0;p = Next;while (p) {if ((begin->data) % 2 != 0) {if(flag3 == 0){result = begin;//存储首个奇数结点的地址flag3 = 1;}if((p->data) % 2 != 0){begin->next = p;flag1 = 1;break;}}else if((begin->data) % 2 == 0){if(flag2 == 0) {*L = begin;//存储首个偶数结点的地址flag2 = 1;}if((p->data) % 2 == 0) {begin->next = p;flag1 = 1;break;}}p = p->next;}if(flag1 == 0)begin->next = NULL;begin = Next;Next = Next->next;}if(flag2==0 && (begin->data )%2 ==0 ) *L = begin;else if(flag3==0 && (begin->data )%2!=0)result = begin;return result;
}

8.删除结点

输入若干个正整数(输入-1为结束标志)建立一个单向链表,再输入一个整数m,删除链表中值为m的所有结点。试编写相应程序。

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

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

函数接口定义:

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

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

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

裁判测试程序样例:

#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;
}/* 你的代码将被嵌在这里 */

输入样例:

10 11 10 12 10 -1
10

输出样例:

11 12 
struct ListNode *readlist(){struct ListNode *head=NULL, *p=NULL;int n;do{scanf("%d",&n);if(n==-1)break;struct ListNode *temp = (struct ListNode*) malloc (sizeof(struct ListNode));temp->data = n;temp->next = NULL;if(p == NULL){head = temp;} else{p->next = temp;}p=temp;}while(n != -1);return head;
}
struct ListNode *deletem( struct ListNode *L, int m ){struct ListNode *p,*q;if(L==NULL){//空链表 return NULL;}p = L;q = p->next ;while(q){if(q->data == m){p->next =q->next ;free(q);q=p->next ;}else{p=p->next ;q=p->next ;}}if(L->data ==m){L=L->next ;}return L;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/739563.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自学软件测试真的能找到工作吗?“我“的测试之路...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 自学软件测试当然…

538.把二叉搜索树转换为累加树

538.把二叉搜索树转换为累加树 思路 首先是想到迭代法&#xff0c;反中序遍历&#xff0c;右中左&#xff0c;依次遍历修改值。 还有递归法&#xff0c;同样反中序遍历&#xff0c;递归修改每个节点的值。 题解mrriors算法遍历看不懂。 代码 迭代法 public TreeNode conve…

蓝桥杯历年真题 java b组 2015年 第六届 牌型种数

一、题目 牌型种数 小明被劫持到X赌城&#xff0c;被迫与其他3人玩牌。 一副扑克牌&#xff08;去掉大小王牌&#xff0c;共52张&#xff09;&#xff0c;均匀发给4个人&#xff0c;每个人13张。 这时&#xff0c;小明脑子里突然冒出一个问题&#xff1a; 如果不考虑花色&…

【C++】C++学习前言

C前言与发展 一.什么是C二.C的发展史三.C的重要性 一.什么是C C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的程序&#xff0c;需要高度的抽象和建模时&#xff0c;C语言则不合适。为了解决软件危机&#xff0c; 20世纪…

猫生骨肉冻干价格合理区间是多少?真正性价比高的生骨肉冻干推荐

随着养猫知识的普及&#xff0c;生骨肉冻干喂养受到越来越多铲屎官的欢迎。然而&#xff0c;价格因素仍是部分铲屎官的阻碍。实际上&#xff0c;像我这样的资深铲屎官&#xff0c;早已认识到生骨肉冻干的价值。虽然生骨肉冻干的价格相对于烘焙粮和膨化粮要高一些&#xff0c;但…

前端之用HTML做一个汇款单

例子 代码 里面注释是我我对运用到的知识的理解 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>工商银行电子汇款单</title> </head> <body><h3>工商银行电子汇款单</…

面试题02.07.链表相交

方法一&#xff1a;暴力 public ListNode getIntersectionNode(ListNode headA, ListNode headB) {//先获得链表长度ListNode l1 headA;ListNode l2 headB;int m 0, n 0;while(l1 ! null){m;l1 l1.next;}while(l2 ! null){n;l2 l2.next;}ListNode l3 headA;for(int i …

什么是Redis的数据分片?

Redis的数据分片(sharding)是一种将一个Redis数据集分割成多个部分&#xff0c;分别存诸在不同的Redis节点上的技术。它可以用于将一个单独的Redis数据库扩展到多个物理机器上&#xff0c;从而提高Redis集群的性能和可扩展性 Redis数据分片的实现方式通常是将数据按照某种规则(…

独家直播!手机无人APP,让你跟上最新潮流

手机无人APP&#xff0c;是一款极具创新力和前瞻性的应用&#xff0c;旨在让用户随时随地跟上最新潮流。通过独家直播功能&#xff0c;用户可以第一时间了解世界各地的潮流资讯&#xff0c;与时俱进&#xff0c;展现出自己的个性和风采。 无人APP的直播功能实现了信息的即时传…

工业涂装行业的物联网解决方案

工业涂装行业的物联网解决方案 工业涂装行业在制造业中占据重要地位&#xff0c;其产品质量直接影响到最终产品的外观和性能。然而&#xff0c;传统涂装生产线容易出现质量问题&#xff0c;如色差、光泽度不均、橘皮现象等。为了解决这些问题&#xff0c;工业涂装行业需要寻求…

String 底层为什么使用 final 修饰?

1、典型回答 对于这个问题&#xff0c;Java之父詹姆斯 高斯林&#xff08;James Gosling&#xff09; 是这样回答的&#xff1a; I would use an immutable whenever I can 翻译为中文&#xff1a;只要允许&#xff0c;我就会使用不可变对象 而作为普通人的我们来说&#xff0…

算法---双指针练习-8(四数之和)

四数之和 1. 题目解析2. 讲解算法原理3. 编写代码 1. 题目解析 题目地址&#xff1a;四数之和 2. 讲解算法原理 首先对输入的数组进行排序&#xff0c;以便后续使用双指针法。初始化一个空的二维向量 ret&#xff0c;用于存储结果。对数组中的每个元素 nums[i] 进行遍历&#…

mysql主键和外键的区别

mysql主键和外键的区别 一、主键与外键存在的意义 主键和外键在关系数据库中扮演着至关重要的角色&#xff0c;它们共同维护着数据的完整性和一致性。 主键&#xff1a;它是每条记录的唯一标识符&#xff0c;犹如人的身份证号码&#xff0c;具有唯一性和非空性。例如&#x…

Linux基础命令[15]-less

文章目录 1. less 命令说明2. less 命令语法3. less 命令示例3.1 不加参数3.2 -N&#xff08;显示行号&#xff09;3.3 打开多个文件3.4 标记导航3.5 搜索内容 4. 总结 1. less 命令说明 less&#xff1a;用来分页查看文件&#xff0c;与 more 相比更加的灵活&#xff0c;并且…

算法之二分查找算法

二分查找算法简介 1. 首先说明二分查找算法是比较恶心, 细节很多, 很容易写出死循环的算法, 但熟悉了之后是最简单的算法. 2. 其次我们可能听说过二分查找的前提是数组有序的前提下进行, 但其实不一定. 3. 二分查找算法有一套模板: 朴素的二分模板: 比较简单, 但是有局限性查找…

Kubernetes安装

Kubernetes安装 二进制安装 暂无 Kubeadm安装 kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。这个工具能通过两条指令完成一个kubernetes集群的部署 # 创建一个 Master 节点 kubeadm init# 将一个 Node 节点加入到当前集群中 kubeadm join <Master节点…

docker——启动各种服务

1.Mysql 2.Redis 3.nginx 4.ES 注意&#xff1a;ES7之后环境为 -e ELASTICSEARCH_HOSTS http://ip地址:9200

【libwebrtc】基于m114的构建

libwebrtc A C++ wrapper for binary release, mainly used for flutter-webrtc desktop (windows, linux, embedded).是 基于m114版本的webrtc 最新(20240309 ) 的是m122了。官方给出的构建过程 .gclient 文件 solutions = [{"name" : src,"url

代码随想录day33 Java版

96.不同的二叉搜索树 递推公式不好想&#xff0c;在根节点的左右组装&#xff0c;从dp[0]*dp[n-1]到dp[n-1]*dp[0]累加 class Solution {public int numTrees(int n) {//初始化 dp 数组int[] dp new int[n 1];//初始化0个节点和1个节点的情况dp[0] 1;dp[1] 1;for (int i …

用信号的方式回收僵尸进程

当子进程退出后&#xff0c;会给父进程发送一个17号SIGCHLD信号&#xff0c;父进程接收到17号信号后&#xff0c;进入信号处理函数调用waitpid函数回收僵尸进程若多个子进程同时退出后&#xff0c;这是切回到父进程&#xff0c;此时父进程只会处理一个17号信号&#xff0c;其他…