廣州傳智播客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 )
- 程式碼錯誤,編譯報錯.
- 列印 哈哈
- 列印 呵呵
- 列印 哈哈 呵呵
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題)
- 請自定義一個函式交換兩個整形變數的值。(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;//返回結構體變數裡面的 成員 的值!
}