XMU C语言程序设计实践(2)

任务一:颠倒的世界

 

小明最近突然喜欢倒着写字,写出来的句子全是颠倒的,也就是把一句话里的字符全都逆序写,譬如“I Love This Game!”,他就偏偏要写成“!emaG sihT evoL I”弄的小华同他Email交流都很难受。请你帮助小华解决这个问题,将输入的字符串全都还原成本来的面目。

 

任务1要求:

利用main函数带参数的功能,编写程序,将命令行中的字符串全部逆序显示出来。例如编写的可执行文件为go.exe 那么运行 go !emaG sihT evoL I 时,显示出I Love This Game!


任务二:时间转换

由于工作原因,小明常常需要签署文件日期,但他比较偷懒,都用阿拉伯数字签署,譬如3.8表示三月八日,7.12表示七月十二日。最近公司改组成外资企业,主管要求将所有的日期全部更改为英文表示,一来同国际接轨,二来也不容易篡改,譬如将3.8表示为March the eighth 面对这么多的日期,小明犯愁了,他英文不好,那么多的英文单词他记不住。而且小明还是个马大哈,有时候居然会签出3.32(三月三十二日)这样的日期,为了避免被上司责备,趁着这次机会也赶快一并修改。请你帮助小明完成这个任务。

 

任务2要求:

利用main函数带参数的功能,编写程序,将命令行中的字符串翻译成英文表示,每行显示一个日期,同时需检查日期表示是否有误,如有误,请给出提示。例如:编写的可执行文件为go.exe 那么运行go 3.8  5.5  4.38 时显示

March the eighth

May the fifth

Error


任务三:时间转换(续)

小明觉得这么一点点的手工输入还是有点麻烦,他把需要翻译的日期都整理到文本文件in.txt中,请你帮助小明,将其中的内容翻译完毕后保存到文本文件out.txt中,便于他统一处理。

任务3要求:翻译过程同任务2,将结果保存至文件out.txt中

 



第一题:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define abs(a) ((a)>0?(a):(-(a)))
#define sqr(a) ((a)*(a))
#define swap(a,b) (a)^=(b),(b)^=(a),(a)^=(b)
#define eps 1e-8
#define MAX 0x7f7f7f7f
#define N 104
int a[N];
int main(int argc,char* argv[])
{
	int i,j,k;
	for(i=argc-1;i>0;i--)
	{
		for(j=strlen(argv[i])-1;j>=0;j--)
			putchar(argv[i][j]);
		printf(" ");
	}
	puts("");
	return 0;
}
/*
Q:\xxx\111\222\bin\Debug\222 !emaG sihT evoL I
*/


第二题:


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define abs(a) ((a)>0?(a):(-(a)))
#define sqr(a) ((a)*(a))
#define swap(a,b) (a)^=(b),(b)^=(a),(a)^=(b)
#define eps 1e-8
#define MAX 0x7f7f7f7f
#define N 104
int m,d;
int mon[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char *M[]={"","January","February","March","April","May","June","July","August","September","October","November","December"};
char *D[]={"","first","second","third","fourth","fifth","sixth","seventh","eighth","ninth","tenth","eleventh","twelfth","thirteenth","fourteenth","fifteenth","sixteenth","seventeenth","eighteenth","nineteenth","twentieth","twenty-first","twenty-second","twenty-third","twenty-fourth","twenty-fifth","twenty-sixth","twenty-seventh","twenty-eighth","twenty-ninth","thirtieth","thirty-first"};
void work(char s[])
{
	int i;
	m=d=0;
	if(s[2]=='.')
	{
		m=(s[0]-'0')*10+s[1]-'0';
		i=3;
	}
	else if(s[1]=='.')
	{
		m=s[0]-'0';
		i=2;
	}
	for(;i<strlen(s);i++)
		d=d*10+s[i]-'0';
}
int main(int argc,char * argv[])
{
	int i,j,k;
	for(i=1;i<argc;i++)
	{
		work(argv[i]);
		if(d>mon[m] || d<1 || m>12 ||m<1)puts("Error");
		else printf("%s the %s",*(M+m),*(D+d));
		puts("");
	}
	return 0;
}
/*
Q:\xxx\111\222\bin\Debug\222 3.8 5.5 4.38
*/

第三题:


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define abs(a) ((a)>0?(a):(-(a)))
#define sqr(a) ((a)*(a))
#define swap(a,b) (a)^=(b),(b)^=(a),(a)^=(b)
#define eps 1e-8
#define MAX 0x7f7f7f7f
#define N 1004
int m,d;
int mon[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
char argv[N];
char *M[]={"","January","February","March","April","May","June","July","August","September","October","November","December"};
char *D[]={"","first","second","third","fourth","fifth","sixth","seventh","eighth","ninth","tenth","eleventh","twelfth","thirteenth","fourteenth","fifteenth","sixteenth","seventeenth","eighteenth","nineteenth","twentieth","twenty-first","twenty-second","twenty-third","twenty-fourth","twenty-fifth","twenty-sixth","twenty-seventh","twenty-eighth","twenty-ninth","thirtieth","thirty-first"};
void work(char s[])
{
	int i;
	m=d=0;
	if(s[2]=='.')
	{
		m=(s[0]-'0')*10+s[1]-'0';
		i=3;
	}
	else if(s[1]=='.')
	{
		m=s[0]-'0';
		i=2;
	}
	for(;i<strlen(s);i++)
		d=d*10+s[i]-'0';
}
int main()
{
	FILE *fp1=fopen("Q:\\xxx\\111\\111\\in.txt","r"),*fp=fopen("Q:\\xxx\\111\\111\\out.txt","w");
	int i,j,k;
	while(~fscanf(fp1,"%s",argv))
	{
		work(argv);
		if(d>mon[m] || d<1 || m>12 ||m<1)fputs("Error\n",fp);
		else fprintf(fp,"%s the %s\n",*(M+m),*(D+d));
	}
	fclose(fp1);
	fclose(fp);
	return 0;
}
/*
Q:\xxx\111\111\bin\Debug\111 3.8 5.5 4.38 13.1 1.32 1.0 2.29 115123 3.31
*/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值