广工anyview数据结构习题第一章,
在学习过程中部分题目参考了Giyn 、戮漠、雁过留痕等大佬的代码,在此感谢。
题目解法不是最优解,但希望能给大家有所启发。同时也发了文档资源,需要可自取。
如果对你有帮助,可以给卑微的博主留个赞、关注、收藏 (不是)
(骗一下数据,说不定以后面试就过了,拜谢)
目录
1.DC01PE03E
2.DC01PE06
3.DC01PE08
4.DC01PE11
5.DC01PE18
6.DC01PE20
7.DC01PE21
8.DC01PE22
9.DC01PE23
10.DC01PE25E
11.DC01PE26E
12.DC01PE30
13.DC01PE49
14.DC01PE61
15.DC01PE63
16.DC01PE65
1.DC01PE03E
【例题】学习交换两个整型变量的值的方法。
注意∶本题目是例题,无需修改
/添加任何代码即可正常运行。请注意编译、运行和调试本道题目,观察执行过程中的变量变化情况。
#include "allinclude.h" //DO NOT edit this line
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的值的方法
printf("第2种交换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);
//第3种交换a和b的值的方法
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", a, b);
//试一试:在第3种交换方法中,令a和b的值相等,例如都为8,会出现什么现象?
return 0;
}
2.DC01PE06
试写一算法,如果三个整数a,b和c的值不是依次非递增的,则通过交换,令其为非递增。要求实现下列函数∶
void Descend(int &a,int &b,int &c);
/* 通过交换,令a>=b>= c*/
#include "allinclude.h" //DO NOT edit this line
void Descend(int &a, int &b, int &c) // 通过交换,令 a >= b >= c
{ // Add your code here
int d;
if(a<b)
{
d=a,a=b,b=d;
}
if(b<c)
{ if (a<c)
{
d=a,a=c,c=b,b=d;
}
else d=b,b=c,c=d;
}
}
3.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*/
#include "allinclude.h" //DO NOT edit this line
float Polynomial(int n, int a[], float x0)
{ // Add your code here
float result=0;
int i=0;
float x1=1;
for(;i<=n;i++)
{
result+=a[i]*x1;
x1*=x0;
}
return result;
}
4.DC01PE11
已知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,则返回0K;*/
/* 否则(比如,参数k和m 不合理)返回ERROR*/
#include "allinclude.h" //DO NOT edit this line
Status Fibonacci(int k, int m, int &f) {
// Add your code here
if (m < 0 || k < 2)
return ERROR;
if (m < k - 1)
{
f = 0;
return OK;
}
if (m == k - 1 || m == k)
{
f = 1;
return OK;
}
//m>k
int arr[m+1] , i, j;
for (i = 0; i <= m;)
arr[i++] = 0; //初始化 f(0)——f(m)都是0
i = k-1;
arr[i++] = 1; //执行后i==k
for (int sum; i <= m; i++)
{
for (sum=0,j = i - k; j <=i; j++)
sum += arr[j];
arr[i] = sum;
}
f = arr[m];
return OK;
}
5.DC01PE18
【题目】试编写算法,计算i!x2^i的值并存入数组a【0..n-1】的第i-1个分量中(i=1,2,,n)。假设计算机中允许的整数最大值为MAXINT,则当对某个k (1≤k≤n),使k!x2^k>MAXINT时,应按出错处理。注意选择你认为较好的出错处理方法。
要求实现下列函数∶
Status Series(int a[ ],int n);
/* 求i!*2^i序列的值并依次存入长度为n的数组a;
若所有 值均不超过MAXINT,则返回OK,否则返回EOVERFLOW*/
#include "allinclude.h" //DO NOT edit this line
Status Series(int a[], int n) {
// Add your code here
if(n<1)
return ERROR;
int i,j = 1,k=1;
for (i = 1;i<=n;i++)
{
j *= i;
k *=2;
if(j*k>MAXINT)
return EOVERFLOW;
a[i-1] = j*k;
}
return OK;
}
6.DC01PE20
已知某表示"学生"的结构体定义如下,编写算法,按照以下要求打印一个"学生"结构体数组student中所有学生的姓名。每打印一个姓名,则换行。要求∶index[ ]中每个元素的值在0~n-1之间,对应于student数组中各元素的下标。请依次按照index[ ]中每个元素指示的学生顺序打印学生姓名。例如∶student数组有3个学生∶Alex Jack Mei
index[ ]= { 1,2,0 }则打印结果为∶
Jack
Mei
Alex
注∶请勿打印除姓名外的其它字符,否则可能会导致错误。
typedef struct student{
int number;//学号
char name[4];//姓名
float score; //成绩
} stuType,* stuPtrType;
void printName(stuType student[ ],int index[ ],int n)
#include "allinclude.h"
void printName(stuType student[], int index[], int n)
{ // Add your code here
//int length = (sizeof(student)/sizeof(stuType));
//printf("%d",length);
for(int i=0;i<n;i++)
{
if (index[i]<n)
for(int j=0;j<4;j++)
printf("%c",student[index[i]].name[j]);
printf("\n");
}
}
7.DC01PE21
已知某表示"学生"的结构体定义如下,编写算法,查找一个"学生"结构体数组中的最高成绩。
typedef struct student {
int number;//学号
char name【4】;// 姓名
float score; //成绩
} stuType,* stuPtrType;
float highestScore(stuType *student[ ],int n)
/*返回最高成绩 */
#include "allinclude.h"
float highestScore(stuType *student[], int n)
/* 返回最高成绩 */
{ // Add your code here
float max_score=student[0]->score;
int i;
for( i=1;i<n;i++)
if(student[i]->score>max_score)
{
max_score=student[i]->score;
}
return max_score;
}
8.DC01PE22
已知某表示"学生"的结构体定义如下,编写算法,打印"学生"结构体数组中第一个最高成绩学生的姓名和成绩。注意∶(1)打印姓名后,要换行。
(2)打印成绩后,要换行。
(3)只能使用printf函数进行打印,其中成绩只打印到小数点后2位,示例如下∶
Alex
99.99
(4)请勿打印除姓名外的其它字符,否则可能会导致错误。
typedef struct student {
int number;//学号
char name[5]; // 姓名,最后一位是'\0',无需打印
float score;//成绩
} stuType,* stuPtrType;
// 实现以下函数∶
void printFirstName_HighestScore(stuType *student[ ],int n);
#include "allinclude.h"
void printFirstName_HighestScore(stuType *student[], int n)
{ // Add your code here
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;
}
}
strcpy(max_name,student[temp]->name);
//打印
for(i=0;i<4;i++)
printf("%c",max_name[i]);
printf("\n%.2f\n",max_score);
}
9.DC01PE23
同8.
#include "allinclude.h"
void printLastName_HighestScore(stuType *student[], int n)
{ // Add your code here
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;
}
}
strcpy(max_name,student[temp]->name);
//打印
for(i=0;i<4;i++)
printf("%c",max_name[i]);
printf("\n%.2f\n",max_score);
}
10.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;
}
#include "allinclude.h" //DO NOT edit this line
void A() {
printf("X\n");
}
void B() {
printf("Y\n");
}
int main()
{
void (*funcp)(); //定义函数指针
funcp = A;
(*funcp)(); // 实际上调用了A( );
funcp = B;
(*funcp)(); // 实际上调用了B( );
return 0;
}
11.DC01PE26E
【例题】函数指针作为函数的参数。
注意∶本题目是例题,无需修改添加任何代码即可正常运行。请注意编译、运行和调试本道题目,观察执行过程中的函数调用顺序。
【程序】void hello()
{
printf("Hello wiorld!\n");
}
void runFun(void(*pFun)( ) )
{
pFun(); //函数指针
}
int main()
{
runFun(hello);
return 0;
}
#include "allinclude.h" //DO NOT edit this line
void hello()
{
printf("Hello world!\n");
}
void runFun(void (*pFun)())
{
pFun(); //函数指针;
}
int main()
{
runFun(hello); //hello是实际要调用的函数
return 0;
}
12.DC01PE30
编写程序,将结构体中的字符串逆序放置。已知一个字符串结构体定义如下∶
typedef struct {
ElemType* elem; //存放一个字符串
int length; //字符串的长度
} StrSequence;
StrSequence* reverseStr(StrSequence* strSeq);
/*返回一个结构体,该结构体将strSeq中的字符串逆序存放*/
注意∶请勿修改strSeq中的任何值。
#include "allinclude.h"
StrSequence* reverseStr(StrSequence* strSeq)
/*返回一个结构体,该结构体将strSeq中的字符串逆序存放*/
{ // Add your code here
int i=0,length;
char temp;
for(;strSeq->elem[i++]!=0;)
;
length=--i;
for(i=0;i<=length/2;i++ )
if(strSeq->elem[i]!=strSeq->elem[length-i-1])
{
temp=strSeq->elem[i];
strSeq->elem[i]=strSeq->elem[length-i-1];
strSeq->elem[length-i-1]=temp;
}
return strSeq;
}
13.DC01PE49
【题目】试写一算法,由长度为n的一维数组a构建一个序列s。
要求实现下列函数∶
Status CreateSequence(Sequence &S,int n,ElemType *a);
/*由长度为n的一维数组a构建一个序列S,并返回OK。*/
/* 若构建失败,则返回ERROR*/
序列的结构体定义为∶
typedef struct {
ElemType*elem;
int length;
}Sequence;
#include "allinclude.h" //DO NOT edit this line
Status CreateSequence(Sequence &S, int n, ElemType *a) {
// Add your code here
if(n<1) 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;
}
14.DC01PE61
【题目】链表的结点和指针类型定义如下
typedef struct LNode {
ElemType data;
struct LNode *next;
} LNode,*LinkList;
试写一函数,构建一个值为x的结点。
要求实现下列函数∶
LinkList MakeNode(ElemType x);
/* 构建一个值为x的结点,并返回其指针。 */
/* 若构建失败,则返回NULL。*/
#include "allinclude.h" //DO NOT edit this line
LinkList MakeNode(ElemType x) {
// Add your code here
LNode *p;
p = (LNode*)malloc(sizeof(LNode));
if(NULL != p)
p->data = x;
p->next = NULL;
return p;
}
15.DC01PE63
【题目】链表的结点和指针类型定义如下
typedef struct LNode {
ElemType data;
struct LNode *next;
} LNode,*LinkList;
试写一函数,构建长度为2且两个结点的值依次为x和y的链表。
要求实现下列函数∶
LinkList CreateLinkList(ElemType x,ElemType y);
/* 构建其两个结点的值依次为x和y的链表。*/
/* 若构建失败,则返回NULL。*/
#include "allinclude.h" //DO NOT edit this line
LinkList CreateLinkList(ElemType x, ElemType y) {
// Add your code here
LinkList head= (LinkList)malloc (sizeof (LNode));
if(head)
{
head->data=x;
head->next= (LinkList)malloc (sizeof (LNode));
if(head->next)
{ head->next->data=y;
head->next->next=NULL;
}
else return NULL;
}
return head; // This is a temporary code. Change it if necessary.
}
16.DC01PE65
【题目】链表的结点和指针类型定义如下
typedef struct LNode {
ElemType data;
struct LNode *next;
} LNode,*LinkList;
试写一函数,构建长度为2的升序链表,两个结点的值分别为x和y,但应小的在
前,大的在后。要求实现下列函数∶
LinkList CreateOrdLList(ElemType x,ElemType y);
/* 构建长度为2的升序链表。*/文章来源:https://www.toymoban.com/news/detail-730979.html
/*若构建失败,刚返回NULL。*/文章来源地址https://www.toymoban.com/news/detail-730979.html
#include "allinclude.h" //DO NOT edit this line
LinkList CreateOrdLList(ElemType x, ElemType y) {
// Add your code here
LinkList head= (LinkList)malloc (sizeof (LNode));
if(head)
{
head->next= (LinkList)malloc (sizeof (LNode));
if(head->next)
{
head->next->next=NULL;
}
else return NULL;
}
if(x<y)
head->data=x,head->next->data=y;
else
head->data=y,head->next->data=x;
return head; // This is a temporary code. Change it if necessary.
}
到了这里,关于广工anyview数据结构第一章(2021.12)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!