首页 > 其他 > 详细

2019 面试题

时间:2020-02-23 18:26:51      阅读:101      评论:0      收藏:0      [点我收藏+]

1、用动态内存分配对数据进行排序  【改错】

int *p, n, i, j;//后面还有很多变量, 但是和解题无关
scanf(“%d”, &n);
//由于是要求动态内存分配, 故此处要加个malloc, 最后也需要free
修改:p = malloc(n * sizeof(int));
//冒泡排序 for(i=1;i<n;i++) //有很多种改法, 其中一种就是i = 0 for(j=0;j<n-i-1;j++) swap(p[j],p[j+1]);//swap是简写,代表交换两个数组元素值的代码
//打印数组
for (int i = 0;i < n – 1;++i) { printf(“%d ”, p[i]); } Printf(“%d”, p[n – 1]);
修改:
if(p)
{ free(p); }

2、 main函数中的是输入5 然后依次调用func函数,func函数的功能?main函数的功能?【读程序】

技术分享图片

 func函数的功能:求出mn两个数字的最小公倍数

 main函数的功能:求出5个数字的最小公倍数

 3、【写功能】

技术分享图片

 技术分享图片

功能是:将str2插入到str1,从第m+1个位置开始,str1原本的字符往后移

实例:

输入:m = 5

输出:helloplatoworld

4、读程序,写功能,并改错

技术分享图片

该程序的功能是:将数组中的元素排序,并求出其中位数

实例:

输入:n = 5   arr[ ] = {5,4 ,2 ,1 ,3} 

输出:3

5、randint是生成【1n的任意一个随机整数, swap用于交换的函数  

题目要求你说出每个程序的功能 时间复杂度 以及缺点和改进。

func1:

技术分享图片

Func2:

 技术分享图片

Func3:

 技术分享图片

 三个函数的功能都是:将产生的随机数随机的插入数组中

 时间复杂度:都是O(n^2)

6、你是产品经理,如果你的产品马上要交付,你会怎么安排测试才能交付给用户使用?

答:交付测试的目标是保证用户对所交付的系统的满意。交付测试主要的参与者应该是目标客户。客户参与越多越好。交付测试的内容一般包括前面提到的安装测试、可用性测试、 alpha 测试、 beta 测试

  安装测试的主要任务是测试软件系统能否在模拟环境下或实际现场由目标用户顺利完成在目标机器上的安装;
  可用性测试的主要任务是测试软件系统在完成安装以后能否完成用户的模拟任务或现场任务;
  alpha 测试采用的形式一般是由一个用户在开发环境下对软件系统进行类似于黑盒的测试,测试的目的是从用户的角度评价软件产品的功能、可使用性、可靠性、性能和支持,尤其注重产品的界面和特色;
  beta 测试采用的形式一般是先由软件的多个用户在实际使用环境下使用 beta 版软件系统一段时间,然后把使用中出现的各类故障或缺陷反馈给 beta 测试负责人员,再由测试负责人员移交给软件开发者,由开发人员负责修正并完善软件系统。 Beta 测试的目的是确保软件产品交付给全体用户之前能部分或全面地修正其在实际应用中可能出现的各类缺陷或不足。

 扩展:Alpha测试Beta测试的不同

  1、含义上的不同

Alpha测试是一种非正式验收测试,是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试。

Beta测试是一种验收测试,是软件产品完成了功能测试和系统测试之后,在产品发布之前所进行的软件测试活动。

  2、是否在现场测试上的不同

Alpha测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试

Alpha测试不同,开发者通常不在Beta测试的现场,因Beta测试是软件在开发者不能控制的环境中的“真实”应用。

  3、测试阶段上的不同

Alpha测试是软件测试过程中的第一阶段,一般只供内部测试使用;

Beta测试是软件测试过程中的第二个阶段,已经消除了软件中大部分的不完善之处。

7、c语言做网络编程,你将使用http还是TCP/IP协议来进行网络连接,为什么?

答:选用TPC/IP协议,C语言可以做底层开发。TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议 超文本协议,主要解决如何包装数据,多用于浏览器

 扩展:推荐: https://www.cnblogs.com/laojiao/p/9653108.html

技术分享图片

技术分享图片

 下面是我们访问一个网页的过程:

技术分享图片

8、有一个student结构体数组Students[],结构体里面有三个数据numageheight,现在要对该数组进行升序排序,若num相等,则比较age,若age相等,则比较height

typedef struct Student{
    int num;
    int age;
    float height;
}stu;
int main()
{
    int n,i,j;
    printf("请输入n:");
    scanf("%d",&n);
    stu s[n],tmp;
    printf("请输入数据:\n");
    for(i = 0;i < n;i++)
    {
        scanf("%d %d %f",&s[i].num,&s[i].age,&s[i].height);
        printf("\n");
    }
    for(i = 0;i < n -1;i++)
    {
        for(j = 0;j < n - i;j++)
        {
            if(s[j].num > s[j+1].num)
            {
                tmp = s[j];
                s[j] = s[j+1];
                s[j+1] = tmp;
            }
            else if(s[j].num == s[j+1].num)
            {
                if(s[j].age > s[j+1].age)
                {
                    tmp = s[j];
                    s[j] = s[j+1];
                    s[j+1] = tmp;
                }
                else if(s[j].age == s[j+1].age)
                {
                    if(s[j].height > s[j+1].height)
                    {
                        tmp = s[j];
                        s[j] = s[j+1];
                        s[j+1] = tmp;
                    }
                }
            }
        }
    }
    printf("按照升序排序输出:\n");
    for(i = 0;i < n;i++)
    {
       printf("num:%d age:%d height:%f",s[i].num,s[i].age,s[i].height);
       printf("\n");
    }
    return 0;
}
技术分享图片

9、补充一个函数,该函数的功能是将一个字符串第n个位置起长度为len的字符串删掉。

int main()
{
    char ch[] = "helleworldshaohang";
    int n = 5;
    int len = 5;
    fun1(ch,n,len);
    return 0;
}
void fun1(char *ch,int n,int len)
{
    int length,j,i;
    length = strlen(ch);  //求字符串的长度函数  包含在头文件<string.h>中
    for(j = n + len - 1;j < length;j++)
    {
        ch[n-1] = ch[j];
        n++;
    }
    length = length - len;
    for(i = 0;i < length;i++)
    {
        printf("%c",ch[i]);
    }
}
技术分享图片

10、

技术分享图片

方法1:

技术分享图片

方法2:

typedef struct Node{
    int data;
    struct Node* next;
}Node;
Node * reverse(Node *L,int m,int n) { Node *pre,*p,*q,*t; int i = 1; p = L->next; pre = L; while(i < m) { pre = p; p = p->next; ++i; } t = p; if(m < n) { p = p->next; ++i; } while(i <= n) { q = p; p = p->next; ++i; q->next = pre->next; pre->next = q; } t->next = q; return L; } void main(){ Node *p,*l,*q; int i;
// 创建头结点 p = (Node *)malloc(sizeof(Node)); p->data = 0; l = p; q = p;
//创建链表 for(i = 1;i <= 5;i++) { p =(Node *)malloc(sizeof(Node)); p->data = i; q->next = p; q = q->next; } p->next = NULL; reverse(l,2,4);
//打印链表 for(i = 1;i <= 6;i++) { printf("%d ",l->data); l = l->next; } }
方法3:
struct ListNode { int val; struct ListNode *next; }; struct ListNode* reverseBetween(struct ListNode* head, int m, int n) { if(m == n) return head; // 不用管的情况 struct ListNode h = {0, head}; //设置一个头节点,处理m=1的情况 struct ListNode* p = &h; //指针变量赋值 struct ListNode* tail; for(int i = 1; i <= n; i++) if(i < m) // p指向第n-1个节点位置 p = p->next; else if(i == m) // tail指向第第n个节点,这个节点反转后处在反转部分的最后一个 tail = p->next; else { //每次将tail后面一个节点拿出来,放在p后面 struct ListNode* item = tail->next; tail->next = tail->next->next; item->next = p->next; p->next = item; } return h.next; }

11、输入一个n,当n偶数的情况下计算1/ 2 + 2 / 3 + 3/ 5。。。。, 奇数的时候计算1/ 1 + 1/ 3 + 1/ 5…

//计算1/ 2 + 2 / 3 + 3/ 5。。。。
float caleven(int n){ int i = 2,j =1,k,tmp; float res = 0; for(k = 0;k < n;k++){ res += (float)j / i; tmp = i; i = i + j; j = tmp; } return res; }
//计算1/ 1 + 1/ 3 + 1/ 5… float calodd(int n){ float res = 0; int k,tmp = 1; for(k = 0;k < n;k++) { res += 1.0 / tmp; tmp += 2; } return res; } int main(){ int n ,r; r = scanf("%d",&n); //若输入错误则报错 if(r != 1){ printf("error!"); } else{ if(n <= 0){ printf("error!"); } else{ if(n % 2 == 0){ printf("%f",caleven(n)); } else{ printf("%f",calodd(n)); } } } }
技术分享图片

12、时间复杂度:O(log2 n)     推荐:https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array/solution/xun-zhao-xuan-zhuan-pai-lie-shu-zu-zhong-de-zui-xi/

技术分享图片

思路:二分法

1、判断最小的数是否在第一个位置,若是则返回nums[0];

2、否则,选取中间位置 mid 的数和 r 位置的数进行比较,若nums[mid] < nums[r],说明最小的数在mid之前,r = mid;反之,令 l = mid+1;

3、重复进行,直到 l >= r

void fun(int *nums,int length)
{
    int l = 0;
    int r = length - 1;
    if(nums[l] < nums[r])
    {
        return nums[l];
    }
    while(l < r)
    {
        int mid = (l + r) / 2;
        if(nums[mid] > nums[r])
        {
            l = mid + 1;
        }
        else
        {
            r = mid;
        }
    }
    printf("%d",nums[l]);
}
int main()
{
    int nums[] = {4,5,6,7,1,2};
    int length = sizeof(nums)/sizeof(nums[0]);  //求数组长度
    fun(nums,length);
    return 0;
}

2019 面试题

原文:https://www.cnblogs.com/pam-sh/p/12352975.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!