C语言第一阶段测试题目汇总.doc_第1页
C语言第一阶段测试题目汇总.doc_第2页
C语言第一阶段测试题目汇总.doc_第3页
C语言第一阶段测试题目汇总.doc_第4页
C语言第一阶段测试题目汇总.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

千锋,中国领先的3G嵌入式培训专家C语言测试题目嵌入式Linux就业班内部教材 Page 28 of 28 北京千锋互联3G嵌入式学院版权所有1 约瑟夫问题(难度:3)32 生小免问题 难度:2 33 裴波那契数列 难度:234 水仙花数 难度:145 平面几何直线求解 难度:246 内存移动 难度347 统计字符串 难度:358 求和 难度:259 小球高度 难度:1610 人员查找 难度:2611 整数和与积 难度:3612 士兵与枪 难度:3713 价格求和 难度:1714 字符串替换 难度:3715 字符串查找 难度:3716 难度:1817 难度:2818 难度:3819 难度:2920 难度:1921 难度:21022 难度:21023 难度:51024 难度:41125 难度:31126 难度:21127 难度:21128 难度:21229 难度:51230 难度:51231 难度:51232 难度:41333 难度:21334 难度:31335 难度:31336 难度:31437 难度:11438 难度:21439 难度:21440 难度:41541 难度:41542 难度:21543 五户共井问题 难度:31544 难度:51645 难度:21646 EDF调度算法 难度:51647 难度:11748 难度:21849 typedef 难度:21850 难度:21951 atol 难度:21952 难度:21953 难度:21954 难度:22055 难度52056 难度:12057 难度:32158 难度:32159 难度:32160 难度:22161 求组合数 难度:42262 排列 难度:42263 内存复制 难度:32364 难度:32465 难度:32466 难度:42567 旋转矩阵 难度:52568 难度22569 难度:22670 难度:32671 难度:32672 难度:32673 搜索引擎去重问题:(baidu笔试题目)2773.1 任务1: 2873.2 任务2: 2874 网络爬虫处理(baidu笔试题目)2874.1 任务1:291 约瑟夫问题(难度:3)一伙强盗抓住了M个人,说你们只能有一个人活下来给我们带路。把他们排成一个圆圈依次编号1,2.M-1,M,从1开始依次数数,哪个人数到N,就把他拉出来杀掉。下个人从1开始重新数,直到杀得只剩一个为止。要求从键盘输入M和N值,打印出最后剩下的那个人的编号。例如:输入:3 2输出:32 生小免问题 难度:2 有一对兔子,每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问前N个月共有几对兔子?要求从键盘输入N,依次打印出前N个月兔子对数。例如:输入:2输出:3输入:3输出:4输入:4输出:63 裴波那契数列 难度:2A(n+2) = A(n+1) + A(n), A(0) = A(1) = 1, 求A(N)。要求从键盘输入N,打印出A(N)。例如:输入:0输出:1输入:2输出:24 水仙花数 难度:1打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个水仙花数,因为153=1的三次方5的三次方3的三次方。5 平面几何直线求解 难度:2已知平面直线上两点A(3,14)和B(8,39), 求直线上另外一点C(x,y)的纵坐标y。要求从键盘输入x值,打印出y值。例如:输入:10输出:496 内存移动 难度3实现一个my_memory_move的操作。char * my_memory_move(char *src, char *dest, unsigned int len)注意需要考虑如下情况srcdestlenlen图1 src和dest没有重叠srcdestlenlen图2 src和dest含有重叠destsrclenlen图3 src和dest含有重叠7 统计字符串 难度:3输入一行字符,最大长度为100,统计出其中有多少个字符串,不算标点。例如:输入:Hi, Welcome to saif!输出:48 求和 难度:2求s=a+aa+aaa+aaaa+aaaaa的值,其中a是一个数字,由键盘输入。例如:输入:1输出:123459 小球高度 难度:1一球从H米高度自由落下,每次落地后反跳回原高度的一半;再落下,直到它的弹起高度不足1米,计算之前走过了多少米?要求从键盘输入H值,打印出走过的米数。例如:输入:3输出:6.7510 人员查找 难度:2给定N个人的名字,年龄,身高,体重,请对身高170,体重150的人,按年龄由小到大打印出姓名,年龄,身高,体重信息。要求N和人员名字,年龄,身高和体重信息从键盘输入。例如:输入:3liubei 28 160 130guanyu 27 180 140zhangfei 25 175 160zhaoyun 23 178 135输出:zhaoyun 23 178 135guanyu 27 180 14011 整数和与积 难度:3三个正整数a,b,c和为20,求当它们分别是几时,乘积最大?12 士兵与枪 难度:3六名士兵,各自有一条枪。某天晚上出现紧急情况,慌乱之中每人都随机的取了一条枪,问有多少种情况,每人个拿的都不是自己的枪?13 价格求和 难度:1输入两个整数价钱,打印出其和。比如:输入:$123 $135输出:$25814 字符串替换 难度:3输入一行字符(长度小于100)和两个字符串,用第二个字符串替换每一个字符串。要求从键盘输入一行字符和两个字符串,打印出替换后的结果。例如:输入:Hello World!WorldSaif输出:Hello Saif!15 字符串查找 难度:3输入一行字符,找出其中长度最大的单词。要求从键盘输入一行字符,打印出其中长度最大的字符串。例如:输入:when i was young id listen to the radio waiting for my favorite songs输出:favorite16 难度:1某32位系统下, C+程序,请计算sizeof 的值(5分).char str = “/”char *p = str ;int n = 10;请计算sizeof (str ) = ?sizeof ( p ) = ?sizeof ( n ) = ?void Foo ( char str100)请计算sizeof( str ) = ?void *p = malloc( 100 );请计算sizeof ( p ) = ?17 难度:2写出判断ABCD四个表达式的是否正确, 若正确, 写出经过表达式中 a的值int a = 4;(A)a += (a+); (B) a += (+a) ;(C) (a+) += a;(D) (+a) += (a+);a = ?18 难度:3回答下面的问题(1).Void GetMemory(char *p, int num)*p = (char *)malloc(num);void Test(void)char *str = NULL;GetMemory(&str, 100);strcpy(str, hello);printf(str);请问运行Test 函数会有什么样的结果?答:输出“hello”(2). void Test(void)char *str = (char *) malloc(100);strcpy(str, “hello”);free(str);if(str != NULL)strcpy(str, “world”);printf(str);请问运行Test 函数会有什么样的结果?答:输出“world”(3). char *GetMemory(void)char p = hello world;return p;void Test(void)char *str = NULL;str = GetMemory();printf(str);19 难度:2已知strcat函数的原型是char *strcat (char *strDest, const char *strSrc);其中strDest 是目的字符串,strSrc 是源字符串,返回值是 strDest20 难度:1int i=10, j=10, k=3; k*=i+j; k最后的值是?6021 难度:2编写一个函数,时分秒,输出该时间的下一秒。如输入23时59分59秒,则输出0时0分0秒输入格式为 23:59:59输出格式为 0:0:0#include/该函数实现输入时间加1秒后输出!int main(void)unsigned int h,m,s,h1,m1,s1;printf(请输入时间,格式为:*:*:*n);scanf(%u:%u:%u,&h,&m,&s);if(h24|m=60|s=60)printf(输入时间不对!n);elses1=s+1;if(60=s1)s1=0;m1=m+1;if(60=m1)m1=0;h1=h+1;if(24=h1)h1=0;printf(%u:%u:%u的下一秒为:%u:%u:%un,h,m,s,h1,m1,s1);22 难度:2(1) char *p;(2) char *p;(3) int *p;(4) int *p;(5) double *p;(6) double *p;sizeof(p) 分别返回什么值23 难度:5编写一个人员管理系统,用来管理项目组内的工程师信息。每个工程师需要保存的信息包括:姓名,年龄,几年工作经验,待遇和级别(分为1,2,3,4,5级)功能1:启动时从文件读入保存的信息功能2:关闭时把当前的信息保存到文件功能3:用户可以增加一名工程师功能4:用户可以删除一名工程师功能5:用户可以按年龄搜索,比如输入26,把所有26岁的工程师列出来功能6:用户可以按工作经验搜索,比如输入4,可以把所有工作4年的工程师搜索出来功能7:用户可以对所有工程师按年龄从小到大排序功能8:按工作经验从长到短排序功能9:按级别从高到低排序功能10:按级别从高到低排序,级别相同的按照工作经验从长到短排序24 难度:4写一个函数,判断一个链表中是否有环提示:一个递增一,一个递增二,他们指向同一个接点时就是环出现的地方25 难度:3unsigned int intvert(unsigned int x,int p,int n)实现对x的进行翻转,p为起始翻转位,n为需要转换的长度,假设起始点在右边.如x=0b0001 0001,p=4,n=3,翻转后x=0b0110 000126 难度:2假如权限允许的话,比如在没有操作系统的情况下,直接在开发板上运行一个c程序。要对绝对地址0x100000赋值应该怎么写?那么要是想让程序跳转到绝对地址是0x100000去执行,应该怎么写?27 难度:2下面程序输出结果是什么?unsigned short A = 10;printf(A = %dn, A);char c=128;128=1000 0000printf(c=%dn,c);0b0000 0000 0000 0000 1111 1111 1111 01010x0000 fff51111 1111 1111 1111 111 1 0000 00000xffff ff00;28 难度:2(1) char *str20;(2) char (*str);sizeof(str)分别得到什么值?29 难度:5求函数返回值,输入x=9999;int func ( x )int countx = 0;while ( x )countx +;x = x&(x-1);return countx; 30 难度:5象搜索的输入信息是一个字符串,统计300万输入信息中的最热门的前十条,我们每次输入的一个字符串为不超过255byte,内存使用只有1G,请描述思想,写出算法(c语言)31 难度:5国内的一些帖吧,如baidu,有几十万个主题,假设每一个主题都有上亿的跟帖子,怎么样设计这个系统速度最好32 难度:4写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)功能:在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指内存。例如:abcd12345ed125ss123456789的首地址传给intputstr后,函数将返回9,outputstr所指的值为12345678933 难度:2有一分数序列:1/2,1/4,1/6,1/8,用函数调用的方法,求此数列前20项的和34 难度:3有一个16位的整数,每4位为一个数,写函数求他们的和。解释:整数1101010110110111和 1101+0101+1011+011135 难度:3写出程序把一个链表中的接点顺序倒排36 难度:3两个字符串,s,t;把t字符串插入到s字符串中,s字符串有足够的空间存放t字符串void insert(char *s, char *t, int i)37 难度:1分析下面的代码:char *a = hello;char *b = hello;if(a= =b)printf(YES);elseprintf(NO)38 难度:2编程实现:把十进制数(long型)分别以二进制和十六进制形式输出,不能使用printf系列库函数 39 难度:2求1000!的未尾有几个0(用素数相乘的方法来做,如72=2*2*2*3*3);求出1-1000里,能被5整除的数的个数n1,能被25整除的数的个数n2,能被125整除的数的个数n3,能被625整除的数的个数n4.1000!末尾的零的个数=n1+n2+n3+n4;40 难度:4有双向循环链表结点定义为:struct node int data;struct node *front,*next;有两个双向循环链表A,B,知道其头指针为:pHeadA,pHeadB,请写一函数将两链表中data值相同的结点删除 41 难度:4编程实现:找出两个字符串中最大公共子字符串,如abccade,dgcadde的最大子串为cad42 难度:2判断一个字符串是不是回文,回文数就是左右对称的数字,比如:123321, 34567654343 五户共井问题 难度:3ABCDE五家人共用一口井,已知井深不超过10m,ABCDE五家绳长各不相同。若从井口放下绳索正好到达水面时,需要:(a) A家的绳2条接上B家的绳1条(b) B家的绳3条接上C家的绳1条(c) C家的绳4条接上D家的绳1条(d) D家的绳5条接上E家的绳1条(e) E家的绳6条接上A家的绳1条问井深和各家的绳长44 难度:5一语句实现x是否为2的若干次幂的判断45 难度:2用指针的方法,将字符串“ABCD1234efgh”前后对调显示46 EDF调度算法 难度:5一个嵌入式实时系统,同时只能有一个任务处于运行当中,其它的任务都处于待状态。当系统内部有多个任务需要运行时,对各个任务是按照优先级进行调度的,也就是说,每次运行的都是所有任务当中优先级最高的一个任务,其中最好的一种调度方法是EDF算法。EDF算法的思想就是根据当前任务还需要多少时间才能完成,来计算它的优先级。而随着任务的不断运行,它所需要的时间也不断的减少,这时就需要根据当前还需要多少时间来动态的更新优先级。比如下面这个系统,就使用一种EDF思想的变种算法,系统规定每次运行的任务总是当前系统中优先级最高的任务,每个任务运行时最高只能运行3个时间片的时间:系统内部有两个任务A和B,初始时任务分别需要5个和6个时间片(时间片就是一个时间单位)。计算优先级的公式为:P 2*(完成任务还需要的时间片) 3*(已经等待的时间片)P值越小表示优先级越高。那么我们可以计算出:P1 = 2 * 5 - 3 * 0 = 10P2 = 2 * 6 - 3 * 0 = 12任务1的优先级比较高,被调度器选中来运行3个时间片,运行过后任务1还需要2个时间片就能完成这时它们的优先级变为:P1 = 2 * 2 - 3 * 0 = 4P2 = 2 * 6 - 3 * 3 = 3任务2的优先级比较高,被调度器选中来运行3个时间片,运行过后还任务2还需要3个时间片才能完成这时它们的优先级变为:P1 = 2 * 2 - 3 * 3 = -5P2 = 2 * 3 - 3 * 0 = 6任务1的优先级较高,被调度器选中来运行2个时间片完成了,此时只剩下任务2继续按照上面的规则被调度运行了。那么任务1和任务2完成的顺序就是 1 2(1)现在系统当中有4个任务任务名称 初始所需时间A 8B 9C 10D 12当系统运行到第5个时间片时,任务E加入进来了,按照同样的规则参加调度。E 6请编程模拟出它们完成的顺序。(2)如果现在要把系统换成另外一种调度策略P = 2*(完成任务还需要的时间片) 3*(已经等待的时间片) + 2请修改上面的代码实现(3)再换成另外一种调度策略呢P = 已经等待的时间片 + 147 难度:1写出float x 与“零值”比较的if语句48 难度:2下面的程序执行结果是什么?int a = 0;printf(%d, %d, %d, a+, a+, a+=2);49 Typedef 难度:2typedef用于类型重定义例如:typedef int array1010;就可以把array10当作长度为10的整形数组使用#includeint inc(int a)return(+a);int multi(int*a,int*b,int*c)return(*c=*a*b);typedef int(FUNC1)(int in);typedef int(FUNC2) (int*,int*,int*);void show(FUNC2 fun,int arg1, int*arg2)FUNC1 p=&inc;int temp =p(arg1);fun(&temp,&arg1, arg2);printf(%dn,*arg2);main()int a;show(multi,10,&a);return 0;50 难度:2用两个栈实现一个队列的功能?要求给出算法和思路!51 atol 难度:2不使用库函数,实现在c语言库函数中将一个字符转换成整型的函数atol52 难度:2(void *)ptr 和 (*(void*)ptr的结果是否相同?其中ptr为同一个指针53 难度:2int a,b,c 请写函数实现c=a+b ,不可以改变数据类型,如将c改为long int,关键是如何处理溢出问题参考答案:int add (int a, int b,int *c)*c=a+b;return (a0 & b0 &(*ca | *cb) | (a0 & ba | *cb); 54 难度:2写一个函数 void combin(int n);输出和为一个给定整数的所有组合例如n=55=0+5; 5=1+4; 5=2+3; 5=3+2; 5=4+1; 5=5+0则输出(0,5)(1,4)(2,3)(3,2)(4,1)(5,0)55 难度5写一段程序,找出数组中第k大小的数,输出数所在的位置。例如2,4,3,4,7中,第一大的数是7,位置在4。第二大、第三大的数都是4,位置在 1、3随便输出哪一个均可。函数接口为:int find_orderk(const int* narry,const int n,const int k)要求算法复杂度不能是O(n2)提示:可以先用快速排序进行排序,其中用另外一个进行地址查找56 难度:1请写出下列代码的输出内容#includemain()int a,b,c,d;a=10;b=a+;c=+a;d=10*a+;printf(b,c,d:%d,%d,%d,b,c,d);return 0;57 难度:3用递归算法判断数组aN是否为一个递增数组。递归的方法,记录当前最大的,并且判断当前的是否比这个还大,大则继续,否则返回false结束:58 难度:3给两个数组和他们的大小,还有一动态开辟的内存,求交集,把交集放到动态内存dongtai,并且返回交集个数long intersect(long a,long b,long alength,long blength,long dongtai) 59 难度:3在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指内存。例如:abcd12345ed125ss123456789的首地址传给intputstr后,函数将返回9,outputstr所指的值为12345678960 难度:2分析下面程序结果typedef struct int a:2; int b:2; int c:1;test;test t;t.a = 1;t.b = 3;t.c = 1;printf(%d,t.a);printf(%d,t.b);printf(%d,t.c); 61 求组合数 难度:4打印n个数(1.n)中k个数的组合 如:combination(5,3)要求输出:123, 124, 125, 134, 135, 145, 234, 235, 245, 34562 排列 难度:4输入两个数m和n,打印出1-n中任意m个数的全排列。比如输入:2 4输出:(1, 2)(1, 3)(1, 4)(2, 3)(2, 4)(3, 4)63 内存复制 难度:3写一个函数,功能:完成内存之间的拷贝memcpy source code: 270 void* memcpy( void *dst, const void *src, unsigned int len ) 271 272 register char *d; 273 register char *s; 27 275 if (len = 0) 276 return dst; 277 278 if (is_overlap(dst, src, len, len) 279 complain3(memcpy, dst, src, len); 280 281 if ( dst src ) 282 d = (char *)dst + len - 1; 283 s = (char *)src + len - 1; 284 while ( len = 4 ) 285 *d- = *s-; 286 *d- = *s-; 287 *d- = *s-; 288 *d- = *s-; 289 len -= 4; 290 291 while ( len- ) 292 *d- = *s-; 293 294 else if ( dst = 4 ) 298 *d+ = *s+; 299 *d+ = *s+; 300 *d+ = *s+; 301 *d+ = *s+; 302 len -= 4; 303 304 while ( len- ) 305 *d+ = *s+; 306 307 308 return dst; 309 公司考试这种题目主要考你编写的代码是否考虑到各种情况,是否安全(不会溢出)各种情况包括:、参数是指针,检查指针是否有效、检查复制的源目标和目的地是否为同一个,若为同一个,则直接跳出、读写权限检查、安全检查,是否会溢出memcpy拷贝一块内存,内存的大小你告诉它strcpy是字符串拷贝,遇到0结束/* memcpy 拷贝不重叠的内存块 */ void memcpy(void* pvTo, void* pvFrom, size_t size)void* pbTo = (byte*)pvTo;void* pbFrom = (byte*)pvFrom;ASSERT(pvTo != NULL & pvFrom != NULL); /检查输入指针的有效性ASSERT(pbTo=pbFrom+size | pbFrom=pbTo+size);/检查两个指针指向的内存是否重叠while(size-0)*pbTo+ = *pbFrom+;return(pvTo); 64 难度:3编写一个 C 函数,该函数在一个字符串中找到可能的最长的子字符串,且该字符串是由同一字符组成的。65 难度:3一个单向链表,不知道头节点,一个指针指向其中的一个节点,问如何删除这个指针指向的节点?提示:将这个指针指向的next节点值copy到本节点,将next指向next-next,并随后删除原next指向的节点。 66 难度:4求1000!的未尾有几个0 67 旋转矩阵 难度:5输入N, 打印 N*N 旋转矩阵比如 N = 3,打印:1 2 38 9 47 6 5N = 4,打印:1 2 3 412 13 14 511 16 15 610 9 8 7 k=N;while(k0)While(jk)arrayij+=x+;While(ik)arrayi+j=x+;While(jk)arrayij-=x+;While(j 6) ? puts( 6) : puts(= 6);69 难度:2评价下面的代码定义两个数分别用于清零和置1unsigned int zero = 0;unsigned int compzero = 0xFFFF; 70 难度:3一超市有A,B两个分店,每个分店有个数不等的货柜,每个货柜有种类不等的蔬菜,每种蔬菜有种类不等的蔬菜,每种蔬菜有不同的数量,每个柜台和蔬菜有不同的名称(但是A,B两分店的货柜和蔬菜的名称有可能有重复的).现在A,B两个分店合并,相同的柜台合在一起,相同的蔬菜合在一起得到合并的数量. 用链表来描述分店的不同货柜,按货柜名称的字母升序排列,每个货柜的蔬菜也用链表来描述,按蔬菜名称的字母升序排列,请用c语言编写一个函数,实现两个分店的合并.要求:该函数输入两个分店的链表,返回新店的链表!定义链表的数据结构,并编写程序,要明确空间的申请,释放!71 难度:3w x yz = wxyz, w的x次方乘上y的z次方 w,x,y,z在0-9之间, 分别是多少:72 难度:3一个计算器的健位有问题:每个键表示的实际数值和键上写的数不一致。比如我们按下写着4的键,计算器实际收到的却是另外一个数字。唯一一个例外就是0键是工常工作的。能根据下面的实验结果得出哪个键际对应哪个数字么?A pocket calculator has a bug: The keys are not occupied with the usual numbers. If one pushes for example 4,the calculator receives another number (however always the same).Exception: The 0 key works correctly! Whichnumerical values are assigned to which keys? 8 + 3 = 6 4 + 9 = 13 6 + 4 = 15 2 + 8 = 14 7 + 1 = 7 3 + 6 = 9 1 + 2 = 12 5 + 5 = 4 73 搜索引擎去重问题:(baidu笔试题目)在搜索引擎中,一般网络爬虫程序专门抓取网络的链接地址,然后存于一个文本文件中。对于每一个地址存于一行。当然地址中有重复的地址。所以在引擎中有一个类问题是需要来进行去重处理(去重处理意思是去掉重复的url网络链接

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论