《常见的C语言面试编程题》由会员分享,可在线阅读,更多相关《常见的C语言面试编程题(15页珍藏版)》请在金锄头文库上搜索。
1、(1) 求n的阶乘,这是一个比较简单的题目,有很多方法,但用递归方法是最简单的了:#include #include int main() long factorial(long n); long n; scanf(%ld,&n); printf(%ld,factorial(n); return 0;long factorial(long d)/求阶乘 long m; if(d0) printf(d的阶乘不存在!); else if(d=0|d=1) m=1; else m=d*factorial(d-1); return m;(2)从一个文件读取整数,对其进行排序,然后再将排序的结果输入到原
2、来文件当中,这是一个经常考的题目,即考你的文件操作,又考了排序,我在这里用的是选择排序#include #include int readtoarray(int *a,FILE *fp)/从文件里将整数读到数组里 int i=0; if(fp=NULL) exit(0); while(fgetc(fp)!=EOF) fscanf(fp,%d,&ai); printf(%dn,ai); i+; return i;void writetofile(int a,FILE *fp,int i)/将数组写到文件里去 int k = 0; if(fp=NULL) exit(0); while(ki) fp
3、rintf(fp,%c%d, ,ak+); void selectionSort(int *a,int i)/选择排序 int m,n; int tmp,min; for(m=0;m i-1;m+) min=m; for(n=m+1;n i;n+) if(anamin) min=n; tmp=am; am=amin; amin=tmp; int main() FILE* fp,* fpwrite; int i; int a10; fp=fopen(2.txt,r); i=readtoarray(a,fp); fclose(fp); selectionSort(a,i); fpwrite=fop
4、en(2.txt,w); writetofile(a, fpwrite,i); fclose(fpwrite); return 0;1,单向链表的插入,删除,逆序操作#include #include typedef struct Node int key; struct Node* next;* node;node newNode(int k) node n=(node)malloc(sizeof(node); n-key=k; n-next=NULL; return n;void printlist(node n) if(!n) printf(n is NULL listn); while
5、(n) printf(%d,n-key); printf( ); n=n-next; printf(n);node newList() int k; node head=(node)malloc(sizeof(node); scanf(%d,&k); if(k=0) head=NULL; return head; else node n=newNode(k); head=n; while(k) scanf(%d,&k); if(k!=0) node n1=newNode(k); n-next=n1; n=n-next; n-next=NULL; return head; node insert
6、Node(node n,int p,int k) node n1=newNode(k); node head=(node)malloc(sizeof(node); head=n; if(head=NULL) n1-next=head; return n1; else if(p=1) n1-next=head; head=n1; return head; else int i=2; while(i!=p&(n-next) n=n-next; i+; if(n-next=NULL) printf(the p cant be foundn); return head; else n1-next=n-
7、next; n-next=n1; return head; node deleteNode(node n,int k) node n1=(node)malloc(sizeof(node); node head=(node)malloc(sizeof(node); head=n; if(head=NULL) printf(list is NULLn); return head; else if(head-key=k) head=head-next; return head; while(n-key!=k&n-next) n1=n; n=n-next; if(n=NULL) printf(cant
8、 find the same value as k in this listn); return head; else n1-next=n-next; n=NULL; return head; node reverse(node n) node n110; node head=(node)malloc(sizeof(node); node n2=(node)malloc(sizeof(node); head=n; if(head=NULL) return head; else int i=0; while(head!=NULL) n2=head; head=head-next; n2-next
9、=NULL; n1i=n2; i+; head=n1i-1; for(int j=i-1;j0;j-) n1j-next=n1j-1; return head; int main() node n=newList(); printlist(n); /插入操作 int k,p; scanf(%d,%d,&p,&k); node nn=insertNode(n,p,k); printlist(nn); /删除操作 int q; scanf(%d,&q); node nd=deleteNode(nn,q); printlist(nd); /链表的倒置操作 node m=reverse(n); pri
10、ntlist(m); return 0;2,双向链表的插入删除操作#include #include typedef struct Node int key; struct Node* pre; struct Node* next;* node;node newNode(int i) node n=(node)malloc(sizeof(node); n-key=i; n-pre=NULL; n-next=NULL; return n;node newduplinklist() int i; scanf(%d,&i); node n; if(i=0) n=NULL; return n; n=n
11、ewNode(i); node head=n; int k=1; while(k!=0) scanf(%d,&k); if(k!=0) node n1=newNode(k); n-next=n1; n1-pre=n; n=n1; n-next=head; head-pre=n; return head;int sizeduplinklist(node n) if(n=NULL) return 0; node head=n; int i=1; while(head-next!=n) head=head-next; i+; return i;void print(node n) if(n=NULL) printf(此时链表为空!); else printf(输出链表:n); for(int i=0;ikey); n=n-next; printf(n); node insertNode(node n) int p,k; printf(插入位置p:n); scanf(