广州传智播客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题)
#include
/**
* 交换主调函数只中两个整形变量的值
*
* @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
#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;//返回结构体变量里面的 成员 的值!
}