C语言试题库(带详细讲解答案)

发布时间:2020-01-31   来源:文档文库   
字号:
专业.专注
一单项选择题
1.( A 是构成C语言程序的基本单位
A函数 B过程 C子程序 D子例程 2C语言程序从 C 开始执行
A 程序中第一条可执行语句 B 程序中第一个函数 C 程序中的main函数 D 包含文件中的第一个函数 3以下说法中正确的是 C )。
AC语言程序总是从第一个定义的函数开始执行
BC语言程序中要调用的函数必须在main( 函数中定义 CC语言程序总是从main( 函数开始执行
DC语言程序中的main( 函数必须放在程序的开始部分 4.下列关于C语言的说法错误的是 B
A C程序的工作过程是编辑编译连接运行 B C语言不区分大小写
C C程序的三种基本结构是顺序选择循环 D C程序从main函数开始执行 5.下列正确的标识符是C )。
A.-a1 B.a[i] C.a2_i D.int t 5~8题为相同类型题 考点标识符的命名规则
1 只能由字母数字下划线构成 2 数字不能作为标识符的开头 3 关键字不能作为标识符
选项A中的-选项B“[”“]”不满足1);选项D中的int为关键字不满足3

. 学习参考
.
专业.专注
6下列C语言用户标识符中合法的是 B )。 A3ax Bx Ccase D-e2
Eunion 选项A中的标识符以数字开头不满足2);选项CE均为为关键字不满足3);选项D中的-不满足1);

7下列四组选项中正确的C语言标识符是 C )。
A %x B a+b C a123 D
123 选项A中的“%” 选项B“+”不满足1);选项D中的标识符以数字开头不满足2

8下列四组字符串中都可以用作C语言程序中的标识符的是 A )。 Aprint _3d db8 aBc BI\am one_half start$it 3pai Cstr_1 Cpp pow while DPxq My->book line# His.age

选项B中的\”,”$” 选项D“>”,”#”,”.”,”-不满足1);选项C中的while为关键字不满足3
9.C语言中的简单数据类型包括D )。
A整型实型逻辑型 B整型实型逻辑型字符型 C整型字符型逻辑型 D整型实型字符型 10.C语言程序中表达式5%2的结果是 C A2.5 B2 C1 D3 详见教材P52~53. %为求余运算符该运算符只能对整型数据进行运算且符号与被模数相同5%2=1 5%-2=1;(-5%2=-1;(-5%-2=-1

/为求商运算符该运算符能够对整型字符浮点等类型的数据进行运算5/2=2 11如果int a=3,b=4则条件表达式"a的值是__A__
A 3 B 4 C 0 D 1 详见教材P97. . 学习参考
.
专业.专注
表达式1表达式2表达式3 先计算表达式1
若表达式1成立 则选择计算表达式2并表达式2的值作为整个大表达式的值 若表达式1不成立则选择计算表达式3并将表达式3的值作为整个大表达式的值 此题中的a相当于表达式1a相当于表达式2b相当于表达式3. a3b4a表达式1成立因此计算表达式2并将表达式2的值即a中的值并作为整个表达式的值因此整个表达式的值为3
12int x=2,y=3,z=4 则表达式x的结果是( B . A4 B3 C2 D0
E1 13C语言中关系表达式和逻辑表达式的值是 B

A 0 B 01 C 1 D ‘T’’F’
14. 下面( D 表达式的值为4. A 11/3 B
11.0/3 C (float11/3 D (int(11.0/3+0.5 14~16题为同一类型 详见教材P54~56. 1相同数据类型的元素进行数学运算+-*/得到结果还保持原数据类型
2不同数据类型的元素进行数学运算先要统一数据类型统一的标准是低精度类型转换为高精度的数据类型
选项A113为两个整数11/3结果的数据类型也应为整数因此将3.666666的小数部分全部舍掉仅保留整数因此11/3=3. 选项B11.0为实数3为整数因此首先要统一数据类型将整型数据3转换为3.0转换后数据类型统一为实型数据选项B变为11.0/3.0,结果的数据类型也应为实型数据因此选项B 11.0 /3=3.666666 选项C先将整数11强制类型转换转换为实型11.0因此选项C变为11.0/3其后计算过程结果与选项B
D11.0/3B3.666666. 学习参考
.
专业.专注
3.666666+0.5=4.166666最后将4.166666强制类型转换为整型即将其小数部分全部舍掉果为4
15.设整型变量 a=2则执行下列语句后浮点型变量b的值不为0.5的是 B
A.b=1.0/a B.b=(float(1/a C.b=1/(floata
D.b=1/(a*1.0 16. “int n; float f=13.8;”,则执行“n=(intf%3”n的值是A A.1 B.4 C.4.333333
D.4.6 “(intf“表示将f中的值强制类型转换为整型即将13.8的小数部分舍掉转换为13然后计算13%3结果为1再将结果赋给变量n因此n的值为1
17. 以下对一维数组a的正确说明是 D A char a10);



B int a[]

Cint k5a[k] D)char a[3]={‘a’,’b’,’c’}; 详见教材P143~144一维数组的定义初始化 类型符 数组名 [常量表达式] 类型符是指数组中数组元素的类型数组名要符合标识符命名规则常量表达式是指数组的长度数组中包含元素的个数),其值只能是整数不可以是变量而且从1开始计数 选项A常量表达式只能放在中括号 [ ]
选项B只有在对数组初始化即赋值的时候才可以省略数组的长度B中并未对a进行初始
选项C常量表达式不能为变量
18.以下能对一维数组a进行初始化的语句是: ( C A. int a[5]=(0,1,2,3,4, B. int a(5={} C. int a[3]={0,1,2} D. int a{5}={10*1} 详见教材P145一维数组的定义初始化 选项B,D常量表达式只能放在中括号 [ ]
. 学习参考
.
专业.专注
选项A数组可以看做是若干个相同数据类型元素的有序集合因此以集合的形式对其初始化使用{ }对其初始化选项A用了().

19.C语言中对一维整型数组的正确定义为 D Aint a(10; Bint n=10,a[n];
Cint n;a[n]; D#define N 10 int a[N];
20已知int a[10]; 则对a数组元素的正确引用是 D )。 Aa[10] Ba[3.5] Ca(5 Da[0] 详见教材P144数组元素的引用 数组名[下标] 引用数组元素时[ ]中的下标为逻辑地址下标只能为整数可以为变量且从0开始计数 int a[10]表示定义了一个包含10个整型数据的数组a数组元素的逻辑地址下标范围为0~9a[0] 表示组中第1个元素; a[1] 表示组中第2个元素; a[2] 表示组中第3个元素; ......;a[9] 表示组中10个元素. 选项A超过了数组a的逻辑地址下标范围 选项B逻辑地址下标只能为整数 选项C逻辑地址下标只能放在[ ]

21.若有以下数组说明i=10;a[a[i]]元素数值是C )。
int a[12]={1,4,7,10,2,5,8,11,3,6,9,12}; A.10 B.9 C.6 D.5 先算a[a[i]]内层的a[i]由于i=10,因此a[i]a[10]. a[10]对应下面数组中的元素为9. 因此a[a[i]]即为a[9] a[9]对应下面数组中的元素为6. 因此a[9]即为6
. 学习参考
.
专业.专注

22.若有说明int a[][3]={{1,2,3},{4,5},{6,7}}; 则数组a的第一维的大小为: ( B A. 2 B. 3 C. 4 D.无确定值
5 7
D 3 6 9 二维数组的一维大小即指二维数组的行数在本题中按行对二维数组赋值因此内层有几个大括号数组就有几行
23.对二维数组的正确定义是 C
详见教材P149~152二维数组的定义初始化 类型符 数组名 [常量表达式][常量表达式] 二维数组可以看做是矩阵
类型符是指数组中数组元素的类型数组名要符合标识符命名规则第一个常量表达式是指数组的行数第二个常量表达式是指数组的列数常量表达式的值只能是整数不可以是变量而且1开始计数
一维数组初始化时可以省略数组长度
二维数组初始化时可以省略行数但不能省略列数 选项A,B都省略了列数
选项D不符合二维数组定义的一般形式列常量表达式应该放在不同的[]

A.int a[ ] [ ]={1,2,3,4,5,6};
B.int a[2] [ ]={1,2,3,4,5,6}; C.int a[ ] [3]={1,2,3,4,5,6}; D.int a[2,3]={1,2,3,4,5,6}; 24已知int a[3][4];则对数组元素引用正确的是__C___ Aa[2][4] Ba[1,3] Ca[2][0] Da(2(1 详见教材P150数组元素的引用 数组名[下标] [下标] 引用数组元素时[ ]中的下标为逻辑地址下标只能为整数可以为变量且从0开始计数 第一个[下标]表示行逻辑地址下标第二个[下标]表示列逻辑地址下标 本题图示详见P1496.7 . 学习参考
.
专业.专注
因此a的行逻辑地址范围0~2a的列逻辑地址范围0~3 选项A列逻辑地址下标超过范围 选项B,D的引用形式不正确

25.C语言中函数返回值的类型是由 A 决定的. A函数定义时指定的类型 B return语句中的表达式类型 C 调用该函数时的实参的数据类型 D 形参的数据类型 26. C语言中函数的数据类型是指( A A 函数返回值的数据类型 B. 函数形参的数据类型 C 调用该函数时的实参的数据类型 D.任意指定的数据类型 27. 在函数调用时以下说法正确的是 B A.函数调用后必须带回返回值 B.实际参数和形式参数可以同名
C.函数间的数据传递不可以使用全局变量 D.主调函数和被调函数总是在同一个文件里
28. C语言中表示静态存储类别的关键字是: C
A auto

B register C static
D extern 29未指定存储类别的变量其隐含的存储类别为 A )。 Aauto Bstatic Cextern Dregister 30. 若有以下说明语句 struct student { int num; char name[ ]; float score;
}stu; 则下面的叙述不正确的是: ( D . 学习参考
.
专业.专注
A. struct是结构体类型的关键字

B. struct student 是用户定义的结构体类型 C. num, score都是结构体成员名 D. stu是用户定义的结构体类型名 31.若有以下说明语句 struct date { int year; int month; int day;
}brithday; 则下面的叙述不正确的是__C___. A struct是声明结构体类型时用的关键字 B struct date 是用户定义的结构体类型名 C brithday是用户定义的结构体类型名 D year,day 都是结构体成员名
32. 以下对结构变量stul中成员age的非法引用是 B struct student { int age int num }stu1,*p p=&stu1
A stu1.age B student.age C p->age D (*p.age 33.设有如下定义
struck 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; 34.设有以下说明语句
typedef struct stu { int a; float b;
} stutype; 则下面叙述中错误的是 D )。 Astruct是结构类型的关键字

Bstruct stu是用户定义的结构类型 Cab都是结构成员名
Dstutype是用户定义的结构体变量名 35 语句int *p;说明了 C Ap是指向一维数组的指针

Bp是指向函数的指针,该函数返回一int型数据
Cp是指向int型数据的指针 // 指针的定义教材P223 Dp是函数名,该函数返回一指向int型数据的指针 36下列不正确的定义是 A )。
A. int *p=&i,i; B.int *p,i; Cint i,*p=&i;
D.int i,*p; 选项A先定义一个整型指针变量p然后将变量i的地址赋给p然而此时还未定义变量i因此编译器无法获得变量i的地址(AC对比选项C先定义变量i则在内存中为i分配空间i在内存空间的地址就可以确定了然后再定义p此时可以为pi的地址C正确 37. 若有说明int n=2,*p=&n,*q=p,则以下非法的赋值语句是: D
Ap=q B*p=*q Cn=*q Dp=n . 学习参考
.
专业.专注
p,q同为整型指针变量二者里面仅能存放整型变量的地址 选项Aq中为地址因此可将此地址赋给p 选项B*p表示p所指向对象n的内容即一个整数*q表示q所指向对象的内容由于在定义q时为其初始化pn的地址给q因此p中存放n的地址*q表示q所指向对象n的内容.因此*p=*q 相当于 n=n; 选项Cn=*q 等价于n=n; 选项Dp中只能存放地址不能将n中的整数值赋给p 38有语句int a[10],; B 是对指针变量p的正确定义和初始化
Aint p=*a; Bint *p=a; Cint p=&a;
Dint *p=&a; 选项Aa是数组名不是指针变量名因此不可用*标注数组名a 选项Ca是数组名数组名就是地址无需再用地址符号而且在定义指针变量p应在变量名前加*标明p是指针变量
选项Da是数组名数组名就是地址无需再用地址符号 39.若有说明语句“int a[5],*p=a;”,则对数组元素的正确引用是( C A.a[p] B.p[a] C.*(p+2
D.p+2 首先定义一个整型数组aa的长度为5然后定义一个指针变量p并同时对p进行初始化将数组a的地址赋给p因此此时p中存放的数组a的首地址即数组中第一个元素a[0]的地址 对于数组元素下标的引用(详见p144, 一般形式 数组名[下标] 其中下标为逻辑地址下标0开始计数方括号中的下标可以是变量可以是表达式但结果一定要是整数 选项Ap中存放的是地址不是整数不能做数组元素的下标
选项Ba是数组名数组名就是地址不是整数不能做数组元素的下标
选项C(重点!!!详见p231~234 p+2表示指向同一数组中的下两个元素的地址当前p指向a[0]p+2表示a[2]的地址因此*(p+2表示a[2]的内容 40. 有如下程序
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 (重点!!!详见p231~234 首先定义一个整型数组aa的长度为5然后定义一个指针变量P并同时对P进行初始化将数组a的地址赋给P因此此时P中存放的数组a的首地址即数组中第一个元素a[0]的地址 数组中9对应的是a[8], 选项BP+8表示数组中后8个元素的地址a[8]的地址*(P+8则表示该地址内所存放的内容a[8]的值

选项A*P表示P所指向对象的内容此时P指向a[0], *Pa[0]的值1. *P+9=1+9=10 选项C*P表示P所指向对象的内容此时P指向a[0], *Pa[0]的值因此*P+=9 *P =*P+9, 等价于a[0]=a[0]+9. 选项DP+8表示数组中后8个元素的地址a[8]的地址而非a[8]中的值 41. C语言中 D 作为字符串结束标志 A’\n’ B’ ’ C ’0’ D’\0’ 42.下列数据中属于字符串常量的是 A )。
A.“a” B.{ABC} C.‘abc\0’ D.‘a’ 若干个字符构成字符串
C语言中用单引号标识字符用双引号标识字符串 选项BC分别用{}’’标识字符串 选项D标识字符
43.已知char x[]="hello", y[]={'h','e','a','b','e'};, 则关于两个数组长度的正确描述是 B . A相同 Bx大于y Cx小于y D以上答案都不对
C语言中字符串后面需要一个结束标志位'\0'通常系统会自动添加
对一维数组初始化时可采用字符串的形式例如本题数组x),也可采用字符集合的形式例如本题数组y)。在以字符串形式初始化时数组x不尽要存储字符串中的字符还要存储字符串后的结束标志位因此数组x的长度为6在以字符集合形式初始化时数组y仅存储集合中的元因此数组y长度为5 . 学习参考
.
专业.专注
读程序
基本输入输出及流程控制
1. #include main( { int a=1,b=3,c=5; if (c==a+b printf("yes\n"; else
printf("no\n";
} 运行结果为no
详见教材p89 选择结构 详见教材p91关系符号 详见附录D p378符号的优先级
==表示判断符号两边的值是否相等=表示将符号右边的值赋给左边的变量 本题考点是选择结构3种基本形式的第二种

选择结构三种一般形式中的语句皆为复合语句复合语句要用{ }括起来只有当复合语句中只包括一条语句时可以省略{ }此题即如此因此两个printf操作没有加{ } . 学习参考
.
专业.专注

c==a+b成立则执行printf("yes\n"; 否则c==a+b不成立),执行printf("no\n";
+的优先级高于==因此先算a+b,值为4 表达式5==4不成立因此执行printf("no\n";即输出字符串no 2.

#include main( { int a=12, b= -34, c=56, min=0; min=a; if(min>b

min=b; if(min>c

min=c; printf("min=%d", min; } 运行结果为 min=-34 详见教材p89 选择结构
本题考点是选择结构3种基本形式的第一种 一共包含了两个选择结构两个if语句
. 学习参考
.
专业.专注


定义变量并赋值 此时a=12, b= -34, c=56, min=0 a中值拷贝赋给min覆盖了min中的0此时min中的值被更新为12 min>b成立则执行min=b; min>c成立则执行min=c; 输出min中的值

12大于-34,第一个if语句的表达式成立因此执行min=b; 执行后min中的值被更新为-34. -34小于56,第二个if语句的表达式不成立因此不执行min=c;
最后输出min中的值-34.
3. #include main( { int x=2,y= -1,z=5;
if(xif(y<0
z=0;
else
z=z+1; . 学习参考
.
专业.专注
printf(“%d\n”,z;
} 运行结果为5 遇到选择结构首先要明确条件表达式成立时执行哪些操作本题中第一个if语句其后的复合语句没有大括号{ }说明复合语句中只包含一条语句进而省略了{ }内层的if...else...是选择结构的第二种基本形式在结构上视为一条语句因此内层的if...else...作为第一个if语句的复合语句

若表达式x成立则继续判断
y<0则执行z=0; 否则y>=0,执行z=z+1; 输出z 2>-1表达式x不成立因此不执行内层的if…else….进而z中的值没有被改变 输出z中的值为5 4.
#include main( { float a,b,c,t; a=3; b=7; c=1; . 学习参考
.
专业.专注
if(a>b {t=a;a=b;b=t;} if(a>c {t=a;a=c;c=t;} if(b>c
{t=b;b=c;c=t;} printf("%5.2f,%5.2f,%5.2f",a,b,c; %为求余运算
} 运行结果为1.00, 3.00, 7.00

详见教材p72数据的输出形式
本题包含了3if语句每个if语句后的{ }都不可省略因为每个{ }中都包含了多条语句 若表达式a>b成立则执行{t=a;a=b;b=t;} 若表达式a>c成立则执行{t=a;a=c;c=t;} 若表达式b>c成立则执行{t=b;b=c;c=t;} 输出a,b,c中的值要求输出的每个数据宽度为5个空格小数部分保留2数据右对齐

3小于7,因此表达式a>b不成立因此不执行{t=a;a=b;b=t;}
3大于1因此表达式a>c成立则执行{t=a;a=b;b=t;}第一句a中的3拷贝粘贴到t第二句c中的1拷贝粘贴到a覆盖掉先前的3第三句t中的3拷贝到c覆盖c中先前的1. 执行完复合语句后实现了a,c元素的值的互换a1c3t3,。
. 学习参考
.
专业.专注

7大于c中的3因此b>c成立执行则执行{t=b;b=c;c=t;}过程同上执行后b3c7t7
此时输出a,b,c中的值为1.00, 2.00, 7.00 5
#include < stdio .h > main ( { float c=3.0 , d=4.0; if ( c>d c=5.0; else
if ( c==d c=6.0; else
c=7.0; printf ( “%.1f\n”,c ;
} 运行结果为7.0 此题为if...else...语句的嵌套第二if...else...作为第一个if...else...语句else部分的复合语句

若表达式c>d成立则执行c=5.0; 否则表达式c>d不成立



若表达式c==d成立则执行c=6.0; . 学习参考
.
专业.专注
否则执行c=7.0; 输出c中的值

3.0小于4.0因此表达式c>d不成立执行第二个if…else…。
3.0不等于4.0因此表达式c==d不成立执行c=7.07.0赋给c, 覆盖掉c中的3.0此时c中的值为7.0 输出此时的c中的值
6. #include main( {

int m; scanf("%d", &m; if (m >= 0




{ if (m%2 == 0 printf("%d is a positive even\n", m;

else

printf("%d is a positive odd\n", m; } else
{ if (m % 2 == 0
printf("%d is a negative even\n", m;


} else printf("%d is a negative odd\n", m; } 若键入9则运行结果为: -9 is a negative odd
. 学习参考
.
专业.专注
7.
#include main( { int num=0
while(num<=2{ num++printf("%d\n",num} } 运行结果为 1 2 3
详见教材p115循环结构
当循环条件num<=2成立的时候执行循环体{ num++printf("%d\n",num}中的语句

循环初值num0; 循环条件num<=2成立
1次循环执行num++;即将num中的值加1执行后num1

此时num中的值为1循环条件num<=2成立
2此循环执行num++;即将num中的值加1执行后num2


执行printf("%d\n",num在屏幕上输出num中的值即输出1之后换行
. 学习参考
.
专业.专注


执行printf("%d\n",num在屏幕上输出num中的值即输出2之后换行
此时num中的值为2循环条件num<=2成立
3此循环执行num++;即将num中的值加1执行后num3



执行printf("%d\n",num在屏幕上输出num中的值即输出3之后换行
此时num中的值为3循环条件num<=2不成立结束循环 8
#include main(
{ int sum=10,n=1; while(n<3 {sum=sum-n; n++; } printf(“%d,%d”,n,sum; }
运行结果为3,7 当循环条件n<3成立的时候执行循环体{sum=sum-n; n++; }中的语句

循环初值sum10,n1; 循环条件n<3成立
1次循环执行sum=sum-n=10-1=9



执行n++,即将n中的值加1执行后n2
. 学习参考
.
专业.专注
此时n中的值为2sum中的值为9循环条件n<3成立继续执行循环 2次循环执行sum=sum-n=9-2=7

输出此时n,sum中的值即为3,7需要注意printf(“%d,%d”,n,sum; 中要求输出的数据彼此间用逗号间隔因此结果的两个数据间一定要有逗号
9. #include main( { int num,c;
scanf("%d",# do {c=num%10; printf("%d ",c; }while((num/=10>0; num=0 printf("\n";

} 从键盘输入23则运行结果为3 2 详见教材p117循环结构p60复合的赋值运算符 do{ }while(表达式; 先无条件执行循环体再判断循环条件注意while表达式后有分号



执行n++,即将n中的值加1执行后n3
. 学习参考
.
专业.专注
定义整型变量numc; num赋一个整型值
执行{c=num%10; printf("%d",c; }直到循环条件(num/=10>0不成立 输出换行

已知为num赋值23 1次执行循环体
执行c=num%10=23%10=3; 执行printf("%d",c;输出3 判断循环条件 num/=10等价于num=num/10; 因此num=23/10=2, 2大于0因此循环条件(num/=10>0成立继续执行循环体执行完第1次循环时num2c3

2次执行循环体
执行c=2%10=2; 执行printf("%d",c;再输出2 判断循环条件num=2/10=0,0等于0因此循环条件(num/=10>0不成立结束循环
10 #include main(
{ int s=0,a=5,n; . 学习参考
.
专业.专注
scanf("%d",&n; do { s+=1; a=a-2; }while(a!=n; printf("%d%d\n",s,a;
} 若输入的值1运行结果为 2,1
详见教材p117循环结构p60复合的赋值运算符 执行{ s+=1; a=a-2; }直到循环条件a!=n不成立

已知为n赋值1,s0a5 1次执行循环体
执行s+=1;等价于s=s+1=0+1 执行a=a-2; a=5-2=3 判断循环条件,3不等于1因此循环条件a!=n成立,继续执行循环体 执行完第1次循环时s1a3 2次执行循环体
执行s+=1;等价于s=s+1=1+1=2 执行a=a-2; a=3-2=1 判断循环条件,1等于1因此循环条件a!=n不成立,结束循环 执行完第2次循环时s2a1
输出此时s,a中的值结果为2,1
. 学习参考
.
专业.专注
11
#include "stdio.h" main( {char c; c=getchar(;

while(c!='?' {putchar(c; c=getchar(; } }

如果从键盘输入abcdefgh回车 运行结果为abcde 12
#include main( { char c; while((c=getchar(!=’$’
{ if(‘A’<=c&&c<=‘Z’ putchar(c;
else if(‘a’<=c&&c<=‘z’ putchar(c-32; } }
当输入为ab*AB%cd#CD$运行结果为ABABCDCD 13.

#include . 学习参考
.
专业.专注
main( { int x, y =0;
for(x=1;x<=10;x++ { if(y>=10
break; y=y+x; }
printf(“%d %d”,y,x;
} 运行结果为10 5 详见教材p120 for语句
详见教材p126~128 breakcontinue语句 for( 表达式1;表达式2;表达式3 {
} (1 先求解表达式1
(2 求解表达式2若其值为真执行循环体然后执行 (3. 若为假则结束循环转到(5 (3 求解表达式3 (4 转回上面 (2继续执行
(5 循环结束执行for语句下面的一个语句

. 学习参考
.
专业.专注
break 跳出循环体continue,结束本次循环i次循环),继续执行下一次循环(i+1次循

此题 表达式1x=1表达式2循环条件x<=10表达式3x++ 初值x1y0循环条件即表达式2x<=10成立进入循环体

1次循环

执行if语句0小于10if语句的条件表达式不成立不执行break; 执行y=y+x; y=0+1=1 转向表达式3执行x++, x=x+1=1+1=2循环条件x<=10成立进入第2次循环

2次循环

执行if语句1小于10if语句的条件表达式不成立不执行break; 执行y=y+x; y=1+2=3 转向表达式3执行x++, x=x+1=2+1=3循环条件x<=10成立进入第3次循环

3次循环

执行if语句3小于10if语句的条件表达式不成立不执行break; 执行y=y+x; y=3+3=6 转向表达式3执行x++, x=x+1=3+1=4循环条件x<=10成立进入第4次循环

4次循环
. 学习参考
.
专业.专注
执行if语句6小于10if语句的条件表达式不成立不执行break; 执行y=y+x; y=6+4=10 转向表达式3执行x++, x=x+1=4+1=5循环条件x<=10成立进入第5次循环

5次循环

执行if语句10等于10if语句的条件表达式成立执行break跳出循环 break跳出至for语句的下一条语句执行printf(“%d %d”,y,x; 输出当前的yx.结果为10 5
14. #include main( { char ch; ch=getchar( ;
switch(ch { case ‘A’ : printf(“%c”,’A’; case ‘B’ : printf(“%c”,’B’; break; default: printf(“%s\n”,”other”;
} } 当从键盘输入字母A运行结果为AB 详见教材p103switch语句
. 学习参考
.
专业.专注
switch表达式
{ case 常量1 语句1 case 常量2 语句2 case 常量n 语句n default : 语句n+1 }
其中表达式常量1,…,常量n都为整型或字符型

case相当于给出执行程序的入口和起始位置若找到匹配的常量则从此处开始往下执行程序不再匹配常量直至遇到breakswitch结束

本题过程
首先从键盘接收一个字符’A’并将其放在变量ch
执行switch语句Switch后面的条件表达式为ch,因此表达式的值即为字符’A’. 用字符’A’依次与下面的 case中的常量匹配
与第1case后的常量匹配则从其后的语句开始往下执行程序在执行过程中不再进行匹。)因此先执行printf(“%c”,’A’,屏幕上输出A再往下继续执行printf(“%c”,’B’,屏幕上输出B再继续执行break 此时跳出switch语句 15.

. 学习参考
.
专业.专注
#include main( { int a=1,b=0 scanf(“%d”,&a;
switch(a { case 1: b=1break case 2: b=2break default : b=10} printf("%d ", b
} 若键盘输入5运行结果为10 本题过程
首先用scanf函数为变量a赋值为5
执行switch语句switch后面的条件表达式为a,因此表达式的值即为5. 5依次与下面 case中的常量匹配没有找到匹配的常量因此两个case后的语句都不执行执行default后面的语句b=1010赋给变量b
输出变量b,结果为10 16.
#include . 学习参考
.
专业.专注

main(_ { char grade=’C’; switch(grade {
case ‘A’: printf(“90-100\n”;
case ‘B’: printf(“80-90\n”;
case ‘C’: printf(“70-80\n”; case ‘D’: printf(“60-70\n”; break; case ‘E’: printf(“<60\n”; default : printf(“error!\n”;
}
} 运行结果为 70-80 60-70 本题过程
首先从键盘接收一个字符’C’并将其放在变量grade
执行switch语句switch后面的条件表达式为grade,因此表达式的值即为字符’C’. 用字符’C’依次与下面的 case中的常量匹配
与第3case后的常量匹配则从其后的语句开始往下执行程序在执行过程中不再进行匹printf(“70-80\n”;70-80,printf(“60-70\n”,屏幕上输出60-70并换行再继续执行break 此时跳出switch语句
. 学习参考
.
专业.专注

17. #include main( { int y=9;
for(;y>0;y- - if(y%3==0
{ printf(%d”,- -y;
}
} 运行结果为 852
详见教材p53自增自减符号
此题 表达式1被省略表达式2循环条件y>0表达式3y-- 初值y9循环条件即表达式2y>0成立进入循环体

1次循环

执行if语句9%3==0if语句的条件表达式成立执行printf(%d”,- -yy先自减1变为8然后在输出因此屏幕上输出8 转向表达式3执行y--, y=y-1=8-1=7循环条件y>0成立进入第2次循环
. 学习参考
.
专业.专注

2次循环

执行if语句7%3不为0if语句的条件表达式不成立不执行printf(%d”,- -y 转向表达式3执行y--, y=y-1=7-1=6循环条件y>0成立进入第3次循环

3次循环

执行if语句6%3==0if语句的条件表达式成立执行printf(%d”,- -yy先自减1变为5然后在输出因此屏幕上输出5 转向表达式3执行y--, y=y-1=5-1=4循环条件y>0成立进入第4次循环

4次循环

执行if语句4%3不为0if语句的条件表达式不成立不执行printf(%d”,- -y 转向表达式3执行y--, y=4-1=3循环条件y>0成立进入第5次循环

5次循环

执行if语句3%3==0if语句的条件表达式成立执行printf(%d”,- -yy先自减1变为2然后在输出因此屏幕上输出2 转向表达式3执行y--, y=y-1=2-1=1循环条件y>0成立进入第5次循环 6次循环

执行if语句1%3不为0if语句的条件表达式不成立不执行printf(%d”,- -y 转向表达式3执行y--, y=1-1=0循环条件y>0不成立循环结束

. 学习参考
.
专业.专注
18.
#include main( { int i,sum=0;
i=1; do{ sum=sum+i; i++; }while(i<=10; printf(“%d”,sum;
} 运行结果为 55
19. #include #define N 4 main( { int i; int x1=1,x2=2; printf("\n"; for(i=1;i<=N;i++ { printf("%4d%4d",x1,x2; . 学习参考
.
专业.专注
if(i%2==0
printf("\n"; x1=x1+x2; x2=x2+x1; } } 运行结果为 1 2 3 5 8 13 21 34
此题 首先为整型变量赋初值x1=1,x2=2 表达式1i=1表达式2循环条件i<=Ni<=4表达式3i++ 循环变量初值i1循环条件即表达式2i<=4成立进入第1次循环

1次循环

执行printf("%4d%4d",x1,x2;因此屏幕上输出1
2 执行if语句1%2不为0if语句的条件表达式不成立不执行printf("\n"; 执行x1=x1+x2=1+2=3;此时x1中的值已变为3 执行x2=x2+x1=2+3=5
转向表达式3执行i++, i2循环条件i<=4成立进入第2次循环 2次循环

执行printf("%4d%4d",x1,x2;因此屏幕上输出3
5 . 学习参考
.
专业.专注
执行if语句2%2==0if语句的条件表达式成立执行printf("\n";换行 执行x1=x1+x2=3+5=8;此时x1中的值已变为8 执行x2=x2+x1=5+8=13
转向表达式3执行i++, i3循环条件i<=4成立进入第3次循环 3次循环

执行printf("%4d%4d",x1,x2;因此屏幕上输出8
13 执行if语句3%2不为0if语句的条件表达式不成立不执行printf("\n"; 执行x1=x1+x2=8+13=21;此时x1中的值已变为21 执行x2=x2+x1=21+13=34
转向表达式3执行i++, i4循环条件i<=4成立进入第4次循环 2次循环

执行printf("%4d%4d",x1,x2;因此屏幕上输出21
34 执行if语句4%2==0if语句的条件表达式成立执行printf("\n";换行 执行x1=x1+x2=21+34=55;此时x1中的值已变为55 执行x2=x2+x1=34+55=89
转向表达式3执行i++, i5循环条件i<=4不成立结束循环
20 #include main( { int
x, y; . 学习参考
.
专业.专注
for(x=30, y=0; x>=10, y<10; x--, y++
x/=2, y+=2; printf(“x=%d,y=%d\n”,x,y;
} 运行结果为 x=0,y=12 21.
#include #define N 4 main( { int
i,j; for(i=1;i<=N;i++ { for(j=1;j

printf(" "; printf("*"; printf("\n"; }} 运行结果为 *
* *
*

. 学习参考
.
专业.专注
详见教材P41符号常量
用宏处理指令定义符号常量N4在编译过程中遇到N即视为整数4

外层for循环表达式1i=1表达式2循环条件i<=N表达式3 i++ 内层for循环表达式1j=1表达式2循环条件j 表达式3j++
首先计算外层循环的表达式1i1使得循环条件i<=4成立进入外层for循环体

外层for循环第1 此时i1

内层循环j=1,使得循环条件j不成立因此不执行内层循环体不输出空格 执行printf("*"; 执行printf("\n";换行
至此外层循环体执行完计算外层循环的表达式3i++此时i2. 使得循环条件i<=4 成立再次进入外层for循环体


外层for循环第2 此时i2
内层循环j=1,使得循环条件j成立
1次执行内层循环体printf(" "; 执行内层循环表达式3j++2j不成立跳出内层循环


执行printf("*"; 执行printf("\n";换行
. 学习参考
.
专业.专注
至此外层循环体执行完计算外层循环的表达式3i++此时i3. 使得循环条件i<=4 成立进入外层for循环体

外层for循环第3 此时i3
内层循环j=1,使得循环条件j成立
1次执行内层循环体printf(" "; 执行内层循环表达式3j++2j成立再次执行内层循环 2次执行内层循环体printf(" "; 执行内层循环表达式3j++3j不成立跳出内层循环


执行printf("*"; 执行printf("\n";换行
至此外层循环体执行完计算外层循环的表达式3i++此时i4. 使得循环条件i<=4 成立进入外层for循环体

外层for循环第4 此时i4
内层循环j=1,使得循环条件j成立
1次执行内层循环体printf(" "; 执行内层循环表达式3j++2j成立再次执行内层循环 2次执行内层循环体printf(" "; 执行内层循环表达式3j++3j成立再次执行内层循环 3次执行内层循环体printf(" "; 执行内层循环表达式3j++4j不成立跳出内层循环
. 学习参考
.
专业.专注


执行printf("*"; 执行printf("\n";换行
至此外层循环体执行完计算外层循环的表达式3i++此时i5. 使得循环条件i<=4 不成立跳出外层for循环体


数组
1. #include main( { int i, a[10]; for(i=9;i>=0;i--

a[i]=10-i; printf(“%d%d%d”,a[2],a[5],a[8];
} 运行结果为 852
详见p143-146. 例题6.1一定看懂

首先定义整型变量i整型数组a, a的长度为10a中包含10个整型元素整型变量
. 学习参考
.
专业.专注
执行for循环语句
初值i=9, 使得循环条件i>=0成立执行循环体 1次循环

执行a[i]=10-i 等价于a[9]=10-9=1 计算表达式3i--i8使得循环条件i>=0成立继续执行循环体
2次循环

执行a[i]=10-i 等价于a[8]=10-8=2 计算表达式3i--i7使得循环条件i>=0成立继续执行循环体
3次循环

执行a[i]=10-i 等价于a[7]=10-7=3 计算表达式3i--i6使得循环条件i>=0成立继续执行循环体
4次循环

执行a[i]=10-i 等价于a[6]=10-6=4 计算表达式3i--i5使得循环条件i>=0成立继续执行循环体
5次循环

执行a[i]=10-i 等价于a[5]=10-5=5 计算表达式3i--i4使得循环条件i>=0成立继续执行循环体
6次循环

执行a[i]=10-i 等价于a[4]=10-4=6 计算表达式3i--i3使得循环条件i>=0成立继续执行循环体
7次循环

执行a[i]=10-i 等价于a[3]=10-3=7 . 学习参考
.
专业.专注
计算表达式3i--i2使得循环条件i>=0成立继续执行循环体
8次循环

执行a[i]=10-i 等价于a[2]=10-2=8 计算表达式3i--i1使得循环条件i>=0成立继续执行循环体
9次循环

执行a[i]=10-i 等价于a[1]=10-1=9 计算表达式3i--i0使得循环条件i>=0成立继续执行循环体
10次循环 2.
#include main( { int i,a[6];
for (i=0; i<6; i++ a[i]=i; for (i=5; i>=0 ; i--
printf("%3d",a[i]; }

运行结果为 5 4 3 2 1
0 执行a[i]=10-i 等价于a[0]=10-0=10 计算表达式3i--i-1使得循环条件i>=0不成立跳出循环体
. 学习参考
.
专业.专注
首先定义整型变量i整型数组a, a的长度为6a中包含6个整型元素整型变量 执行第一个for循环语句
初值i=0, 使得循环条件i<6成立执行循环体 1次循环

执行a[i]= i 等价于a[0]=0 计算表达式3i++i1使得循环条件i<6成立继续执行循环体
2次循环

执行a[i]= i 等价于a[1]=1 计算表达式3i++i2使得循环条件i<6成立继续执行循环体
3次循环

执行a[i]= i 等价于a[2]=2 计算表达式3i++i3使得循环条件i<6成立继续执行循环体
4次循环

执行a[i]= i 等价于a[3]=3 计算表达式3i++i4使得循环条件i<6成立继续执行循环体
5次循环

执行a[i]= i 等价于a[4]=4 计算表达式3i++i5使得循环条件i<6成立继续执行循环体
6次循环

执行a[i]= i 等价于a[5]=5 计算表达式3i++i6使得循环条件i<6不成立结束循环
. 学习参考
.
专业.专注
执行第二个for循环语句
初值i=5, 使得循环条件i>=0成立执行循环体 1次循环
执行printf("%3d",a[i]; 即输出a[5]的值

计算表达式3i--i4使得循环条件i>=0成立继续执行循环体
2次循环
执行printf("%3d",a[i]; 即输出a[4]的值

计算表达式3i--i3使得循环条件i>=0成立继续执行循环体
3次循环
执行printf("%3d",a[i]; 即输出a[3]的值

计算表达式3i--i2使得循环条件i>=0成立继续执行循环体
4次循环
执行printf("%3d",a[i]; 即输出a[2]的值

计算表达式3i--i1使得循环条件i>=0成立继续执行循环体
5次循环
执行printf("%3d",a[i]; 即输出a[1]的值

计算表达式3i--i0使得循环条件i>=0成立继续执行循环体
6次循环
执行printf("%3d",a[i]; 即输出a[0]的值 3.
计算表达式3i--i6使得循环条件i>=0不成立结束循环
. 学习参考
.
专业.专注
#include main( { int i,k,a[10],p[3]
k=5
for(i=0i<10i++ a[i]=i
for(i=0i<3i++ p[i]=a[i*(i+1]
for(i=0i<3i++ k+=p[i]*2 printf("%d\n",k
} 运行结果为21 首先定义整型变量ik整型数组a, a的长度为10整型数组p, p的长度为3 k初值为5 第一个for循环语句为数组a进行初始化
执行完第一个for句后a[0]=0a[1]=1a[2]=2a[3]=3a[4]=4a[5]=5a[6]=6a[7]=7a[8]=8a[9]=9 循环过程略

第二个for循环语句为数组p进行初始化 初值i=0, 使得循环条件i<3成立执行循环体 1次循环
. 学习参考
.
专业.专注
执行p[i]=a[i*(i+1]; p[0]=a[0*(0+1]=a[0]=0
计算表达式3i++i1使得循环条件i<3成立继续执行循环体
2次循环
执行p[i]=a[i*(i+1]; p[1]=a[1*(1+1]=a[2]=2
计算表达式3i++i2使得循环条件i<3成立继续执行循环体
3次循环
执行p[i]=a[i*(i+1]; p[2]=a[2*(2+1]=a[6]=6

第三个for循环语句
初值i=0, 使得循环条件i<3成立执行循环体 1次循环
执行k+=p[i]*2; k=5+p[0]*2=5+0=5
计算表达式3i++i1使得循环条件i<3成立继续执行循环体 计算表达式3i++i3使得循环条件i<3不成立结束循环
2次循环
执行k+=p[i]*2; k=5+p[1]*2=5+2*2=9
计算表达式3i++i2使得循环条件i<3成立继续执行循环体
1次循环
执行k+=p[i]*2; k=9+p[2]*2=9+6*2=21
4. 计算表达式3i++i3使得循环条件i<3不成立结束循环
. 学习参考
.
专业.专注
#include int m[3][3]={{1},{2},{3}}; int n[3][3]={1,2 ,3}; main( { printf(“%d,”, m[1][0]+n[0][0]; printf(“%d\n”,m[0][1]+n[1][0];
} 运行结果为
3,0 详见教材P149~1526.7看懂

首先定义整型二维数组mm33列的二维矩阵并对其以行的形式初始化 m[0][0]=1 m[0][1]=0 m[1][2]=0 m[1][0]=2 m[1][1]=0 m[2][2]=0 m[2][0]=3 m[2][1]=0 m[2][2]=0
定义整型二维数组nm33列的二维矩阵 n[0][0]=1 n[0][1]=2 n[1][2]=3 n[1][0]=0 n[1][1]=0 n[2][2]=0 n[2][0]=0 n[2][1]=0 n[2][2]=0 因此
m[1][0]+n[0][0]=2+1=3 . 学习参考
.
专业.专注
m[0][1]+n[1][0]=0+0=0
5. #include main( { int i; int x[3][3]={1,2,3,4,5,6,7,8,9};
for (i=1; i<3; i++ printf("%d ",x[i][3-i]; } 运行结果为 6 8

首先按存储顺序为数组x初始化 x[0][0]=1 x[0][1]=2 x[0][2]=3 x[1][0]=4 x[1][1]=5 x[1][2]=6 x[2][0]=7 x[2][1]=8 x[2][2]=9
初值i=1, 使得循环条件i<3成立执行循环体 1次循环
. 学习参考
.
专业.专注
执行printf("%d ",x[i][3-i]打印出x[i][3-i]x[1][2]的值
计算表达式3i++i2使得循环条件i<3成立继续执行循环体 2次循环
执行printf("%d ",x[i][3-i]打印出x[i][3-i]x[2][1]的值 计算表达式3i++i3使得循环条件i<3成立结束循环


6. #include main( { int n[3][3], i, j for(i=0i<3i++ {for(j=0j<3j++ {n[i][j]=i+j
printf(“%d ”, n[i][j]; } } } 运行结果为 0 1 2 1 2
3 . 学习参考
.
专业.专注
2 3 4
循环变量i0, 循环条件 i<3成立执行循环体 外层for1次循环 相当于输出第1



内层for循环j初值为0循环条件j<3成立执行循环体 内层for1次循环

执行n[i][j]=i+jn[0][0]=0+0=0 执行printf(“%d ”, n[i][j];



执行内层循环表达式3j++j1j<3成立继续执行内层循环体
内层for2次循环



执行n[i][j]=i+jn[0][1]=0+1=1 执行printf(“%d ”, n[i][j]



执行内层循环表达式3j++j2j<3成立继续执行内层循环体
内层for3次循环






执行n[i][j]=i+jn[0][2]=0+2=2 执行printf(“%d ”, n[i][j];
执行内层循环表达式3j++j3j<3不成立结束内层循环
执行printf(“\n”;
执行外层for语句的表达式3i++i,1 i<3成立继续执行外层循环体
外层for2次循环 相当于输出第2



内层for循环j初值为0循环条件j<3成立执行循环体 内层for1次循环
. 学习参考
.
专业.专注






执行n[i][j]=i+jn[1][0]=1+0=1 执行printf(“%d ”, n[i][j];
执行内层循环表达式3j++j1j<3成立继续执行内层循环体
内层for2次循环






执行n[i][j]=i+jn[1][1]=1+1=2 执行printf(“%d ”, n[i][j];
执行内层循环表达式3j++j2j<3成立继续执行内层循环体 内层for3次循环






执行n[i][j]=i+jn[1][2]=1+2=3 执行printf(“%d ”, n[i][j];
执行内层循环表达式3j++j3j<3不成立结束内层循环 执行printf(“\n”;


执行外层for语句的表达式3i++i,1 i<3成立继续执行外层循环体
外层for2次循环 相当于输出第3



内层for循环j初值为0循环条件j<3成立执行循环体 内层for1次循环

执行n[i][j]=i+jn[2][0]=2+0=1 执行printf(“%d ”, n[i][j];
执行内层循环表达式3j++j1j<3成立继续执行内层循环体 内层for2次循环






执行n[i][j]=i+jn[2][1]=2+1=2 执行printf(“%d ”, n[i][j];
. 学习参考
.

本文来源:https://www.2haoxitong.net/k/doc/54ec39ac6ad97f192279168884868762cbaebbcc.html

《C语言试题库(带详细讲解答案).doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式