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

面试题 相关文章推荐
请说出你所知道的线程同步的方法
Apr 19 面试题
在Java开发中如何选择使用哪种集合类
Aug 09 面试题
某公司Java工程师面试题笔试题
Mar 27 面试题
递归实现回文判断(如:abcdedbca就是回文,判断一个面试者对递归理解的简单程序)
Apr 28 面试题
威盛公司软件C++工程师笔试题面试题
Jul 16 面试题
编写函数,将一个3*3矩阵转置
Oct 09 面试题
北京天润融通.net面试题笔试题
Feb 20 面试题
什么是属性访问器
Oct 26 面试题
Linux内核的同步机制是什么?主要有哪几种内核锁
Jul 11 面试题
英智兴达软件测试笔试题
Oct 12 面试题
软件生产职位结构化面试主要考察要素及面试题库
Jun 12 面试题
JSF界面控制层技术
Jun 17 面试题
东方通信股份有限公司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
Body是什么,该怎么喝出咖啡里的口感
2021/03/03 咖啡文化
php smarty 二级分类代码和模版循环例子
2011/06/01 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
jQuery用unbind方法去掉hover事件及其他方法介绍
2013/03/18 Javascript
随窗体滑动的小插件sticky源码
2013/06/21 Javascript
css与javascript跨浏览器兼容性总结
2014/09/15 Javascript
运用jQuery定时器的原理实现banner图片切换
2014/10/22 Javascript
jQuery使用height()获取高度需要注意的地方
2014/12/13 Javascript
nodejs加密Crypto的实例代码
2016/07/07 NodeJs
Bootstrap 布局组件(全)
2016/07/18 Javascript
关于iframe跨域POST提交的方法示例
2017/01/15 Javascript
关于vue中的ajax请求和axios包问题
2018/04/19 Javascript
webpack4之SplitChunksPlugin使用指南
2018/06/12 Javascript
微信小程序实现单列下拉菜单效果
2019/04/25 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
2019/08/27 Javascript
Openlayers学习之加载鹰眼控件
2020/09/28 Javascript
js实现简单的倒计时
2021/01/28 Javascript
python采用getopt解析命令行输入参数实例
2014/09/30 Python
Python实现LRU算法的2种方法
2015/06/24 Python
python安装教程 Pycharm安装详细教程
2017/05/02 Python
Python编程实现的简单神经网络算法示例
2018/01/26 Python
Python测试网络连通性示例【基于ping】
2018/08/03 Python
python 二维数组90度旋转的方法
2019/01/28 Python
Python面向对象实现一个对象调用另一个对象操作示例
2019/04/08 Python
Django shell调试models输出的SQL语句方法
2019/08/29 Python
简单了解为什么python函数后有多个括号
2019/12/19 Python
美国首屈一指的礼品篮供应商:GiftTree
2018/01/06 全球购物
台湾母婴用品限时团购:妈咪爱
2018/08/03 全球购物
幼儿园六一儿童节文艺汇演主持词
2014/03/21 职场文书
小学社团活动总结
2014/06/27 职场文书
大学生自我评价200字(4篇)
2014/09/17 职场文书
工程承包协议书范本
2014/09/29 职场文书
2014年销售助理工作总结
2014/12/01 职场文书
精神文明建设汇报材料
2014/12/24 职场文书
MySQL对数据表已有表进行分区表的实现
2021/11/01 MySQL
win10清理dns缓存
2022/04/19 数码科技