求一个c语言问题 望大神把答案传上来 谢谢
(程序名:A_03.CPP)以下主程序定义了一个结构体数组,其中print_txl使用昨天写的同名函数。1.函数voidsort_txl(structTXJL*p)的作用...
(程序名:A_03.CPP)
以下主程序定义了一个结构体数组,其中print_txl使用昨天写的同名函数。
1.函数void sort_txl(struct TXJL *p)的作用是将结构体数组按name内容的大小排序,但其中有错误,请改正.(只修改sort_txl函数部分)
2.编写一个函数void insert_txl(struct TXJL *p,int index,struct TXJL *q),其作用是在结构体数组的指定位置插入一个结构体。(调试时将主程序中的被注释掉的三行恢复即可)
3.编写一个函数void delete_txl(struct TXJL *p,int index),它将从结构体数组中删除一个指定序号的一个结构体(调试时将主程序中的被注释掉的三行恢复即可)
4.编写一个函数void insert_txl2(struct TXJL *p,struct TXJL *q),其作用是在排好序的结构体数组插入一个结构体,并仍然保持结构体数组顺序。(调试时将主程序中的被注释掉的最后两行恢复即可)
#include <stdio.h>
#include <string.h>
#define MAX 100
typedef struct
{
int firstNum;
int secondNum;
} PHONE
struct TXJL
{
char name[10];
PHONE phone ;
};
void sort_txl(struct TXJL *p)
{
int i,j;
struct TXJL temp;
for (i=0;i<MAX-1&&(p+i)->name=="#";i++)
{
for (j=i+1;j<MAX&&(p+j)->name=="#";j++)
{
if (strcmp((p+j-1)->name,(p+j)->name)>0||(strcmp((p+j-1)->name,(p+j)->name)==0)&&(p+j-1)->phone.firstNum>(p+j)->phone.firstNum)
{
(p+j)=(p+j-1);
(p+j-1)=(p+j);
}
}
}
}
main()
{
struct TXJL a[MAX]={{"Li",{130,12345678}},{"Zhang",{139,78}},{"Wang",{131,12345678}},{"Zhao",{138,12345678}},{"#",{0,0}}};
struct TXJL b={"Liu",{135,87654321}};
sort_txl(a);
print_txl(a);
printf("\n");
// insert_txl(a,3,&b);
// print_txl(a);
// printf("\n");
// delete_txl(a,3);
// print_txl(a);
// printf("\n");
// insert_txl2(a,&b);
// print_txl(a);
} 展开
以下主程序定义了一个结构体数组,其中print_txl使用昨天写的同名函数。
1.函数void sort_txl(struct TXJL *p)的作用是将结构体数组按name内容的大小排序,但其中有错误,请改正.(只修改sort_txl函数部分)
2.编写一个函数void insert_txl(struct TXJL *p,int index,struct TXJL *q),其作用是在结构体数组的指定位置插入一个结构体。(调试时将主程序中的被注释掉的三行恢复即可)
3.编写一个函数void delete_txl(struct TXJL *p,int index),它将从结构体数组中删除一个指定序号的一个结构体(调试时将主程序中的被注释掉的三行恢复即可)
4.编写一个函数void insert_txl2(struct TXJL *p,struct TXJL *q),其作用是在排好序的结构体数组插入一个结构体,并仍然保持结构体数组顺序。(调试时将主程序中的被注释掉的最后两行恢复即可)
#include <stdio.h>
#include <string.h>
#define MAX 100
typedef struct
{
int firstNum;
int secondNum;
} PHONE
struct TXJL
{
char name[10];
PHONE phone ;
};
void sort_txl(struct TXJL *p)
{
int i,j;
struct TXJL temp;
for (i=0;i<MAX-1&&(p+i)->name=="#";i++)
{
for (j=i+1;j<MAX&&(p+j)->name=="#";j++)
{
if (strcmp((p+j-1)->name,(p+j)->name)>0||(strcmp((p+j-1)->name,(p+j)->name)==0)&&(p+j-1)->phone.firstNum>(p+j)->phone.firstNum)
{
(p+j)=(p+j-1);
(p+j-1)=(p+j);
}
}
}
}
main()
{
struct TXJL a[MAX]={{"Li",{130,12345678}},{"Zhang",{139,78}},{"Wang",{131,12345678}},{"Zhao",{138,12345678}},{"#",{0,0}}};
struct TXJL b={"Liu",{135,87654321}};
sort_txl(a);
print_txl(a);
printf("\n");
// insert_txl(a,3,&b);
// print_txl(a);
// printf("\n");
// delete_txl(a,3);
// print_txl(a);
// printf("\n");
// insert_txl2(a,&b);
// print_txl(a);
} 展开
1个回答
展开全部
没有调试。应该无大问题。有问题续问。
void sort_txl(struct TXJL *p){
int i,j;
struct TXJL temp;
for(i=0;*(p+i)->name!='#';i++){
for(j=i+1;*(p+j)->name!='#';j++){
if(strcmp((p+j-1)->name,(p+j)->name)>0||(strcmp((p+j-1)->name,(p+j)->name)==0)
&&(p+j-1)->phone.firstNum>(p+j)->phone.firstNum){
temp=*(p+j);
*(p+j)=*(p+j-1);
*(p+j-1)=temp;
}
}
}
}
void insert_txl(struct TXJL *p,int index,struct TXJL *q){
int i;
for(i=0;*(p+i)->name!='#';i++);
if(index>i) index=i;
for(i++;i>index;*(p+i)=*(p-1+i--));
*(p+i)=*q;
}
void delete_txl(struct TXJL *p,int index){
int i;
for(i=0;*(p+i)->name!='#';i++);
if(index>i){
printf("It is not exist...\n");
return;
}
for(i=index+1;*(p+index)->name!='#';i++,index++)
*(p+index)=*(p+i);
}
void insert_txl2(struct TXJL *p,struct TXJL *q){
int i;
for(i=0;*(p+i)->name!='#';i++)
if(strcmp((p+i)->name,q->name)>0 || strcmp((p+i)->name,q->name)==0
&&(p+i)->phone.firstNum>q->phone.firstNum) break;
insert_txl(p,i,q);
}
void sort_txl(struct TXJL *p){
int i,j;
struct TXJL temp;
for(i=0;*(p+i)->name!='#';i++){
for(j=i+1;*(p+j)->name!='#';j++){
if(strcmp((p+j-1)->name,(p+j)->name)>0||(strcmp((p+j-1)->name,(p+j)->name)==0)
&&(p+j-1)->phone.firstNum>(p+j)->phone.firstNum){
temp=*(p+j);
*(p+j)=*(p+j-1);
*(p+j-1)=temp;
}
}
}
}
void insert_txl(struct TXJL *p,int index,struct TXJL *q){
int i;
for(i=0;*(p+i)->name!='#';i++);
if(index>i) index=i;
for(i++;i>index;*(p+i)=*(p-1+i--));
*(p+i)=*q;
}
void delete_txl(struct TXJL *p,int index){
int i;
for(i=0;*(p+i)->name!='#';i++);
if(index>i){
printf("It is not exist...\n");
return;
}
for(i=index+1;*(p+index)->name!='#';i++,index++)
*(p+index)=*(p+i);
}
void insert_txl2(struct TXJL *p,struct TXJL *q){
int i;
for(i=0;*(p+i)->name!='#';i++)
if(strcmp((p+i)->name,q->name)>0 || strcmp((p+i)->name,q->name)==0
&&(p+i)->phone.firstNum>q->phone.firstNum) break;
insert_txl(p,i,q);
}
追问
多谢
还有两个题目。。。。
追答
再没找到你的提问。昨天做这题时好像看到过一个类似的什么read之类的题,但现在找不到了……
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询