C面试常用基础题目
来源:互联网 发布:淘宝店铺显示多个客服 编辑:程序博客网 时间:2024/06/06 00:12
C面试常用基础题目
线性表之单向链表的创建、插入、删除和清除
- #include <stdio.h>
- typedef struct node
- {
- int num;
- struct node* next;
- }Lnode;
- int Dele(Lnode* head,int num)
- {
- Lnode* delnode = head;
- Lnode* forword = head;
- if(head == NULL) return -1;
- else
- {
- while((delnode->num != num) && (delnode ->next != NULL))
- {
- forword = delnode;
- delnode = delnode->next;
- }
- if(delnode->next == NULL && delnode->num != num) return -1;
- if(delnode == head)
- {
- head = head->next;
- }
- else if(delnode->next == NULL)
- {
- forword->next = NULL;
- }
- else
- {
- forword->next = delnode->next;
- }
- printf("delnode->next is 0x%lx\n",delnode->next);
- free(delnode);
- delnode = NULL;
- }
- }
- void InSert(Lnode* head,int num)
- {
- Lnode* tail = head;
- while(tail->next != NULL)
- {
- tail = tail->next;
- }
- Lnode* node = (Lnode*)malloc(sizeof(Lnode));
- node->num = num;
- node->next = NULL;
- tail->next = node;
- }
- int main()
- {
- Lnode* head = NULL;
- Lnode* innode = NULL;
- Lnode* tail = NULL;
- int i = 0;
- innode = (Lnode*)malloc(sizeof(Lnode));
- innode->num = 0;
- for(i = 1;i <= 3;i++)
- {
- if(head == NULL) head = innode;
- tail = innode;
- innode = (Lnode*)malloc(sizeof(Lnode));
- innode->num = i;
- printf("i is %d\n",i);
- innode->next = NULL;
- tail->next = innode;
- }
- Lnode* p = head;
- while(p != NULL)
- {
- printf("p->num is %d\n",p->num);
- p = p->next;
- }
- InSert(head,4);
- p = head;
- while(p != NULL)
- {
- printf("p->num is %d\n",p->num);
- p = p->next;
- }
- int result = Dele(head,2);
- printf("result is %d\n",result);
- p = head;
- while(p != NULL)
- {
- printf("p->num is %d\n",p->num);
- p = p->next;
- }
- p = head;
- while(p != NULL)
- {
- free(p);
- p = p->next;
- }
- return 0;
- }
一、冒泡排序
- #include <stdio.h>
- int paixv(int* a,int num)
- {
- int i = 0; int j = 0; int temp = 0;
- for(i = 0;i < num;i++)
- {
- for(j = i; j < num; j++)
- {
- if(a[i] >= a[j])
- {
- temp = a[i];
- a[i] = a[j];
- a[j] = temp;
- }
- }
- }
- return 0;
- }
- int main()
- {
- int a[10] = {2,5,9,7,1,0,8,6,4,10};
- int result = paixv(a,10);
- int i = 0;
- for(;i < 10;i++)
- printf("%d,",a[i]);
- return 0;
- }
- #incluce <stdio.h>
- #define INPUT
- int My_StrCpy(char* src, char* dst)
- {
- if(src == NULL || dst == NULL)
- {
- printf("TK------>>>>>this is error\n");
- return -1;
- }
- while(*src != '\0')
- {
- *dst = *src;
- src ++;
- dst ++;
- if(*dst == '\0') break;
- }
- return 0;
- }
- int main()
- {
- #ifdef INPUT
- char a[10];
- char b[4];
- printf("please input src:\n");
- scanf("%s",a);
- printf("please input dst:\n");
- scanf("%s",b);
- #else
- char a[10] = "1234";
- char b[10] = "4321";
- #endif
- int result = My_StrCpy(a,b);
- printf("TK---->>>>a is %s,b is %s\n",a,b);
- return 0;
- }
三、斐波那契数列
- #include <stdio.h>
- int FiBo(int i)
- {
- if(i == 1 || i == 2)
- {
- return 1;
- }
- else
- {
- return FiBo(i - 1) + FiBo(i - 2);
- }
- }
- int main()
- {
- int num = 0;
- printf("please input :\n");
- scanf("%d",&num);
- int i = 1;
- for(;i <= num;i++)
- {
- printf("%d,",FiBo(i));
- }
- return 0;
- }
四、查找子字符串
- #include <stdio.h>
- int FindSubString(char* str,char* substr)
- {
- int result = 1;
- char* sub = substr;
- while(*str != '\0')
- {
- sub = substr;
- if(*sub != *str)
- {
- str++;
- result++;
- continue;
- }
- while(*sub != '\0')
- {
- if(*str == *sub)
- {
- str++;
- sub++;
- result++;
- }
- else break;
- }
- if(*sub == '\0') return result - (sub - substr);
- }
- return -1;
- }
- int main()
- {
- char a[20] = "01133412123456";
- char b[4] = "123";
- int result = FindSubString(a,b);
- printf("result is %d\n",result);
- return 0;
- }
五、自己写strcmp函数
- #include <stdio.h>
- int My_Strcmp(char* src, char* dst)
- {
- if(src == NULL && dst == NULL) return -1;
- while(*src != '\0' && *dst != '\0')
- {
- if(*src != *dst) break;
- src++;
- dst++;
- }
- if(*src == '\0' && *dst == '\0') return 0;
- else return -1;
- }
- int main()
- {
- char a[10];
- char b[10];
- printf("please input a:\n");
- scanf("%s",a);
- printf("please input b:\n");
- scanf("%s",b);
- int result = My_Strcmp(a,b);
- printf("result is %d\n",result);
- return 0;
- }
六、回文数
- #include <stdio.h>
- #include <string.h>
- int huiwen(char* p)
- {
- if(p == NULL) return -1;
- char* pbegin = p;
- char* pend = p;
- while(*pend != '\0')
- {
- pend ++;
- }
- pend --;
- while(pbegin < pend)
- {
- if(*pbegin != *pend)
- {
- return 0;
- }
- else
- {
- pbegin ++;
- pend --;
- }
- }
- return 1;
- }
- int main()
- {
- char a[64];
- printf("please input :\n");
- scanf("%s",a);
- int result = huiwen(a);
- printf("result is %d\n",result);
- return 0;
- }
七、一些机试题
1.
给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到 output[] 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。
例如:input[] = {3, 6, 1, 9, 7} output[] = {3, 7, 9, 6, 1}; input[] = {3, 6, 1, 9, 7, 8} output[] = {1, 6, 8, 9, 7, 3}函数接口 void sort(int input[[, int n, int output[])
- #include <stdio.h>
- void sort(int input[],int n,int output[])
- {
- int i = 0; int j = 0; int k = 0; int temp = 0; int flag = 0;
- for(;i < n;i++)
- {
- for(j = i; j < n;j++)
- {
- if(input[i] < input[j])
- {
- temp = input[i]; input[i] = input[j]; input[j] = temp;
- }
- }
- if(flag == 0)
- {
- output[n/2 + k] = input[i];
- printf("output[%d] is %d\n",n/2 + k,input[i]);
- flag = 1;
- }
- else
- {
- k++;
- output[n/2 - k] = input[i];
- printf("output[%d] is %d\n",n/2 - k,input[i]);
- flag = 0;
- }
- }
- }
- int main()
- {
- int i = 0;
- int output[10];
- #ifdef IS_5
- int input[10] = {3,6,1,9,7};
- sort(input,5,output);
- for(;i < 5;i++)
- #else
- int input[10] = {3, 6, 1, 9, 7, 8};
- sort(input,6,output);
- for(;i < 6;i++)
- #endif
- printf("%d,",output[i]);
- return 0;
- }
2.
操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级 < 50,用户任务的优先级 >= 50且 <= 255。优先级大于255的为非法任务,应予以剔除。现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。函数scheduler实现如下功能,将task[] 中的任务按照系统任务、用户任务依次存放到 system_task[] 数组和 user_task[] 数组中(数组中元素的值是任务在task[] 数组中的下标),并且优先级高的任务排在前面,优先级相同的任务按照入队顺序排列(即先入队的任务排在前面),数组元素为-1表示结束。例如:task[] = {0, 30, 155, 1, 80, 300, 170, 40, 99} system_task[] = {0, 3, 1, 7, -1} user_task[] = {4, 8, 2, 6, -1}函数接口 void scheduler(int task[], int n, int system_task[], int user_task[])
- #include <stdio.h>
- void scheduler(int task[], int n, int system_task[], int user_task[])
- {
- int sys_id[10];
- int us_id[10];
- int i = 0; int stotal = 0; int utotal = 0;
- for(;i < n;i++)
- {
- if(task[i] >= 50 && task[i] <= 255)
- {
- us_id[utotal] = task[i];
- user_task[utotal] = i;
- utotal++;
- }
- else if(task[i] < 50)
- {
- sys_id[stotal] = task[i];
- system_task[stotal] = i;
- stotal++;
- }
- }
- i = 0; int j = 0; int tempid = 0; int temp;
- for(;i < utotal;i++)
- {
- for(j = i;j < utotal;j++)
- {
- if(us_id[i] > us_id[j])
- {
- temp = user_task[i];
- user_task[i] = user_task[j];
- user_task[j] = temp;
- tempid = us_id[i];
- us_id[i] = us_id[j];
- us_id[j] = tempid;
- }
- }
- }
- user_task[utotal] = -1;
- i = 0; j = 0;
- for(;i < stotal;i++)
- {
- for(j = i;j < stotal;j++)
- {
- if(sys_id[i] > sys_id[j])
- {
- temp = system_task[i];
- system_task[i] = system_task[j];
- system_task[j] = temp;
- tempid = sys_id[i];
- sys_id[i] = sys_id[j];
- sys_id[j] = tempid;
- }
- }
- }
- system_task[stotal] = -1;
- }
- int main()
- {
- int task[9] = {0, 30, 155, 1, 80, 300, 170, 40, 99};
- int system_task[20];
- int user_task[20];
- scheduler(task,9,system_task,user_task);
- int i = 0;
- printf("user_task is :\n");
- while(user_task[i] != -1)
- {
- printf("%d",user_task[i]);
- i++;
- }
- i = 0;
- printf("\nsystem_task is :\n");
- while(user_task[i] != -1)
- {
- printf("%d",system_task[i]);
- i++;
- }
- return 0;
- }
0 0
- C面试常用基础题目
- C面试常用基础题目
- 经典.net常用面试题目基础
- 常用Java面试题目
- 常用Java面试题目
- iPhone 常用面试题目
- android常用面试题目
- Java基础面试题目
- java基础面试题目
- 前端面试基础题目
- JAVA基础面试题目
- 前端面试基础题目
- Java基础面试题目
- 嵌入式linux工程师面试题目C语言基础部分(转)
- 嵌入式linux工程师面试题目C语言基础部分
- 嵌入式linux工程师面试题目C语言基础部分
- 嵌入式linux工程师面试题目C语言基础部分 (2
- c语言面试题目
- iOS 9.3 升级后无法真机测试 Could not find Developer Disk Image
- 最优二叉树——哈夫曼树
- 安卓获取地区信息
- 余数商
- Git安装使用、Git 常用命令总结
- C面试常用基础题目
- phpstorm 2016.1注册码
- BZOJ4281: [ONTAK2015]Związek Harcerstwa Bajtockiego
- Java. Warning – Build path specifies execution environment J2SE-1.6
- js进制转换
- 细说Android事件传递机制(dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent)
- 题目1001:A+B for Matrices
- MFC获取电脑硬盘序列号(附源码)
- Highcharts,Web前段图表插件的简单使用