@Arbalest-Laevatain
2018-07-04T04:06:45.000000Z
字数 4285
阅读 929
C语言
由数组s中长度为n的字符序列构造其逆序列,并存储在数组t中。
例如,由给定字符序列s=“are”求得逆序列t=“era”;由s=“time”
求得t=“emit”。
void func(char s[], char t[], int n)
/* 数组s的前n个元素存放给定的字符序列,
数组t的前n个元素存放s的逆序列。
注意:数组的下标从0开始。
*/
{
for (int i=0;i
{
int j=n;
t[j-1-i]=s[i];
}
}
按ASCII码降序排列,组合成一个新的字符串s2。
要求实现函数:
void func(char *s1, char *s2, int n);/* s1为字符串的起始地址,s2为新字符串的起始地址,n为字符串的长度。要求:s1串不能发生改变,s2串存放新的字符串。*/{int i,j;strcpy(s2,s1);for (i=1;i<n-1;i++){for (j=2;j<n-i;j++){if (s2[j]>s2[j-1]){char t=s2[j];s2[j]=s2[j-1];s2[j-1]=t;}}}}
按ASCII码降序排列,组合成一个新的字符串s2。
要求实现函数:
void func(char *s1, char *s2);/* s1为字符串的起始地址,s2为新字符串的起始地址,注意:字符串尾字符之后跟随着一个结束符‘\0’,即ASCII码为0的字符,结束符不属于字符串。要求:s1串不能发生改变,s2串存放新的字符串。*/{int i,j;int n=strlen(s1);strcpy(s2,s1);for (i=1;i<n-1;i++){for (j=2;j<n-i;j++){if (s2[j]>s2[j-1]){char t=s2[j];s2[j]=s2[j-1];s2[j-1]=t;}}}
/******
按升序的次序构成字符串t。
******/
void substr(char *s, int m, char *t)/* s为字符串的起始地址,m>=0,t为新字符串的起始地址,注意:字符串尾字符之后跟随着一个结束符‘\0’,即ASCII码为0的字符,结束符不属于字符串。要求:s串不能发生改变,t串存放新的字符串。*/{char *p=s+m;while (*p!='\0'){*t=*p;p++;}}
调用函数month_day(2000,61,&m,&d)之后,m=3,d=1,即2000年的第
61天是3月1日。
要求实现函数:
int month_day(int year, int yearday, int *pmonth, int pday)
/ year是年,
yearday是天数,
若year和yearday合理,
则*pmonth和*pday是计算得出的月和日,函数返回1;
否则,函数返回0。
*/
int month_day(int year, int yearday, int *pmonth, int *pday)/* year是年,yearday是天数,若year和yearday合理,则*pmonth和*pday是计算得出的月和日,函数返回1;否则,函数返回0。*/{int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};int i,z,y,flag=0;int *p1,*p2;if (year>0 && yearday>0){if ((year%4==0 && year %100 !=0) || (year%400==0)){flag=1;}if (flag){month[1]+=1;if (yearday>366)return 0;}else{if (yearday>365)return 0;}i=0,z=0;y=yearday;while (y>0){y-=month[i];i++;z++;}y+=month[i-1];if (y==0){z-=1;y=month[z-1];}*pmonth=z;*pday=y;return 1;}return 0;}
一个整数(不得调用C语言提供的将字符串转换为整数的函数)。
要求实现函数:
long func(char *s)/* s是一个数字字符串的地址,函数返回值为由s含有的数字字符转换得到的数(包含正负数情况)*/{long sum=0;int e=0,i,j=1;char *t=s;while (*s!='\0'){if (*s>='0' && *s<='9'){if (e>0)j=10;elsej=1;sum=sum*j+*s-'0';e++;}s++;}if (*t=='-')sum=-sum;return sum;}
中的最大值。注意:要求在函数中采用指针(而不是下标)来处理数组元素。int findmax(int s[], int n)
int findmax(int s[], int n)/* 返回s中n(>0)个整数的最大值。注意:要求在函数中采用指针(而不是下标)来处理数组元素。*/{}
(即出生日期最小)者的名字。
结构体类型定义如下:
struct date{int year; int month; int day;}; //日期结构体类型struct studentNode //链表结点的结构体类型{ char name[10]; //人名struct date birth; //出生日期struct studentNode *next};
*/
char *oldest(struct studentNode *L)/* 若L是空表,则返回空指针null否则返回表中年龄最大者的名字*/{struct studentNode *p;struct studentNode *max;char *n;max=L;if (NULL==L) return NULL;p=L->next;while (p){if (max->birth.year > p->birth.year)max=p;else if(max->birth.year == p->birth.year){if (max->birth.month > p->birth.month)max= p;else if(max->birth.month == p->birth.month){if (max->birth.day > p->birth.day)max= p;}}p=p->next;}return max->name;}
struct courseNode //课程链表结点的结构体类型{ int cID; //课程号,取值0~99char name[10]; //课程名float credit; //学分,取值0~5int semester; //学期,取值1~8struct courseNode *next;};
结构体链表Lc存储了各学期多门课程的信息。写一函数,求学期s的总学分。*/float creditSum(struct courseNode *Lc, int s)/* 若Lc是空表,则返回0;否则返回学期s的总学分*/{struct courseNode *p;float sum=0.0;if (NULL==Lc) return 0.0;p=Lc;while (p){if (p->semester==s)sum+=p->credit;p=p->next;}return sum;}
struct courseNode //课程链表结点的结构体类型{ int cID; //课程号,取值0~99char name[10]; //课程名float credit; //学分,取值0~5int semester; //学期,取值1~8struct courseNode *next;};```结构体链表Lc存储了多门课程的信息。写一函数,将课程号为c的课程的学分修改为t。*/
struct courseNode *creditChange(struct courseNode *Lc, int c, float t)/* 若课程c不存在,则修改不成功,返回null;否则修改该课程的学分为t,返回指向该课程结点的指针。*/{struct courseNode *p;int flag=0;if (NULL==Lc) return NULL;if (c==Lc->cID){p=Lc;p->credit=t;return p;}p=Lc->next;while (Lc->next){if (Lc->next->cID==c){p=Lc->next;p->credit=t;flag++;}Lc=Lc->next;}if (flag)return p;elsereturn NULL;}
struct courseNode //课程链表结点的结构体类型{ int cID; //课程号,取值0~99char name[10]; //课程名float credit; //学分,取值0~5int semester; //学期,取值1~8struct courseNode *next;};
结构体链表Lc存储了多门课程的信息。写一函数,将课程号为c的课程结点删除。
要求实现下列函数:
struct courseNode *deleteCourse(struct courseNode **Lc, int c)/* 若在链表Lc中课程c不存在,则删除不成功,返回null;否则从链表Lc中删除该课程结点,并返回指向该课程结点的指针。*/{struct courseNode*p;p=*Lc;while (p!=NULL){if (p->next->cID==c){struct courseNode*t=p->next;p->next=p->next->next;return t;}if (p->next==NULL){if (p->cID==c){Lc[0]=NULL;return p;}}p=p->next;}return NULL;}