一、编写一函数实现两个字符的比较。
思路:设p1指向字符串s1,p2指向字符串s2。要求当s1=s2,返回为0;若s1s2,返回它们二者第一个不同字符的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;
}