指针作业II

6-1 查找星期 (15分)

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

序号 星期
0 Sunday
1 Monday
2 Tuesday
3 Wednesday
4 Thursday
5 Friday
6 Saturday
函数接口定义:
int getindex( char *s );

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

裁判测试程序样例:
#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:
Tuesday

输出样例1:
2

输入样例2:
today

输出样例2:
wrong input!

#include<string.h>
int getindex( char *s )
{
	char a[][81]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
	int i,flag=0;
	for(i=0;i<7;i++)
		if(strcmp(a[i],s)==0)
			{
				flag=1;
				break;
			}
	if(flag==1)
		return i;
	else
		return -1;
} 

6-2 输出月份英文名 (15分)

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

函数接口定义:
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 *a[]={"January","February", "March","April", "May", "June", "July","August","September","October","November", "December"}; 
    if(n>12||n<1) 
        return NULL;
    else
        return a[n-1];
}

6-3 字符串的连接 (15分)

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

函数接口定义:
char *str_cat( char *s, char *t );

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

裁判测试程序样例:
#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;

}

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

输入样例:
abc
def

输出样例:
abcdef
abcdef

#include<string.h>
char *str_cat( char *s, char *t )
{
	int n=strlen(s),k=strlen(t);
	int i;
	if(k<1)
		return s;
	else
	{
		for(i=0;i<k;i++)
			*(s+n+i)=*(t+i);
	}
	return s;
}

6-8 计算最长的字符串长度 (15分)

本题要求实现一个函数,用于计算有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 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;

}

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

输入样例:
4
blue
yellow
red
green

输出样例:
6

#include<string.h>
int max_len( char *s[], int n )
{
    int i,max=0,k;
    for(i=0;i<n;i++)
        {
            k=strlen(s[i]);
            if(k>max)
                max=k;
        }
    return max;
}

7-2 藏头诗 (15分)

本题要求编写一个解密藏头诗的程序。

输入格式:
输入为一首中文藏头诗,一共四句,每句一行。注意:一个汉字占两个字节。

输出格式:
取出每句的第一个汉字并连接在一起形成一个字符串并输出。同时在末尾输入一个换行符。

输入样例:
一叶轻舟向东流
帆稍轻握杨柳手
风纤碧波微起舞
顺水任从雅客流

输出样例:
一帆风顺

#include<stdio.h>
int main(void)
{
	char a[4][41];
	int i,j=-1;
	for(i=0;i<4;i++)
		gets(a[i]);
	char b[11]={"\0"};
	for(i=0;i<4;i++)
		{
			b[++j]=a[i][0];	
			b[++j]=a[i][1];
		}
	printf("%s\n",b);
}

`7-1 英文单词排序 (25分)

本题要求编写程序,输入若干英文单词,对这些单词按长度从小到大排序后输出。如果长度相同,按照输入的顺序不变。

输入格式:
输入为若干英文单词,每行一个,以#作为输入结束标志。其中英文单词总数不超过20个,英文单词为长度小于10的仅由小写英文字母组成的字符串。

输出格式:
输出为排序后的结果,每个单词后面都额外输出一个空格。

输入样例:
blue
red
yellow
green
purple

输出样例:
red blue green yellow purple `

#include<stdio.h>
#include<string.h>
int main(void)
{
	char str[31][21],t[21];
	int i=0,j,k;
	scanf("%s",str[i]);
	while(str[i][0]!='#')
	{
		scanf("%s",str[++i]);
		if(i==19)
			break;
	}
	if(str[i][0]=='#')
		i--;
	for(j=0;j<=i;j++)
		for(k=0;k<=i-j-1;k++)
		{
			if(strlen(str[k])>strlen(str[k+1]))
			{
				strcpy(t,str[k]);
				strcpy(str[k],str[k+1]);
				strcpy(str[k+1],t);
			}
		}
		for(j=0;j<=i;j++)
			printf("%s ",str[j]);
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值