您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > c语言第二次作业pta
4-1求单链表结点的阶乘和(15分)本题要求实现一个函数,求单链表L结点的阶乘和。这里默认所有结点的值非负,且题目保证结果在int范围内。函数接口定义:intFactorialSum(ListL);其中单链表List的定义如下:typedefstructNode*PtrToNode;structNode{intData;/*存储结点数据*/PtrToNodeNext;/*指向下一个结点的指针*/};typedefPtrToNodeList;/*定义单链表类型*/裁判测试程序样例:#includestdio.h#includestdlib.htypedefstructNode*PtrToNode;structNode{intData;/*存储结点数据*/PtrToNodeNext;/*指向下一个结点的指针*/};typedefPtrToNodeList;/*定义单链表类型*/intFactorialSum(ListL);intmain(){intN,i;ListL,p;scanf(%d,&N);L=NULL;for(i=0;iN;i++){p=(List)malloc(sizeof(structNode));scanf(%d,&p-Data);p-Next=L;L=p;}printf(%d\n,FactorialSum(L));return0;}/*你的代码将被嵌在这里*/输入样例:3536输出样例:846intFactorialSum(ListL){intsum=0,i,N=1;while(L!=NULL){N=1;for(i=1;i=L-Data;i++){N=N*i;}sum=sum+N;L=L-Next;}returnsum;}4-2提桶寻宝(10分)给你准备好一个小桶,告诉你一片广袤的天地,随手一指,挖宝去吧~说计算机话!好吧,题目是这样的:假设一个二维区域内藏有财宝,对于给定的此前寻到的财宝数量以及坐标(x,y),按照以下规则在该位置寻回财宝,并更新财宝数量。规则:如果x、y均为奇数,则获得原有三分之一数量的财宝,小数部分忽略不计如果x、y均为偶数,则获得5财宝如果x、y奇偶性不同,则不获得财宝注意:财宝数量、坐标x、坐标y都是int类型范围内的非负整数,在同一个位置可以重复寻找并获得财宝。函数接口定义:intgetTreasure(int*pBucket,intx,inty);其中,整型参数x、y表示坐标,指针型参数pBucket指向财宝计数的整型变量,函数根据x、y和此前的财宝数目,判断新获取的财宝并修改相应数值。返回类型为int,如果获得财宝,返回1;未获得财宝,返回0。裁判测试程序样例:#includestdio.hintgetTreasure(int*pBucket,intx,inty);intmain(){intbucket,total;bucket=total=0;scanf(%d,&total);for(inti=0;itotal;i++){intx,y;x=y=0;scanf(%d%d,&x,&y);intflag=getTreasure(&bucket,x,y);printf([%d]:%d\n,flag,bucket);}}/**你的代码将被嵌到这个位置(当然,会删除此前和此后一行的注释)**/输入样例:32612099输出样例:[1]:5[0]:5[1]:6intgetTreasure(int*pBucket,intx,inty){if(x%2==0){if(y%2==0){*pBucket=*pBucket+5;return(1);}elsereturn(0);}else{if(y%2!=0){*pBucket=*pBucket+*pBucket/3;return(1);}elsereturn(0);}}4-3递增的整数序列链表的插入(15分)本题要求实现一个函数,在递增的整数序列链表(带头结点)中插入一个新整数,并保持该序列的有序性。函数接口定义:ListInsert(ListL,ElementTypeX);其中List结构定义如下:typedefstructNode*PtrToNode;structNode{ElementTypeData;/*存储结点数据*/PtrToNodeNext;/*指向下一个结点的指针*/};typedefPtrToNodeList;/*定义单链表类型*/L是给定的带头结点的单链表,其结点存储的数据是递增有序的;函数Insert要将X插入L,并保持该序列的有序性,返回插入后的链表头指针。裁判测试程序样例:#includestdio.h#includestdlib.htypedefintElementType;typedefstructNode*PtrToNode;structNode{ElementTypeData;PtrToNodeNext;};typedefPtrToNodeList;ListRead();/*细节在此不表*/voidPrint(ListL);/*细节在此不表*/ListInsert(ListL,ElementTypeX);intmain(){ListL;ElementTypeX;L=Read();scanf(%d,&X);L=Insert(L,X);Print(L);return0;}/*你的代码将被嵌在这里*/输入样例:5124563输出样例:123456ListInsert(ListL,ElementTypeX){Listpt1,pt2,pt;if(L-Next==NULL){pt=(List)malloc(sizeof(List));pt-Data=X;pt-Next=NULL;L-Next=pt;returnL;}pt1=L;pt2=L-Next;while(pt2!=NULL&&X=pt2-Data){pt1=pt2;pt2=pt2-Next;}pt=(List)malloc(sizeof(List));pt-Data=X;pt-Next=pt2;pt1-Next=pt;returnL;}4-5函数实现字符串逆序(15分)本题要求实现一个字符串逆序的简单函数。函数接口定义:voidf(char*p);函数f对p指向的字符串进行逆序操作。要求函数f中不能定义任何数组,不能调用任何字符串处理函数。裁判测试程序样例:#includestdio.h#defineMAXS20voidf(char*p);voidReadString(char*s);/*由裁判实现,略去不表*/intmain(){chars[MAXS];ReadString(s);f(s);printf(%s\n,s);return0;}/*你的代码将被嵌在这里*/输入样例:HelloWorld!输出样例:!dlroWolleHvoidf(char*p){//p指向字符串头部char*s=p;//q指向字符串尾部char*q=s;while(*q)q++;q--;//交换并移动指针,直到p和q交叉while(qs){chart=*s;*s++=*q;*q--=t;}returnp;}4-6长整数转化成16进制字符串(15分)本题要求实现一个将长整数转化成16进制字符串的简单函数。函数接口定义:voidf(longintx,char*p);其中x是待转化的十进制长整数,p指向某个字符数组的首元素。函数f的功能是把转换所得的16进制字符串写入p所指向的数组。16进制的A~F为大写字母。裁判测试程序样例:#includestdio.h#defineMAXN10voidf(longintx,char*p);intmain(){longintx;chars[MAXN]=;scanf(%ld,&x);f(x,s);printf(%s\n,s);return0;}/*你的代码将被嵌在这里*/输入样例1:123456789输出样例1:75BCD15输入样例2:-125输出样例2:-7Dvoidf(longintx,char*p){charq;staticinti=0,j=0;if(x0){x=-x;*p='-';p++;}q=x%16;if(q10)q=('0'+q);elseq=('A'+q-10);x=x/16;j++;i=j;if(x0)f(x,p);*(p+(i-j))=q;j--;}4-7递归计算P函数(15分)本题要求实现下列函数P(n,x)P(n,x)的计算,其函数定义如下:函数接口定义:doubleP(intn,doublex);其中n是用户传入的非负整数,x是双精度浮点数。函数P返回P(n,x)P(n,x)函数的相应值。题目保证输入输出都在双精度范围内。裁判测试程序样例:#includestdio.hdoubleP(intn,doublex);intmain(){intn;doublex;scanf(%d%lf,&n,&x);printf(%.2f\n,P(n,x));return0;}/*你的代码将被嵌在这里*/输入样例:101.7输出样例:3.05doubleP(intn,doublex){if(n==0)return(1);elseif(n==1)return(x);elseif(n1)return(((2*n-1)*P(n-1,x)-(n-1)*P(n-2,x))/n);}4-8统计专业人数(15分)本题要求实现一个函数,统计学生学号链表中专业为计算机的学生人数。链表结点定义如下:structListNode{charcode[8];structListNode*next;};这里学生的学号共7位数字,其中第2、3位是专业编号。计算机专业的编号为02。函数接口定义:intcountcs(structListNode*head);其中head是用户传入的学生学号链表的头指针;函数countcs统计并返回head链表中专业为计算机的学生人数。裁判测试程序样例:#includestdio.h#includestdlib.h#includestring.hstructListNode{charcode[8];structListNode*next;};structListNode*createlist();/*裁判实现,细节不表*/intcountcs(structListNode*head);intmain(){structListNode*head;head=createlist();printf(%d\n,countcs(head));return0;}/*你的代码将被嵌在这里*/输入样例:102120220223108102134103091231102034021205#输出样例:3intcountcs(structListNode*head){inti=0;while(head!=NULL){if(head-code[1]=='0'&&head-code[2]=='2')i++;head=head-next;}return(i);}4-9输出月份英文名(15分)本题要求实现函数,可以返回一个给定月份的英文名称。函数接口定义:char*getmonth(intn);函数getmonth应返回存储了n对应的月份英文名称的字符串头指针。如果传入的参数n不是一个代表月份的数字,则返回空指针NULL。裁判测试程序样例:#includestdio.hchar*getmonth(intn);intmain(){intn;char*s;scanf(%d,&n);s=getmonth(n);if(s==NULL)printf(wronginput!\n);elseprintf(%s\n,s);return0;}/*你的代码将被嵌在这里*/输入样例1:5输出样例1:May输入样例2:15输出样例2:wronginput!char*getmonth(intn){
本文标题:c语言第二次作业pta
链接地址:https://www.777doc.com/doc-2909076 .html