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/

參考鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM