目录
自己乱写的代码,希望有大佬指导一下~
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;
}
1万+

被折叠的 条评论
为什么被折叠?



