c语言第三次作业pta_第1页
c语言第三次作业pta_第2页
c语言第三次作业pta_第3页
c语言第三次作业pta_第4页
c语言第三次作业pta_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、4-1使用递归函数计算1到n之和(10分)本题要求实现一个用递归计算1+2+3+n的和的简单函数。函数接口定义:int sum( int n );该函数对于传入的正整数n返回1+2+3+n的和;若n不是正整数则返回0。题目保证输入输出在长整型范围内。建议尝试写成递归函数。裁判测试程序样例:#include int sum( int n );int main() int n; scanf(%d, &n); printf (%dn, sum(n); return 0;/* 你的代码将被嵌在这里 */输入样例1:10输出样例1:55输入样例2:0输出样例2:0int sum(int n)int i,

2、sum=0;if(n0)for(i=1;i=n;i+)sum=sum+i;elsesum=0;return sum;5-1水仙花数(20分)水仙花数是指一个NN位正整数(Nge 3N3),它的每个位上的数字的NN次幂之和等于它本身。例如:153 = 13 + 53+ 33153=13+53+33。 本题要求编写程序,计算所有NN位水仙花数。输入格式:输入在一行中给出一个正整数NN(3le Nle 73N7)。输出格式:按递增顺序输出所有NN位水仙花数,每个数字占一行。输入样例:3输出样例:153370371407#include #include int main()int N,a,t;int

3、 i=1,s=0;scanf(%d,&N);a=pow(10,N-1);if(N=3&N=6)while(pow(10,N-1)=a) t=a;while(i=N)s=s+pow(t%10,N);t=t/10;i+;i=1;if(a=s)printf(%dn,a);a+;s=0;else if(N=7)/* 临时处理,否则超时 */ printf(1741725n); printf(4210818n); printf(9800817n); printf(9926315n);elseprintf(输入错误,请输入3-7之内的数n);return 0;5-2求分数序列前N项和(15分)本题要求编写

4、程序,计算序列 2/1+3/2+5/3+8/5+. 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。输入格式:输入在一行中给出一个正整数N。输出格式:在一行中输出部分和的值,精确到小数点后两位。题目保证计算结果不超过双精度范围。输入样例:20输出样例:32.66#includeint main()int i,N;double k,sum=0,t,top=2,bottom=1;scanf(%d,&N); for(i=0;iN;i+)k=top/bottom;sum=sum+k;t=top;top=t+bottom;bottom=t;printf(%.2

5、fn,sum);return 0;5-4单向链表4(10分)定义单向链表:输入若干个正整数(输入-1为结束标志),要求按输入数据的逆序并输出。输入输出示例:括号内为说明输入样例:1 2 3 4 5 6 7 -1输出样例:7 6 5 4 3 2 1#include #include struct node unsigned int num; /* 存放正整数 */ struct node *next; ; /*建立单向链表*/ struct node *createList(void) struct node *head = NULL, *p, *q, *t; int num; unsigned

6、 int size = sizeof(struct node); scanf(%d, &num); while(num != -1) t = (struct node *)malloc(size); /* 建立新结点 */ t-num = num; t-next = head; head = t; scanf(%d, &num); return head; /*输出单向链表*/ void printList(struct node *head) struct node *p = head; if(p != NULL) for(; p-next != NULL; p = p-next) prin

7、tf(%u , p-num); printf(%un, p-num); int main(void) struct node *head = NULL; head = createList(); printList(head); return 0; 5-5单向链表5(10分)定义单向链表struct Node并实现:输入若干个学生信息(包括学号、姓名和成绩),输入学号为0时输入结束,再输入一个成绩值,将成绩小于该值的学生信息删除,并将成绩大于等于该值的学生信息输出。输入输出示例:括号内为说明输入样例:1 zhang 782 wang 803 li 754 zhao 85080输出样例:2 wa

8、ng 804 zhao 85#include#include#includestruct stud_nodeint num;char name20;int score;struct stud_node *next; /*定义结构类型变量 stud_node为全局变量*/;struct stud_node *Creat_Stu_Doc();struct stud_node *DeleteDoc(struct stud_node *head,int min_score);void Ptrint_Stu_Doc(struct stud_node *head);int main()struct stu

9、d_node *head;int min_score;head=Creat_Stu_Doc();scanf(%d,&min_score);head=DeleteDoc(head,min_score);Ptrint_Stu_Doc(head);return 0;struct stud_node *Creat_Stu_Doc()struct stud_node *head,*tail, *p;int num, score;char name20;int size = sizeof(struct stud_node);head=tail=NULL;scanf(%d,&num);while(num !

10、= 0)scanf(%s%d,name,&score);p=(struct stud_node*)malloc(size);p-num=num;strcpy(p-name,name);p-score=score;p-next=NULL;if(head=NULL)head=p;elsetail-next=p;tail=p;scanf(%d,&num);return head;struct stud_node *DeleteDoc(struct stud_node *head,int min_score)struct stud_node*ptr1,*ptr2;while(head!=NULL&head-scorenext;free(ptr2);if(head=NULL)return NULL;ptr1=head;ptr2=head-next;while(ptr2!=NULL)if(ptr2-scorenext=ptr2-next;free(ptr2);elseptr1=ptr2;ptr2=ptr1-next; return head;void Ptrint_Stu_D

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论