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...

面试题 相关文章推荐
请用用Java代码写一个堆栈
Jan 26 面试题
异常和异常类的概念
Sep 12 面试题
C语言基础笔试题
Apr 27 面试题
strstr()的简单实现
Sep 26 面试题
北京天润融通.net面试题笔试题
Feb 20 面试题
C#公司笔试题
Mar 28 面试题
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
Apr 17 面试题
进程的查看和调度分别使用什么命令
Mar 25 面试题
亿企通软件测试面试题
Apr 10 面试题
How to spawning asynchronous work in J2EE
Aug 29 面试题
如何获得EntityManager
Feb 09 面试题
XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?
Jan 12 面试题
东方通信股份有限公司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图片加水印实现方法
2016/05/06 PHP
解决iframe的frameborder在chrome/ff/ie下的差异
2010/08/12 Javascript
jquery中.add()的使用分析
2013/04/26 Javascript
jQuery照片伸缩效果不影响其他元素的布局
2014/05/09 Javascript
JavaScript中for循环的使用详解
2015/06/03 Javascript
基于jquery实现放大镜效果
2015/08/17 Javascript
thinkphp实现无限分类(使用递归)
2015/12/19 Javascript
微信小程序 wxapp画布 canvas详细介绍
2016/10/31 Javascript
如何选择适合你的JavaScript框架
2017/11/20 Javascript
关于JavaScript语句后面的分号问题
2017/12/07 Javascript
详解如何在你的Vue项目配置vux
2018/06/04 Javascript
JavaScript 判断对象中是否有某属性的常用方法
2018/06/14 Javascript
在Vue.js中使用TypeScript的方法
2020/03/19 Javascript
[40:55]Liquid vs LGD 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
分析Python中设计模式之Decorator装饰器模式的要点
2016/03/02 Python
Python实现的文本简单可逆加密算法示例
2017/05/18 Python
python shell根据ip获取主机名代码示例
2017/11/25 Python
Win7下Python与Tensorflow-CPU版开发环境的安装与配置过程
2018/01/04 Python
基于Python 装饰器装饰类中的方法实例
2018/04/21 Python
python 通过logging写入日志到文件和控制台的实例
2018/04/28 Python
python操作cfg配置文件方式
2019/12/22 Python
详解Python实现进度条的4种方式
2020/01/15 Python
python3注册全局热键的实现
2020/03/22 Python
Python virtualenv虚拟环境实现过程解析
2020/04/18 Python
Python3.7安装pyaudio教程解析
2020/07/24 Python
html5用video标签流式加载的实现
2020/05/20 HTML / CSS
美国照明、家居装饰和家具购物网站:Bellacor
2017/09/20 全球购物
荷兰本土平价百货:HEMA
2017/10/23 全球购物
美国时尚假发购物网站:Wigsbuy
2019/04/06 全球购物
Vilebrequin美国官方网上商店:法国豪华泳装品牌
2020/02/22 全球购物
静态成员和非静态成员的区别
2012/05/12 面试题
专升本个人自我评价
2013/12/22 职场文书
电子商务专业毕业生求职信
2014/06/12 职场文书
办理信用卡收入证明范例
2014/09/13 职场文书
教师个人自我评价
2015/03/04 职场文书
Win11 Beta 预览版 22621.575 和 22622.575更新补丁KB5016694发布(附更新内容大全)
2022/08/14 数码科技