大二上C语言速览
大二上C语言速览
模拟题一
一、填空题(每小空 2 分,共 28 分)
- 链表的结点类型包含两类成员:____ 和 ____。
- 对一个链表进行操作,首先必须找到链表的 ____ 结点,为此设置了 ____ 专门存放该结点的地址。
- 标准库函数不是 C 语言本身的组成部分,它是由 ____ 提供的功能函数。
- C 程序是以 ____ 为单位,整个程序由 ____ 组成。
- 程序链接过程是将目标程序、____ 或其他目标程序链接装配成可执行文件。
- 因为源程序是 ____ 类型的文件,所以它可以用具有文本编辑功能的任何编辑程序完成编辑。
- C 语言词类主要分为 、、____ 和 ____ 等。
- C 程序是由函数构成的。其中有并且只能有 ____ 个主函数。C 语言程序的执行总是由 ____ 函数开始,并且在 ____ 函数中结束(如别的函数未调用终止程序执行的库函数)。
二、单选题(每小题 3 分,共 33 分)
-
在 C 语言中,引用数组元素时,其数组下标的数据类型允许是 ____。
- A.整型常量
- B.整型表达式
- C.整型常量或整型表达式
- D.任何类型的表达式
-
已知:
int a[10];则对a数组元素的正确引用是 ____。- A.
a[10] - B.
a[3.5] - C.
a(5) - D.
a[10-10]
- A.
-
已知:
char s[5], c; register int b;则调用函数scanf的正确语句是 ____。- A.
scanf("%s%c", s, c); - B.
scanf("%d%c", &b, &c); - C.
scanf("%d%c", b, &c); - D.
scanf("%s%c", s, &c);
- A.
-
合法的数组说明语句是 ____。
- A.
int a[]="string"; - B.
int a[5]={0,1,2,3,4,5}; - C.
char a="string"; - D.
char a[]={0,1,2,3,4,5};
- A.
-
已知:
int a[][3]={1,2,3,4,5,6,7};则数组a的第一维的大小是 ____。- A.2
- B.3
- C.4
- D.无确定值
-
在下述对 C 语言字符数组的描述中错误的是 ____。
- A.字符数组可以存放字符串
- B.字符数组中的字符串可以进行整体输入输出
- C.可以在赋值语句中通过赋值运算符 “=” 对字符数组整体赋值
- D.字符数组的下标从 0 开始
-
已知:
int a[3][4];则对数组元素的非法引用是 ____。- A.
a[0][2*1] - B.
a[1][3] - C.
a[4-2][0] - D.
a[0][4]
- A.
-
在 C 语言中,二维数组元素在内存中的存放顺序是 ____。
- A.按行存放
- B.按列存放
- C.由用户自己定义
- D.由编译器决定
-
若有以下语句,则正确的描述是 ____。
static char x[]="12345"; static char y[]={ '1', '2', '3', '4', '5' };
- A.x 数组和 y 数组的长度相同
- B.x 数组长度大于 y 数组长度
- C.x 数组长度小于 y 数组长度
- D.x 数组等价于 y 数组
10
已知:char str1[10], str2[10]={"books"}; 则在程序中能够将字符串 "books" 赋给数组 str1 的正确语句是 ____。
- A.
str1 = {"Books"}; - B.
strcpy(str1, str2); - C.
str1 = str2; - D.
strcpy(str2, str1);
11
若用数组名作为函数调用时的实参,则实际上传递给形参的是 ____。
- A.数组首地址值
- B.数组的第一个元素
- C.数组中全部元素的值
- D.数组元素的个数
三、看程序写结果(每小题 7 分,共 21 分)
1)写出下面程序运行后文件 “test.txt” 中的内容
#include <stdio.h>
#include <string.h>
void fun(char *fname, char *st)
{
int i;
FILE *fp;
fp = fopen(fname, "w");
for (i = 0; i < strlen(st); i++)
fputc(st[i], fp);
fclose(fp);
}
void main()
{
fun("test.txt", "new world");
fun("test.txt", "hello");
}
2)写出下面程序实现的功能
#include <stdio.h>
void main()
{
char ch, *p, s[81];
FILE *fp;
fp = fopen("B1.txt", "a");
printf("Input a string:\n");
gets(s);
for (p = s; *p != '\0'; p++)
fputc(*p, fp);
fputc('\0', fp);
fclose(fp);
}
3)写出程序的功能和文件 file1.txt 中的内容
#include <stdio.h>
#include <stdlib.h>
void main()
{
FILE *fp;
char str[20] = "ab123mn#";
int i = 0;
if ((fp = fopen("file.txt", "w")) == NULL)
{
printf("can not open this file!\n");
exit(0);
}
for (i = 0; str[i] != '#'; i++)
{
if (str[i] >= 'a' && str[i] <= 'z')
str[i] = str[i] - 32;
fputc(str[i], fp);
}
fclose(fp);
}
四、编程题(18 分)
设已经存在一个文本文件 “file.txt”,编程实现在屏幕输出该文件的第 m 行到第 n 行 的内容,m、n 的值从键盘输入,要求输入时 m > n(m > 0,n > 0)。
- 若输入的 m 值 超出了文件的总行数,则应输出错误提示信息。
- 若输入的 n 值 超出了文件的总行数,也应进行适当的处理。
【提示】在使用
fgets函数时通过对其返回值进行判断,可以知道文件是否结束。
模拟题二
C语言练习题(二)
一、单选题
1
C 语言中用( )表示逻辑值“真”
- A) true
- B) 整数 0
- C) 非零值
- D) T
2
表示关系 x≥y≥z 的 C 语言表达式是( )
- A)
(x>=y)&&(y>=z) - B)
(x>=y)&d(y>=z) - C)
x>=y>=z - D)
(x>=y)||(y>=z)
3
已知 char ch='G'; 则以下表达式的值是( )
ch = (ch>='A' && ch<='Z') ? (ch+32) : ch;
- A) A
- B) a
- C) Z
- D) g
4
设有定义:int x=0, y=0, z=0;,则输出结果是( )
++x && ++y && ++z;
printf("%d, %d, %d", x, y, z);
- A) 1,0,0
- B) 1,1,1
- C) 1,1,0
- D) 1,0,1
5
设有定义 int a=3, y=4, z=5; 则表达式 !(x+y)+z-1 && y+z/2 的值是( )
- A) 0
- B) 1
- C) 4
- D) 4.5
6
以下程序段的输出结果是( )
char c = 'a';
if ('a' < c <= 'z') printf("LOW");
else printf("UP");
- A) LOW
- B) UP
- C) LOWUP
- D) 语法错误
7
以下程序段的输出结果是( )
int x = 5;
if (x-- < 5)
printf("%d", x);
else
printf("%d", x++);
- A) 3
- B) 4
- C) 5
- D) 6
二、程序填空题(每小空 3 分,共 12 分)
1
以下程序中实现从主串 str 中取出一子串 sub,n 表示取出的起始位置,m 表示所取子串的字符个数,程序运行后输出 cdefg。
#include <stdio.h>
void main()
{
char str[100] = "abcdefgh", sub[100], *p = str, *psub = sub;
int n = 3, m = 5;
for (p = str + n - 1; p < str + ________; p++, ________)
*psub = *p;
________;
puts(sub);
}
2
以下程序功能是:当输入学生序号(1 或 2 或 3)后,能输出该学生的全部成绩(共有三位学生,每位学生有 4 门成绩)。
#include <stdio.h>
void main()
{
float score[][4] = {
{60, 70, 80, 90},
{56, 89, 67, 88},
{34, 78, 90, 66}
};
float (*p)[4];
int n, i;
p = ________;
scanf("%d", &n);
printf("序号为%d 的学生成绩是:", n);
for (i = 0; i < 4; i++)
printf("%5.1f", p________);
}
三、看程序写结果(每小题 6 分,共 24 分)
1)写出下面程序的输出结果
#include <stdio.h>
void main()
{
int a = 2, b = 1, c = 2;
if (a < b)
if (b < 0) c = 0;
else c += 1;
printf("%d\n", c);
}
2)写出下面程序的输出结果
#include <stdio.h>
void main()
{
int x = 1, y = 0, a = 0, b = 0;
switch (x)
{
case 1:
switch (y)
{
case 0: a++; break;
case 1: b++; break;
}
case 2:
a++; b++; break;
}
printf("a=%d, b=%d\n", a, b);
}
3)写出程序的运行结果
struct ntype
{
int a;
char b;
};
void fun(struct ntype y)
{
y.a = 20;
y.b = 'N';
}
void main()
{
struct ntype x = {10, 'Y'};
fun(x);
printf("%d,%c", x.a, x.b);
}
4)写出程序的运行结果
#include <stdio.h>
struct
{
int a, b;
struct
{
int x, y;
} ins;
} outs;
void main()
{
outs.a = 7;
outs.b = 4;
outs.ins.x = outs.a + outs.b;
outs.ins.y = outs.a - outs.b;
printf("%d, %d", outs.ins.x, outs.ins.y);
}
四、简答题(每小题 5 分,共 10 分)
- 论述 C 语言中的指针和数组的关系。
- 写出结构体和联合的区别和用途。
五、编程题(26 分)
1(13 分)
定义一个结构体类型包含年、月、日 3 个成员,编写函数求两个日期之间的天数。
2(13 分)
设有 10 名员工,每个员工的信息包括:员工编号、姓名、年龄、工资。要求:
- 在
main函数中输入 10 名员工的信息 - 编写 2 个函数:
- 一个函数找出年龄最大的员工并输出他的信息
- 另一个函数按工资由高到低对员工信息进行排序
- 最后在
main中输出排序后的员工信息
练习题
第一章 C语言概述
一、选择题
- C语言规定,必须用______作为主函数名。
A) Function B) Include C) main D) stdin - 一个C程序可以包含任意多个不同名的函数,但有且仅有一个______,一个C程序总是从______开始执行。
A) 过程 B) 主函数 C) 函数 D) include - ______是C程序的基本构成单位。
A) 函数 B) 函数和过程 C) 程序段 D) 子程序 - 下列说法正确的是______。
A) 一个函数的函数体必须要有变量定义和执行部分,二者缺一不可
B) 一个函数的函数体必须要有执行部分,可以没有变量定义
C) 一个函数的函数体可以没有变量定义和执行部分,函数可以是空函数
D) 以上都不对 - 下列说法正确的是______。
A) main函数必须放在C程序的开头
B) main函数必须放在C程序的最后
C) main函数可以放在C程序中间部分,执行C程序时是从程序开头执行的
D) main函数可以放在C程序中间部分,执行C程序时是从main函数开始的 - 下列说法正确的是______。
A) 在执行C程序时不是从main函数开始的
B) C程序书写格式严格限制,一行内必须写一个语句
C) C程序书写格式自由,一个语句可以分写在多行上
D) C程序书写格式严格限制,一行内必须写一个语句,并要有分号 - 在C语言中,每个语句和数据定义是用______结束。
A) 句号 B) 逗号 C) 分号 D) 括号 - 下列字符串是合法的自定义标识符的是______。
A) _HJ B) ?_student C) int D) LINE 1 - ______不是C语言提供的合法关键字。
A) switch B) print C) case D) default - C语言提供的合法关键字是______。
A) break B) print C) funiton D) end - C语言提供的合法关键字是______。
A) continue B) procedure C) begin D) append
二、填空题
- 一个C程序至少包含一个______,即______。
- 一个函数由两部分组成,它们是______和______。
- 函数体的范围是______。
- 函数体一般包括______和______。
- C语言是通过______来进行输入输出的。
- 在 C 语言中,凡在一个标识符后面紧跟着一对圆括弧,就表明它是一个 ______。
- 主函数名后面的一对圆括号中间可以为空,但一对圆括号不能 ______。
第一章 答案
一、选择题
1-5 C B A C D
6-10 C C A B A
11 A
二、填空题
- 主函数 main 函数
- 函数的说明部分 函数体
- 最外层的一对大括号内的部分
- 变量定义部分 执行部分
- 输入和输出函数
- 函数
- 省略
第二章 数据类型、运算符与表达式
一、选择题
- 在 C 语言中,下列数据类型属于基本类型的是______。
A) 整型、浮点型、字符型
B) 共用体类型、整型
C) 结构体类型、浮点型
D) 指针类型、字符型 - C 语言中不能表示的整型常量进制是______。
A) 十进制 B) 十六进制 C) 八进制 D) 二进制 - 在 C 语言中,转义字符回车换行是______。
A) \n B) \t C) \r D) \b - 在 ASCII 码表中可以看到每个小写字母的 ASCII 码比相应的大写字母______。
A) 大 32 B) 大 64 C) 小 32 D) 小 64 - 设 d 为字符变量,下列表达式能够完整正确赋值的是______。
A) d = 297 B) d = 'a' C) d = "a" D) d = "abc" - 10 + 'a' + 1.5 - 567.345 / 'b' 的结果是______型数据。
A) char B) double C) int D) float - 语句
int i = 3;
k = (i++) + (i++) + (i++);
执行过后 k 的值为______,i 的值为______。
A) 9, 6 B) 12, 5 C) 18, 6 D) 15, 5
int i = 3;
printf("%d", i++);
的输出结果为______,输出后 i 的值为______。
A) -3, 4 B) -4, 4 C) -4, 3 D) -3, 3
- 已知在 ASCII 字符集中,数字 0 的序号为 48,下面程序的输出结果为______。
#include <stdio.h>
void main()
{
char x, y;
x = '0'; y = '9';
printf("%d,%c\n", x, y);
}
A) 因输出格式不合法,输出错误信息
B) 48, 9
C) 0, 9
D) 0, 57
- 已知在 ASCII 集中,字母 A 的序号为 65,下面程序的输出结果为______。
#include <stdio.h>
void main()
{
char c1 = 'Y', c2 = 'B';
printf("%c,%c\n", ++c1, c2--);
}
11. C 语言中,运算对象必须是整型数的运算符是______。
A) * B) / C) % 和 / D) %
12. 下列常数中,合法的 C 语言常量是______。
A) "un" B) e-310 C) abc D) '1234'
13. 下面程序的输出结果是______。
#include <stdio.h>
void main()
{
int x = 2, y = 0, z;
x *= 3 + 2; printf("%d", x);
x = y - z = 4; printf("%d", x);
}
A) 8 40 B) 10 40 C) 10 4 D) 8 4
14. 若已定义 x 和 y 为 double 类型,则表达式 x=1, y=x+3/2 的值为______。
A) 1 B) 2 C) 2.0 D) 2.5
15. 表达式 (int)2.1416 的值为______。
A) 2 B) 2.1 C) 0 D) 3
16. C 语言规定标识符由______等字符组成。
A) 字母、数字、下划线
B) 中划线、字母、数字
C) 字母、数字、逗号
D) 字母、下划线、中划线
17. 若有如下定义:int a=2,b=3; float x=3.5,y=2.5; 则表达式:
(float)(a+b)/2+(int)x%y 的值是______。
A) 2.500000 B) 3.500000 C) 4.500000 D) 5.000000
18. 已知字母 A 的 ASCII 码为十进制 65,下面程序段的运行结果为:______。
char ch1, ch2;
ch1 = 'A' + 2; ch2 = 'D' - 3;
printf("%d, %c\n", ch1, ch2);
A) 67, 65 B) C, A C) C, D D) 67, A
19. 设 x、y 均为 float 型变量,则以下不合法的赋值语句是______。
A) x += y; B) y = (x % 2) / 10;
C) x * = y + 8; D) x = y = 0;
20. 设有以下定义,则能使值为 3 的表达式是:______。
int k = 7, x = 12;
A) x % = (k % = 5)
B) x % = (k - k % 5)
C) x % = k
D) (x % = k) - (k % = 5)
二、填空题
- 在 C 语言中,程序运行期间,其值不能被改变的量叫______。
- 在 C 语言中,要求对所有变量,遵循先定义后______的原则。
- 可以用来表示 C 的整数常数的进制是______、**、****。
- 浮点型变量分为______和______,即 float 和 double 型。
- C 的字符串常量是用______括起来的一组字符,字符串常量用______括起来的一组字符。
- 在一个变量定义语句中可以同时定义多个变量,变量之间用______隔开。
- 下面的程序运行结果为______。
#include <stdio.h>
void main()
{
char c1, c2;
c1 = 'a'; c2 = 'b';
c1 = c1 - 32; c2 = c2 - 32;
printf("%c %c", c1, c2);
}
- 表达式
10 + 'a' + 1.5 - 0.5 * 'b'的结果是______。 - 在 C 语言中,可以利用______,将一个表达式的值转换成指定的类型。
- 运行后
i, j, m, n的值是______。
#include <stdio.h>
void main()
{
int i, j, m, n;
i = 8; j = 10;
m = ++i; n = j++;
printf("%d,%d,%d,%d", i, j, m, n);
}
第二章 答案
一、选择题
1-5 A D A A B
6-10 B A A B C
11-15 D A B C A
16-20 A B C B A
二、填空题
- 常量
- 使用
- 八进制、十进制、十六进制
- 单精度、双精度
- 单引号、双引号
- 逗号
- A B
- 59.5
- 强制类型转换
- 9, 11, 9, 10
第三章 顺序结构程序设计
一、选择题
- 下列说法正确的是______。
A) 输入项可以是一个浮点型常量,如scanf("%f", 4.8);
B) 只有格式控制,没有输入项也能进行正确输入,如scanf("%d,%d", &a, &b);
C) 当输入一个浮点型数据时,格式控制部分应规定小数点后的位数,如scanf("%5.3f", &f);
D) 输出数据时,必须指明变量的地址,如scanf("%f", &f); - 根据题目中已给出的数据的输入和输出形式,程序中输入/输出语句的正确是______。
#include <stdio.h>
void main()
{
int a; float x;
printf("input a,x:");
// 输入语句
// 输出语句
}
输入形式:
input a,x: 3 2.1
输出形式:
a+x=5.10
A)
scanf("%d,%f",&a,&x);
printf("na+x=%4.2f",a+x);
B)
scanf("%d %f",&a,&x);
printf("\na+x=%4.2f",a+x);
C)
scanf("%d %f",&a,&x);
printf("\na+x=%6.1f",a+x);
D)
scanf("%d %3.1f",&a,&x);
printf("\na+x=%4.2f",a+x);
- 以下程序的输出结果是______。
#include <stdio.h>
void main()
{
int i = 010, j = 10, k = 0x10;
printf("%d,%d,%d\n", i, j, k);
}
A) 8,10,16 B) 8,10,10 C) 10,10,10 D) 10,10,16
- 以下程序的输出结果是______。
#include <stdio.h>
void main()
{
char c1='6', c2='0';
printf("%c,%c,%d,%d\n", c1, c2, c1-2, c1+c2);
}
A) 因输出格式不合法,输出出错信息
B) 6,0,6,102
C) 6,0,7,6
D) 6,0,5,7
设有如下定义
int x = 10, y = 3, z;
则语句
printf("%d\n", z = (x % y, x / y));
的输出结果是 ______。
A. 3
B. 0
C. 4
D. 1
6. 设有如下定义
int x = 10, y = 5, z;
则语句
printf("%d\n", z = (x += y, x / y));
的输出结果是 ______。
A. 1
B. 0
C. 4
D. 3
7. 根据定义和数据的输入方式,输入语句的正确形式为 ______。
已定义:
float a1, a2;
输入:
4.523
3.52
A.
scanf("%f %f", &a1, &a2);
B.
scanf("%f,%f", a1, a2);
C.
scanf("%4.3f,%3.2f", &a1, &a2);
D.
scanf("%4.3f %3.2f", a1, a2);
二、填空题
1. putchar 函数的作用是 ______,getchar 函数的作用是 ______。
2. printf 函数的“格式控制”包括两部分,分别是 ______ 和 ______。
3. 不同类型的输出内容有不同的格式字符,其中
- ______ 是用来按十进制整数形式输出一个整型数;
- ______ 是用来按格式输出一个浮点数;
- ______ 是用来输出一个字符。
4. 符号 && 是 ______ 运算符,& 是指 ______。
5. 复合语句是由一对 ______ 括起来的若干语句组成。
6. 分析下面程序:
#include <stdio.h>
void main()
{
int x = 2, y, z;
x *= 3 + 2; printf("%d ", x);
x *= y = z = 4; printf("%d ", x);
x = y = z; printf("%d ", x);
x = (y = z); printf("%d ", x);
}
程序的输出结果为 ______。
7. 编制程序对实数 a 与 b 进行加、减、乘、除计算,要求显示如下结果:
jia = 70
jian = 30
cheng = 1000
chu = 2
程序:
#include <stdio.h>
void main()
{
________ (1)
a = 50;
b = 20;
printf("jia=%d\n", ________ (2));
printf("jian=%d\n", ________ (3));
printf("cheng=%d\n", ________ (4));
printf("chu=%d\n", ________ (5));
}
将缺少的部分填在空白处。
8. 以下程序的输出结果为:________。
#include <stdio.h>
void main()
{
char c1, c2;
c1 = 'a';
c2 = 'b';
printf("%c\n%c", c1 - 32, c2);
}
三、编程题
1.
请编写一个程序,能显示出以下两行文字:
I am a student.
I love China.
2.
请编写一个程序,从键盘上输入
a = 2, b = 3.4, c = 'D'
向屏幕输出对应的 a、b、c 的值。
第三章 答案
一、选择题
1–5 D B A B A
6–7 D A
二、填空题
-
向终端输出一个字符 从终端输入一个字符
-
格式说明 普通字符
-
%d%f%c -
取地址
a在内存中的地址 -
大括号
-
10 40 44
-
(1) int bbb a, b; (2) a + b (3) a - b (4) a * b (5) a / b -
A b
三、编程题
1.
#include <stdio.h>
void main()
{
printf("I am a student.\n");
printf("I love China.\n");
}
2.
#include <stdio.h>
void main()
{
int a;
float b;
char c;
scanf("%d%f%c", &a, &b, &c);
printf("a=%d,b=%f,c=%c\n", a, b, c);
}
第四章 选择结构程序设计
一、选择题
1.
以下关于运算符优先级的描述中,正确的是 ______。
A. (逻辑非) > 算术运算 > 关系运算 > &&(逻辑与) > ||(逻辑或) > 赋值运算
B. &&(逻辑与) > 算术运算 > 关系运算 > 赋值运算
C. 关系运算 > 算术运算 > &&(逻辑与) > ||(逻辑或) > 赋值运算
D. 赋值运算 > 算术运算 > 关系运算 > &&(逻辑与) > ||(逻辑或)
2.
逻辑运算符的运算对象的数据类型 ______。
A. 只能是 0 或 1
B. 只能是 true 或 false
C. 只能是真或假
D. 任何类型的数据
3.
能正确表示 x 的取值范围在 [0,100] 和 (-10,-5) 的表达式是 ______。
A. (x>=-10)&&(x<=-5)||((x>0)&&(x<100))
B. (x>-10)&&(x<-5)||(x>=0)&&(x<=100)
C. (x>=-10)&&(x<=-5)&&(x>=0)&&(x<=100)
D. (x>-10)&&(x<-5)&&(x>=0)&&(x<=100)
4.
以下程序的运行结果是 ______。
#include <stdio.h>
void main()
{
int c, x, y;
x = 1; y = 1; c = 0;
c = x++ || y++;
printf("\n%d%d%d\n", x, y, c);
}
A. 110
B. 211
C. 011
D. 001
5.
判断字符变量 ch 为大写字母的表达式是 ______。
A. 'A' <= ch <= 'Z'
B. (ch >= 'A') && (ch <= 'Z')
C. (ch >= 'A') && (ch <= 'Z')'
D. A <= ch <= Z
6.
以下 if 语句书写正确的是 ______。
A.
if(x=0);
printf("%f", x);
else
printf("%f", -x);
B.
if(x>0)
{ x = x + 1; printf("%f", x); }
else
printf("%f", -x);
C.
if(x>0);
{ x = x + 1; printf("%f", x); }
else
printf("%f", -x);
D.
if(x>0)
{ x = x + 1; printf("%f", x); }
else
printf("%f", -x); }
7.
若已知 a=10, b=20,则表达式 a<b 的值为 ______。
A. 10
B. 20
C. 1
D. 0
8.
写出下列程序的执行结果 ______。
#include <stdio.h>
void main()
{
int x = 6, y = 0;
if(y = 1) x = 5;
printf("%d\t", x);
if(y = 0) x = 3;
else x = 4;
printf("%d\t\n", x);
}
A. 5 3
B. 5 4
C. 5 3
D. 6 5
9.
下列程序段运行后 x 的值是 ______。
a = b = c = 0; x = 35;
if(a) x = -1;
else if(0);
if(c) x = 3;
else x = 4;
A. -1
B. 4
C. 35
D. 3
10.
若有以下函数关系:
y = 2x x < 0
y = x + 1 x = 0
y = x x > 0
下面程序能正确表示以上关系的是 ______。
A.
y = 2 * x;
if(x != 0)
if(x > 0) y = x;
else y = x + 1;
B.
y = 2 * x;
if(x <= 0)
if(x == 0) y = x + 1;
else y = x;
C.
if(x >= 0)
if(x > 0) y = x;
else y = x + 1;
else y = 2 * x;
D.
y = x + 1;
if(x <= 0)
if(x < 0) y = 2 * x;
else y = x;
11.
若有变量定义 float x; int y;,则正确的 switch 语句是 ______。
A.
switch(x)
{
case 1: printf("*\n");
case 2: printf("*\n");
}
B.
switch(x)
{
case 1~2: printf("*\n");
case 3~4: printf("*\n");
}
C.
switch(y)
{
case '1': printf("*\n");
case '2': printf("*\n");
}
D.
switch(y)
{
case 1: printf("*\n");
case 2: printf("*\n");
}
12.
当 a=1, b=3, c=5, d=4 时,执行下列程序后 x 的值为 ______。
if(a < b)
if(c < d) x = 1;
else
if(a < c)
if(b < d) x = 2;
else x = 3;
else x = 6;
else x = 7;
A. 1
B. 2
C. 3
D. 6
13.
设有如下定义:char ch='z';,则执行下面语句后变量 ch 的值为 ______。
ch = ('A' <= ch && ch <= 'Z') ? (ch + 32) : ch;
A. A
B. a
C. Z
D. z
14.
已知 int x=30, y=50, z=80;,以下语句执行后变量 x、y、z 的值分别为 ______。
if(x > y || x < z && y > z)
z = x; x = y; y = z;
A. x=50, y=80, z=80
B. x=50, y=30, z=30
C. x=30, y=50, z=80
D. x=80, y=30, z=50
15.
switch(表达式) 括号内表达式 c 的类型是 ______。
A. 可以是任意类型
B. 只能为整型
C. 可以是整型或字符型
D. 可以为整型或浮点型
二、填空题
1.
在 C 语言中,对于 if 语句,else 子句与 if 子句的配对规则是 ______。
2.
以下两条 if 语句可合并成一条 if 语句 ______。
if(a <= b) x = 1;
else y = 2;
if(a > b) printf("****");
else printf("####");
3.
设有程序片段如下:
switch(class)
{
case 'A': printf("GREAT!\n");
case 'B': printf("GOOD!\n");
case 'C': printf("OK!\n");
case 'D': printf("NO!\n");
default: printf("ERROR!\n");
}
若 class 的值为 'C',则输出结果是 ______。
4.
x 是 0~100 之间的整数,根据以下 if 语句写出等价的 switch 语句。
if(x < 60) m = 1;
else if(x < 70) m = 2;
else if(x < 80) m = 3;
else if(x < 90) m = 4;
else m = 5;
switch( ______ (1) )
{
______ (2) m = 5; break;
case 6: m = 2; break;
case 7: m = 3; break;
case 8: m = 4; break;
______ (3) m = 1;
}
5.
输入 3 个实数 a, b, c,要求按从大到小顺序输出三个数。
#include <stdio.h>
void main()
{
float a, b, c, t;
scanf("%f,%f,%f", &a, &b, &c);
if(a < b)
{
t = a; ______ (1) b = t;
}
if( ______ (2) )
{
t = a; a = c; c = t;
}
if(b < c)
{
______ (3) b = c; c = t;
}
}
6.
输入一个字符,如果是大写字母,则把其变成小写字母;如果是小写字母,则变成大写字母;其它字符不变。请在括号内填入缺少的内容。
#include <stdio.h>
void main()
{
char ch;
scanf("%c", &ch);
if( ______ (1) )
ch = ch + 32;
else
if(ch >= 'a' && ch <= 'z')
______ (2)
printf("%c\n", ch);
}
7. 用 C 语言描述:
a小于b或小于c______a和b都大于c______a或b中有一个小于c______a是奇数 ______
三、编程题
1.
编程实现:输入长方形的两个边长 a、b 和一个整数 k。
- 当
k=1时,输出长方形的周长 - 当
k=2时,输出长方形的面积 - 当
k=3时,输出长方形的周长和面积
2.
编程输入 x,输出对应的 y:
x^2 (x < 0)
y = -2x + 10 (0 ≤ x < 10)
x - 5 (x ≥ 10)
3.
分别用 if 和 switch 编程:
输入 0~100 分成绩,输出相应的成绩档次。规定:
- 90 分以上为
'A' - 80~89 分为
'B' - 70~79 分为
'C' - 60~69 分为
'D' - 60 分以下为
'E'
第四章 答案
一、选择题
A D B B C B C B B C D B D A C
二、填空题
- else 与它前面最近的一个未匹配的 if 配对
if(a<=b)
{ x=1; printf("####"); }
else
{ y=2; printf("****"); }
OK!
NO!
ERROR!
(1) x/10
(2) case 10: case 9:
(3) default:
(1) a=b;
(2) a<c
(3) t=b;
(1) ch>='A' && ch<='Z'
(2) ch=ch-32;
(1) a<b || a<c
(2) a>c && b>c
(3) a<c || b<c
(4) a%2==1
三、编程题
1.
#include <stdio.h>
void main()
{
int k;
float a, b, l, s;
printf("请输入长方形的边长 a、b \n");
scanf("%f%f", &a, &b);
printf("请输入整数 k\n");
scanf("%d", &k);
switch(k)
{
case 1:
l = 2 * a + 2 * b;
printf("周长=%f\n", l);
break;
case 2:
s = a * b;
printf("面积=%f\n", s);
break;
case 3:
l = 2 * a + 2 * b;
s = a * b;
printf("周长=%f 面积=%f\n", l, s);
break;
}
}
2.
#include <stdio.h>
void main()
{
float x, y;
scanf("%f", &x);
if(x < 0)
y = x * x;
else
if(x < 10)
y = -2 * x + 10;
else
y = x - 5;
printf("y=%f\n", y);
}
3.
(1)if 语句实现
#include <stdio.h>
void main()
{
float score;
scanf("%f", &score);
if(score >= 90)
printf("A\n");
else if(score >= 80)
printf("B\n");
else if(score >= 70)
printf("C\n");
else if(score >= 60)
printf("D\n");
else
printf("E\n");
}
(2)switch 语句实现
#include <stdio.h>
void main()
{
float score;
scanf("%f", &score);
switch((int)score / 10)
{
case 10:
case 9: printf("A\n"); break;
case 8: printf("B\n"); break;
case 7: printf("C\n"); break;
case 6: printf("D\n"); break;
default: printf("E\n");
}
}
第五章 循环结构程序设计
一、选择题
1.
for 语句圆括号中的表达式可以部分或全部省略,但两个 ______ 不可省略。
A. ;
B. ()
C. {}
D. ,
2.
程序段如下:
int k = 0;
while(k = 0) k = k - 1;
则以下说法中正确的是 ______。
A. while 循环执行 20 次
B. 循环是无限循环
C. 循环体语句一次也不执行
D. 循环体语句执行一次
3.
以下循环是 ______。
for(a=0; a<=4; a++);
A. 无限循环
B. 循环次数不定
C. 执行 4 次
D. 执行 5 次
4.
在下列程序段中,while 循环的循环次数是 ______。
int i = 0;
while(i < 10)
{
if(i < 1) continue;
if(i == 5) break;
i++;
}
A. 1
B. 10
C. 6
D. 无限循环
5.
程序段
int k = 0;
while(k++ <= 2)
printf("%d\n", k);
执行结果是 ______。
A.
1
2
3
B.
2
3
4
C.
0
1
2
D. 无结果
6.
以下程序段的输出结果是 ______。
int x = 3;
do
{
printf("%d ", x -= 2);
}
while(--x);
A. 1
B. 30 3
C. 1 -2
D. 无限循环
7.
下列循环的输出结果是 ______。
int n = 10;
while(n > 7)
{
n--;
printf("%d\n", n);
}
A.
10
9
8
B.
9
8
C.
9
8
7
D.
9
8
7
6
8.
以下程序段的输出结果是 ______。
int i;
for(i=1; i<=5; i++)
{
if(i % 2)
printf("#");
else
continue;
printf("*");
}
A. #*#*#*
B. #*#*
C. #*#
D. #*#*#
9.
在循环语句中,用于提前结束循环,接着执行循环下面的语句的关键字是 ______。
A. switch
B. continue
C. break
D. if
10.
以下程序段中循环执行次数是 ______。
for(int i=5; i; i--)
for(int j=0; j<4; j++);
A. 20
B. 24
C. 25
D. 30
11.
for(表达式1; 表达式2; 表达式3),其中表示循环条件的是 ______。
A. 表达式1
B. 表达式2
C. 表达式3
D. 语句
12.
以下能正确计算 1*2*3*…*10 的程序段是 ______。
A.
do { i=1; s*=i; i++; } while(i<=10);
B.
do { i=1; s=0; s*=i; i++; } while(i<=10);
C.
i=1; s=1;
do { s*=i; i++; } while(i<=10);
D.
i=1; s=0;
do { s*=i; i++; } while(i<=10);
13.
x = -1;
do { x = x * x; }
while(x);
此程序段 ______。
A. 是死循环
B. 循环执行二次
C. 循环执行一次
D. 有语法错误
二、填空题
1.
continue 语句的作用是 ______,即跳出循环体中下面未执行的语句,接着进行下一次是否执行循环的判定。
2.
while 语句的执行顺序是 ______;do while 语句的执行顺序是 ______。
3.
把 for(表达式1; 表达式2; 表达式3),改写为等价的 while 语句为 ______。
4.
补足程序段:输入若干个成绩,输出最高成绩和最低成绩,输入负数时结束输入。
float x, max, min;
scanf("%f", &x);
max = x; min = x;
while( ______ (1) )
{
if(x > max) ______ (2);
if( ______ (3) ) min = x;
scanf("%f", &x);
}
printf("max=%f min=%f\n", max, min);
5.
下列程序段的输出结果是 ______。
int n = 0;
while(n++ <= 1);
printf("%d\n", n);
printf("%d\n", n);
6.
下列程序段的输出结果是 ______。
int s, i;
for(s=0, i=1; i<3; i++, s+=i);
printf("%d\n", s);
7.
下列程序段的输出结果是 ______。
int i = 10, j = 0;
do
{
j += i;
i--;
}
while(i > 2);
printf("%d\n", j);
五、编程题
1.
分别用 while、for 编程,计算下列并输出结果:
1 + 2 + 3 + …… + 1002 * 4 * 6 * …… * 100
2.
分别用 while、for 双重循环的方式编程绘制如下图形:
(1)
*****
*****
*****
*****
(2)
****
***
**
*
第五章 答案
一、选择题
1–5 C C D D A
6–10 A B B C A
11–13 B C C
二、填空题
- 结束本次循环执行
- 先判断,后执行循环体;先执行循环体,后判断
表达式1;
while(表达式2)
{
表达式3;
}
(1) x>=0
(2) max=x
(3) x<min
- 3 3
- 5
- 52
五、编程题
1.(1)while 实现
#include <stdio.h>
void main()
{
int i = 1, sum = 0;
while(i <= 100)
{
sum += i;
i++;
}
printf("sum=%d\n", sum);
}
(2)for 实现
#include <stdio.h>
void main()
{
int i, sum = 0;
for(i = 1; i <= 100; i++)
sum += i;
printf("sum=%d\n", sum);
}
2.(1)
#include <stdio.h>
void main()
{
int i = 1, j;
while(i <= 4)
{
j = 1;
while(j <= 5)
{
printf("*");
j++;
}
printf("\n");
i++;
}
}
#include <stdio.h>
void main()
{
int i, j;
for(i = 1; i <= 4; i++)
{
for(j = 1; j <= 5; j++)
printf("*");
printf("\n");
}
}
2.(2)
#include <stdio.h>
void main()
{
int i = 1, j;
while(i <= 5)
{
j = 1;
while(j <= 6 - i)
{
printf("*");
j++;
}
printf("\n");
i++;
}
}
#include <stdio.h>
void main()
{
int i, j;
for(i = 4; i > 0; i--)
{
for(j = 1; j <= i; j++)
printf("*");
printf("\n");
}
}
第六章 数组
一、选择题
1.
在 C 语言中,引用数组元素时,其数组下标的数据类型是 ______。
A. 整型常量
B. 整型常量或整型表达式
C. 整型表达式
D. 任何类型的表达式
2.
以下对一维整型数组 a 的正确定义是 ______。
A. int a(10);
B. int n=10,a[n];
C. int n; scanf("%d",&n); int a[n];
D. #define SIZE 10 int a[SIZE];
3.
下列定义数组正确的是 ______。
A. int a[]={1,2,3,4,5};
B. int b[1]={2,5};
C. int a[];
D. int a[4];
4.
设有 char str[10],下列语句正确的是 ______。
A. scanf("%s",&str);
B. printf("%c",str);
C. printf("%s",str[0]);
D. printf("%s",str);
5.
假设 array 是一个有 10 个元素的整型数组,则下列写法中正确的是 ______。
A. array[0]=10
B. array=0
C. array[10]=0
D. array[1]=0
6.
若有以下定义:
int a[5]={5,4,3,2,1};
char b='a',c,d,e;
则下列表达式中数值为 2 的是 ______。
A. a[3]
B. a[d-b]
C. a[4]
D. a[c-b]
7.
下面把字符串 str2 连接到字符串 str1 后的是 ______。
A. strcat(str1,str2);
B. strcat(str2,str1);
C. strcpy(str1,str2);
D. strcmp(str1,str2);
8.
设有两个字符串 "Beijing"、"China" 分别存放在字符数组 str1[10]、str2[10] 中,下面语句中把 "China" 连接到 "Beijing" 之后的是 ______。
A. strcpy(str1,str2);
B. strcpy(str1,"China");
C. strcat(str1,"China");
D. strcat("Beijing",str2);
9.
若有二维数组 a[m][n],则数组中 a[i][j] 之前的元素个数为 ______。
A. j*m+i
B. i*n+j
C. i*m+j+1
D. i*n+j+1
10.
设 a[3][3]={1,2,3,4,5,6,7,8,9}; i;,则下列语句的输出结果是 ______。
for(i=0;i<2;i++)
printf("%d ",a[i][2-i]);
A. 3 5
B. 3 6 9
C. 5 9
D. 1 4 7
11.
不能正确把字符串 "program" 赋给数组的语句是 ______。
A. char a[]={'p','r','o','g','r','a','m','\0'};
B. char a[10]; strcpy(a,"program");
C. char a[10]; a="program";
D. char a[10]="program";
12.
以下不能对二维数组 a 进行正确初始化的语句是 ______。
A. int a[2][3]={0};
B. int a[][3]={{1,2},{0}};
C. int a[2][3]={{1,2,3},{4,5,6}};
D. int a[][3]={1,2,3,4,5,6};
13.
下面程序的运行结果是 ______。
char c[5]={'a','b','\0','c','\0'};
printf("%s",c);
A. a b
B. ab\0c\0
C. abc
D. ab
14.
判断字符串 a 和 b 是否相等,应当使用 ______。
A. if(a==b)
B. if(a=b)
C. if(strcmp(a,b))
D. if(!strcmp(a,b))
15.
有字符数组 a[8] 和 b[10],正确的输出语句是 ______。
A. puts(a,b);
B. puts(b);
C. putchar(a); putchar(b);
D. printf("%s,%s",a[8],b[10]);
16.
以下对二维数组 a 进行正确初始化的语句是 ______。
A. int a[0][3]={{1,0,1},{2,4,5}};
B. int a[2][]={{3,2,1},{5,6,7}};
C. int a[][3]={{3,2,1},{5,6,7}};
D. int a(2)={{1,0,1},{2,4,5}};
17.
int a[3][4]={0}; 则下面正确的叙述是 ______。
A. 只有元素 a[0][0] 可以得到初值 0
B. 此说明语句不正确
C. 数组 a 中每个元素均可得到初值 0
D. 数组 a 每个元素均可得到初值,但值不一定为 0
二、填空题
1.
数组命名规则和变量名相同,只能使用 **、****、______。
2.
对于一维数组的定义 “类型说明符 数组名[常量表达式]”,其中常量表达式可以是 ______ 和 ______,不能包含 ______。
3.
在 C 语言中,二维数组中元素排列的顺序是 ______。
4.
对数组 a[m][n] 来说,使用数组的某个元素时,行下标最大值是 ______,列下标最大值是 ______。
5.
冒泡法对十个数由小到大排序。
#include <stdio.h>
void main()
{
int a[10],i,j,t;
printf("input 10 numbers:\n");
for(i=0; ______ (1); i++)
scanf("%d", ______ (2) );
printf("\n");
for(i=0;i<9;i++)
for(j=i+1;j<10;j++)
if(a[i]>a[j])
{ ______ (3); a[j]=a[i]; a[i]=t; }
printf("the sorted numbers:\n");
for(i=0;i<10;i++)
printf("%d ", ______ (4) );
}
6.
以下程序的运行结果是 ______。
#include <stdio.h>
void main()
{
int i,j,a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12},b[4][3];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
b[j][i]=a[i][j];
for(i=0;i<4;i++)
{
for(j=0;j<3;j++)
printf("%d ",b[i][j]);
printf("\n");
}
}
7.
以下程序的运行结果是 ______。
#include <stdio.h>
void main()
{
char a[5][5];
int i,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if(i==j||i+j==4)
a[i][j]='*';
else
a[i][j]=' ';
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%c",a[i][j]);
printf("\n");
}
}
8.
以下程序的运行结果是 ______。
#include <stdio.h>
void main()
{
char i,str[]="ab12c3d4e5";
for(i=0;str[i]!='\0';i++)
if(str[i]>='a'&&str[i]<='z')
printf("%c",str[i]);
printf("\n");
}
9.
以下程序运行结果是 ______。
#include <stdio.h>
void main()
{
char a[4][4];
int i,j;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
if(i<j)
a[i][j]='+';
else if(i>j)
a[i][j]='-';
else
a[i][j]='*';
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
printf("%c",a[i][j]);
printf("\n");
}
}
三、编程题
1.
试编程从键盘输入 10 个整数并保存到数组,输出 10 个整数中的最大值及其下标、最小值及其下标。
2.
试编程从键盘输入一个 2×3 的二维数组,将该数组行列互换输出。
第六章 答案
一、选择题
1–5 B D A D A
6–10 A A C B A
11–15 C C D D B
16–17 C C
二、填空题
- 字母 数字 下划线
- 常量 符号常量 变量
- 按行存放,即在内存中先存放第一行的元素,再存放第二行的元素
- m−1,n−1
(1) i<10
(2) &a[i]
(3) t=a[i]
(4) a[i]
1 5 9
2 6 10
3 7 11
4 8 12
* *
*
* *
a b c d e
*+++
-+++
--++
---*
三、编程题
1.
#include <stdio.h>
void main()
{
int a[10], max, min, i, s, t;
for(i=0; i<10; i++)
scanf("%d", &a[i]);
max = min = a[0];
s = t = 0;
for(i=1; i<10; i++)
{
if(max < a[i])
{
max = a[i];
s = i;
}
if(min > a[i])
{
min = a[i];
t = i;
}
}
printf("最大值是 a[%d]=%d, 最小值是 a[%d]=%d\n", s, max, t, min);
}
2.
#include <stdio.h>
void main()
{
int a[2][3], i, j;
for(i=0; i<2; i++)
for(j=0; j<3; j++)
scanf("%d", &a[i][j]);
for(j=0; j<3; j++)
{
for(i=0; i<2; i++)
printf("%d ", a[i][j]);
printf("\n");
}
}
第七章 函数
一、选择题
1.
C 语言中变量作实参向形参的数据传递方式是 ______。
A. 地址传递
B. 单向值传递
C. 双向值传递
D. 由用户指定传递方式
2.
以下关于 C 语言程序中函数的说法正确的是 ______。
A. 函数的定义可以嵌套,但函数的调用不可以嵌套
B. 函数的定义不可以嵌套,但函数的调用可以嵌套
C. 函数的定义和调用均不可以嵌套
D. 函数的定义和调用都可以嵌套
3.
对于 C 语言以下说法不正确的是 ______。
A. 实参可以是常量、变量或表达式
B. 形参可以是常量、变量或表达式
C. 实参可以是任意数据类型
D. 形参应与实参的类型相同或赋值兼容
4.
若调用数组名作为函数调用中的实参,传递给形参的是 ______。
A. 数组的首地址
B. 数组第一个元素的值
C. 数组中全部元素的值
D. 数组元素的个数
5.
如果在一个函数中的复合语句中定义了一个变量,则该变量 ______。
A. 只在该复合语句中有效
B. 在该函数中有效
C. 在本程序范围内有效
D. 为非法变量
6.
以下程序的运行结果是 ______。
#include <stdio.h>
void main()
{
int a=2,i;
for(i=0;i<3;i++)
printf("%4d",f(a));
}
int f(int a)
{
int b=0,c=3;
b++; c++;
return(a+b+c);
}
A. 7 10 13
B. 7 7 7
C. 7 9 11
D. 7 8 9
7.
C 语言规定函数返回值类型是由 ______。
A. return 语句中的表达式类型决定
B. 调用该函数时的主调函数类型决定
C. 调用该函数时系统临时决定
D. 定义该函数时所指定的函数类型决定
8.
在 C 语言中 ______。
A. 实参与其对应的形参占用独立的存储单元
B. 实参与其对应的形参共占用一个存储单元
C. 只有当实参与其对应的形参同名时才共占用存储单元
D. 形参是虚拟的,不占用存储单元
9.
有如下函数调用语句:
func(rec1,rec2+rec3,(rec4,rec5));
该函数调用语句中,含有的实参个数是 ______。
A. 3
B. 4
C. 5
D. 有语法错误
10.
int func(int a,int b)
{
return(a+b);
}
void main()
{
int x=2,y=5,z=8,r;
r=func(func(x,y),z);
printf("%d\n",r);
}
该程序的输出结果是 ______。
A. 12
B. 13
C. 14
D. 15
11.
void f(int x,int y)
{
int t;
if(x<y){ t=x; x=y; y=t; }
}
void main()
{
int a=4,b=3,c=5;
f(a,b); f(a,c); f(b,c);
printf("%d,%d,%d\n",a,b,c);
}
执行后输出的结果是 ______。
A. 3,4,5
B. 5,3,4
C. 5,4,3
D. 4,3,5
12.
以下 C 语言中,对函数描述不正确的是 ______。
A. 当用数组名作形参时,形参数组改变可使实参数组随之改变
B. 允许函数递归调用
C. 函数形参的作用范围是属于所定义的函数内
D. 函数说明必须在主调函数之前
13.
以下所列的函数声明中正确的是 ______。
A. void play(var a:Integer,var b:Integer)
B. void play(int a,b)
C. void play(int a,int b)
D. Sub play(a as integer,b as integer)
14.
下面程序的输出结果是 ______。
int m=13;
int fun(int x,int y)
{
int m=3;
return(x*y-m);
}
void main()
{
int a=7,b=5;
printf("%d\n",fun(a,b)/m);
}
A. 1
B. 2
C. 7
D. 10
二、填空题
1.
以下程序可计算 10 名学生某课成绩的平均分。
float average(float array[10])
{
int i;
float aver,sum=array[0];
for(i=1; ______ (1); i++)
sum+= ______ (2);
aver=sum/10;
return(aver);
}
void main()
{
float score[10],aver;
int i;
printf("input 10 scores:");
for(i=0;i<10;i++)
scanf("%f",&score[i]);
aver= ______ (3);
printf("\naverage score is %5.2f\n",aver);
}
2.
以下程序段的运行结果是 ______。
int a=5;
int b=7;
void main()
{
int a=4,b=5,c;
c=plus(a,b);
printf("A+B=%d\n",c);
}
int plus(int x,int y)
{
int z;
z=x+y;
return(z);
}
第七章 答案
一、选择题
1–5 B B D B A
6–10 B D A A D
11–14 D C B
二、填空题
(1) i<10
(2) array[i]
(3) average(score)
A+B=9
第八章 指针
一、选择题
1.
变量的指针,其含义是指该变量的 ______。
A. 值
B. 地址
C. 名
D. 一个标志
2.
若有定义:int a[5]; 则数组中首元素的地址可以表示为 ______。
A. &a
B. a+1
C. a
D. &a[1]
二、填空题
1.
数组在内存中占用一段连续的存储空间,它的首地址 ______ 表示。
2.
在 C 程序中,指针变量能够赋 ______ 值或 ______ 值。
第八章 答案
一、选择题
1–5 B C
二、填空题
- 数组名
- 地址
NULL(或0,或0x0,或空值)
加餐
3.
若 x 是整型变量,pb 是基类型为整型的指针变量,则正确的赋值表达式是( A )。
A. pb = &x
B. pb = x
C. *pb = &x
D. *pb = *x
4.
已知:int a, *p = &a; 则下列函数调用中错误的是( D )。
A. scanf("%d",&a);
B. scanf("%d",p);
C. printf("%d",a);
D. printf("%d",p);
5.
对于同类型的指针变量,不可能进行的运算是( C )。
A. -
B. =
C. +
D. ==
6.
对于基类型相同的两个指针变量之间,不能进行的运算是( C )。
A. <
B. =
C. +
D. -
7.
下列不正确的定义是( A )。
A. int *p=&i, i;
B. int *p, i;
C. int i, *p=&i;
D. int i, *p;
8.
若有说明:int n=2, *p=&n, *q=p; 则以下非法的赋值语句是( D )。
A. p=q
B. *p=*q
C. n=*q
D. p=n
9.
int *p, a=10, b=1;
p=&a;
a=*p+b;
执行该程序后,a 的值为( C )。
A. 编译出错
B. 10
C. 11
D. 12
10.
有语句:int a[10];,则( B )是对指针变量 p 的正确定义和初始化。
A. int p=*a;
B. int *p=a;
C. int p=&a;
D. int *p=&a;
11.
若有说明语句:int a[5], *p=a;,则对数组元素的正确引用是( C )。
A. a[p]
B. p[a]
C. *(p+2)
D. p+2
12.
若指针变量 p 指向整型数组 a[10] 的首地址,即 p=a,则下列数组元素
a[i] (0<i<10) 的表示方法中正确的是( C )。
A. p+i
B. &(a+i)
C. *(a+i)
D. *(p+i*2)
13.
有如下程序:
int a[10]={1,2,3,4,5,6,7,8,9,10}, *p=a;
则数值为 9 的表达式是( B )。
A. *p+9
B. *(p+8)
C. *p+=9
D. p+8
14.
若有以下定义,则不能表示 a 数组元素的表达式是( B )。
int a[10]={1,2,3,4,5,6,7,8,9,10}, *p=a;
A. *p
B. a[10]
C. *a
D. a[p-a]
15.
已知 int a[5], *p=a;,下面的叙述中正确的是( A )。
A. p+1 与 a+1 等价
B. p[1] 与 *p 等价
C. *(p+1) 与 a+1 等价
D. p[1] 与 a++ 等价
16.
若有以下说明:
int a[10]={1,2,3,4,5,6,7,8,9,10}, *p=a;
则数值为 4 的表达式是( C )。
A. *p+4
B. *(p+4)
C. *(p+3)
D. p+3
17.
下面程序的输出结果是( C )。
main()
{
int a[]={1,2,3,4,5,6,7,8,9,0}, *p;
p=a;
printf("%d\n", *p+1);
}
A. 0
B. 1
C. 2
D. 输出错误
18.
执行语句
char c[10]={"abcd"}, *pc=c;
后,*(pc+4) 的值是( B )。
A. "abcd"
B. '\0'
C. 'd'
D. 不确定
19.
下列函数的功能是( A )。
void fun(int *p1, int *p2)
{
int p;
p=*p1;
*p1=*p2;
*p2=p;
}
A. 交换 *p1 和 *p2 的值
B. 语法正确,但无法交换 *p1 和 *p2 的值
C. 交换 *p1 和 *p2 的地址
D. 有语法错误
20.
有如下程序:
main()
{
char s[]="ABCD", *p;
for(p=s+1; p<s+4; p++)
printf("%s\n", p);
}
该程序的输出结果是( D )。
BCD
CD
D
21.
请读程序,输出结果为( A )。
#include <stdio.h>
int a[]={2,4,6,8};
main()
{
int i, b[4];
int *p=a;
for(i=0;i<4;i++)
{
b[i]=*p;
p++;
}
printf("%d\n", b[2]);
}
A. 6
B. 8
C. 4
D. 2
22.
内存空间被分成不同区域,其中用函数
void* malloc(unsigned int size);
申请的内存在( C )分配。
A. 程序区
B. 静态存储区
C. 动态存储区
九、字符串
一、选择题
1.
在 C 语言中,以 D 作为字符串结束标志。
A. '\n'
B. ','
C. '0'
D. '\0'
2.
下列数据中属于“字符串常量”的是( A )。
A. "a"
B. {ABC}
C. "abc\0"
D. 'a'
3.
字符串 "ABCD" 在内存占用的字节数是( D )。
A. 4
B. 6
C. 1
D. 5
4.
下面不正确的字符串常量是( A )。
A. 'PROGRAM'
B. "12 12"
C. "0"
D. " "
5.
设有数组定义:
char array[]="abcd";
则数组 array 所占的空间为( B )。
A. 4 个字节
B. 5 个字节
C. 6 个字节
D. 7 个字节
6.
下述对 C 语言中字符串数组的描述错误的是( C )。
A. 字符数组可以存放字符串
B. 字符数组中的字符串可以整体输入和输出
C. 可在赋值语句中通过赋值运算符 “=” 对字符数组整体赋值
D. 可在定义字符数组时通过赋值运算符 “=” 对字符数组整体初始化
7.
已知
char x[]="hello", y[]={'h','e','a','b','e'};
则关于两个数组长度的正确描述是( B )。
A. 相同
B. x 大于 y
C. x 小于 y
D. 以上答案都不对
8.
给出以下定义:
char x[]="abcdefg";
char y[]={'a','b','c','d','e','f','g'};
则正确的叙述为( C )。
A. 数组 x 和数组 y 等价
B. 数组 x 和数组 y 的长度相同
C. 数组 x 的长度大于数组 y 的长度
D. 数组 x 的长度小于数组 y 的长度
9.
若有以下语句,则正确的描述是( D )。
static char x[]="12345";
static char y[]={'1','2','3','4','5','\0'};
A. 数组 x 长度大于数组 y
B. 数组 x 和数组 y 不相同
C. 数组 x 长度小于数组 y
D. 数组 x 等价于数组 y
10.
已知:
char s[20]="programming", *ps=s;
则不能引用字符 'o' 的表达式是( C )。
A. ps[2]
B. s[2]
C. ps+2
D. ps+=2, *ps
11.
判断两个字符串 s1、s2 是否相等,应使用( D )。
A. if(s1==s2)
B. if(s1=s2)
C. if(strcpy(s1,s2))
D. if(strcmp(s1,s2)==0)
12.
以下 printf 语句的输出结果为( A )。
printf("%d\n", strlen("school"));
A. 7
B. 6
C. 存在语法错误
D. 不确定
13.
对字符数组 s 赋值,不合法的是( C )。
A.
char s[]="Beijing";
B.
char s[20]={"beijing"};
C.
char s[20]; s="Beijing";
D.
char s[20]={'B','e','i','j','i','n','g'};
14.
对字符数组 str 赋初值,str 不能作为字符串使用的是( D )。
A.
char str[]="shanghai";
B.
char str[]={'s','h','a','n','g','h','a','i','\0'};
C.
char str[9]={'s','h','a','n','g','h','a','i','\0'};
D.
char str[8]={'s','h','a','n','g','h','a','i'};
15.
合法的数组定义是( C )。
A. int a[]={"string"};
B. int a[5]={0,1,2,3,4,5};
C. char a[]="string";
D. char a[5]={0,1,2,3,4,5};
16.
对字符数组 s 赋值,不合法的是( C )。
A.
char s[]="china";
B.
char s[20]={"china"};
C.
char s[20]; s="china";
D.
char s[20]={'c','h','i','n','a'};
17.
下面初始化与此初始化
char c[]="I am happy";
等价的是( A )。
A.
char c[]={'I',' ','a','m',' ','h','a','p','p','y','\0'};
B.
char c[]={'I'," am"," happy"};
C.
char c[]={'I',' ','a','m',' ','h','a','p','p','y'};
D.
char c[]={'I'," am"," happy","\0"};
18.
下面各语句中,能正确进行字符串操作的语句是( C )。
A. char s[5]={"ABCDE"};
B. char s[5]={'A','B','C','D','E','\0'};
C. char *s; s="ABCDE";
D. char *s; scanf("%s",&s);
19.
下列字符串赋值方式不正确的是( A )。
A.
char str[20];
str="I am a boy!";
B.
char *str;
str="I am a boy!";
C.
char *str="I am a boy!";
D.
char str[20]="I am a boy!";
十、文件
一、选择题
1.
在 C 语言中,文件由( A )。
A. 字符(字节)序列组成
B. 记录组成
C. 数据行组成
D. 数据块组成
2.
下面各函数中能实现打开文件功能的是( A )。
A. fopen
B. fgetc
C. fputc
D. fclose
3.
若文件型指针 fp 指向某文件的末尾,则函数 feof(fp) 的返回值是( B )。
A. 0
B. 1
C. 非 0 值
D. NULL
4.
下列语句中,把变量 fp 说明为一个文件型指针的是( A )。
A. FILE *fp;
B. FILE fp;
C. file *fp;
D. file fp;
5.
在进行文件操作时,写文件的一般含义是( B )。
A. 将磁盘中的信息存入计算机内存
B. 将计算机内存中的信息存入磁盘
C. 将计算机 CPU 中的信息存入磁盘
D. 将磁盘中的信息存入计算机 CPU
6.
以读写方式打开一个已有的文本文件 file1,并且 FILE *fp,下面 fopen 函数正确的调用方式是( B )。
A. fp=fopen("file1","r")
B. fp=fopen("file1","r+")
C. fp=fopen("file1","rb")
D. fp=fopen("file1","w")
7.
标准库函数 fputs(p1,p2) 的功能是( C )。
A. 从 p1 指向的文件中读一个字符串存入 p2 指向的内存
B. 从 p2 指向的文件中读一个字符串存入 p1 指向的内存
C. 从 p1 指向的内存中读一个字符串写到 p2 指向的文件中
D. 从 p2 指向的内存中读一个字符串写到 p1 指向的文件中
十一、编译预处理
一、选择题
1.
在 C 语言程序中,以 # 号带头的行是预编译处理( A )。
A. 命令
B. 语句
C. 函数
D. 字符串
2.
下列正确的预编译命令是( D )。
A. define PI 3.14159
B. #define P(a,b)=strcpy(a,b)
C. #define stdio.h
D. #define PI 3.14159
3.
下列命令或语句中,正确的是( C )。
A. #define MYNAME="ABC"
B. #include stdio.h
C. for(i=0;i<10;i++);
D. struct int stu(int name);
4.
下列命令或语句中,错误的是( C )。
A. #define PI 3.14159
B. #include <math.h>
C. if(2);
D. for(;;) if(1) break;
加餐:结构体
一、选择题
1.
若有以下说明语句:
struct student
{
int num;
char name[];
float score;
} stu;
则下面的叙述不正确的是( D )。
A. struct 是结构体类型的关键字
B. struct student 是用户定义的结构体类型
C. num、score 都是结构体成员名
D. stu 是用户定义的结构体类型名
2.
若有以下说明语句:
struct date
{
int year;
int month;
int day;
} birthday;
则下面的叙述不正确的是( C )。
A. struct 是声明结构体类型时用的关键字
B. struct date 是用户定义的结构体类型名
C. birthday 是用户定义的结构体类型名
D. year、day 都是结构体成员名
3.
已知:(设整型 2 字节,字符型 1 字节,浮点型 4 字节)
struct
{
int i;
char c;
float a;
} test;
则 sizeof(test) 的值是( D )。
A. 4
B. 5
C. 6
D. 7
4.
以下对结构体变量 stu1 中成员 age 的非法引用是( B )。
struct student
{
int age;
int num;
} stu1, *p;
p = &stu1;
A. stu1.age
B. student.age
C. p->age
D. (*p).age
5.
有如下定义:
struct person
{
char name[9];
int age;
};
struct person class[10] = {
"Tom", 17,
"John", 19,
"Susan", 18,
"Adam", 16
};
根据上述定义,能输出字母 d 的语句是( B )。
A. printf("%c\n", class[3].name);
B. printf("%c\n", class[3].name[0]);
C. printf("%c\n", class[3].name[1]);
D. printf("%c\n", class[2].name[3]);
6.
存放 100 个学生的数据,包括学号、姓名、成绩,在如下的定义中,不正确的是( B )。
A.
struct student
{
int sno;
char name[20];
float score;
} stu[100];
B.
struct student stu[100]
{
int sno;
char name[20];
float score;
};
C.
struct
{
int sno;
char name[20];
float score;
} stu[100];
D.
struct student
{
int sno;
char name[20];
float score;
};
struct student stu[100];
7.
设有定义语句:
struct
{
int x;
int y;
} d[2] = { {1,3}, {2,7} };
则
printf("%d\n", d[0].y / d[0].x * d[1].x);
输出的是( D )。
A. 0
B. 1
C. 3
D. 6
8.
已知:
struct sk
{
int a;
float b;
} data, *p;
若有 p = &data,则对 data 中成员 a 的正确引用是( C )。
A. (*p).data.a
B. p->data.a
C. (*p).a
D. p.data.a
9.
设有如下定义:
struct sk
{
int a;
float b;
} data;
int *p;
若要使 p 指向 data 中的 a 域,正确的赋值语句是( C )。
A. p = &a;
B. p = data.a;
C. p = &data.a;
D. *p = data.a;
10.
设有以下说明语句:
typedef struct stu
{
int a;
float b;
} stutype;
则下面叙述中错误的是( D )。
A. struct 是结构体类型的关键字
B. struct stu 是用户定义的结构体类型
C. a 和 b 都是结构体成员名
D. stutype 是用户定义的结构体变量名

浙公网安备 33010602011771号