每日练习(7-1C程序)

一、编写一函数实现两个字符的比较。

思路:设p1指向字符串s1,p2指向字符串s2。要求当s1=s2,返回为0;若s1\neqs2,返回它们二者第一个不同字符的ascll码差值

#include<stdio.h>
int main(){

	int m;
	char str1[100]={'C','H','I','N','A'},str2[100]={'C','H','I','N','B'},*p1,*p2;

	p1=&str1[0];
	p2=&str2[0];
	printf("result %d\n",strcmp(p1,p2));
	return 0;
} 
	strcmp(char *p1,char *p2)
	{
		int i=0;
		while(*(p1+i)==*(p2+i))
			if(*(p1+i++)=='\0')
			return (0);
		return (*(p1+i)-*(p2+i));/*不等时返回结果为第一个不等字符asscll码的插值*/
	} 

比如CHINA和CHINB的最后一个字符,A(65)-B(66)=-1

相等为0

二、

(1)编写函数new,对n个字符开辟连续的存储空间,此函数返回一个指针(地址),指向字符串开始的空间。new(n)表示分配n个字节内存空间

(2)编写free,将前面用new函数占用的空间释放。free(p)表示将p(地址)指向的单元以后的内存段释放

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define NEWSIZE 1000  //指定开辟存储区的最大容量
char newbuf[NEWSIZE]; //定义字符数组newbuf
char * newp=newbuf; //定义指针变量newp,指向可存储区的始端

char * mynew(int n)
{
	if(newp+n<=newbuf+NEWSIZE)
	{
		newp+=n;
		return (newp-n);
	}
	else return(NULL);
 } 
 
 void myfree(char *p)
 {
 	if(p>=newbuf && p<newbuf+NEWSIZE)
 	newp=p;
 }
 
int main(){
	
	char *pt;
	pt=mynew(10);
	myfree(pt);
	return 0;
} 

三、定义一个结构体(包括年月日),计算该日在本年中是第几天,注意闰年问题

#include<stdio.h>
#include<stdlib.h>
struct
{
	int year;
	int month;
	int day;
}date;
int main(){
	int i,days;
	int dayTab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
	printf("input year,month,day:");
	 scanf("%d,%d,%d",&date.year,&date.month,&date.day);
	 days=0; 
	 for(i=1;i<date.month;i++)
	     days=days+dayTab[i];
	days=days+date.day;
	if((date.year%4==0&&date.year%100!=0||date.year%400==0) &&date.month>=3)
		days=days+1;
	printf("%d/%d is the %dth day in %d\n",date.month,date.day,days,date.year);	
	
	return 0;
} 
	

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值