当前位置:首页 > C语言面试题
sizeof(struct BBB) = sizeof(*p)
= 4 + 4 + 2 + 1 + 1/*补齐*/ + 2*5 + 2/*补齐*/ = 24 bytes (经Dev-C++验证) p=0x1000000; p+0x200=____;
= 0x1000000 + 0x200*24 (Ulong)p+0x200=____; = 0x1000000 + 0x200 (char*)p+0x200=____;
= 0x1000000 + 0x200*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
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 << \ 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 << \ 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 < sum;i++) {
if (addr[i] == narry[sum - kk]) cout << i << '\\t'; }
return0; }
1、找错 Void test1() {
char string[10];
char* str1=\
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(\ 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(\ } }
// 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 ) {
共分享92篇相关文档