1、 C试题讲解问答题部分:(面试中问到的内容)1. 局部变量能否和全局变量重名? (华为) 解析:能,局部会屏蔽全局。要用全局变量,需要使用:局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量.比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。3. 如何引用一个已经定义过的全局变量? (华为)解析:extern可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个编写错了,那么在编译期间会报错,
2、如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。4. static全局变量与普通的全局变量有什么区别?解析:1)全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式从以上分析可以看出,static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;static函数与普通函数有什么区别:static函数在内存中只有一份
3、,普通函数在每个被调用中维持一份拷贝5. 进程和线程的差别(微软亚洲)解析:答:线程是指进程内的一个执行单元,也是进程内的可调度实体.与进程的区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行(3)拥有资源:进程是拥有资源的独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.(4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销6. 用宏定义写出swap(x,y)(思科)解析:#defineswap(x,y)x=x+y;y=x-y;
4、x=x-y7. 什么是预编译,何时需要预编译:(思科)解析:就是指程序执行前的一些预处理工作,主要指#表示的.何时需要预编译?)、总是使用不经常改动的大型代码体。)、程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。8. 下述三个有什么区别?char * const p;char const * p,const char *p; (慧通)解:const char* p和char const *p修饰的是p所指向的变量,不可以用*p=a等这样的方式修改变量区的内容. 指针本身是可以修改的,比如说char x,y; cons
5、t *p = &x, p = &y,修改指针本身是可以的,*p = b就不行。 Char *const p;中const修饰的是指针,表明指针在操作过程中不可以修改, 而指针所指向的内容是可以修改的,比如说char x ,y; char* const p = &x; *p = b是可以的, 但p=&y;是不可以的,const修饰的是指针,不可以修改指针的指向, 只可以修改指针所捆绑的变量 9. int (*s10)(int) 表示的是什么啊 ? (慧通)解析:这样的表达式可以遵循这样的规则:从右向左,由近及远,括号优先;比如:从a符号开始。其右边是10,说明a是个数组,其中存了十个元素。再看a
6、的左边是一个*。说明数组中存的是指针。现在在看(*a10)的右边是(int);说明所存的指针是指向有一个int形参的函数现在看(*a10)的左边是个int ,说明指向的函数的返回值为int 类型;10. 进程之间通信的途径,进程间通信方法(慧通)解析:无名管道,命名管道,消息队列,信号,共享内存,套接字。等11. 什么是“引用”?申明和使用“引用”要注意哪些问题?解析:引用就是某个目标变量的“别名”(alias),对应用的操作与对变量直接操作效果完全相同。申明一个引用的时候,切记要对其进行初始化。引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,不能再把该引用名作为其他变量名
7、的别名。声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。不能建立数组的引用12.include 和include “filename.h”的区别?解析:是从标准库路径搜索, “”是从用户当前工作目录开始,找不到,在到标准库开始13.Heap和Stack的区别?解析:Heap是堆,Stack是栈。 栈的空间由操作系统自动分配和回收,而堆上的空间由程序员申请和释放。 栈的空间大小较小,而堆的空间较大。 栈的地址空间往低地址方向生长,而堆向高地址方向生长。 栈的存取效率更高。 程序在编译期间对变
8、量和函数的内存分配都在栈上, 且程序运行过程中对函数调用中参数的内存分配也是在栈上。14.sizeof和strlen之间的区别?解析:(1)sizeof操作符的结果类型是size_t,它在头文件中的typedef为unsigned int类型,该类型保证能容纳实现所建立的最大对象的字节大小。 (2)sizeof是运算符,strlen是函数 (3)sizeof可以用类型做参数,strlen只能用char *做参数,且必须是以0结尾的。 (4)数组做sizeof的参数不退化,传递给strlen就退化为指针。 (5)大部分编译程序在编译的时候就把sizeof计算过了是类型或是变量的长度。 (6)st
9、rlen的结果要在运行的时候才能计算出来,用来计算字符串的长度,而不是类型占用内存的大小。 (7)sizeof后如果是类型必须加括号,如果是变量名可以不加括号。 (8)当使用了一个结构类型或变量时,sizeof返回实际的大小。 (9)数组作为参数传递给函数时传的是指针而不是数组,传递的是数组的首地址。 (10)计算结构变量的大小就必须讨论数组对齐问题。 (11)sizeof操作符不能用于函数类型,不完全类型或位字段。15.#define DOUBLE(x) x+x ,i = 5*DOUBLE(5); i 是多少?解析:i 为30。 16.unsignedshorthash(unsignedsh
10、ortkey)return(key)%256解析 请问hash(16),hash(256)的值分别是:A.1.16;B.8.32;C.4.16;D.1.3217.bool double int float.各种类型与0值的比较(概率较大)解析:请写出BOOLflag与“零值”比较的if语句。if(flag)或者if(!flag)如下写法均属不良风格,不得分。if(flag=TRUE)if(flag=1)if(flag=FALSE)if(flag=0)请写出float x与“零值”比较的if语句。(4分)标准答案示例:constfloatEPSINON=0.00001;if(x=-EPSINON
11、)&(x=”或“=”此类形式如下是错误的写法,不得分。if(x=0.0)if(x!=0.0)请写出char*p与“零值”比较的if语句。(3分)标准答案:if(p=NULL)或者if(p!=NULL)如下写法均属不良风格,不得分。if(p=0)if(p!=0)if(p)if(!)18.结构与联合有和区别?解析:1. 结构和联合都是由多个不同的数据类型成员组成,但在任何同一时刻,联合中只存放了一个被选中的成员(所有成员共用一块地址空间),而结构的所有成员都存在(不同成员的存放地址不同)。2. 对于联合的不同成员赋值,将会对其它成员重写,原来成员的值就不存在了,而对于结构的不同成员赋值是互不影响的
12、19.简述数组与指针的区别?解析:数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。 指针可以随时指向任意类型的内存块。(1)修改内容上的差别chara=“hello”;a0=X;char*p=“world”;/注意p指向常量字符串 p0=X;/编译器不能发现该错误,运行时错误 (2)用运算符sizeof可以计算出数组的容量(字节数)。 sizeof(p),p为指针得到的是一个指针变量的字节数,而不是p所指的内存容量。 C+/C语言没有办法知道指针所指的内存容量,除非在申请内存时记住它。 注意当数组作为函数的参数进行传递时,该数组自动退化为同类型的指针。 chara=hellowor
13、ld;char*p=a;coutsizeof(a)endl;/12字节 coutsizeof(p)endl;/4字节计算数组和指针的内存容量 voidFunc(chara100)coutsizeof(a)endl;/4字节不是100字节20.如何判断一段程序是由C编译程序还是由C+编译程序编译的?解析:#ifdef_cpluspluscoutc+;#elsecoutc;#endif21.main主函数执行完毕后,是否可能会再执行一段代码,给出说明?解析:可以,可以用_onexit注册一个函数,它会在main之后执行intfn1(void),fn2(void),fn3(void),fn4(voi
14、d);voidmain(void)Stringstr(zhanglin);_onexit(fn1);_onexit(fn2);_onexit(fn3);_onexit(fn4);printf(Thisisexecutedfirst.n);intfn1()printf(next.n);return0;intfn2()printf(executed);return0;intfn3()printf(is);return0;intfn4()printf(This);return0;22.int idsizeof(unsigned long); 这个对吗?为什么?解析:对,这个 sizeof是编译时运算
15、符,编译时就确定了可以看成和机器有关的常量。23.如何打印出当前源文件的文件名以及源文件的当前行号?解析:cout _FILE_ ;cout_LINE_ ;_FILE_和_LINE_是系统预定义宏,这种宏并不是在某个文件中定义的而是由编译器定义的24.以下函数能求出数组的长度吗?void fun(char str)int len = sizeof(str)/sizeof(str0);解析:不能,数组作为参数传递给函数时,数组名被退化为指针,因此函数中的sizeof(str)实际是在求一个指针的sizeof,答案为4,因此不能计算出数组的长度。25. 输出的结果是多少,并分析过程? unsign
16、ed short A = 10;printf(“%un”, A);char ch = 128;printf(“%dn”, ch);答:A=4294967285,首先将A转化为int类型,即对应的二进制数值为:00000000 00000000 00000000 00001010,A=11111111 11111111 11111111 11110101,其实这种情况最高位是1,认为是负数,但是在输出中指定以无符号数输出,于是结果为4294967285=4294967295(四字节表示的最大数)-10.ch = 128对应的二进制为:10000000,在输出中以整数形式输出,由于最高位是1,于是
17、就是负数,10000000是该负数的补码,根据求补码的反步骤计算,先-1,得到01111111,在取反得10000000=128,由于本身是负数,即为-128.26. New delete 与malloc free 的联系与区别?解析:都是在堆(heap)上进行动态的内存操作。用malloc函数需要指定内存分配的字节数并且不能初始化对象,new 会自动调用对象的构造函数。delete 会调用对象的destructor,而free 不会调用对象的destructor.27.用变量a给出下面的定义(特别重要)a)一个整型数(Aninteger)b)一个指向整型数的指针(Apointertoanin
18、teger)c)一个指向指针的的指针,它指向的指针是指向一个整型数(Apointertoapointertoaninteger)d)一个有10个整型数的数组(Anarrayof10integers)e)一个有10个指针的数组,该指针是指向一个整型数的(Anarrayof10pointerstointegers)f)一个指向有10个整型数数组的指针(Apointertoanarrayof10integers)g)一个指向函数的指针,该函数有一个整型参数并返回一个整型数 解析:a)inta;/Anintegerb)int*a;/Apointertoanintegerc)int*a;/Apointe
19、rtoapointertoanintegerd)inta10;/Anarrayof10integerse)int*a10;/Anarrayof10pointerstointegersf)int(*a)10;/Apointertoanarrayof10integersg)int(*a)(int);/Apointertoafunctionathattakesanintegerargumentandreturnsanintegerh)int(*a10)(int);28.在不用第三方参数的情况下,交换两个参数的值解析:方法1:#include void main() int i=60; int j=5
20、0; i=i+j; j=i-j; i=i-j; printf(i=%d/n,i); printf(j=%d/n,j);方法二:i=j;j=i;i=j;、29.i最后等于多少? int i = 1; int j = i+; if(ij+) & (i+ = j) i+=j;解析::i = 530.线程同步的机制有哪些?他们有什么优缺点(可以说笔试必考)解析: 1.Critical Section A.速度快 B.不能用于不同进程 C.不能进行资源统计(每次只可以有一个线程对共享资源进行存取)2.Mutex A.速度慢 B.可用于不同进程 C.不能进行资源统计3.Semaphore A.速度慢 B.
21、可用于不同进程 C.可进行资源统计(可以让一个或超过一个线程对共享资源进行存取)4.Event A.速度慢 B.可用于不同进程 C.可进行资源统计31.指针和引用的区别?解析:引用是在C+中引入的。它们之间的区别有:(1) 非空区别:指针可以为空,而引用不能为空(2)可修改区别:如果指针不是常指针,那么就可以修改指向,而引用不能(3) 初始化区别:指针定义时可以不初始化,而引用在定义的时必须初始化32.全局变量可不可以定义在可被多个.C文件包含的头文件中为什么解析:可以,在不同的C文件中以static形式来声明同名全局变量。可以在不同的C文件中声明同名的全局变量, 前提是其中只能有一个C文件中
22、对此变量赋初值,此时连接不会出错33.结构struct和类class有什么异同?解析:在c语言中struct只能对数据进行聚合,而c+的class把数据以及对数据的处理方法也同时聚合为一体,增加了内聚性。此外class拥有可再生性和可抽象性,实现的代码的复用。集中体现在派生的功能和多态的功能。同时class也比struct具备更好的封装性,体现在三种访问权限上。在C+中的struct和class的结构基本一致,只是struct的默认权限为Public而class为private。34. 逻辑思维题:101个硬币100真、1假,真假区别在于重量。请用无砝码天平称两次给出真币重还是假币重的结论。(
23、貌似是华为的题)解析:101个先取出2堆,33,33第一次称,如果不相等,说明有一堆重或轻那么把重的那堆拿下来,再放另外35个中的33如果相等,说明假的重,如果不相等,新放上去的还是重的话,说明假的轻(不可能新放上去的轻)第一次称,如果相等的话,这66个肯定都是真的,从这66个中取出35个来,与剩下的没称过的35个比下面就不用说了35.char str1=”abc”; char str2 = “abc”; str1=str2正确吗:解析:错误,因为str1和str2是位于堆栈上的,它们占用不同的内存空间。Const char str3 = “abc”; const char str4 = “a
24、bc”;str3=str4为FALSE,同样它们是位于堆栈上的内存空间,是不同的。Const char *str5=”abc”, const char *str6=”abc”;char *str7=”abc”,char *str8 = “abc”,str5=str6 str7=str8为TRUE,因为”abc”是位于文字常量区的,系统将几个“abc”进行优化,使它们位于同一块内存区,因此指针的指向也就相同了。36.内联函数和宏的差别?答:内联函数和普通函数相比可以加快程序运行的速度,因为不需要中断调用,在编译的时候内联函数可以直接被镶嵌到目标代码中,而宏只是一个简单的替换。内联函数要做参数类型
25、检查,这是与宏相比的优势。Inline是指嵌入代码,就是在调用函数的地方不是跳转,而是把代码直接写到那里去。对于短小的代码来说,inline可以带来一定效率的提升,而且和C时代的宏函数相比,inline更安全可靠。可是这是以增加空间消耗为代价的。Inline一般只适用于:一个函数被不断地重复调用;函数只有简单的几行,且函数内不能含有for while switch语句。37.delete与delete区别delete只会调用一次析构函数,而delete会调用每一个成员的析构函数。在MoreEffectiveC+中有更为详细的解释:“当delete操作符用于数组时,它为每个数组元素调用析构函数,
26、然后调用operatordelete来释放内存。”delete与New配套,delete与new配套38.求下面函数的返回值(微软)intfunc(x)intcountx=0;while(x)countx+;x=x&(x-1);returncountx;假定x=9999。解析:返回值是8思路:将x转化为2进制,看含有的1的个数39. 下面程序的结果是多少?P1=(unsignedchar*)0x801000;p2=(unsignedlong*)0x810000;请问p1+5=;p2+5=;解析:0x801005(相当于加上5位)0x810014(相当于加上20位);40. 下面的代码输出是什么
27、,为什么? void foo(void) unsigned int a = 6; int b = -20; (a+b 6) ? puts( 6) : puts(6。原因是当表达式中存在有符号类型和无符号类型时所有的操作数都自动转换为无符号类型。因此-20变成了一个非常大的正整数,所以该表达式 计算出的结果大于6。这一点对于应当频繁用到无符号数据类型的嵌入式系统来说是丰常重要的。如果你答错了这个问题,你也就到了得不到这份工作的边缘。 41 TCP/IP 建立连接的过程?(通信公司考得比较多)答:在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。第一次握手:建立连接时,
28、客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包必须确认客户的SYN(ack=j+1)同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYNACK包,向服务器发送确认包ACK(ack=k+1)此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。42.求下面函数的返回值(微软)int func(x)int countx = 0;while(x)countx +;x = x&(x-1);return countx; 假定x = 9
29、999。 答案:8解析:将x转化为2进制,看含有的1的个数。知道了这是统计9999的二进制数值中有多少个1的函数,且有9999910245122561591024中含有1的个数为2;512中含有1的个数为1;256中含有1的个数为1;15中含有1的个数为4;故共有1的个数为8,结果为8。1000 - 1 = 0111,正好是原数取反。这就是原理。用这种方法来求1的个数是很效率很高的。不必去一个一个地移位。循环次数最少。43. C语言同意一些令人震惊的结构,下面的结构是合法的吗,如果是它做些什么? int a = 5, b = 7, c; c = a+b; 解析:这个问题将做为这个测验的一个愉快
30、的结尾。不管你相不相信,上面的例子是完全合乎语法的。根据最处理原则,编译器应当能处理尽可能所有合法的用法。因此,上面的代码被处理成: c = a+ + b; 因此, 这段代码持行后a = 6, b = 7, c = 12。 如果你不知道答案,我也不把这个当作问题。我发现这个问题的最大好处是:这是一个关于代码编写风格,代码的可读性,代码的可修改性的好的话题44请写出下面代码在 32 位平台上的运行结果,并说明 sizeof 的性质:#include #include int main(void) char a30; char *b = (char *)malloc(20 * sizeof(cha
31、r); printf(%dn, sizeof(a);/1 printf(%dn, sizeof(b);/2 printf(%dn, sizeof(a3);/3 printf(%dn, sizeof(b+3);/4 printf(%dn, sizeof(*(b+4);/5 return 0 ;45. 在C+ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明?解析:函数和变量被C+编译后在符号库中的名字与C语言的不同,被extern C修饰的变量和函数是按照C语言方式编译和连接的。由于编译后的名字不同,C+程序不能直接调用C 函数。C+提供了一个C 连接交换指定符号ext
32、ern“C”来解决这个问题。46.下面函数的运行结果是什么?main() int a5=1,2,3,4,5; int *ptr=(int *)(&a+1); printf(%d,%d,*(a+1),*(ptr-1);解析:2,5*(a+1)就是a1,*(ptr-1)就是a4, 执行结果是2, 5。&a+1不是首地址+1,系统会认为加一个a数组的偏移,是偏移了一个数组的大小(本例是5个int)。int *ptr=(int *)(&a+1); 则ptr实际是&(a5),也就是a+547、设有以下说明和定义:typedef union long i; int k5; char c; DATE;str
33、uct data int cat; DATE cow; double dog; too;DATE max;则语句 printf(%d,sizeof(too)+sizeof(max);的执行结果是:_解析:DATE是一个union, 变量公用空间. 里面最大的变量类型是int5, 占用20个字节. 所以它的大小是20,data是一个struct, 每个变量分开占用空间. 依次为int4 + DATE20 + double8 = 32.所以结果是 20 + 32 = 52.48.下面的代码有什么作用?#ifndef _INCvxWorksh#define _INCvxWorksh#ifdef _c
34、plusplusextern C #endif /* */ #ifdef _cplusplus #endif#endif /* _INCvxWorksh */解析:头文件中的编译宏#ifndef_INCvxWorksh#define_INCvxWorksh#endif 的作用是防止被重复引用。49. 把11011011000101转换成10进制,8进制和16进制 解析8进制的结果是33305 10进制的结果是14021 16进制的结果是36C550:下列代码运行后得到的结果是多少(耐为数控)?#define SQLARE(a) (a)*(a)Int a = 5;Int b;B = SQLARE
35、(a+);解析:代码预编译后的 b = (a+)*(a+); 后+理解为遇到分好才+,结果为2551:下列程序运行后a的值是多少? 为什么? Unsigned int a = 100; Unsigned int i; For(i=100;i =0.;i-) a+;解析: 由于i是无符号型的int类型,值永远不可能小于0,所以循环i=0永远成立.52:下列程序的运行结果是什么? 为什么? void foo(void) Unsigned int a = 6; Int b = -20; (a+b6)?puts(“6”):puts(“653:要求设置一绝对地址为0x67a9的整形变量的值为0xaa66
36、.编译器是一个纯粹的asc编辑器, 解析: Int * p; p =(int*) 0x67a9; *p = 0xaa66;54:逻辑思维题:有一种小虫,每隔2秒分裂一次,分裂后的2只小虫经过2秒后又会分裂一次,如果最初命中只有一只小虫,那么2秒后变2只,再经过2秒后变成4只,。两分钟后正好满满一瓶小虫,假设这个瓶中最初放两只小虫请问,经过多少时间后正巧也是满满的一瓶?为什么? 解析:其实很简单,就是前面两秒的时候本来从一个分裂两个要两秒,而第二种情况直接两个等于前面的两秒省略了,所以时间是一份五十八秒2.0次方=1(这个是第一个起点)2.1次方=2(这个是第二个起点)2.3次方=4第二次比第一
37、个少分裂一次.同样2个小虫就是分裂1分58秒.55. If(n=8)和if(8 = n) 的区别,哪一个好?为什么(大唐)解析:第一种是把把常量放比较符后面,后者相反,第二种好处是if(8=n)编译器会报错56 线程和进程的区别: 57:测试分为哪几类? 解析: 针对系统功能的测试叫做黑盒测试 测试函数功能函数的接口等叫做白盒测试58;sizeof和strlen的区别:解析:1.sizeof的结果类型是size_t,它在头文件中typedef为unsigned int类型。 该类型保证能容纳实现所建立的最大对象的字节大小。 2.sizeof是算符,strlen是函数。 3.sizeof可以用类
38、型做参数,strlen只能用char*做参数,。4.数组做sizeof的参数不退化,传递给strlen就退化为指针了。 5在编译的时候就把sizeof计算过了 是类型或是变量的长度这就是0;6.strlen的结果要在运行的时候才能计算出来,不是类型占内存的大小。 7.sizeof后如果是类型必须加括弧,如果是变量名可以不加括弧。8.当适用了于一个结构类型时或变量, sizeof 返回实际的大小,59. const和#define都是代表不可改变的,他们有什么不一样呢? 解析: const 常量有数据类型,而宏常量没有数据类型。编译器可以对const修饰的数据进行类型安全检查。而对宏常量只进行字
39、符替换,没有类型安全检查,并且在字符替换时可能会产生意料不到的错误。 有些集成化的调试工具可以对const 常量进行调试,但是不能对宏常量进行调试。60. 堆栈溢出一般是什么原因导致的?解析:没有回收垃圾资源,比如:malloc的内存没有回收,递归调用层次太深,没有退出处理61什么是预编译,什么时候需要预编译。62. 用两个栈实现一个队列的功能,怎实现,说出具体的思路解析:63在桌面上有一堆硬币,其中有十三枚正面向上,其他的硬币都是反面向下,硬币大小形状都一样,你闭上眼睛(无其他人,工具帮助),用手将硬币分成两堆,使两堆正面朝上的数目相等.请问你有什么办法?(华为) 解析:方法一:把硬币分成两
40、堆,把两堆都竖起来,没有正面朝上的 哈哈哈。还有其他办法。64 小明一家过一座桥,过桥时是黑夜,所以必须有灯。现在小明过桥要1秒, 小明的弟弟要3秒,小明的爸爸要6秒,小明的妈妈要8秒,小明的爷爷要12秒。每次此桥最多可过两人,而过桥的速度依过桥最慢者而定,而且灯在点燃后30秒就会 熄灭。问:小明一家如何过桥?(中科院)解析:第一步,小明与弟弟过桥,小明回来,耗时秒;第二步,小明与爸爸过河,弟弟回来,耗时秒;第三步,妈妈与爷爷过河,小明回来,耗时秒;最后,小明与弟弟过河,耗时秒,总共耗时秒,多么惊险!65(北京赞同科技) 现有1100共一百个自然数,已随机放入一个有98个元素的数组a98。要求写出一个尽量简单的方案,找出没有被放入数组的那2个数,并在屏幕上打印这2个数。注意:程序不用实现自然数随机放入数组的过程。解析: /a98中存放着原数组;int i=0;unsigned char b100;for(i=0;i100;i+) bi=0;/依次填入b100,b0=1,b1=2,b2=3,.for(i=0;i98;i+) bai-1=ai;/没有被填入数字的应该还是0,bn=0for(i=0;i100;i+)if(0=bi) printf(num:%d n,(i+1);66. 简单说明TCP与UDP的区别 解析
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。