2019 C笔试题

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函数的功能:求出m和n两个数字的最小公倍数

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

3、【写功能】

3.1

 

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

实例:

输入:m = 5

输出:helloplatoworld

3.2 读程序,写功能,并改错

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

实例:

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

输出:3

3.3 randint是生成【1,n】中的任意一个随机整数, swap是用于交换的函数,要求你说出每个程序的功能, 时间复杂度, 以及缺点和改进。

func1:

Func2:

 

Func3:

 

func1:将产生的随机数随机的插入数组大小为n的数组中,不允许有重复的数字,

func2:看不太懂,貌似只能插入三个随机数,一直死循环下去。可能题目记录出错了

func3:呃呃,看不懂·····

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

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

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

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

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

  1、含义上的不同

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

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

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

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

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

  3、测试阶段上的不同

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

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

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

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

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

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

6 有一个student结构体数组Students[],结构体里面有三个数据num、age、height,现在要对该数组进行升序排序,若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;
}

7 补充一个函数,该函数的功能是将一个字符串第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]);
    }
}

8 反转链表 

参考链接

9 输入一个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));
            }
        }
    }
}

10 寻找寻转排序数组中的最小值 时间复杂度: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/

参考链接

posted @ 2020-02-23 18:00  PamShao  阅读(1162)  评论(0编辑  收藏  举报