版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、53/53单链表逆序(考频:5次)不用输入就在函数生成函数生成数据如下:Head=malloc(sizeof(struct LNode);Head-next=NULL;For(i=5;i=0;i-)P=malloc(sizeof(struct LNode);P-val=i;P-next=head-next;Head-next=p;/头插法建立数据#include #includestruct LNodeint val;struct LNode *next;LNode5=1,NULL,2,NULL,3,NULL,4,NULL,5,NULL;/建立单链表void reverse(struct LN
2、ode *Head)struct LNode *p,*q;p=Head-next;Head-next=NULL;while(p)/注意这里,重点在这里!q=p-next;p-next=Head-next;Head-next=p;p=q;p=Head-next;while(p)printf(%-4d,p-val);p=p-next;printf(n);void main()int i,e,n;struct LNode *p,*Head,*q;Head=(struct LNode *)malloc(sizeof(struct LNode);p=Head;printf(输入建立单链表所需的整数个数:
3、);scanf(%d,&n);printf(输入%d个数据,以回车键隔开:n,n);for(i=0;ival=e;p-next=q;p=q;p-next=NULL;/至关重要的一步!p=Head-next;printf(建立单链表的结果如下n);while(p)printf(%-4d,p-val);p=p-next;printf(n);/*for(i=0;i5;i+)printf(%-7d,LNodei.val);printf(n);*/printf(单链表逆序结果如下:n);reverse(Head);计算1-x+x2/2!-x3/3!+.+xn/n!,x是单浮点数,n是整数(考频:3次)#
4、include void main()int j,n,flag=-1;float x,sum1=1,sum2=1,sum=1;printf(请输入求和用到的x和n,用英文逗号隔开n);scanf(%f,%d,&x,&n);if(n=0)/等于和赋值弄错了!printf(求和的值为1.0n);return;for(j=1;j=n;j+)sum1*=x;sum2*=j;sum+=flag*(sum1/sum2);flag=-flag;printf(求和的值=%fnn,sum);数质因数分解(考频:2次)#include#define N 20int isPrime(int n)int i=2;wh
5、ile(n%i!=0)i+;if(i=n)return 1;elsereturn 0;void main()int num,i,aN,j=-1;printf(请输入需要分解的正整数:n);scanf(%d,&num);printf(%d=,num);if(num=4)for(i=2;i1)a+j=num;for(i=0;i=j;i+)printf(%d,ai);if(ij)printf(*);printf(n);字符串逆序,不申请新的数组空间#include #include #define N 100void reverse(char str)int len,i;char temp;len=
6、strlen(str);for(i=0;i(len/2);i+)/次数这里出错,相当于没有交换temp=stri;stri=strlen-i-1;strlen-i-1=temp;/stri=0;结束符一直在void main()charstrN,*res;printf(请输入字符串:n);scanf(%s,str);reverse(str);printf(逆序的结果如下:n%sn,str);5、file1的容全部复制到file2中,且在file2的每一行都要加上行号,最后返回file1中的字符个数。#include #include /*void main()FILE *fp1,*fp2;fp
7、1=fopen(c:1.txt,r);/重要,不存在不会创建新文件!if(fp1!=NULL)printf(成功打开n);*/*#define MAX 1000void main()FILE *fp1,*fp2;char c=n;fp1=fopen(1.txt,r);fp2=fopen(2.txt,w);while(!feof(fp1)char tempMAX;fgets(temp,MAX,fp1);/每次都读到换行符结束,换行符算一位,字符串最后面一定是0,有换行符则加在0前面,n=10=换行符fputs(temp,fp2);fclose(fp1);fclose(fp2);*/void ma
8、in()FILE *fp1,*fp2;char temp;int counts=0,row=1;fp1=fopen(file1.txt,r);fp2=fopen(file2.txt,w+);while(!feof(fp1)temp=fgetc(fp1);if(temp!=32&temp!=n&temp!=EOF)/32代表,10代表n+counts;if(temp!=n)fputc(temp,fp2);elsefprintf(fp2,行号为:%d,row+);fprintf(fp2,n);fprintf(fp2,行号为:%d,row);fclose(fp1);fclose(fp2);print
9、f(file1.doc文件中的字符总数为:%dn,counts);分数四则运算#includelong gcd(long m,long n)while(n)long t=m%n;m=n;n=t;return m;void count(char flag,long up1,long up2,long down1,long down2)long t;switch(flag)case +:up1=up1*down2+up2*down1;down1=down1*down2;break;case -:up1=up1*down2-up2*down1;down1=down1*down2;break;case
10、 *:up1=up1*up2;down1=down1*down2;break;case /:up1=up1*down2;down2=down1*up2;break;t=gcd(up1,down1);if(up1=down1)printf(1n);elseprintf(%d/%dn,up1/t,down1/t);int main()long up1,up2,down1,down2;char flag;printf(请输入两个正分数n);while(scanf(%ld/%ld%c%ld/%ld,&up1,&down1,&flag,&up2,&down2)count(flag,up1,up2,dow
11、n1,down2);return 0;7、编写一个函数,使之能完成以下功能:利用递归方法找出一个数组中的最大值和最小值,要求递归调用函数的格式如下:MinMaxValue(arr,n,&max,&min),其中arr是给定的数组,n是数组的个数,max、min分别是最大值和最小值。#include stdio.h#define N 10void MinMaxValue(int arr,int n,int *max,int *min)if(n=0) if(*maxarrn) *min=arrn;MinMaxValue(arr,n-1,max,min); int main()int max=-32
12、768,min=32767;int a=1,54,23,65,87,12,54,87,98,233;MinMaxValue(a,N-1,&max,&min);printf(Max=%d,Min=%dn,max,min);return 0;8、编写一个完整的程序,使之能完成以下功能:一段名为file.c的程序,该程序中含有括号,现要检查程序中的括号是否配对,提示:利用堆栈实现。(15分)#include #define Stack char#define Max 999int judge(char p)int len=strlen(p);int top=-1,i;Stack sMax;for(i
13、=0;ilen;i+)switch(pi)case (:case :case :s+top=pi;/只要是左括号就放进去break;case ):if(stop=()top-;else return 0;break;case :if(stop=)top-;else return 0;break;case :if(stop=)top-;else return 0;break;if(top=-1)return 1;elsereturn 0;void main()char pMax;FILE * fin;if(!(fin=fopen(file.txt,r)printf(failed);while(!
14、feof(fin)fscanf(fin,%s,p);printf(%dn,judge(p);fclose(fin);统计字符串中的数字字符次数,字符串仅由数字字符构成#includevoid main()char temp50;char *str;int i,counts10=0;printf(请输入长度不超过50的字符串(只含有数字字符):n);str=temp;scanf(%s,str);for(i=0;i50;i+)countsstri-0+;for(i=0;i10;i+)printf(数字%d出现的次数%dn,i,countsi);利用结构数组和指向结构的指针,输出学生最低、最高成绩以
15、与相应的学号(若有相同的分数,要输出多个学号)#include #define N 10struct studentint num;int score;student_info100,*pS;void main()inti,max,min;printf(请输入学生学号和成绩,以逗号进行隔开n);for(i=0;iN;i+)scanf(%d,%d,&(student_infoi.num),&(student_infoi.score);max=min=student_info0.score;pS=student_info+1;for(i=1;iscoremax)max=pS-score;if(pS
16、-scorescore;/printf(最高分为%d,最低分为%dn,max,min);pS=student_info;for(i=0;iscore=max)/又把等号弄错了printf(最高分为%d,学号为%dn,pS-score,pS-num);pS=student_info;for(i=0;iscore=min)printf(最低分为%d,学号为%dn,pS-score,pS-num);删除输入的字符串中的大小写字母和数字,并统计有重复的字符与其重复次数#include #include struct charInfochar val;int count;strInfo100;int d
17、elChar(char * str,char c)int i=0,count=0;/len=strlen(str);不算结束符while(stri!=0)if(stri=c)memcpy(&stri,&stri+1,strlen(&stri+1)+1);+count;else+i;return count;void main()char * str,temp1000;int i;str=temp;for(i=0;i10;i+)strInfoi.val=0+i;strInfoi.count=0;for(i=0;i26;i+)strInfoi+10.val=A+i;strInfoi.count=0
18、;for(i=0;i26;i+)strInfoi+36.val=a+i;strInfoi.count=0;scanf(%s,str);/str本来就是地址for(i=0;i62;i+)strInfoi.count=delChar(str,strInfoi.val);printf(nnresult=%snnn,str);for(i=0;i62;i+)printf(%c出现次数%dn,strInfoi.val,strInfoi.count);printf(nn);小括号匹配#include #define MAX 100typedef int BOOL;/注意这个分号,bool是c+独有的#def
19、ine true 1#define false 0BOOL IsPair(FILE *fp)charSTACKMAX,temp;inttop=-1;while(!feof(fp)temp=fgetc(fp);if(temp=()STACK+top=temp;if(temp=)if(STACKtop=()-top;elsereturnfalse;if(top=-1)return true;elsereturn false;voidmain()FILE*fp;fp=fopen(file.txt,r);if(IsPair(fp)printf(配对成功!n);elseprintf(配对失败!n);生日
20、大小比较#include int cmpBirth(char *st1,char *st2)int i;for(i=0;i0)return 1;else return 0;void main()char str120,str220;char *st1,*st2;printf(请输入要进行对比的两个,以回车键进行隔开n);scanf(%s,str1);scanf(%s,str2);if(cmpBirth(str1+6,str2+6)printf(第二个人年龄更大一些n);elseprintf(第一个人年龄更大一些n);简洁版答案int isbothsame(charstr119, charstr
21、219)int low = 6, hight = 13;while (lowhight & str1low = str2low)low+;returnstr1low - str2low;移动链表最大结点至尾部#include #include struct LNodeint data;struct LNode * next;struct LNode * CreateLinklist()struct LNode *p,*Head,*q;intn,i;Head=(struct LNode *)malloc(sizeof(struct LNode);Head-next=NULL;printf(请输入
22、链表结点个数n);scanf(%d,&n);q=Head;printf(输入数据n);for(i=0;idata);q-next=p;q=p;q-next=NULL;printf(输入的链表如下所示n);p=Head-next;while(p)printf(%-4d,p-data);p=p-next;return Head;void LNodeFind(struct LNode * Linklist)struct LNode *p=Linklist-next,*q,*r;intmax=p-data,counts=0,flag=1;p=p-next;while(p)if(p-data=max)m
23、ax=p-data;+counts;p=p-next;while(counts)p=Linklist-next;q=Linklist;flag=1;/利用flag控制不再寻找最大值结点-counts;while(p)if(p-next=NULL)p-next=r;p=r;p-next=NULL;else if(p-data=max&flag)r=p;q-next=p-next;flag=0;q=p;p=p-next;void LNodeFind_1(struct LNode *Head)/first one outstruct LNode *p,*q,*r;p=q=Head;while(p-n
24、ext!=NULL)if(q-next-datanext-data)q=p;p=p-next;if(q-next!=p)r=q-next;q-next=r-next;p-next=r;p=r;p-next=NULL;void main()struct LNode *Head,*p;Head=CreateLinklist();/LNodeFind(Head);LNodeFind_1(Head);printf(n移动后的结果为n);p=Head-next;while(p)printf(%-4d,p-data);p=p-next;printf(n);简洁版本/好方法,多学习一下void movema
25、x(node *L)node *p = L-next, *pre = L, *max = p;while (p)if (p-datamax-data)max = p;pre = p;p = p-next;int temp = pre-data;pre-data = max-data;max-data = temp;/交换结点的数值就可以了,没必要交换结点15、编写一个函数,把整数序列分成两个部分,使得左边部分都不大于右边部分,不需要排序。 ( 考察的是快速排序的部分)#include void partition(int A,int n)int pivot=A0;int low=0,high=
26、n-1;while(low!=high)while(low=pivot)-high;Alow=Ahigh;while(lowhigh&Alow=pivot)+low;Ahigh=Alow;Alow=pivot;void main()int i,A5=10,1,9,7,8;partition(A,5);for(i=0;inext, *pre=L;node *min=p, *minpre=L;while(p)if(p-data data)min = p;minpre = pre;pre = p;p = p-next;minpre-next = min-next;free(min);17、有两个整数
27、数组A和B,它们分别有m、n个整数。并且都是按非递减序列,现将B数组插入A数组中,使得A数组中各元素不大于B数组中各元素,且还是非递减序列。#include int ArrayOrder(int a,int b,int m,int n)int i,j;for(i=0;im&ibi)ai=bi;if(mn)for(i=m;in;i+)ai=bi;return mn?n:m;void main()int a30,b30;int i,m,n,len;printf(请输入两个数组分别的个数,以空格隔开n);scanf(%d %d,&m,&n);printf(第一个数组输入:n);for(i = 0;i
28、 m;i +)scanf(%d,&ai);printf(第二个数组输入:n);for(i = 0;i n;i +)scanf(%d,&bi);len=ArrayOrder(a,b,m,n);for(i=0;ilen;i+)printf(%-4d,ai);printf(n);for(i=0;in;i+)printf(%-4d,bi);printf(n);18、两个递增有序整数数列链表La和Lb,将他们合并后,变成一个新的链表,要求该链表递减排序。(结点node由整型data和节点指针next构成)#include #include #define N 5struct Nodeint data;s
29、truct Node *next;struct Node * CreateLinklist()struct Node *p,*Head,*q;int i,temp;Head=(struct Node *)malloc(sizeof(struct Node);q=Head;printf(建立单链表,输入%d个数据:n,N);for(i=0;idata=temp;q-next=p;q=p;q-next=NULL;return Head;struct Node * ReverseLinklist(struct Node * Head)struct Node *p,*q;p=Head-next;Hea
30、d-next=NULL;while(p)q=p-next;p-next=Head-next;Head-next=p;p=q;return Head;struct Node * MergeList(struct Node *list1,struct Node *list2)struct Node * list3,*r,*la=list1-next,*lb=list2-next;list3=(struct Node*)malloc(sizeof(struct Node);r=list3;if(la-datadata)r-next=la;r=la;la=la-next;elser-next=lb;r
31、=lb;lb=lb-next;while(la&lb)if(la-datadata)r-next=la;r=la;la=la-next;elser-next=lb;r=lb;lb=lb-next;if(la)r-next=la;elser-next=lb;free(list1);free(list2);return list3;void main()struct Node *h1,*h2,*h3,*p;h1=CreateLinklist();h2=CreateLinklist();h3=MergeList(h1,h2);p=ReverseLinklist(h3);p=h3-next;while
32、(p)printf(%-4d,p-data);p=p-next;printf(n);19、对多个字符串进行字典排序void Sort(char *parr,int n)int i, j;char *str1, *str2;for(i=0; in-1; i+)for(j=i+1; j0)char *temp = parri;parri = parrj;parrj = temp; 有两字符数组s和t,求t在s中出现第一次的开始位置,如果没有则输出“No”,有则输出开始位置。int start(char s,char t)int s_length = strlen(s);int i;char *st
33、r1, *str2;for(i=0; is_length; i+)str1 = s+i;str2 = t;while(*str1 & *str2 & *str1=*str2)str1+,str2+;if(*str1-*str2 = *str1)return i;printf(NO!n);return -1; 21、编程题,将给定字符串例如”aaa111bbb222#”中的数字全部提取出来,放到给定的数组中。字符串以#结尾。函数形式为void int_find(int arr, char *pc);溢出以-1作为标志。#include void int_find(int arr,char *pc
34、)char *p=pc;int i=0;while(*p!=#)if(*p=0&*p=9)arri+=*p-0;p+;arri=-1;void main()int Num100,i=0;char *str=uestc2015jsj123#;int_find(Num,str);while(Numi!=-1)printf(%-4d,Numi);i+;printf(n);22、编程题,随机输入最多100个整数和浮点数,将整数按从大到小排列,浮点数按从小到大排列(浮点数排序可省略),并输出。如:输入10 12.3 12 5 52.1 3.65 88.6 1.0 输出:12 10 5 1.0 3.65
35、12.3 52.1 88.6。#include void Intsort(int Num100,int n)int i,j,temp;for(i=0;in-1;i+)for(j=i+1;jn;j+)if(NumiNumj)temp=Numi;Numi=Numj;Numj=temp;for(i=0;i0;i-)for(j=0;ji;j+)if(Numj+1Numj)temp=Numj;Numj=Numj+1;Numj+1=temp;for(i=0;in;i+)printf(%-7.2f,Numi);printf(n);void main()int NumI100,n;float NumF100,temp;inti,iNum=0,fNum=0;printf(要输入的个数n);scanf(%d,&n);for(i=0;in;i+)scanf(%f,&temp);if(temp=(int)temp)NumIiNum+=temp;elseNumFfNum+=temp;Intsort(NumI,iNum);Floatsort(NumF,fNum);判断整数和浮点数完美方法#include /strstr()#include /atof,atoiwhile (m
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论