PTA函数答案
pta实验——《一般线性表的应用》答案

pta实验——《一般线性表的应用》答案6-1 顺序表的删除操作 (8分)本题要求实现一个函数,要求将顺序表的第i个元素删掉,成功删除返回1,否则返回0;函数接口定义:int ListDelete(SqList &L,int i);其中SqList结构定义如下:typedef struct{ElemType *elem;int length;}SqList;裁判测试程序样例:#include#include#define MAXSIZE 5typedef int ElemType;typedef struct{ElemType *elem;int length;}SqList;void InitList(SqList &L);/*细节在此不表*/int ListDelete(SqList &L,int i);int main(){SqList L;InitList(L);int i;scanf("%d",&i);int result=ListDelete(L,i);if(result==0){printf("Delete Error.The value of i is illegal!");}else if(result==1){printf("Delete Success.The elements of the SequenceList L are:");for(int j=0;j<l.length;j++){< bdsfid="95" p=""></l.length;j++){<>printf(" %d",L.elem[j]);}}return0;}/* 请在这里填写答案 */输入格式:输入数据有1行,首先给出以-1结束的顺序表元素值(不超过100个,-1不属于顺序表元素),然后是删除位置。
c语言基础题库及详解答案pta

c语言基础题库及详解答案pta C语言基础题库及详解答案PTA1. 以下哪个是C语言的关键字?A. intB. floatC. doubleD. real答案:A2. 在C语言中,一个整型变量可以存储的最大值是多少?A. 32767B. 65535C. 2147483647D. 以上都不是答案:C3. 以下哪个是正确的C语言变量声明?A. int a, b, c;B. int a = 10, b = 20, c;C. int a = 10, b, c = 20;D. 所有选项都是正确的答案:A4. C语言中,哪个运算符用于计算两个数的乘积?A. *B. /C. +D. -答案:A5. 以下哪个是C语言中的逻辑运算符?A. &&B. ||C. !D. 所有选项都是逻辑运算符答案:D6. 在C语言中,哪个函数用于计算一个数的平方根?A. sqrt()B. square()C. root()D. pow()答案:A7. 以下哪个是C语言中的控制流语句?A. ifB. forC. whileD. 所有选项都是控制流语句答案:D8. 在C语言中,哪个关键字用于定义函数?A. functionB. defineC. defD. None of the above答案:D9. C语言中,数组的索引从哪个数字开始?A. 0B. 1C. -1D. 随机数答案:A10. 以下哪个是C语言中字符串的常用库?A. stdio.hB. string.hC. math.hD. None of the above答案:B11. 在C语言中,哪个函数用于将整数转换为字符串?A. itoa()B. atoi()C. toupper()D. tolower()答案:A12. C语言中,哪个关键字用于定义一个结构体?A. structB. classC. unionD. enum答案:A13. 在C语言中,哪个函数用于打印输出?A. printf()B. scanf()C. getchar()D. getc()答案:A14. 以下哪个是C语言中的位运算符?A. &B. |C. ^D. 所有选项都是位运算符答案:D15. 在C语言中,哪个关键字用于创建指针?A. pointerB. ptrC. *D. None of the above答案:C16. C语言中,哪个函数用于计算两个数的和?A. add()B. sum()C. +D. None of the above答案:C17. 以下哪个是C语言中的预处理指令?A. #includeB. #defineC. #ifD. 所有选项都是预处理指令答案:D18. 在C语言中,哪个关键字用于定义枚举类型?A. enumB. typeC. enumtypeD. None of the above答案:A19. C语言中,哪个函数用于计算两个数的最大值?A. max()B. min()C. greater()D. None of the above答案:A20. 以下哪个是C语言中的条件运算符?A. ? :B. &&C. ||D. !答案:A。
C语言PTA平台习题与答案

第二章作业1①.本题要求编写程序,输出一个短句“Welcome to You!”#include<stdio.h>int main(){printf("Welcome to You!\n");return 0;}②.本题要求编写程序,计算华氏温度100°F对应的摄氏温度。
计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型。
fahr = 100, celsius = 计算所得摄氏温度的整数值#include<stdio.h>int main(){int fahr = 100;int celsius = 5*(fahr-32)/9;printf("fahr = 100,celsius = %d\n",celsius);return 0;}第二章作业2①求整数均值本题要求编写程序,计算4个整数的和与平均值。
题目保证输入与输出均在整型范围内。
在一行中按照格式“Sum = 和; Average = 平均值”顺序输出和与平均值,其中平均值精确到小数点后一位#include<stdio.h>int main(){int a,b,c,d,Sum;double Average;scanf("%d %d %d %d",&a,&b,&c,&d);Sum = a + b + c + d;Average = (a + b + c + d)/4.0;printf("Sum = %d,Average = %.1f\n",Sum,Average);return 0;}②整数四则运算本题要求编写程序,计算2个正整数的和、差、积、商并输出。
题目保证输入和输出全部在整型范围内输入在一行中给出2个正整数A和B。
在4行中按照格式“A 运算符B = 结果”顺序输出和、差、积、商。
pta使用函数求圆台体积 -回复

pta使用函数求圆台体积-回复如何使用函数来计算圆台的体积圆台是由一个底面为圆形的平面和一个垂直于底面的侧面构成的。
计算圆台的体积是一个常见的几何问题,可以通过应用数学的函数来解决。
在本文中,我将一步一步地解释如何使用函数来计算圆台的体积。
首先,让我们定义一些关键术语,以便更好地理解问题。
假设圆台的高度为h,底面半径为r1,顶面半径为r2。
第一步是定义函数。
在这个问题中,我们需要定义一个函数来计算圆台的体积。
我们可以把这个函数命名为“calculate_volume”,它将带有三个参数:高度h,底面半径r1和顶面半径r2。
函数的定义如下:def calculate_volume(h, r1, r2):volume = (1 / 3) * 3.14 * h * (r12 + r22 + r1 * r2)return volume在这个函数中,我们使用了数学公式来计算圆台的体积。
公式是1/3乘以π(pi)乘以高度h乘以底面半径r1平方加上顶面半径r2平方再加上底面半径r1乘以顶面半径r2的乘积。
定义好函数之后,我们可以调用它来计算圆台的体积。
例如,如果我们想要计算高度为10,底面半径为5,顶面半径为3的圆台的体积,我们可以这样调用函数:volume = calculate_volume(10, 5, 3)这将返回计算出的圆台体积,并将其赋值给变量volume。
本文的主题是如何使用函数来计算圆台的体积。
我们在前面的几步中已经完成了这个目标,定义了一个名为“calculate_volume”的函数,并通过调用这个函数来计算圆台的体积。
接下来,让我们看一些使用函数来计算圆台体积的具体例子。
假设我们有以下几个圆台的参数:圆台1:高度为12,底面半径为6,顶面半径为4圆台2:高度为8,底面半径为3,顶面半径为2圆台3:高度为15,底面半径为7,顶面半径为5我们可以使用函数来计算这些圆台的体积,如下所示:volume1 = calculate_volume(12, 6, 4)volume2 = calculate_volume(8, 3, 2)volume3 = calculate_volume(15, 7, 5)这样,我们可以得到圆台1的体积是261.3333,圆台2的体积是28.0,圆台3的体积是383.3333。
PTA题目02

PTA题⽬02Python3-1 流程控制(分⽀结构)⼀、判断题1-1.在 if...elif...else 的多分⽀语句中只会执⾏⼀个语句块。
T使⽤ if - elif - else 语句,有两个判断条件,如果 if 后的条件成⽴(为 True),则执⾏ if 判断语句后带缩进的代码逻辑. 如果 elif 后的条件成功(为True),则执⾏ elif 判断语句后带缩进的代码逻辑,否则执⾏ else 后带缩进的代码逻辑。
值得注意的是,if - elif - else 语句中,仅有⼀个条件成⽴后,就会退出当前整个判断语句,简单来说,这三条判断路径,只会⾛其中⼀条。
条件表达式age = 12if age < 18:s = 'minor'else:s = 'adult'可以简化为:s = 'minor' if age < 18 else 'adult'⼆、单选题2-1.下⾯程序的运⾏结果是什么? 1s=0a,b=1,2 #a=1;b=2if a>0: # true 退出循环s=s+1elif b>0:s=s+1print(s)三、编程题7-1 sdut-sel-10 直⾓坐标系象限判断X是⼀个喜欢数学的⼩孩,现在刚刚学了坐标系。
象限划分⽰意图如下:他想知道点(X,Y)在第⼏象限内。
输⼊数据保证点不在坐标轴及原点上。
输⼊格式:多组输⼊。
每组输⼊两个整数X,Y,代表点(X,Y),中间⽤空格隔开。
输出格式:输出⼀个整数代表点在第⼏象限内。
输⼊样例:在这⾥给出⼀组输⼊。
例如:2 3-2 -3输出样例:在这⾥给出相应的输出。
例如:13结尾⽆空⾏while 1: # 多组输⼊try:x,y=map(int,input().split())if x>0 and y>0:elif x>0 and y<0:print(4)elif x<0 and y>0:print(2)else:print(3)except:break7-2 sdut-计算分段函数计算下列分段函数g(x)的值:输⼊格式:在⼀⾏中输⼊实数x。
PTA——6-1单链表逆转(20分)

PTA——6-1单链表逆转(20分)本题要求实现⼀个函数,将给定的单链表逆转。
函数接⼝定义:List Reverse( List L );其中List结构定义如下:typedef struct Node *PtrToNode;struct Node {ElementType Data; /* 存储结点数据 */PtrToNode Next; /* 指向下⼀个结点的指针 */};typedef PtrToNode List; /* 定义单链表类型 */L是给定单链表,函数Reverse要返回被逆转后的链表。
裁判测试程序样例:#include <stdio.h>#include <stdlib.h>typedef int ElementType;typedef struct Node *PtrToNode;struct Node {ElementType Data;PtrToNode Next;};typedef PtrToNode List;List Read(); /* 细节在此不表 */void Print( List L ); /* 细节在此不表 */题⽬由两种思路,⼀是从前往后遍历,同时采⽤头插⼊法创建⼀个新的链表;⽅法⼆,从前往后遍历,同时修改 List->Next 的指向第⼀种后续补充【第⼆种思路】List Reverse(List L){List p1 = NULL,p2 = NULL;while(L){p2 = L->Next;L->Next = p1;p1 = L;L = p2;}return p1;}第⼀次就是将 p1 【 NULL】赋值给原链表的头结点的Next,然后让 p1 指向当前 L 结点。
下⼀次就是令当前结点 L' 的 Next 指向上⼀个结点 L,从⽽修改原链表 List->Next 的指向。
PTA程序设计答案

double m=1;
if(n==0)
return m;
else{
for(i=1; i<=n; i++)
m = m*i;
return m;
}
}
double factsum( int n ){
int j;
double sum=0;
if(n>0)
for(j=1; j<=n; j++)
sum += fact(j);
else{
t=n;
dectobin(n=n/2);
for(i=n-m-1; i>=0; i--)
a[i+m]=a[i];
for(i=0; i<m; i++)
a[i]=s[i];
}
return 0;
}
4-54 删除字符 (20分)
答案:
void delchar( char *str, char c ){
int i=0, j=0;
for (;str[i]!='\0';i++)
space = n - i;
for(j=0; j < space; j++)
printf(" ");
for(j=0; j < i; j++)
printf("%-2d", i);
printf("\n");
}
}
4-45 判断奇偶性 (10分)
答案:
int even( int n ){
if( n%2==0 )
if(count%2!=0) {
pta实验——《一般线性表的应用》答案

6-1 顺序表的删除操作 (8分)本题要求实现一个函数,要求将顺序表的第i个元素删掉,成功删除返回1,否则返回0;函数接口定义:int ListDelete(SqList &L,int i);其中SqList结构定义如下:typedef struct{ElemType *elem;int length;}SqList;裁判测试程序样例:#include <stdio.h>#include <stdlib.h>#define MAXSIZE 5typedef int ElemType;typedef struct{ElemType *elem;int length;}SqList;void InitList(SqList &L);/*细节在此不表*/int ListDelete(SqList &L,int i);int main(){SqList L;InitList(L);int i;scanf("%d",&i);int result=ListDelete(L,i);if(result==0){printf("Delete Error.The value of i is illegal!");}else if(result==1){printf("Delete Success.The elements of the SequenceList L are:");for(int j=0;j<L.length;j++){printf(" %d",L.elem[j]);}}return0;}/* 请在这里填写答案 */输入格式:输入数据有1行,首先给出以-1结束的顺序表元素值(不超过100个,-1不属于顺序表元素),然后是删除位置。
所有数据之间用空格分隔。
输入样例:2 6 4 -1 1输出样例:Delete Success.The elements of the SequenceList L are: 6 4作者DS课程组单位临沂大学代码长度限制16 KB时间限制400 ms内存限制64 MB答案:int ListDelete(SqList &L,int i){if(i<1||i>L.length) return0;for(int j=i-1;j<L.length;j++) L.elem[j]=L.elem[j+1];L.length--;return1;}6-2 顺序表的查找操作 (7分)本题要求实现一个函数,要求从顺序表中查找指定元素,并返回第一个查找成功的元素在表中的位置序号,若查找失败,则返回0;函数接口定义:int LocateElem(SqList L,ElemType e);其中SqList结构定义如下:typedef struct{ElemType *elem;int length;}SqList;裁判测试程序样例:#include <stdio.h>#include <stdlib.h>#define MAXSIZE 5typedef int ElemType;typedef struct{ElemType *elem;int length;}SqList;void InitList(SqList &L);/*细节在此不表*/int LocateElem(SqList L,ElemType e);int main(){SqList L;InitList(L);ElemType e;int p;scanf("%d",&e);p=LocateElem(L,e);printf("The position of %d in SequenceList L is %d.",e,p);return0;}/* 请在这里填写答案 */输入格式:输入数据有1行,首先给出以-1结束的顺序表元素值(不超过100个,-1不属于顺序表元素),然后是待查找的元素值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
三、程序填空题3-32程序阅读:4-3 求m到n之和 (10分)int sum(int m, int n){int i;int s=0;for(i=m; i<=n; i++)s= s + i;return (s);}—4-34 简单输出整数 (10分)void PrintN ( int N ){int i;for(i=1; i<=N; i++)printf("%d\n", i);}4-36 简单求和 (10分)int Sum ( int List[], int N ){int k;int sum=0;for(k=0; k<N; k++)sum += List[k];return sum;}4-40 简单阶乘计算 (10分)int Factorial( const int N ){int i;int s=1;if( N < 0 )return 0;else if( N == 0)return 1;elsefor(i=1; i<=N; i++)s*=i;return s;}—4-41 统计个位数字 (15分)int Count_Digit(const int N, const int D){int x;int count=0;int temp=0;x=N;if(x<0)x=-x;do{temp=x%10;if(temp==D)count++;x=x/10;}while(x>0);return count;}4-43 找两个数中最大者 (10分)int max( int a, int b ){int max;if(a >= b)max = a;elsemax = b;return max;}—4-44 数字金字塔 (15分)void pyramid(int n){int i, j, space;for(i=1; i <= n; i++){space = n - i;for(j=0; j < space; j++)putchar(' ');for(j=0; j < i; j++)printf("%-2d", i);putchar('\n');}}4-45 判断奇偶性 (10分)int even( int n ){if( n<0 )n = -n;if( n%2==0 )return 1;elsereturn 0;}—4-46 使用函数求奇数和 (15分)int even( int n ){if( n<0 )n = -n;if( n%2==0 )return 1;elsereturn 0;}int OddSum( int List[], int N ){int k;int oddsum = 0;for(k=0; k<N; k++)if(even(List[k])==0)oddsum += List[k];return oddsum;}4-47 使用函数计算两点间的距离 (10分)double dist( double x1, double y1, double x2, double y2 ){double Dist;Dist = sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) );return Dist;}—4-48 使用函数求素数和 (20分)int prime( int p ){int i,j;int count =0;for(j=2;j<p;j++){if(p%j==0){count++;}}if(count==0&&p>0&&p!=1){return 1;} else{return 0;}}int PrimeSum( int m, int n ){int i,sum=0;for(i=m;i<=n;i++){if(prime(i)==1){sum=sum+i;}}return sum;}—4-19 使用函数统计指定数字的个数 (15分)int CountDigit( int number, int digit ){int count,temp,x;x=number;if(x<0)x=-x;do{temp=x%10;if(temp==digit)count++;x=x/10;}while(x>0);return count;}—4-20 使用函数输出水仙花数 (20分)int narcissistic(int number){int i, j, digit, power, powerSum, integer, count, flag;count = 0;integer = number;while (integer > 0){integer = integer / 10;count++;}powerSum = 0;integer = number;for (i = 0; i < count; i++){digit = integer % 10;integer = integer / 10;power = 1;for (j = 0; j < count; j++)power = power*digit;powerSum = powerSum + power;}if (powerSum == number)flag = 1;elseflag = 0;return flag;}void PrintN(int m, int n){int i;for (i = m + 1; i < n; i++){if (narcissistic(i) == 1)printf("%d\n", i);}}—4-21 使用函数求余弦函数的近似值 (15分)double funcos( double e, double x ){double sum=0,d=100;int i=0,j;double cj;int count=0;while(d>e){count++;if(count%2!=0){cj=1;for(j=1; j<=i; j++)cj=cj*j;d=pow(x,i)/cj;sum=sum+d;i+=2;}else{cj=1;for(j=1; j<=i; j++)cj=cj*j;d=pow(x,i)/cj;sum=sum-d;i+=2;}}return sum;}—4-49 分类统计字符个数 (15分)void f( long int x, char *p ){char q;static int i=0,j=0;if(x<0){x=-x;*p='-';p++;}q=x%16;if(q<10)q=('0'+q);elseq=('A'+q-10);x=x/16;j++;i=j;if(x>0)f(x, p);*(p+(i-j))=q;j--;}—4-7 使用函数求特殊a串数列和 (20分)int fn( int a, int n ){int x;int p=0;int i;for(i=0; i<n; i++){x= a * pow(10,i);p = p + x;}return p;}int SumA( int a, int n ){int k;int sum=0;for(k=0; k<n+1; k++)sum = sum + fn( a , k );return sum;}—4-22 使用函数输出指定范围内的完数 (20分)void PrintPN( int m, int n ){int k;int t;int found = 0;for(k=m; k<=n; k++){if (factorsum( k ) == k){found = 1;printf("%d = 1",k);for(t=1; t<= k/2; t++)if(t>1 && k%t == 0)printf(" + %d", t);printf("\n");}}if (found == 0)printf("No perfect number");}—4-25 使用函数输出一个整数的逆序数 (20分)int reverse( int number ){int m=0;if(number < 0){number = -number;printf("-");}else if(number==0)m=0;while(number>0){m = m*10 + number%10;number=number/10;}return m;}—4-50 移动字母 (10分)void Shift( char s[] ){int i;int n;char a[3];n = strlen(s);for(i=0; i<3; i++)a[i] = s[i];if( n>3 )for(i=3; i<n; i++){s[i-3] = s[i];}for(i=0; i<3; i++)s[n-3+i]=a[i];return s;}—4-51 在数组中查找指定元素 (15分)int search(int list[], int n, int x){int i, result;for (i=0; i<n; i++){if (list[i] == x){result = i;break;}}if (i == n)result = -1;return result;}—4-52 数组循环右移 (20分)int ArrayShift(int a[], int n, int m){int i=0;int s[10];if(m>=n)m=m%n;if(m!=0){for(i=n-m; i<n; i++)s[i-(n-m)] = a[i];for(i=n-m-1; i>=0; i--)a[i+m]=a[i];for(i=0; i<m; i++)a[i]=s[i];}return 0;}注:最后一个样例(2分),段错误没通过,暂时还没找到原因4-54 删除字符 (20分)void delchar( char *str, char c ){int i, j;for (j=i=0;str[i]!='\0';i++)if (str[i]!=c){str[j]=str[i];j++;}str[j]='\0';}—4-55 分类统计各类字符个数 (15分)void StringCount( char *s ){int i,bletter=0,sletter=0,blank=0,digit=0,other=0;for(i=0;s[i]!='\0';i++){if(s[i]>='A' && s[i]<='Z')bletter++;else if(s[i]>='a' && s[i]<='z')sletter++;else if(s[i]==' ')blank++;else if(s[i]>='0' && s[i]<='9')digit++;elseother++;}printf("%d %d %d %d %d",bletter,sletter,blank,digit,other);}4-26 使用递归函数计算1到n之和 (10分)int sum( int n ){int i;int Sum=0;if(n<=0)return 0;elsefor(i=1; i<=n; i++)Sum += i;return Sum;}4-28 递归求阶乘和 (15分)double fact( int n ){int i;double m=1;if(n==0)return m;elsefor(i=1; i<=n; i++)m = m*i;return m;}double factsum( int n ){int j;double sum;sum = 0;if(n>0){for(j=1; j<=n; j++)sum += fact(j);}return sum;}4-29 递归实现指数函数 (15分)double calc_pow( double x, int n ){int i;double m=1;for(i=1; i<=n; i++)m = m*x;return m;}4-32 递归求Fabonacci数列 (10分)int f( int n ){int d;if(n==0)d=0;else if(n==1)d=1;else d=f(n-2)+f(n-1);return d;}4-33 十进制转换二进制 (15分)void dectobin( int n ){int t;if(n==0||n==1)printf("%d",n%2);else{t=n;dectobin(n=n/2);printf("%d",t%2);}}—4-8 递归实现顺序输出整数 (15分)void printdigits( int n ){int N=1;int i;int shang;int yushu;int m;m=n;while(m>9){N++;m=m/10;}for(i=N-1; i>=0; i--){shang = n * pow(10,-i);yushu = n - shang * pow(10 , i);n = yushu;printf("%d\n", shang);}}—4-9 统计各位数字之和是5的数 (20分)int is( int number ){int s=0;int yushu = number;while(number > 0){yushu = number % 10;s = yushu + s;number = number / 10;}if(s == 5)return 1;elsereturn 0;}void count_sum( int a, int b ){int i;int count=0;int count_Sum=0;for(i=a; i<=b; i++)if( is(i) ){count++;count_Sum = count_Sum + i;}printf("count = %d, sum = %d", count, count_Sum);}—4-10 简单实现x的n次方 (10分)double mypow( double x, int n ){int i;double s=1;for(i=0; i<n; i++)s = s*x;return s;}4-13 使用函数求1到10的阶乘和 (10分)double fact( int n ){int k;int s=1;for(k=1;k<=n; k++)s = s * k;return s;}4-14 使用函数求最大公约数 (10分)int gcd( int x, int y ){int i,t;if(x<y){t=y;y=x;x=t;}for(i=y;i>=1;i--)if(x%i==0 && y%i==0)break;return i;}—4-15 使用函数的选择法排序 (25分)void sort( int a[], int n ){int temp,k,min,i;for(k=0;k<n-1;k++){min=k;for(i=k+1;i<n;i++)if(a[i]<a[min])min=i;temp=a[min];a[min]=a[k];a[k]=temp;}}4-16 函数实现字符串逆序 (15分)void f(char *p){char temp;char *end = p +my_strlen(p) - 1;while (end > p){temp = *p;*p = *end;*end = temp;--end;++p;}}int my_strlen(char *p){char *q = p;while(*p != '\0')p++;return p-q;}—4-17 递归计算P函数 (15分)double P( int n, double x ){double z;if(n == 0)z = 1;else if(n == 1)z=x;else if(n > 1)z = ((2*n-1)*P(n-1,x) - (n-1)*P(n-2,x))/n;return z;}4-1 计算存款利息-genlib (10分)int main(void){int money, year;double interest, rate;scanf("%d", &money);scanf("%d", &year);scanf("%lf", &rate);interest = money * pow(1+rate,year) - money;printf("interest = %.2f\n", interest);return 0;}—4-2 弹球距离 (15分)double dist( double h, double p ){double d=h;while(p!=0){h=p*h;if(h<TOL)break;d=d+2*h;}return (d);。