C面试题


Posted in 面试题 onOctober 08, 2015
1) 读文件file1.txt的内容(例如):
12
34
56
输出到file2.txt:
56
34
12
(逆序)
2)输出和为一个给定整数的所有组合
例如n=5
5=1+4;5=2+3(相加的数不能重复)
则输出
1,4;2,3。
第一题,注意可增长数组的应用.
#include
#include
int main(void)
{ int MAX = 10;
int *a = (int *)malloc(MAX * sizeof(int));
int *b;
FILE *fp1;
FILE *fp2;
fp1 = fopen(“a.txt”,”r”);
if(fp1 == NULL)
{printf(“error1″);
exit(-1);
}
fp2 = fopen(“b.txt”,”w”);
if(fp2 == NULL)
{printf(“error2″);
exit(-1);
}
int i = 0;
int j = 0;
while(fscanf(fp1,”%d”,&a[i]) != EOF)
{i++;
j++;
if(i >= MAX)
{
MAX = 2 * MAX;
b = (int*)realloc(a,MAX * sizeof(int));
if(b == NULL)
{printf(“error3″);
exit(-1);
}a = b;
}}
for(;–j >= 0;)
fprintf(fp2,”%d\n”,a[j]);
fclose(fp1);
fclose(fp2);
return 0;
}
第二题.
#include
int main(void)
{unsigned long int i,j,k;
printf(“please input the number\n”);
scanf(“%d”,&i);
if( i % 2 == 0)
j = i / 2;
else
j = i / 2 + 1;
printf(“The result is \n”);
for(k = 0; k printf(“%d = %d + %d\n”,i,k,i – k);
return 0;
}
#include
void main()
{unsigned long int a,i=1;
scanf(“%d”,&a);
if(a%2==0)
{ for(i=1;i printf(“%d”,a,a-i);
}
else
for(i=1;i printf(” %d, %d”,i,a-i);
}
兄弟,这样的题目若是做不出来实在是有些不应该, 给你一个递规反向输出字符串的例子,可谓是反序的经典例程.
void inverse(char *p)
{ if( *p = = ‘\0′ )
return;
inverse( p+1 );
printf( “%c”, *p );
}
int main(int argc, char *argv[])
{
inverse(“abc\0″);
return 0;
}
借签了楼上的“递规反向输出”
#include
void test(FILE *fread, FILE *fwrite)
{ char buf[1024] = {0};
if (!fgets(buf, sizeof(buf), fread))
return;
test( fread, fwrite );
fputs(buf, fwrite);
}
int main(int argc, char *argv[])
{ FILE *fr = NULL;
FILE *fw = NULL;
fr = fopen(“data”, “rb”);
fw = fopen(“dataout”, “wb”);
test(fr, fw);
fclose(fr);
fclose(fw);
return 0;
}
在对齐为4的情况下
struct BBB
{ long num;
char *name;
short int data;
char ha;
short ba[5];
}*p;
p=0×1000000;
p+0×200=____;
(Ulong)p+0×200=____;
(char*)p+0×200=____;
解答:假设在32位CPU上,
sizeof(long) = 4 bytes
sizeof(char *) = 4 bytes
sizeof(short int) = sizeof(short) = 2 bytes
sizeof(char) = 1 bytes
由于是4字节对齐,
sizeof(struct BBB) = sizeof(*p)
= 4 + 4 + 2 + 1 + 1/*补齐*/ + 2*5 + 2/*补齐*/ = 24 bytes (经Dev-C++验证)
p=0×1000000;
p+0×200=____;
= 0×1000000 + 0×200*24
(Ulong)p+0×200=____;
= 0×1000000 + 0×200
(char*)p+0×200=____;
= 0×1000000 + 0×200*4
你可以参考一下指针运算的细节
写一段程序,找出数组中第k大小的数,输出数所在的位置。例如{2,4,3,4,7}中,第一大的数是7,位置在4。第二大、第三大的数都是4,位置在1、3随便输出哪一个均可。函数接口为:int find_orderk(const int* narry,const int n,const int k)
要求算法复杂度不能是O(n^2)
谢谢!
可以先用快速排序进行排序,其中用另外一个进行地址查找
代码如下,在VC++6.0运行通过。给分吧^-^
//快速排序
#include
usingnamespacestd;
intPartition (int*L,intlow,int high)
{inttemp = L[low];
intpt = L[low];
while (low {while (low = pt)
–high;
L[low] = L[high];
while (low ++low;
L[low] = temp;
}
L[low] = temp;
returnlow;
}
voidQSort (int*L,intlow,int high)
{if (low {
intpl = Partition (L,low,high);
QSort (L,low,pl – 1);
QSort (L,pl + 1,high);
}}
intmain ()
{intnarry[100],addr[100];
intsum = 1,t;
cout cin >> t;
while (t != -1)
{narry[sum] = t;
addr[sum - 1] = t;
sum++;
cin >> t;
}
sum -= 1;
QSort (narry,1,sum);
for (int i = 1; i cout cout intk;
cout cin >> k;
intaa = 1;
intkk = 0;
for (;;)
{if (aa == k)
break;
if (narry[kk] != narry[kk + 1])
{aa += 1;
kk++;
}
}
cout cout for (i = 0;i {if (addr[i] == narry[sum - kk])
cout }return0;
}
1、找错
Void test1()
{
char string[10];
char* str1=”0123456789″;
strcpy(string, str1);// 溢出,应该包括一个存放’\0′的字符string[11]
}
Void test2()
{
char string[10], str1[10];
for(I=0; I {str1[i] =’a;
}
strcpy(string, str1);// I,i没有声明。
}
Void test3(char* str1)
{char string[10];
if(strlen(str1) {strcpy(string, str1);
}}
2. void g(int**);
int main()
{int line[10],i;
int *p=line; //p是地址的地址
for (i=0;i {*p=i;
g(&p);//数组对应的值加1
}
for(i=0;i printf(“%d\n”,line[i]);
return 0;
}
void g(int**p)
{ (**p)++;
(*p)++;// 无效
}
输出:
1
2
3
4
5
6
7
8
9
10
3. 写出程序运行结果
int sum(int a)
{auto int c=0;
static int b=3;
c+=1;
b+=2;
return(a+b+c);
}
void main()
{int I;
int a=2;
for(I=0;I {printf(“%d,”, sum(a));
}
}
// static会保存上次结果,记住这一点,剩下的自己写
输出:8,10,12,14,16,
4.
int func(int a)
{int b;
switch(a)
{case 1: 30;
case 2: 20;
case 3: 16;
default: 0
}
return b;
}
则func(1)=?
// b定义后就没有赋值。
5:
int a[3];
a[0]=0; a[1]=1; a[2]=2;
int *p, *q;
p=a;
q=&a[2];
则a[q-p]=a[2]
解释:指针一次移动一个int但计数为1
今天早上的面试题9道,比较难,向牛人请教,国内的一牛公司,坐落在北京北四环某大厦:
1、线形表a、b为两个有序升序的线形表,编写一程序,使两个有序线形表合并成一个有序升序线形表h;
答案在 请化大学 严锐敏《数据结构第二版》第二章例题,数据结构当中,这个叫做:两路归并排序
Linklist *unio(Linklist *p,Linklist *q){
linklist *R,*pa,*qa,*ra;
pa=p;
qa=q;
R=ra=p;
while(pa->next!=NULL&&qa->next!=NULL){
if(pa->data>qa->data){
ra->next=qa;
qa=qa->next;
}
else{ra->next=pa;
pa=pa->next;
}}
if(pa->next!=NULL)
ra->next=pa;
if(qa->next!=NULL)
ra->next==qa;
return R;
}
2、运用四色定理,为N个局域举行配色,颜色为1、2、3、4四种,另有数组adj[][N],如adj[i][j]=1则表示i区域与j区域相邻,数组color[N],如color[i]=1,表示i区域的颜色为1号颜色。
四色填充
3、用递归算法判断数组a[N]是否为一个递增数组。
递归的方法,记录当前最大的,并且判断当前的是否比这个还大,大则继续,否则返回false结束:
bool fun( int a[], int n )
{
if( n= =1 )
return true;
if( n= =2 )
return a[n-1] >= a[n-2];
return fun( a,n-1) && ( a[n-1] >= a[n-2] );
}
4、编写算法,从10亿个浮点数当中,选出其中最大的10000个。
1.给两个数组和他们的大小,还有一动态开辟的内存,求交集,把交集放到动态内存dongtai,并且返回交集个数
long jiaoji(long* a[],long b[],long* alength,long blength,long* dongtai[])
2.单连表的建立,把’a–’z’26个字母插入到连表中,并且倒叙,还要打印!
方法1:
typedef struct val
{ int date_1;
struct val *next;
}*p;
void main(void)
{ char c;
for(c=122;c>=97;c–)
{ p.date=c;
p=p->next;
}
p.next=NULL;
} }
方法2:
node *p = NULL;
node *q = NULL;
node *head = (node*)malloc(sizeof(node));
head->data = ‘ ‘;head->next=NULL;
node *first = (node*)malloc(sizeof(node));
first->data = ‘a’;first->next=NULL;head->next = first;
p = first;
int longth = ‘z’ – ‘b’;
int i=0;
while ( i {
node *temp = (node*)malloc(sizeof(node));
temp->data = ‘b’+i;temp->next=NULL;q=temp;
head->next = temp; temp->next=p;p=q;
i++;
}
print(head);
3.可怕的题目终于来了
象搜索的输入信息是一个字符串,统计300万输入信息中的最热门的前十条,我们每次输入的一个字符串为不超过255byte,内存使用只有1G,
请描述思想,写出算发(c语言),空间和时间复杂度,
4.国内的一些帖吧,如baidu,有几十万个主题,假设每一个主题都有上亿的跟帖子,怎么样设计这个系统速度最好,请描述思想,写出算发(c语言),空间和时间复杂度,
#include string.h
main(void)
{ char *src=”hello,world”;
char *dest=NULL;
dest=(char *)malloc(strlen(src));
int len=strlen(str);
char *d=dest;
char *s=src[len];
while(len–!=0)
d++=s–;
printf(“%s”,dest);
}
找出错误!!
#include “string.h”
#include “stdio.h”
#include “malloc.h”
main(void)
{
char *src=”hello,world”;
char *dest=NULL;
dest=(char *)malloc(sizeof(char)*(strlen(src)+1));
int len=strlen(src);
char *d=dest;
char *s=src+len-1;
while(len–!=0)
*d++=*s–;
*d=’\0′;
printf(“%s”,dest);
}
1. 简述一个Linux驱动程序的主要流程与功能。
2. 请列举一个软件中时间换空间或者空间换时间的例子。
void swap(int a,int b)
{
int c; c=a;a=b;b=a;
}
—>空优
void swap(int a,int b)
{
a=a+b;b=a-b;a=a-b;
}
6. 请问一下程序将输出什么结果?
char *RetMenory(void)
{ char p[] = “hellow world”;
return p;
}
void Test(void)
{ char *str = NULL;
str = RetMemory();
printf(str);
}
RetMenory执行完毕,p资源被回收,指向未知地址。返回地址,str的内容应是不可预测的, 打印的应该是str的地址
写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)
功能:
在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指内存。例如:”abcd12345ed125ss123456789″的首地址传给intputstr后,函数将返回
9,outputstr所指的值为123456789
int continumax(char *outputstr, char *inputstr)
{char *in = inputstr, *out = outputstr, *temp, *final;
int count = 0, maxlen = 0;
while( *in != ‘\0′ )
{if( *in > 47 && *in {for(temp = in; *in > 47 && *in count++;
}
else
in++;
if( maxlen {maxlen = count;
count = 0;
final = temp;
}}
for(int i = 0; i {*out = *final;
out++;
final++;
}
*out = ‘\0′;
return maxlen;
}

Tags in this post...

面试题 相关文章推荐
几道PHP的面试题
May 19 面试题
PHP开发工程师面试问题集锦
Nov 01 面试题
Java的for语句中break, continue和return的区别
Dec 19 面试题
一套Java笔试题
Aug 20 面试题
用友笔试题目
Oct 25 面试题
什么是Connection-oriented Protocol/Connectionless Protocol面向连接的协议/无连接协议
Sep 06 面试题
介绍一下ICMP(Internet Control Message Protocol)Internet控制信息协议
Nov 26 面试题
介绍一下grep命令的使用
Jun 12 面试题
linux面试题参考答案(11)
May 01 面试题
企业面试题试卷附带答案
Dec 20 面试题
Unix控制后台进程都有哪些进程
Sep 22 面试题
JAVA软件工程师测试题
Jul 25 面试题
东方通信股份有限公司VC面试题
Aug 27 #面试题
北承题目(C++)
May 16 #面试题
判断单链表中是否存在环
Jul 16 #面试题
我能否用void** 指针作为参数, 使函数按引用接受一般指针
Feb 16 #面试题
广州御银科技股份有限公司试卷(C++)
Nov 04 #面试题
不开辟用于交换数据的临时空间,如何完成字符串的逆序
Dec 02 #面试题
我有一个char * 型指针正巧指向一些int 型变量, 我想跳过它们。 为什么如下的代码((int *)p)++; 不行?
May 09 #面试题
You might like
PHP全概率运算函数(优化版) Webgame开发必备
2011/07/04 PHP
JavaScript与HTML结合的基本使用方法整理
2015/10/12 PHP
PHP内核学习教程之php opcode内核实现
2016/01/27 PHP
利用PHP自动生成印有用户信息的名片
2016/08/01 PHP
对联广告js flash激活
2006/10/19 Javascript
AJAX 网页保留浏览器前进后退等功能
2011/02/12 Javascript
SyntaxHighlighter语法高亮插件使用说明
2011/08/14 Javascript
原生js实现给指定元素的后面追加内容
2013/04/10 Javascript
jquery重复提交请求的原因浅析
2014/05/23 Javascript
Js操作DOM元素及获取浏览器高宽的简单方法
2016/09/08 Javascript
Bootstrap树形菜单插件TreeView.js使用方法详解
2016/11/01 Javascript
jquery,js简单实现类似Angular.js双向绑定
2017/01/13 Javascript
Nodejs调用WebService的示例代码
2017/09/29 NodeJs
jQuery图片加载失败替换默认图片方法汇总
2017/11/29 jQuery
jQuery 导航自动跟随滚动的实现代码
2018/05/30 jQuery
js实现ATM机存取款功能
2020/10/27 Javascript
vue中axios请求的封装实例代码
2019/03/23 Javascript
JavaScript的查询机制LHS和RHS解析
2019/08/16 Javascript
用javascript实现倒计时效果
2021/02/09 Javascript
[03:43]TI9战队采访——PSG.LGD
2019/08/22 DOTA
Djang中静态文件配置方法
2015/07/30 Python
python自动化生成IOS的图标
2018/11/13 Python
django做form表单的数据验证过程详解
2019/07/26 Python
Python实现AI换脸功能
2020/04/10 Python
python 追踪except信息方式
2020/04/25 Python
Python2.6版本pip安装步骤解析
2020/08/17 Python
html5 初试 indexedDB(推荐)
2016/07/21 HTML / CSS
详解移动端HTML5页面端去掉input输入框的白色背景和边框(兼容Android和ios)
2016/12/15 HTML / CSS
Sperry官网:帆船鞋创始品牌
2016/09/07 全球购物
Hotels.com香港酒店网:你的自由行酒店订房专家
2018/01/22 全球购物
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
家长会学生家长演讲稿
2013/12/29 职场文书
赵氏孤儿观后感
2015/06/09 职场文书
会议室使用管理制度
2015/08/06 职场文书
2016年庆“七一”主题党日活动总结
2016/04/05 职场文书
详细介绍Java中的CyclicBarrier
2022/04/13 Java/Android