`
sakakokiya
  • 浏览: 507416 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C面试题(编程)

阅读更多
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 <stdio.h>
#include <stdlib.h>
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 <stdio.h>
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 < j; k++)
printf(”%d = %d + %d\n”,i,k,i - k);
return 0;
}
#include <stdio.h>
void main()
{unsigned long int a,i=1;
scanf(”%d”,&a);
if(a%2==0)
{     for(i=1;i<a/2;i++)
printf(”%d”,a,a-i);
}
else
for(i=1;i<=a/2;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 <stdio.h>
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<iostream>
usingnamespacestd;
intPartition (int*L,intlow,int high)
{inttemp = L[low];
intpt = L[low];
while (low < high)
{while (low < high && L[high] >= pt)
-high;
L[low] = L[high];
while (low < high && L[low] <= pt)
++low;
L[low] = temp;
}
L[low] = temp;
returnlow;
}
voidQSort (int*L,intlow,int high)
{if (low < high)
{
intpl = Partition (L,low,high);
QSort (L,low,pl - 1);
QSort (L,pl + 1,high);
}}
intmain ()
{intnarry[100],addr[100];
intsum = 1,t;
cout << “Input number:” << endl;
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 <= sum;i++)
cout << narry[i] << ‘\t';
cout << endl;
intk;
cout << “Please input place you want:” << endl;
cin >> k;
intaa = 1;
intkk = 0;
for (;;)
{if (aa == k)
break;
if (narry[kk] != narry[kk + 1])
{aa += 1;
kk++;
}
}
cout << “The NO.” << k << “number is:” << narry[sum - kk] << endl;
cout << “And it's place is:” ;
for (i = 0;i < sum;i++)
{if (addr[i] == narry[sum - kk])
cout << i << ‘\t';
}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<10;I++)
{str1[i] ='a';
}
strcpy(string, str1);// I,i没有声明。
}
Void test3(char* str1)
{char string[10];
if(strlen(str1)<=10)// 改成<10,字符溢出,将strlen改为sizeof也可以
{strcpy(string, str1);
}}
2. void g(int**);
int main()
{int line[10],i;
int *p=line; //p是地址的地址
for (i=0;i<10;i++)
{*p=i;
g(&p);//数组对应的值加1
}
for(i=0;i<10;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<5;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<=longth )
{
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 < 58 )
{for(temp = in; *in > 47 && *in < 58 ; in++ )
count++;
}
else
in++;
if( maxlen < count )
{maxlen = count;
count = 0;
final = temp;
}}
for(int i = 0; i < maxlen; i++)
{*out = *final;
out++;
final++;
}
*out = ‘\0′;
return maxlen;
}
分享到:
评论

相关推荐

    嵌入式C语言面试题汇总(超经典).pdf

    我们在找嵌入式方面的工作时,让我们头疼的恐怕就是面试题了,因为我们摸不到企业的命题规律,也不知道该怎样去准备,今天将各大企业的面试题进行汇总,分享给大家,希望可以帮到各位小伙伴。加油哦!

    C语言面试100题(含答案)

    C语言面试100题(含答案)。 例题1: /* 下列给定程序的功能是:读入一个整数k(2=),打印它的所有质因子(即所有素数的因子)。例如,若输入整数2310,则应输出:2、3、5、7、11。 请改正程序中的错误,使程序能...

    嵌入式C语言面试题

    最全C语言面试题。包含给类C语言基础题、嵌入式C语言编程题,华为等各大企业C语言笔试题!

    linux c语言面试题

    【Linux C语言面试题】是针对C语言编程和Linux系统操作的面试准备资料,涵盖了从基础知识到高级概念的多个方面。这些题目旨在测试面试者对C语言的理解深度、编程技巧以及在Linux环境下解决问题的能力。以下是一些...

    嵌入式C语言面试题汇总

    嵌入式C语言面试题汇总 本文档总结了嵌入式C语言面试中的常见问题,包括基本概念、程序代码评价、编程题等。以下是本文档的详细知识点总结: 一、基本概念 1. 静态关键字的作用:静态关键字有三个明显的作用:在...

    C语言面试题集锦

    通过以上对C语言面试题集锦的解析,我们不仅可以系统地回顾和深化C语言的知识点,还能为即将到来的面试做好充分准备。面试不仅是对技术能力的考验,也是个人综合素质的体现,保持良好的心态,充分展现自己的实力和...

    华为C语言面试题(面试题)

    根据提供的信息,我们可以总结出以下关于“华为C语言面试题”的相关知识点: ### C语言基础知识 1. **数据类型**:在C语言中,需要掌握各种基本数据类型(如`int`、`float`、`char`等)及其用途。 2. **变量与常量...

    c语言面试题集合

    本资源“C语言面试题集合”汇集了最近各大IT公司的面试真题及历年来的经典题型,旨在帮助求职者更好地准备C语言相关的面试。 在C语言面试中,以下几个核心知识点通常会被频繁考查: 1. **基本语法**:包括变量定义...

    经典 C语言 面试题

    【C语言面试题详解】 C语言作为一门基础且强大的编程语言,在面试中常常会被用来考察候选人的编程功底。以下是一些经典的C语言面试题目及其相关的知识点解析: 1. **预处理器(Preprocessor)** - `#define` 用于...

    c语言面试题集(单片机)

    C语言面试题集针对单片机的考察涵盖了多个核心知识点,包括预处理器、死循环、数据声明、关键字Static、Const和Volatile、位操作、内存访问、中断、动态内存分配、Typedef以及一些复杂的语法。以下是对这些知识点的...

    C语言面试题大汇总之华为面试题.pdf

    以上总结了文件中所涉及的C语言知识点,这些内容对于准备C语言面试的人具有重要的参考价值,涵盖了面试中常见的考点和编程技巧。掌握这些知识点对于提高C语言编程能力以及通过华为等公司的面试都非常重要。

    C语言面试笔试题,经典题目

    文档包含C语言,简答(包含一些面试高概率问题)、程序分析题(包含编程中常见错误现象,内存越界,非法操作,段错误分析等)、编程题(30道编程题,涵盖了面试常见题型,以及C语言经典程序)。学习,检测,准备面试,都是...

    C语言面试题大汇总华为面试题

    【C语言面试题大汇总华为面试题】 C语言作为编程的基础,其面试题常常涉及到语法、内存管理、数据结构和程序设计等多个方面。以下是对题目中提到的一些知识点的详细解释: 1. **局部变量与全局变量**:局部变量在...

    C语言面试题

    本资料"500道C语言面试题"包含了全面的问题集,旨在帮助求职者准备面试,提升技能。 首先,面试题涵盖了C语言的基础知识,如变量、数据类型、运算符和表达式。这些是编程的基石,理解它们如何工作是编写任何程序的...

    华为经典C语言面试题......

    以下是对华为经典C语言面试题的一些详细解读,旨在帮助求职者更好地准备面试。 1. **指针与内存管理** - 指针的基本概念:理解指针的本质,即存储地址的变量,以及如何声明、初始化和操作指针。 - 动态内存分配:...

    C语言面试题大汇总之华为面试题及答案

    ### C语言面试题详解 #### 一、变量的存储区域 **知识点1:变量的存储区域** - **局部变量**:存在于**堆栈**中,生命周期仅限于函数调用期间。 - **全局变量**:存在于**静态区**中,整个程序运行期间一直存在。 ...

    Socket编程面试题

    Socket 编程面试题 TCP 和 UDP 的区别: 1. 连接方式:TCP 提供面向连接的传输,通信前需要建立连接(三次握手机制);UDP 提供无连接的传输,通信前不需要建立连接。 2. 可靠性:TCP 提供可靠的传输(有序、无...

Global site tag (gtag.js) - Google Analytics