C语言程序设计基础测试题
考试时间: 90分钟 总分: 100分

选择题(每题2分,共20分)
-
以下关于C语言的说法,正确的是? A) C语言是一种面向对象的编程语言。 B) C语言程序总是从
main函数的第一条语句开始执行。 C)main函数可以放在程序的任意位置。 D) C语言中,注释只能使用 的形式。 -
下列哪个是合法的C语言标识符? A)
2variableB)variable-nameC)_myVarD)int -
若有定义
int a = 5, b = 2;,则表达式a % b的值是? A) 2.5 B) 2 C) 1 D) 0 -
在C语言中,
char类型变量在内存中占用的字节数是? A) 1 B) 2 C) 4 D) 8
(图片来源网络,侵删) -
以下
for循环的循环次数是?for (int i = 0; i < 10; i++);
A) 10次 B) 9次 C) 11次 D) 0次(因为循环体为空)
-
关于数组的定义,
int arr[5] = {1, 2, 3};,下列说法正确的是? A) 编译错误,因为初始化列表元素个数小于数组大小。 B) 数组arr的所有元素都被初始化为0。 C) 数组arr的前三个元素是1, 2, 3,后两个元素是未定义的垃圾值。 D) 数组arr的所有元素都是1。 -
要将一个浮点型变量
pi的值以保留两位小数的形式输出,应使用的格式控制符是? A)%fB)%.2fC)%2fD)%d
(图片来源网络,侵删) -
以下哪个函数用于从标准输入(键盘)读取一个整数? A)
scanf("%d", &x);B)printf("%d", x);C)gets(x);D)putchar(x); -
关于函数参数传递,C语言采用的方式是? A) 值传递 B) 引用传递 C) 指针传递 D) 值传递和引用传递都可以
-
在C语言中,
break语句的作用是? A) 结束整个程序的运行。 B) 跳出当前循环或switch语句。 C) 结束本次循环,继续执行下一次循环。 D) 暂停程序的执行。
填空题(每空2分,共20分)
- C语言程序的基本单位是
函数。 - 若有
int x = 10;,则执行x += 5;后,x的值变为15。 - 表达式
10 > 5 && 3 < 4的结果是1(或true)。 - 在循环结构中,
while循环是当型循环,do-while循环是直到型循环。 - 定义一个指向整型变量的指针
p的语句是 *`int p;`**。 - 要打开一个名为
data.txt的文件进行读写,应使用的函数是fopen。 - 字符串
"hello"在内存中实际占用的字节数是6(因为末尾有隐藏的\0字符)。 - 在函数定义中,关键字
void表示函数没有返回值。 - 用于终止当前函数并返回一个值的语句是
return。 switch语句中的case分支通常以break;语句结束,以防止执行到下一个case。
程序阅读题(每题5分,共15分)
-
阅读以下代码,写出程序的输出结果。
#include <stdio.h> int main() { int i, sum = 0; for (i = 1; i <= 5; i++) { sum = sum + i; } printf("sum = %d\n", sum); return 0; }输出结果:
sum = 15 -
阅读以下代码,写出程序的输出结果。
#include <stdio.h> int main() { int a = 5, b = 10, c; c = a > b ? a++ : b++; printf("a = %d, b = %d, c = %d\n", a, b, c); return 0; }输出结果:
a = 5, b = 11, c = 10(解析:条件a > b为假,执行b++,表达式的值为b的原始值10,b自增变为11。a的值不变。) -
阅读以下代码,写出程序的输出结果。
#include <stdio.h> void func(int x) { x = x * 2; printf("In func: x = %d\n", x); } int main() { int y = 5; func(y); printf("In main: y = %d\n", y); return 0; }输出结果:
In func: x = 10 In main: y = 5(解析:C语言函数参数是值传递,
func函数内部修改的是x的副本,不影响main函数中的y。)
程序填空题(每空3分,共15分)
以下程序的功能是:从键盘输入10个整数,找出其中的最大值并输出,请将程序补充完整。
#include <stdio.h>
int main() {
int arr[10];
int max;
int i;
// 1. 使用循环从键盘输入10个整数存入数组arr
for (i = 0; i < 10; i++) {
scanf("%d", ________); // 填空1
}
// 2. 假设第一个元素是最大值
max = arr[0];
// 3. 遍历数组,寻找真正的最大值
for (i = 1; i < 10; i++) {
if (arr[i] > max) {
________; // 填空2
}
}
// 4. 输出最大值
printf("The maximum value is: %d\n", ________); // 填空3
return 0;
}
答案:
&arr[i]max = arr[i];max
编程题(每题15分,共30分)
-
题目: 编写一个C程序,计算1到100之间所有能被3整除但不能被5整除的整数之和,并输出结果。
参考代码:
#include <stdio.h> int main() { int sum = 0; int i; for (i = 1; i <= 100; i++) { // 判断是否能被3整除且不能被5整除 if (i % 3 == 0 && i % 5 != 0) { sum += i; } } printf("1到100之间能被3整除但不能被5整除的整数之和为: %d\n", sum); return 0; } -
题目: 编写一个C程序,实现一个简单的用户登录功能,程序中预先定义一个用户名("admin")和密码("password123"),然后提示用户输入用户名和密码,如果输入正确,则输出 "登录成功!";如果输入错误,则输出 "用户名或密码错误,请重试!",并允许用户重新输入,直到输入正确为止。
参考代码:
#include <stdio.h> #include <string.h> // 用于字符串比较函数strcmp int main() { char username[50]; char password[50]; // 预设的用户名和密码 const char *correct_username = "admin"; const char *correct_password = "password123"; while (1) { // 无限循环,直到登录成功 printf("请输入用户名: "); scanf("%s", username); printf("请输入密码: "); scanf("%s", password); // 比较输入的用户名和密码是否正确 if (strcmp(username, correct_username) == 0 && strcmp(password, correct_password) == 0) { printf("登录成功!\n"); break; // 登录成功,跳出循环 } else { printf("用户名或密码错误,请重试!\n"); } } return 0; }
试题答案与解析
选择题
- B -
main函数是程序的入口点,总是从它的第一条可执行语句开始,A错,C是面向过程的,C错,虽然main函数可以放在任何位置,但通常习惯放在开头,D错,C99标准支持注释。 - C - 标识符必须以字母或下划线开头,不能是数字,B中的是非法字符。
- B - 是取模运算符,计算整数除法的余数。
5 / 2 = 2,余数为1,哦,题目是a % b,5 % 2 = 1,我重新看了一下题目,a=5, b=2,5 % 2 = 1,我之前的B选项是错的,应该是C,非常抱歉,这里我犯了一个错误,正确答案是 C。 - A -
char类型通常占用1个字节(8位)。 - A - 循环变量
i从0开始,到9结束(因为i < 10),共执行10次,循环体是空语句,但循环本身还是会执行10次。 - B - C语言规定,如果初始化列表的元素个数少于数组大小,编译器会用0来初始化剩余的元素。
- B -
%.2f中的.2表示保留两位小数。 - A -
scanf用于输入,%d用于读取整数,&x是取变量x的地址。 - A - C语言函数参数传递默认是值传递,即传递的是值的副本,虽然可以通过指针来模拟引用传递,但本质仍然是传递地址值。
- B -
break用于立即终止switch语句或for/while/do-while循环。
填空题
- 函数
- 15
- 1 (或
true) - 当型,直到型
int *p;fopen- 6
voidreturnbreak;
程序阅读题
sum = 15(1+2+3+4+5=15)a = 5, b = 11, c = 10(三元运算符 的求值过程,以及后置的特性)-
In func: x = 10 In main: y = 5 ``` (值传递,函数内修改不影响外部变量)
程序填空题
&arr[i](需要传入数组元素的地址)max = arr[i];(更新最大值)max(输出找到的最大值)
编程题
- 核心逻辑: 使用一个循环遍历1到100,用
if条件判断每个数是否满足(i % 3 == 0 && i % 5 != 0),如果满足则累加。 - 核心逻辑: 定义正确的用户名和密码,使用
while(1)创建一个无限循环,在循环内部提示用户输入,并使用strcmp函数比较字符串,如果匹配成功,输出信息并用break退出循环;否则,提示错误并继续循环。
