安卓对c语言常见的面试题,常见C语言面试题<二>

常见C语言面试题之六:数组逆序

#include "stdafx.h"

#include "stdio.h"

#include "stdlib.h"

#include "string.h"

void foo1(char* a)

{

int len = strlen(a);

for(int i=0;i

{

a[len] =

a[i];

a[i] =

a[len-i-1];

a[len-i-1] =

a[len];

}

a[len]='/0';

}

void foo2(char* a)

{

int len = strlen(a);

for(int

i=0;i

{

char

temp;

temp =

a[i];

a[i]=

a[len-i-1];

a[len-i-1] =

temp;

}

}

void foo3(char* a)

{

int len = strlen(a);

for(int i=0;i

{

a[len-i-1]

^=a[i];

a[i] ^=

a[len-i-1];

a[len-i-1]

^=a[i];

}

}

int _tmain(int argc, _TCHAR* argv[])

{

char* a = "abcd";

char* b = "abcde";

char* c = "abcdef";

foo1(a);

foo2(b);

foo3(c);

printf("%s/n%s/n%s/n",a, b,

c);

}

常见C语言面试题之七:杨辉三角

int _tmain(int argc, _TCHAR* argv[])

{

int

i,j,a[10][10]; //i表示行,j表示列

for(i=0;i<10;i++) //首先将行列都赋值为0

for(j=0;j<10;j++)

a[i][j]=0;

for(i=0;i<10;i++) //将没一行的头尾赋值为1

{

a[i][0]=1;

a[i][i]=1;

}

常见C语言面试题之八:数组实现大数阶乘

#include "stdafx.h"

#include

using std::cout;

using std::cin;

using std::endl;

void factorial(int x){

int

re[1000],len=1,i,carry;

re[0]=1; //初始re[0]赋值1

for(int

mul=2;mul<=x;mul++){ //阶乘从2开始循环

for(i=0;i

carry=0; //进位值

for(i=0;i

re[i]+=carry;

carry=re[i]/10;

re[i]%=10;

}

while(carry>0){ //最高位进位

re[len++]=carry;

carry/=10;

}

}

for(i=len-1;i>=0;i--)

cout<

cout<

}

int _tmain(int argc, _TCHAR* argv[])

{

factorial(100);

return

0;

}

//从第二行开始除最后一个数与第一个数外,

//每个数都是其所在行的前一行同一列与前一列之和

for(i=2;i<10;i++) for(j=1;j

a[i][j]=a[i-1][j-1]+a[i-1][j]; printf("**************/n");

for(i=0;i<10;i++)

{

for(j=0;j

printf("]",a[i][j]);

printf("/n");

}

return

0;

}

//0: 1

//1: 1 1

//2: 1 2 1

//3: 1 3 3 1

//4: 1 4 6 4 1

//5: 1 5 10

10 5 1

//……

常见C语言面试题之九:链表逆序

#include "stdafx.h"

#include "stdio.h"

#include "stdlib.h"

typedef struct List

{

int data;

struct List *next;

}List;

List* list_Create(void)

{

List *head, *tail, *p;

int e;

head = (List*)malloc(sizeof(List));

tail = head;

printf("/nList Create, input Num(end of

0):");

scanf("%d",&e);

while(e)

{

p=(List*)malloc(sizeof(List));

p->data=e;

tail->next=p;

tail=p;

scanf("%d",&e);

}

tail->next = NULL;

return head;

}

List *list_reverse(List *head)

{

List *p,*q,*r;

p=head;

q=p->next;

while(q!=NULL)

{

r =

q->next;

q->next=p;

p=q;

q=r;

}

head->next = NULL;

head=p;

return head;

}

int _tmain(int argc, _TCHAR* argv[])

{

List *head,

*p;

int d;

head=list_Create();

printf("/n");

for(p=head->next;p!=NULL;p=p->next)

printf("--%d--",p->data);

head = list_reverse(head);

printf("/n");

for(p=head;p->next!=NULL;p=p->next)

printf("--%d--",p->data);

return 0;

}

常见C语言面试题之十:有序表合并

#include "stdafx.h"

#include "stdio.h"

#include "stdlib.h"

#include "malloc.h"

typedef struct LNode

{

int data;

LNode* next;

}LNode, *LinkList;

LinkList La, Lb, Lc;

LNode* Create()

{

LinkList l, p, q;

int x;

l=NULL;

l=(LNode*)malloc(sizeof(LNode));

if(l==NULL) exit(-1); l->next =

NULL; scanf("%d", &x);

while(x!=9999)

{

p=(LNode*)malloc(sizeof(LNode));

p->data = x;

if((l->next)==NULL)

{

l->next = p;

q=p;

}

else

{

q->next = p;

q=p;

}

scanf("%d",&x);

}

p->next = NULL;

return (l); }

void print_LinkList(LinkList l)

{

LinkList p;

p=l;

printf("---");

while(p->next!=NULL)

{

p =

p->next;

printf("]",p->data);

}

printf("/n/n");

}

LinkList MergeList(LinkList La, LinkList Lb)

{

LinkList pa, pb, pc;

pa = La->next;

pb = Lb->next;

Lc = pc = La;

while(pa &&

pb)

{

if(pa->data<=pb->data)

{

pc->next = pa;

pc = pa;

pa = pa->next;

}

else

{

pc->next = pb;

pc=pb;

pb = pb->next;

} }

pc->next = pa?pa:pb;

free(Lb);

return(Lc);

}

int _tmain(int argc, _TCHAR* argv[])

{

La =

Create();

Lb = Create();

MergeList(La,Lb);

print_LinkList(Lc);

return 0;

}

常见C语言面试题之十一:约瑟夫环

#include "stdafx.h"

#include

#include

typedef struct node

{

int data;

struct node* next;

}LNode;

LNode* Create(int n, int k) //创建循环链表

{

int start=k-1;

if(start==0) start = n;

LNode *s, *p, *L=NULL, *t;

while(n!=0)

{

s =

(LNode*)malloc(sizeof(LNode));

if(L==NULL)

p=s;

if(n==start)

t=s;

s->data = n;

s->next = L;

L=s;

n--;

}

p->next = L;

return t;

}

LNode* GetNode(LNode *p)

{

LNode *q;

for(q=p;q->next!=p;q=q->next);

q->next =

p->next;

free (p);

return (q);

}

int Print(LNode *p, int m)

{

int i;

printf("出队编号:/n");

while(p->next!=p)

{

for(i=1;i<=m;i++)

{

p=p->next;

}

printf("=",p->data);

p =

GetNode(p);

}

printf("=/n", p->data);

return 0;

}

int _tmain(int argc, _TCHAR* argv[])

{

LNode

*p;

int n,k,m;

do

{

printf("输入总人数:");

scanf("%d",&n);

}while(n<0);

do

{

printf("输入开始人的序号1~%d:",n);

scanf("%d",&k);

}while(k<=0||k>n);

do

{

printf("输入间隔数字:");

scanf("%d",&m);

}while(m<=0);

p=Create(n,k);

Print(p,m);

return 0;

}

华为的部分面试题

==========================

本节摘抄自“海边的卡夫卡”:

两道编程,一道是在一个串里面删除从i到j之间的一段,还有就是求一个数是否是对称数(付源码)。

循环 除10,商除10,余数乘10, 判断结果 int print_num(int num) { int over = 0; int quotient = 0; quotient = num; while(1) { over = over*10 + quotient ; quotient=quotient/10; if ( quotient == 0 ) break; } printf("num = /n",num); printf("over = /n",over);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值