(免费)anyview答案 数据结构(C语言版)-广工(第一章)

目录

DC01PE03e

DC01PE06

DC01PE08

DC01PE11

DC01PE18

DC01PE20

DC01PE21

DC01PE22

DC01PE23

DC01PE25e

DC01PE26e

DC01PE30

DC01PE49

DC01PE61

DC01PE63

DC01PE65


自己乱写的代码,希望有大佬指导一下~

DC01PE03e

交换两个整型变量的值

【例题】学习交换两个整型变量的值的方法。

注意:本题目是例题,无需修改/添加任何代码即可正常运行。请注意编译、运行和调试本道题目,观察执行过程中的变量变化情况。

int main()
{
	int a, b;

	//第1种交换a和b的值的方法:借助第三方变量
	printf("第1种交换a和b的值的方法:\n", a, b);
	a = 8;
	b = 10;
	printf("交换前:a = %d, b = %d\n", a, b);

	int c = b;
	b = a;
	a = c;
	printf("交换后:a = %d, b = %d\n\n", a, b);

	//第2种交换a和b的值的方法:算术运算(1)
	printf("第2种交换a和b的值的方法:\n", a, b);
	a = 8;
	b = 10;
	printf("交换前:a = %d, b = %d\n", a, b);

	a = b - a;
	b = b - a;
	a = a + b;
	printf("交换后:a = %d, b = %d\n\n", a, b);

	//第3种交换a和b的值的方法:算术运算(2)
	printf("第3种交换a和b的值的方法:\n", a, b);
	a = 8;
	b = 10;
	printf("交换前:a = %d, b = %d\n", a, b);

	a = a + b;
	b = a - b;
	a = a - b;
	printf("交换后:a = %d, b = %d\n\n", a, b);

	//第4种交换a和b的值的方法:异或运算
	printf("第4种交换a和b的值的方法:\n", a, b);
	a = 8;
	b = 10;
	printf("交换前:a = %d, b = %d\n", a, b);

	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("交换后:a = %d, b = %d\n", a, b);

	//第5种交换a和b的值的方法:隐式赋值
	printf("第5种交换a和b的值的方法:\n", a, b);
	a = 8;
	b = 10;

	b = (a + b) - (a = b);
	printf("交换后:a = %d, b = %d\n", a, b);

	return 0;
}

DC01PE06

将三个整数按升序重新排列

试写一算法,如果三个整数a,b和c的值不是依次非递增的,则通过交换,令其为非递增。要求实现下列函数:
void Descend(int &a, int &b, int &c); 
/* 通过交换,令 a >= b >= c */

void Descend(int &a, int &b, int &c){   
  if (a<b) { 
      int t1=a;
      a=b;    
      b=t1;
  }
  if (b<c) {
      int t2=b;
      b=c;    
      c=t2;
  }
  if (a<b) {    
      int t3=a;
      a=b;
      b=t3;
  }
}

DC01PE08

求一元多项式的值

试编写算法,求一元多项式
    P(x) = a0 + a1x + a2x^2 + ... + anx^n
的值P(x0),并确定算法中每一语句的执行次数和整个算法的时间复杂度。

要求实现下列函数:
float Polynomial(int n, int a[], float x0);
/* 求一元多项式的值P(x0)。                    */
/* 数组a的元素a[i]为i次项的系数,i=0,1,...,n  */

linefloat Polynomial(int n, int a[], float x0) {
   float result=0;
   float pow=1;
   for (int i = 0; i <=n; i++) {
     result+=a[i]*pow;
     pow*=x0;
   }
   return result;
 }

DC01PE11

求k阶裴波那契序列的第m项的值

【202109211307】已知k阶裴波那契序列的定义为
    f(0)=0, f(1)=0, ..., f(k-2)=0, f(k-1)=1;
    f(n)=f(n-1)+f(n-2)+...+f(n-k), n=k,k+1,...
试编写求k阶裴波那契序列的第m项值的函数算法,k和m均以值调用的形式在函数参数表中出现。

要求实现下列函数:
Status Fibonacci(int k, int m, int &f);
/* 如果能求得k阶斐波那契序列的第m项的值f,则返回OK;*/
/* 否则(比如,参数k和m不合理)返回ERROR            */

Status Fibonacci(int k, int m, int &f) {
    if (k < 2 || m < 0) {
        return ERROR;
    }
    
    if (m < k - 1) {
        f = 0;
        return OK;
    }
    
    if (m == k - 1) {
        f = 1;
        return OK;
    }
    
    int *fib = (int *)malloc((m + 1) * sizeof(int));
    if (fib == NULL) {
        return ERROR;
    }
    
    for (int i = 0; i < k - 1; ++i) {
        fib[i] = 0;
    }
    fib[k - 1] = 1;
    
    for (int i = k; i <= m; ++i) {
        fib[i] = 0;
        for (int j = 1; j <= k; ++j) {
            if (i - j >= 0) {
                fib[i] += fib[i - j];
            }
        }
    }
    
    f = fib[m];
    free(fib);
    return OK;
}

DC01PE18

计算i!×2^i的值

【题目】试编写算法,计算i!×2^i的值并存入数组a[0..n-1]的第i-1个分量中 (i=1,2,…,n)。假设计算机中允许的整数最大值为MAXINT,则当对某个k(1≤k≤n),使k!×2^k>MAXINT时,应按出错处理。注意选择你认为较好的出错处理方法。

要求实现下列函数:
Status Series(int a[], int n);
/* 求i!*2^i序列的值并依次存入长度为n的数组a;若所有 */
/* 值均不超过MAXINT,则返回OK,否则返回EOVERFLOW     */

Status Series(int a[], int n) {
    if (n==0) {
        return ERROR;    
    }
    long long factorial = 1;
    long long powerOfTwo = 2;
    for (int i = 1; i <= n; i++) {
        long long result = factorial * powerOfTwo;        
        if (result > MAXINT) {
            return EOVERFLOW;        
        }       
        a[i - 1] = (int)result;        
        factorial *= (i + 1);
        powerOfTwo *= 2;    
    }
    return OK; 
}

DC01PE20

按照特定顺序打印“学生”结构体数组中所有学生的姓名

[20220901]已知某表示“学生”的结构体定义如下,编写算法,按照以下要求打印一个“学生”结构体数组student中所有学生的姓名。每打印一个姓名,则换行。
要求:index[]中每个元素的值在0~n-1之间,对应于student数组中各元素的下标。请依次按照index[]中每个元素指示的学生顺序打印学生姓名。例如: 
student数组有3个学生: Alex   Jack  Mei
                index[] = { 1, 2, 0 }
则打印结果为:
            Jack
            Mei
            Alex

注:请勿打印除姓名外的其它字符,否则可能会导致错误。

void printName(stuType student[], int index[], int n)

void printName(stuType student[], int index[], int n){
  for (int i = 0; i < n; i++) {
    int t1=index[i];
    printf("%s\n",student[t1].name);
  }
}

DC01PE21

查找学生结构体数组中的最高成绩

已知某表示“学生”的结构体定义如下,编写算法,查找一个“学生”结构体数组中的最高成绩。

typedef struct student {
    int number;     // 学号
    char name[4]; // 姓名
    float score;   // 成绩
} stuType, * stuPtrType;

float highestScore(stuType *student[], int n)
/* 返回最高成绩 */

float highestScore(stuType *student[], int n)/* 返回最高成绩  */{
  float Score=student[0]->score;
  for (int i = 1; i < n; i++) {
    if (Score<student[i]->score){
        Score=student[i]->score;    
    }
  }
  return Score;
}

DC01PE22

打印“学生”结构体数组中第一个最高成绩学生的姓名和成绩

[20231105]已知某表示“学生”的结构体定义如下,编写算法,打印“学生”结构体数组中第一个最高成绩学生的姓名和成绩。
注意:(1)打印姓名或成绩后,都要换行。
     (2)成绩只打印到小数点后2位,示例如下:
              Alex
              99.99
     (3)请勿打印除姓名外的其它字符,否则可能会导致错误。
typedef struct student {
       int number;     // 学号
       char name[4]; // 姓名
       float score;   // 成绩
} stuType, * stuPtrType;

void printFirstName_HighestScore(stuType *student[], int n);

void printFirstName_HighestScore(stuType *student[], int n){
  if (n <= 0 || student == NULL) return;
  float max_score=student[0]->score;
  char max_name[4];
  int i,temp=0;
  for( i=1;i<n;i++){
      if(student[i]->score > max_score){
          max_score=student[i]->score;
          temp=i;        
      }
  }
  strncpy(max_name,student[temp]->name,4);
  max_name[4] = '\0';
  for(i=0;i<4;i++) printf("%c",max_name[i]);
  printf("\n%.2f\n",max_score);

}

DC01PE23

打印“学生”结构体数组中最后一个最高成绩学生的姓名和成绩

[20231012]已知某表示“学生”的结构体定义如下,编写算法,打印“学生”结构体数组中最后一个最高成绩学生的姓名和成绩。
注意:(1)打印姓名或成绩后,都要换行。
     (2)成绩只打印到小数点后2位,示例如下:
               Alex
               99.99
     (3)请勿打印除姓名外的其它字符,否则可能会导致错误。

typedef struct student {
    int number;     // 学号
         char name[4];  // 姓名
    float score;   // 成绩
} stuType, * stuPtrType;

void printLastName_HighestScore(stuType *student[], int n);

void printLastName_HighestScore(stuType *student[], int n){
  float maxscore=student[0]->score;
  for (int i = 0;i< n;i++){
    if (maxscore<student[i]->score){
        maxscore=student[i]->score;     
    }
  }
  int j=5; 
  for (;j >=0 ;j--){
    if(maxscore==student[j]->score){
      break;
    }
  }
  printf("%s\n", student[j]->name);
  printf("%.2lf\n", maxscore);
}

DC01PE25e

函数指针的定义与使用

【例题】学习函数指针的定义与使用。

注意:本题目是例题,无需修改/添加任何代码即可正常运行。请注意编译、运行和调试本道题目,观察执行过程中的函数调用顺序。

void A() {
	printf("X\n");
}
void B() {
	printf("Y\n");
}

int main()
{
	void (*funcp)(); //定义函数指针

	funcp = A;
	(*funcp)(); // 实际上调用了A( );

	funcp = B;
	(*funcp)(); // 实际上调用了B( );

	return 0;
}

DC01PE26e

函数指针作为函数的参数

【例题】函数指针作为函数的参数。

注意:本题目是例题,无需修改/添加任何代码即可正常运行。请注意编译、运行和调试本道题目,观察执行过程中的函数调用顺序。

void hello() 
{ 
	printf("Hello world!\n"); 
}

void runFun(void (*pFun)()) 
{
	pFun();  //函数指针;
}


int main()
{
	runFun(hello);

	return 0;
}

DC01PE30

将结构体中的字符串逆序放置

编写程序,将结构体中的字符串逆序放置。
已知一个字符串结构体定义如下:
typedef struct {
    ElemType* elem;  //存放一个字符串
    int length;  //字符串的长度
} StrSequence;

StrSequence* reverseStr(StrSequence* strSeq);
/*返回一个结构体,该结构体将strSeq中的字符串逆序存放*/

注意:请勿修改strSeq中的任何值。

StrSequence* reverseStr(StrSequence* strSeq){
  if (strSeq == NULL || strSeq->elem == NULL){
     return NULL;
  }
  int i = 0, length = 0;
  char temp;   
  while (strSeq->elem[length] != '\0') {
     length++;    
  }  
   for (i = 0; i < length / 2; i++) {
     temp = strSeq->elem[i];
     strSeq->elem[i] = strSeq->elem[length - i - 1];
     strSeq->elem[length - i - 1] = temp;
   }    
  return strSeq;
}

DC01PE49

由一维数组构建一个序列

【20230829】试写一算法,由长度为n的一维数组a构建一个序列S。

要求实现下列函数:
Status CreateSequence(Sequence &S, int n, ElemType *a); 
/* 由长度为n的一维数组a构建一个序列S,并返回OK。 */
/* 若构建失败,则返回ERROR                       */

序列的结构体定义为:
typedef struct {
  ElemType  *elem;
  int  length;
} Sequence;

Status CreateSequence(Sequence &S, int n, ElemType *a) {
  if (n<=0||a[0]==NULL) {
    return ERROR;   
  }   
  S.elem=(ElemType*)malloc(n*sizeof(ElemType));
  for (int i = 0; i <n; i++) {
    S.elem[i]=a[i];
  }
  S.length=n;
  return OK;
}

DC01PE61

构建一个值为x的结点

【题目】链表的结点和指针类型定义如下
    typedef struct LNode {
       ElemType  data;
       struct LNode *next;
    } LNode, *LinkList;
试写一函数,构建一个值为x的结点。

要求实现下列函数:
LinkList MakeNode(ElemType x); 
/* 构建一个值为x的结点,并返回其指针。 */
/* 若构建失败,则返回NULL。            */

LinkList MakeNode(ElemType x) {     
 LinkList pnew;
 pnew = (LinkList)malloc (sizeof(LNode));
 int data=x;
 pnew->data=data;
 pnew->next=NULL;
}

DC01PE63

构建长度为2且两个结点的值依次为x和y的链表

【题目】链表的结点和指针类型定义如下
    typedef struct LNode {
       ElemType  data;
       struct LNode *next;
    } LNode, *LinkList;
试写一函数,构建长度为2且两个结点的值依次为x和y的链表。

要求实现下列函数:
LinkList CreateLinkList(ElemType x, ElemType y); 
/* 构建其两个结点的值依次为x和y的链表。*/
/* 若构建失败,则返回NULL。            */

LinkList CreateLinkList(ElemType x, ElemType y) {     
  LinkList pnew,pnew2;
  pnew=(LinkList)malloc(sizeof(LNode));
  pnew->data=x;
  pnew2=(LinkList)malloc(sizeof(LNode));
  pnew2->data=y;
  pnew->next=pnew2;
  pnew2->next=NULL;
  return pnew;
}

DC01PE65

构建长度为2的升序链表

【题目】链表的结点和指针类型定义如下
    typedef struct LNode {
       ElemType  data;
       struct LNode *next;
    } LNode, *LinkList;
试写一函数,构建长度为2的升序链表,两个结点的值分别为x和y,但应小的在前,大的在后。

要求实现下列函数:
LinkList CreateOrdLList(ElemType x, ElemType y); 
/* 构建长度为2的升序链表。    */
/* 若构建失败,则返回NULL。   */

LinkList CreateOrdLList(ElemType x, ElemType y) {     
    LinkList pnew;
    LinkList pnew2;
    pnew=(LinkList)malloc(sizeof(LNode));
    pnew2=(LinkList)malloc(sizeof(LNode));
    if (pnew==NULL||pnew2==NULL) {
        return NULL;
    }    
    if (x>y) {
        pnew->data=y;
        pnew2->data=x;
    }    
    else {
        pnew->data=x;
        pnew2->data=y;
    }    
    pnew->next=pnew2;
    pnew2->next=NULL;
    return pnew;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值