1. 程式人生 > >廣州傳智播客iOS基礎班C語言考試題目(自我感覺挺簡單的,很多老師講的都沒考到,錯了一道選擇題,加油,OC!)

廣州傳智播客iOS基礎班C語言考試題目(自我感覺挺簡單的,很多老師講的都沒考到,錯了一道選擇題,加油,OC!)

廣州傳智播客iOS基礎班C語言考試題目

考試時間:180分鐘

滿分:100分 及格分數:80分

一、選擇題(共10題,每題5分)

 1. 若有陣列 int arr[2][3];  則對a陣列元素的正確訪問是(C )

    A. arr(1,2)       B. arr[1,3]       C. arr[1>2][!1]        D. arr[2][0]

 2. 若有程式碼: double d1 = 12.56; int num = d1; 請問num變數的值是(C )

    A. 12.56         B. 13            C. 12               D. 13.0

 3. 若有說明語句:

int a, b, c, *d=&c;

    則能正確從鍵盤讀入三個整數,分別賦給變數a、b、c的語句是(A )

   A. scanf("%d%d%d", &a, &b, d);

   B. scanf("%d%d%d", a, b, d);

   C. scanf("%d%d%d", &a, &b, &d);

   D. scanf("%d%d%d", a, b,*d);

 4. 若有語句:

     int num1 = 10;

     int num2 = 4;

     double num3 = num1 / num2;

   請問變數num3的值是(D )

  A.   2.5            B.  3             C .  2              D. 2.0

5. 如有程式碼:

    int i = 1;

    int j = i++;

    printf(“i = %d, j = %d”,i,j);

  請問程式的輸出結果是( C)

  A. i = 1,j = 1       B.  i = 1, j = 2      C. i  = 2, j = 1     D. i = 2, j = 2   //i 已經自增為2了,汗,大意了

6. 如有程式碼:

    int num = 10;

    if(num - 10)

        printf(“哈哈”);

    else

    printf(“呵呵”);

請問該程式碼的執行結果是(C )

  1.  程式碼錯誤,編譯報錯.
  2.   列印  哈哈
  3.   列印  呵呵
  4.   列印  哈哈 呵呵

7. 請問如下迴圈體(最內層的迴圈體)將執行多少次(B )

    for(int i = 0; i < 5; i++) 

    {

for(int j =  0;j < i ; j++) 

       {

printf(“我愛傳智播客!\n”);

}

    }

   A. 5次              B. 10次             C. 15次           D. 20次

8. 有如下程式碼:

int num1 = -4;

int num2 = num1 >> 2;

  請問變數num2的值是多少(A )

   A.  -1                B. 1               C. 16                   D. -16

9.以下敘述中正確的是(A )

  A、C語言程式總是從main函式開始執行

  B、C語言程式所呼叫的函式必須放在main函式的前面

 C、C語言程式中main函式必須放在程式開始位置

 D、C語言程式總是從最前面的函式開始執行

10. 有程式碼如下:

char str[] = “jack”;

int length =  sizeof(str);

printf(“%d”,length);

    請問程式執行的結果是(C )

    A. 10        B. 4        C. 5         D. 6

二、簡答題(共2題,每題10分)

 1. 請簡述break、continue、return這三個關鍵字在C語言中各自的作用.

答:

2. 請簡述C語言中字串資料是如何儲存的.

答:字串在C語言中有兩種儲存方式。

三、程式設計題(共2題)

  1. 請自定義一個函式交換兩個整形變數的值。(10分)

#include <stdio.h>

/**

 *  交換主調函式只中兩個整形變數的值

 *

 *  @param p1 變數1的地址

 *  @param p2 變數2的地址

 */

void exchange2Num(int *p1,int *p2);

int main(int argc, const char * argv[])

{

    int num1 = 1;

    int num2 = 2;

printf("交換前:num1 = %d, num2 = %d\n",num1,num2);

    exchange2Num(&num1,&num2);

printf("交換後:num1 = %d, num2 = %d\n",num1,num2);

    return 0;

}

void exchange2Num(int *p1,int *p2)

{

    *p1 = *p1 ^ *p2;

    *p2 = *p1 ^ *p2;

    *p1 = *p1 ^ *p2;

}

2.  請使用者從控制檯輸入班級的總人數,然後讓使用者依次輸入每一位學生的成績並儲存(20分)

1). 將分數從高到底的列印來.

2). 顯示總分數和平均分. 

3). 去掉3個最低分再顯示總分數和平均分.

//
//  main.c
//  程式設計題2--改進為通過定義結構體返回多個值
//  Created by LongMa on 15/8/16.
//  Copyright (c) 2015年 itcast. All rights reserved.
//2.  請使用者從控制檯輸入班級的總人數,然後讓使用者依次輸入每一位學生的成績並儲存(20分)
//1). 將分數從高到底的列印來.
//2). 顯示總分數和平均分.
//3). 去掉3個最低分再顯示總分數和平均分.

#include <stdio.h>

#define  Dast1_Debug 1
#if Dast1_Debug
#define LOG1(str1,str2)   printf(str1,str2)
#else
#define LOG1(str1,str2)
#endif

#define LOG(str1,str2) printf(str1,str2)//有參巨集定義,方便輸出

/**
 *  讓使用者依次輸入每一位學生的成績並儲存
 */
void userInputScores(int num, float *a);

/**
 *  將分數從高到底排序.
 */
void sortScorsHighTolow(int num, float *a);

/**
 *   輸出分數
 *
 *  @param num 人數
 *  @param a   存成績的陣列的首地址
 */
void showScore(int num,float* a);

/**
 *  求總分和平均分
 *
 *  @return 總分,平均分通過返回結構體成員的值進行修改
 */

//自定義 struct Score 型別含兩個引數的結構體 score。不必用指標也可以用結構體多個元素的特點返回多個值!
typedef struct //匿名結構體,省去了結構體的名字,在用typedef自定義時,可以省略的!
{
    float totalS;
    float avgS;
    
}score;
score totalScore(int num, float *a);

int main(int argc, const char * argv[])
{
    int num = 0;
    LOG("請輸入學生總人數:",NULL);//str2無參可傳,傳NULL
    scanf("%d",&num);
    float a[num];
    
    userInputScores(num, a);
    sortScorsHighTolow(num, a);
    
//    float avgScore1;          //用結構體,省略了這些和下面減除3的多次定義!
//    float* avgS = &avgScore1;
    score score2;
    score2 = totalScore(num, a);
    LOG ("學生總分為:%20.1f\n",score2.totalS);
    LOG ("學生平均分為:%18.1f\n",score2.avgS);
    
    score score3 = totalScore(num - 3, a);
    LOG("------------------------------------------------\n",NULL);
    if (num >3)
    {
        LOG ("去掉3個最低分後學生總分為:%7.1f\n",score3.totalS);
        LOG ("去掉3個最低分後學生平均分為:%6.1f\n",score3.avgS);
    }else
    {
        printf("學生人數不大於3個,無法實現去掉3個最低分的功能!\n");
    }
    
    LOG("------------------------------------------------\n",NULL);
    LOG ("The end!\nWish you love it!\n", NULL);
    LOG("\t\t\t\t- By Dast1\n", NULL);
    LOG("------------------------------------------------\n",NULL);
    return 0;
}

void userInputScores(int num, float *a)
{
    
    for (int i = 0; i < num; i++)
    {
        LOG ("請輸入第%d個學生的成績:", i + 1);
        rewind(stdin);
        scanf("%f", (a + i));
    }
    LOG1("------------------------------------------------\n",NULL);//LOG1(),可通過 Dast1 來控制是否輸出下面的用於除錯的內容。
    LOG1("您輸入的學生成績如下:\n",NULL);//驗證是否儲存正確
    showScore(num, a);
}

void sortScorsHighTolow(int num, float *a)
{
    for (int i = 0; i <= num - 2; i++)//冒泡降序排序
    {
        for (int j = 0; j <= num - 2 - i; j++)
        {
            if (a[j] < a[j + 1])
            {
                float temp = a[j];
                a[j]       = a[j + 1];
                a[j + 1]   = temp;
            }
        }
    }
    LOG("------------------------------------------------\n",NULL);
    LOG("學生成績從高到低輸出如下:\n",NULL);
    showScore(num, a);
}

void showScore(int num,float* a)
{
    for (int j = 0; j < num; j++)
    {
        LOG1 ("%.1f\t\t",a[j]);
    }
    LOG1 ("\n",NULL);
}

score totalScore(int num, float *a)//只是聲明瞭函式的型別,函式裡面肯定要定義新的此型別的變數啊!
{
    score score1;//先定義!
    score1.totalS = 0.0f;
    for (int i = 0; i < num; i++)
    {
        score1.totalS += a[i];
    }
    score1.avgS = score1.totalS / num;
    return score1;//返回結構體變數裡面的 成員 的值!
    
}