n 换行(LF)010
r 回车(CR)013
t 水平制表(HT)009
v 垂直制表(VT)011
反斜杠 092
? 问号字符 063
' 单引号字符 039
“ 双引号字符 034
空字符(NULL)000
ddd 任意字符 三位八进制
xhh 任意字符 二位十六进制
6)算术运算符号的优先级别:
同级别的有的是从左到右,有的是从右到左。
7)强制类型转换:
一定是(int)a 不是int(a),注意类型上一定有括号的。
注意(int)(a+b)和(int)a+b 的区别。前是把a+b转型,后是把a转型再加b。
8)表达式的考查:
是表达式就一定有数值。
赋值表达式:表达式数值是最左边的数值,a=b=5;该表达式为5,常量不可以赋值。
自加、自减表达式:假设a=5,++a(是为6),a++(为5);
运行的机理:++a 是先把变量的数值加上1,然后把得到的数值放到变量a中,然后再用这
个++a表达式的数值为6,而a++是先用该表达式的数值为5,然后再把a的数值加上1为6,再放到变量a中。进行了++a和a++后在下面的程序中再用到a的话都是变量a中的6了。
考试口诀:++在前先加后用,++在后先用后加。
逗号表达式:优先级别最低 ;表达式的数值逗号最右边的那个表达式的数值。
(2,3,4)的表达式的数值就是4。
9)位运算的考查:
会有一到二题考试题目。
总的处理方法:几乎所有的位运算的题目都要按这个流程来处理(先把十进制变成二进制再变成十进制)。例1: char a = 6, b;
b = a
一定要记住,在没有舍去数据的时候,>右移一位表示除以2。/ 16
篇二:2016年3月份全国计算机等级考试二级C语言 题库(全)
2016年3月份全国计算机等级考试二级C语言 题库(全)
一、选择题
在下列各题的A)、B)、C)、D)四个选项中,只有一个选项是正确的,请将正
确的选项涂写在答题卡相应位置上,答在试卷上不得分。
(1)为了避免流程图在描述程序逻辑时的灵活性,提出了用方框图来代替传统的 程序流程图,通常也把这种图称为
A)PAD图 B)N-S图C)结构图D)数据流图
(2)结构化程序设计主要强调的是
A)程序的规模B)程序的效率 C)程序设计语言的先进性
程序易读性
(3)为了使模块尽可能独立,要求
A)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量强
B)模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱
C)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱
D)模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强
(4)需求分析阶段的任务是确定
A)软件开发方法
功能
(5)算法的有穷性是指
A)算法程序的运行时间是有限的B)软件开发工具 C)软件开发费用 D)软件系统 D)
B)算法程序所处理的数据量是有限的 C)算法程序的长度是有限的 D)算法只能被有限的用户使用
(6)对长度为n的线性表排序,在最坏情况下,比较次数不是n(n-1)/2的排序方法
是
A)快速排序B)冒泡排序C)直接插入排序D)堆排序
(7)如果进栈序列为e1,e2,e3,e4,则可能的出栈序列是
A)e3,e1,e4,e2B)e2,e4,e3,e1C)e3,e4,e1,e2D)任意顺序
(8)将E-R图转换到关系模式时,实体与联系都可以表示成A)属性B)关系C)键
(9)有三个关系R、S和T如下:
R
BCD
a0k1
b1n1
S
BCD / 16
f3h2
a0k1
n2x1
T
B C D
a
0 k1D)域
由关系R和S通过运算得到关系T,则所使用的运算为
A)并B)自然连接C)笛卡尔积D)交
(10)下列有关数据库的描述,正确的是
A)数据处理是将信息转化为数据的过程
B)数据的物理独立性是指当数据的逻辑结构改变时,数据的存储结构不变
C)关系中的每一列称为元组,一个元组就是一个字段
D)如果一个关系中的属性或属性组并非该关系的关键字,但它是另一个关系
的关键字,则称其为本关系的外关键字
(11)以下叙述中正确的是
A)用C程序实现的算法必须要有输入和输出操作
B)用C程序实现的算法可以没有输出但必须要有输入
C)用C程序实现的算法可以没有输入但必须要有输出
D)用C程序实现的算法可以既没有输入也没有输出
(12)下列可用于C语言用户标识符的一组是
A)void, define, WORDB)a3_3,_123,Car C)For,-abc, IF Case
D)2a, DO, sizeof
(13)以下选项中可作为C语言合法常量的是
A)-80B)-080C)-8e1.0D)-80.0e
(14)若有语句:char *line[5];,以下叙述中正确的是
A)定义line是一个数组,每个数组元素是一个基类型为char为指针变量
B)定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组
C)定义line是一个指针数组,语句中的*号称为间址运算符
D)定义line是一个指向字符型函数的指针
(15)以下定义语句中正确的是
A)inta=b=0;B)charA=65+1,b=′b′;C)floata=1,*b=&a,*c=&b;
(16)有以下程序段
charch;intk;ch=′a′;k=12;
printf(”%c,%d,“,ch,ch,k);printf(”k=%d n“,k);/ 16
已知字符a的ASCII码值为97,则执行上述程序段后输出结果是
A)因变量类型与格式描述符的类型不匹配输出无定值
B)输出项与格式描述符个数不符,输出为零值或不定值
C)a,97,12k=12 D)a,97,k=12
(17)有以下程序
main()
{inti,s=1;
for(i=1;i
if(!(i%5)&&!(i%3))s+=i;
printf(”%dn“,s);}
A)409B)277C)1 D)91
(18)当变量c的值不为2、4、6时,值也为”真“的表达式是
A)(c==2)||(c==4)||(c==6)
B)(c>=2&& c
C)(c>=2&&c
D)(c>=2&& c
(19)若变量已正确定义,有以下程序段
inta=3,b=5,c=7;if(a>b)a=b;c=a;if(c!=a)c=b;
printf(”%d,%d,%dn“,a,b,c);
其输出结果是
A)程序段有语法错B)3,5,3
D)3,5,7
(20)有以下程序
#include
main()
{intx=1,y=0,a=0,b=0;
switch(x)
{case1:
switch(y)
{case0:a++;break;
case1:b++;break;
}
case 2:a++;b++;break;
case 3:a++;b++;
}
printf(”a=%d,b=%dn“,a,b);
}
C)3,5,5
A)a=1,b=0B)a=2,b=2C)a=1,b=1 / 16
D)a=2,b=1
(21)下列程序的输出结果是
#include ”stdio.h“ main()
{int i,a=0,b=0;
for(i=1;i
{if(i%2==0){a++;
continue;} b++;}
printf(”a=%d,b=%d“,a,b);} A)a=4,b=4B)a=4,b=5 C)a=5,b=4(22)已知
#int t=0;while(t=1){...}
则以下叙述正确的是
A)循环控制表达式的值为0
B)循环控制表达式的值为1
C)循环控制表达式不合法
D)以上说法都不对
(23)下面程序的输出结果是
main()
{ int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
printf(”%dn",*(p+2));}
A)3B)4C)1D)2
D)a=5,b=5
篇三:全国计算机二级c语言历年真题完整版
2010年3月全国计算机等级考试二级C笔试试卷
一、选择题
(1)A)对长度为n的有序链表进行查找,最坏情况下需要的比较次数为n
B)对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(n/2)
C)对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(log2n)
D)对长度为n的有序链表进行对分查找,最坏情况下需要的比较次数为(log2n)
(2)算法的时间复杂度是指
A)算法的执行时间B)算法所处理的数据量
C)算法程序中的语句或指令条数D)算法在执行过程中所需要的基本运算次数
(3)软件按功能可以分为:应用软件、系统软件和支撑软件(或工具软件)。下面属于系统软件的是 / 16
A)编辑软件B)操作系统C)教务管理系统D)浏览器
(4)软件(程序)调试的任务是
A)诊断和改正程序中的错误 B)尽可能多地发现程序中的错误
C)发现并改正程序中的所有错误 D)确定程序中错误的性质
(5)数据流程图(DFD图)是
A)软件概要设计的工具 B)软件详细设计的工具
C)结构化方法的需求分析工具 D)面向对象方法的需求分析工具
(6)软件生命周期可分为定义阶段,开发阶段和维护阶段。详细设计属于
A)定义阶段B)开发阶段C)维护阶段C)上述三个阶段
(7)数据库管理系统中负责数据模式定义的语言是
A)数据定义语言B)数据管理语言
C)数据操纵语言D)数据控制语言
(8)在学生管理的关系数据库中,存取一个学生信息的数据单位是
A)文件 B)数据库C)字段D)记录
(9)数据库设计中,用E-R图来描述信息结构但不涉及信息在计算机中的表示,它属于数据库设计的A)需求分析阶段 B)逻辑设计阶段
C)概念设计阶段 D)物理设计阶段
(10)有两个关系R和T如下:
则由关系R得到关系T的操作是
A)选择B)投影C)交D)并
(11)以下叙述正确的是
A)C语言程序是由过程和函数组成的
B)C语言函数可以嵌套调用,例如:fun(fun(x))
C)C语言函数不可以单独编译
D)C语言中除了main函数,其他函数不可作为单独文件形式存在(12)以下关于C语言的叙述中正确的是
A)C语言中的注释不可以夹在变量名或关键字的中间
B)C语言中的变量可以在使用之前的任何位置进行定义
C)在C语言算术表达式的书写中,运算符两侧的运算数类型必须一致
D)C语言的数值常量中夹带空格不影响常量值的正确表示
(13)以下C语言用户标识符中,不合法的是
A)_1B)AaBcC)a_b D)a--b
(14)若有定义:doublea=22;inti=0,k=18;,则不符合C语言规定的赋值语句是 A)a=a++,i++;B)i=(a+k)<=(i+k);
C)i=a%11;D)i=!a;
(15)有以下程序
#include
main()/ 16
{char a,b,c,d;
scanf(“%c%c”, c=getchar();d=getchar;
printf(“%c%c%c%cn”,a,b,c,d);}
当执行程序时,按下列方式输入数据(从第1列开始,<CR>代表回车,注意:回车也是
一个字符)
12<CR>
34<CR>
则输出结果是
A)1234B)12C)12D)12
(16)以下关于C语言数据类型使用的叙述中错误的是
A)若要准确无误差的表示自然数,应使用整数类型
B)若要保存带有多位小数的数据,应使用双精度类型
C)若要处理如“人员信息”等含有不同类型的相关数据,应自定义结构体类型
D)若只处理“真”和“假”两种逻辑值,应使用逻辑类型
(17)若a是数值类型,则逻辑表达式(a==I)||(a!=1)的值是
A)1B)0
C)2D)不知道a的值,不能确定
(18)以下选项中与if(a==1)a=b;else a++;语句功能不同的switch语句是
A)switch(a)
{case1:a=b;break;
default:a++;
}
B)switch(a==1)
{case0:a=b;break;
case1:a++;
}
C)switch(a)
{default:a++;break;
case1:a=b;
}
D)switch(a==1)
{case1:a=b;break;
case0:a++;
}
(19)如下嵌套的if语句
if(a
if(a
else k=c;/ 16
if(b
else k=c;
以下选项中与上述if语句等价的语句是
A)k=(a
B)k=(a
C)k=(a
D)k=(a
(20)有以下程序
#include main()
{int i,j,m=1;
for(i=1;i
{for(j=3;j>0;j--){if(i+j>3)break;m*=i*j;} }
printf(“m=%dn”,m);
}程序运行后的输出结果是
A)m=6B)m=2 C)m=4D)m=5
(21)有以下程序
#include main()
{int a=1,b=2;
for(;a
printf(“%d,%dn”,a,b);
}程序运行后的输出结果是
A)9,18B)8,11C)7,11 D)10,14
(22)有以下程序,其中k的初值为八进制数
#include main(){int k=011;
printf(“%dn”,k++);
}程序运行后的输出结果是
A)12B)11 C)10D)9
(23)下列语句组中,正确的是
A)char *s;s="Olympic";B)char s[7];s="Olympic";
C)char *s;s={"Olympic"}; D)char s[7];s={"Olympic"};
(24)以下关于return语句的叙述中正确的是
A)一个自定义函数中必须有一条return语句
B)一个自定义函数中可以根据不同情况设置多条return语句
C)定义成void类型的函数中可以有带返回值的return语句
D)没有return语句的自定义函数在执行结束时不能返同到调用处
(25)下列选项中,能正确定义数组的语句是
A)int num[0..2008];B)int num[];
C)int N=2008;D)#define N 2008 / 16
int num[N]; int num[N];
(26)有以下程序
#include
void fun(char *c,int d){*c=*c+1;d=d+1;printf(“%c,%c”,*c,d);}
main()
{char b=‘a’,a=‘A’;
fun( printf(“%c,%cn”,b,a);}程序运行后的输出结果是
A)b,B,b,AB)b,B,B,A
C)a,B,B,aD)a,B,a,B
(27)若有定义int(*pt)[3];,则下列说法正确的是
A)定义了基类型为int的三个指针变量
B)定义了基类型为int的具有三个元素的指针数组pt C)定义了一个名为*pt、具有三个元素的整型数组
D)定义了一个名为pt的指针变量,它可以指向每行有三个整数元素的二维数组
(28)设有定义double a[10],*s=a;,以下能够代表数组元索a[3]的是
A)(*s)[3] B)(s+3)
C)*s[3] D)(29)有以下程序
#include main()
{int a[5]={1,2,3,4,5},b[5]={0,2,1,3,0},i,s=0;for(i=1;i
printf(“%dn”,s);
}程序运行后的输出结果是
A)6 B)10C)11D)15
(30)有以下程序
#include main()
{int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;
for(i=1;i
for(j=1;j
printf(“%dn”,t);
}程序运行后的输出结果是
A)1B)3C)4D)9
(31)若有以下定义和语句
char s1[10]="abcd!","n123";
printf("%d%d\n",strlen(s1),strlen(s2)); / 16
则输出结果是
A)5 5B)10 5C)10 7D)5
8
(32)有以下程序
#include
#define N 8
void fun(int *x,int i)
{*x=*x+i;}
main()
{int a[N]={1,2,3,4,5,6,7,8},i;
fun(a,2);for(i=1;i
{printf(“%d”,a[i]);}
printf(“n”);
}程序运行后的输山结果是
A)1313B)2234 C)3234
(33)有以下程序
#include
int f(int t[],int n);main()
{int a[4]={1,2,3,4},s;
s=f(a,4);printf(“%dn”,s);} int f(int t[],int n)
{if(n>0)return t[n-1]+f(t,n-1);
else return 0;} 程序运行后的输出结果是
A)4 B)10 C)14D)6
(34)有以下程序
#include int fun()
{static int x=1;x*=2;return x;}
main(){int i,s=1;
for(i=1;i
printf(“%dn”,s);}程序运行后的输出结果是
A)0B)1C)4D)8
(35)有以下程序
#include
#define SUB(a)(a)-(a)/ 16 main()
{int a=2,b=3,c=5,d;
d=SUB(a+b)*c;
printf(“%dn”,d);
}程序运行后的输山结果是
A)0 B)-12C)-20
(36)设有定义:
struct complex
{int real,ueal;} data1={1,8},data2;
D)1234D)10/ 16 / 16 / 16
第二篇:计算机二级c语言试题及答案计算机二级考试是全国计算机等级考试(National Computer Rank Examination,简称NCRE)四个等级中的一个等级,考核计算机基础知识和使用一种高级计算机语言编写程序以及上机调试的基本技能。计算机二级考试采用全国统一命题、统一考试的形式。那么计算机二级c语言会怎么考?以下仅供参考!
1.(A)是构成C语言程序的基本单位。
A、函数
B、过程
C、子程序
D、子例程
2.C语言程序从 C 开始执行。
A、程序中第一条可执行语句
B、程序中第一个函数
C、程序中的main函数
D、包含文件中的第一个函数
3、以下说法中正确的是(C)。
A、C语言程序总是从第一个定义的函数开始执行
B、在C语言程序中,要调用的函数必须在main()函数中定义
C、C语言程序总是从main()函数开始执行
D、C语言程序中的main()函数必须放在程序的开始部分
4.下列关于C语言的说法错误的是(B)。
A、C程序的工作过程是编辑、编译、连接、运行
B、C语言不区分大小写。
C、C程序的三种基本结构是顺序、选择、循环
D、C程序从main函数开始执行
5.下列正确的标识符是(C)。
A、-a
1B、a[i]
C、a2_i
D、int t
5~8题为相同类型题
考点:标识符的命名规则
只能由字母、数字、下划线构成数字不能作为标识符的开头
关键字不能作为标识符
选项A中的“-”,选项B中“[”与“]”不满足(1);选项D中的int为关键字,不满足(3)
6.下列C语言用户标识符中合法的是(B)。
A、3ax
B、x
C、case
D、-e2 E)union
选项A中的标识符以数字开头不满足(2);选项C,E均为为关键字,不满足(3);选项D中的“-”不满足(1);
7.下列四组选项中,正确的C语言标识符是(C)。
A、%x
B、a+b
C、a12
3D、12
3选项A中的“%”,选项B中“+”不满足(1);选项D中的标识符以数字开头不满足(2)
8、下列四组字符串中都可以用作C语言程序中的标识符的是(A)。
A、print _3d db8 aBc
B、Iam one_half start$$it 3pai
C、str_1 Cpp pow while
D、Pxq My->book line# His.age
选项B中的“”,”$$”,选项D中“>”,”#”,”.”,”-”不满足(1);选项C中的while为关键字,不满足(3)
9.C语言中的简单数据类型包括(D)。
A、整型、实型、逻辑型
B、整型、实型、逻辑型、字符型
C、整型、字符型、逻辑型
D、整型、实型、字符型
10.在C语言程序中,表达式5%2的结果是 C。
A、2.5B、2C、1D、3%为求余运算符,该运算符只能对整型数据进行运算。且符号与被模数相同。5%2=1;5%(-2)=1;(-5)%2=-1;(-5)%(-2)=-1;
/为求商运算符,该运算符能够对整型、字符、浮点等类型的数据进行运算,5/2=
211.如果int a=3,b=4;则条件表达式"aA、3B、4C、0
D、1详见教材P97.表达式1?表达式2:表达式
3先计算表达式1,若表达式1成立,则选择计算表达式2,并表达式2的值作为整个大表达式的值;
若表达式1不成立,则选择计算表达式3,并将表达式3的值作为整个大表达式的值
此题中的aa为3,b为4。a12.若int x=2,y=3,z=4 则表达式x
A、4B、3C、2D、0
E)
113.C语言中,关系表达式和逻辑表达式的值是(B)。
A、0
B、0或
1C、1D、‘T’或’F’
14.下面(D)表达式的值为4.A、11/
3B、11.0/
3C、(float)11/
3D、(int)(11.0/3+0.5)
14~16题为同一类型
详见教材P54~56.(1)相同数据类型的元素进行数学运算(+、-、*、/)得到结果还保持原数据类型。
(2)不同数据类型的元素进行数学运算,先要统一数据类型,统一的标准是低精度类型转换为高精度的数据类型。
选项A,11与3为两个整数,11/3结果的数据类型也应为整数,因此将3.666666的小数部分全部舍掉,仅保留整数,因此11/3=3.选项B,11.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同
选项D,首先计算11.0/3,其计算过程、结果与选项B同,得到3.666666;再计算3.666666+0.5=4.166666,最后将4.166666强制类型转换为整型,即将其小数部分全部舍掉,结果为
415.设整型变量 a=2,则执行下列语句后,浮点型变量b的值不为0.5的是(B)
A、b=1.0/a
B、b=(float)(1/A、C、b=1/(float)a
D、b=1/(a*1.0)
16.若“int n;float f=13.8;”,则执行“n=(int)f%3”后,n的值是(A)
A、1B、4C、4.33333
3D、4.6
“(int)f“表示将f中的值强制类型转换为整型,即将13.8的小数部分舍掉,转换为13;然后计算13%3,结果为1,再将结果赋给变量n,因此n的值为
117.以下对一维数组a的正确说明是: D
A、char a(10);
B、int a[];
C、int k=5,a[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、inta(5)={}
C、int a[3]={0,1,2}
D、int a{5}={10*1}
详见教材P145,一维数组的定义、初始化
选项B,D,常量表达式只能放在中括号 [ ]中
选项A,数组可以看做是若干个相同数据类型元素的有序集合,因此以集合的形式对其初始化,使用{ }对其初始化,选项A用了().19.在C语言中对一维整型数组的正确定义为 D。
A、int a(10);
B、int n=10,a[n];
C、int n;a[n];
D、#define N 10
int a[N];
20、已知:int a[10];则对a数组元素的正确引用是(D)。
A、a[10]
B、a[3.5]
C、a(5)
D、a[0]
详见教材P144,数组元素的引用
数组名[下标]
引用数组元素时,[ ]中的下标为逻辑地址下标,只能为整数,可以为变量,且从0开始计数
int a[10]表示定义了一个包含10个整型数据的数组a,数组元素的逻辑地址下标范围为0~9,即a[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、2B、3C、4D、无确定值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___
A、a[2][4]
B、a[1,3]
C、a[2][0]
D、a(2)(1)
详见教材P150,数组元素的引用
数组名[下标] [下标]
引用数组元素时,[ ]中的下标为逻辑地址下标,只能为整数,可以为变量,且从0开始计数
第一个[下标]表示行逻辑地址下标,第二个[下标]表示列逻辑地址下标。
本题图示详见P149图6.7
因此a的行逻辑地址范围0~2;a的列逻辑地址范围0~3;
选项A,列逻辑地址下标超过范围
选项B,D,的引用形式不正确。
25.C语言中函数返回值的类型是由 A 决定的.A、函数定义时指定的类型
B、return语句中的表达式类型
C、调用该函数时的实参的数据类型
D、形参的数据类型
26.在C语言中,函数的数据类型是指(A)
A、函数返回值的数据类型
B、函数形参的数据类型
(一个标准团有多少人?一个标准团人数通常是1500人左右,是由若干个营(或连)及战斗、勤务保障分队编成的军队一级组织。)C、调用该函数时的实参的数据类型
D、任意指定的数据类型
27.在函数调用时,以下说法正确的是(B)
A、函数调用后必须带回返回值
B、实际参数和形式参数可以同名
C、函数间的数据传递不可以使用全局变量
D、主调函数和被调函数总是在同一个文件里
28.在C语言中,表示静态存储类别的关键字是:(C)
A、auto
B、register
C、static
D、extern
29.未指定存储类别的变量,其隐含的存储类别为(A)。
A、auto
B、static
C、extern
D、register
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=
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=
D、*p=datA、a;
34.设有以下说明语句:
typedef struct stu
{ int a;
float b;
} stutype;
则下面叙述中错误的是(D)。
A、struct是结构类型的关键字
B、struct stu是用户定义的结构类型
C、a和b都是结构成员名
D、stutype是用户定义的结构体变量名
35.语句int *p;说明了 C。
A、p是指向一维数组的指针
B、p是指向函数的指针,该函数返回一int型数据
C、p是指向int型数据的指针 // 指针的定义教材P22
3D、p是函数名,该函数返回一指向int型数据的指针
36.下列不正确的定义是(A)。
A、int *p=
B、int *p,i;
C.int i,*p=&i;
D、int i,*p;
选项A先定义一个整型指针变量p,然后将变量i的地址赋给p。然而此时还未定义变量i因此编译器无法获得变量i的地址。(A与C对比,选项C先定义变量i,则在内存中为i分配空间,因此i在内存空间的地址就可以确定了;然后再定义p,此时可以为p赋i的地址,C正确)
37.若有说明:int n=2,*p=&n,*q=p,则以下非法的赋值语句是:(D)
A、p=q
B、*p=*q
C、n=*q
D、p=n
p,q同为整型指针变量,二者里面仅能存放整型变量的地址。
选项A,q中为地址,因此可将此地址赋给p
选项B,*p表示p所指向对象n的内容,即一个整数;*q表示q所指向对象的内容,由于在定义q时为其初始化,将p中n的地址给q,因此p中存放n的地址,*q表示q所指向对象n的内容.因此*p=*q 相当于 n=n;
选项C,n=*q 等价于n=n;
选项D,p中只能存放地址,不能将n中的整数值赋给p
38.有语句:int a[10],;则 B 是对指针变量p的正确定义和初始化。
A、int p=*a;
B、int *p=a;
C、int p=&a;
D、int *p=&a;
选项A,a是数组名,不是指针变量名,因此不可用*标注数组名a
选项C,a是数组名,数组名就是地址,无需再用地址符号。而且在定义指针变量p时,应在变量名前加*,标明p是指针变量
选项D,a是数组名,数组名就是地址,无需再用地址符号。
39.若有说明语句“int a[5],*p=a;”,则对数组元素的正确引用是(C)。
A、a[p]
B、p[a]
C、*(p+2)
D、p+
2首先定义一个整型数组a,a的长度为5,然后定义一个指针变量p,并同时对p进行初始化,将数组a的地址赋给p。因此此时p中存放的数组a的首地址,即数组中第一个元素a[0]的地址。
对于数组元素下标的引用(详见p144), 一般形式 数组名[下标] 其中下标为逻辑地址下标,从0开始计数,方括号中的下标可以是变量,可以是表达式,但结果一定要是整数。
选项A,p中存放的是地址,不是整数,不能做数组元素的下标
选项B,a是数组名,数组名就是地址,不是整数,不能做数组元素的下标
选项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)
首先定义一个整型数组a,a的长度为5,然后定义一个指针变量P,并同时对P进行初始化,将数组a的地址赋给P。因此此时P中存放的数组a的首地址,即数组中第一个元素a[0]的地址。
数组中9对应的是a[8], 选项B,P+8表示数组中后8个元素的地址,即a[8]的地址。*(P+8)则表示该地址内所存放的内容,即a[8]的值。
选项A,*P表示P所指向对象的内容,此时P指向a[0], *P即a[0]的值1.*P+9=1+9=10
选项C,*P表示P所指向对象的内容,此时P指向a[0], *P即a[0]的值。因此*P+=9 即*P =*P+9, 等价于a[0]=a[0]+9.选项D,P+8表示数组中后8个元素的地址,即a[8]的地址,而非a[8]中的值。
第三篇:《全国计算机等级考试二级教程C语言程序设计》《全国计算机等级考试二级教程——C语言程序设计》
课后题及参考答案
第一章 程序设计基本概念
1.1 在TRUBO C环境中用RUN命令运行一个C程序时,所运行的程序的后缀是______。答案:.exe 1.2 C语言源程序文件的后缀是_____,经过编译后,生成文件的后缀是_____,经过连接后,生成文件的后缀是_____。
答案:.c.obj.exe 1.3 结构化程序由_____、_____、_____三种基本结构组成。答案:顺序、选择、循环 第二章 C程序设计的初步知识
一、选择题
2.1 以下选项中正确的整型常量是
A)12.B)-20
C)1,000
D)4 5 6
答案:B 2.2 以下选项中正确的实型常量是
A)0
B)3.1415
C)0.329×10(2)(10的2次方)
D).871
答案:D 2.3 以下选项中不正确的实型常量是
A)2.607E-1
B)0.8103e 2
C)-77.77
D)456e-2
答案:B 2.4 以下选项中不合法的用户标识符是
A)abc.c
B)file
C)Main
D)PRINTF
答案:A 2.5 以下选项中不合法的用户标识符是
A)_123
B)printf
C)A$$
D)Dim
答案:C 2.6 C语言中运算对象必需是整型的运算符是
A)%
B)/
C)!
D)**
答案:A 2.7 可在C程序中用作用户标识符的一组标识符是
A)void
define
WORD
B)as_b3
_123
If
C)For
-abc
case
D)2c
DO
SIG
答案:B 2.8 若变量已正确定义并赋值,符合C语言语法的表达式是
A)a=a+7;
B)a=7+b+c,a++
C)int(12.3%4)
D)a=a+7=c+b
答案:B 2.9 以下叙述中正确的是
A)a是实型变量,C允许进行以下赋值a=10,因此可以这样说:实型变量中允许存放整型值。
B)在赋值表达式中,赋值号右边既可以是变量也可以是任意表达式。
C)执行表达式a=b后,在内存中a和b存储单元中的原有值都将被改变,a的值已由原值改变为b的值,b的值由原值变为0。
D)已有a=3,b=5。当执行了表达式a=b,b=a之后,已使a中的值为5,b中的值为3。
答案:B 2.10 以下叙述中正确的是
A)在C程序中无论是整数还是实数,只要在允许的范围内都能准确无误的表示。
B)C程序由主函数组成。
C)C程序由函数组成。
D)C程序由函数和过程组成。
答案:C 2.11 TURBO C中int类型变量所占字节数是
A)1
B)2
C)3
D)4
答案:B 2.12 不合法的八进制数是
A)0
B)028
C)077
D)01
答案:B 2.13 不合法的十六进制数是
A)oxff
B)0Xabc
C)0x11
D)0x19
答案:A
二、填空题
2.14 若k为int整型变量且赋值11。请写出运算k++后表达式的值A)_____和变量的值B)_____。
答案:
11、12 2.15 若x为double型变量,请写出运算x=3.2,++x后表达式的值A)_____和变量的值B)_____。
答案:4.2、4.2 2.16 函数体由符号____开始,用符号____结束。函数体的前面是____部分,其后是____部分。
答案:{、}、定义、执行
2.17 C语言中的标识符可分为____、____、和预定义标识符三类。
答案:关键字、用户标识符
2.18 在C语言程序中,用关键字____定义基本整型量,用关键字____定义单精度实型变量,用关键字___定义双精度实型变量。
答案:int、float、double 2.19 把a1、a2定义成单精度实型变量,并赋初值1的定义语句是____。
答案:float a1=1.0,a2=1.0;
2.20 C程序中定义的变量,代表内存中的一个____。
答案:存储单元
2.21 表达式3.5+1/2的计算结果是____。
答案:3.5 2.22 对以下数学式,写出三个等价的C语言表达式____、____、____。
a×b
——
c
答案:a*b/c、a/c*b、b/c*a 2.23 表达式s=10应当读做“____”。
答案:将10赋给变量s 2.24 计算机中内存储器的最小存储单位称____,其中能容纳的数是____。
答案:位、0或1 2.25 通常一个字节包含____个二进制位。在一个字节中能存放的最大(十进制)整数是____,它的二进制数的形式是____;最小(十进制)整数是____,它的二进制数的形式是____。
答案:8、255、1111 1111、-128、1000 0000 2.26 当计算机用两个字节存放一个整数时,其中能存放的最大(十进制)整数是____、最小(十进制)整数是____,它的二进制数的形式是____。
答案:65535、-32768、1000 0000 0000 0000 2.27 在C语言中整数可用____进制数、____进制数和____进制数三种数制表示。
答案:十、八、十六
三、上机改错题
2.24 【分析与解答】
第1行的错误:
(1)include是一个程序行,因此在此行的最后不应当有分号(;)。
(2)include程序行中后面的stdio.h是一个文件名,按规定,文件名应当放在一对双引号(″ ″)内,或放在一对尖括号()内。 第2行的错误:
(1)main()是主函数的起始行,不是语句,因此最后不应当有分号(;)。
(2)在同一行上的/ * main function * / 显然是注释;C语言规定:注释由/*开头,由*/结束,但在*号和/之间不得插入任何空格,而在此处“/
*”和“/
*”之间存在空格,因此,/ * main function * /的写法式是错误的,而应写成:/* main function */。
第3行的错误:
(1)在主函数的起始行main()的后面是函数体,函数体由左花括号({)开始。但在函数体的第一行:float的前面缺少了左花括号({)。
(2)在同一行上的/* /*r is radius*/, /* s is area of circular*/ */ 显然是注释;C语言规定:注释由/*开头,由*/结束,并且开头的/*将去找最近的*/去配对,因此在/* /*r is radius*/中,第一个/*与最后的那个*/配上了对,结果紧跟在后面的那个逗号(,)落在了注释的外面,而构成了一个多余符号,为此,在编译时将报告“语法错”。
第6行的错误:
(1)printf(″%f \[KG-*3]n″,s)应当是一条输出语句,但在最后缺少了一个分号。
(2)printf(″%f \[KG-*3]n″,s);是程序的最后一条语句,程序应当结束;但缺少了程序体结束所需的右花括号(});此右花括号可以放在printf(″%f \[KG-*3]n″,s);的后面,也可以放在printf(″%f \[KG-*3]n″,s);的下一行上。
2.25 【分析与解答】
第1行的错误:在include行中的文件名应该是stdio.h,而不是stdio.a。 第2行的错误:在main的后面缺少一对圆括号。 第4行的错误:在c=40的后面缺少分号。
第6行的错误:在printf(″%f \〖KG-*3〗n″,v)的后面缺少分号。
第三章、顺序结构
一、选择题
3.1 若a、b、c、d都是int类型变量且初值为0,以下选项中不正确的赋值语句是
A)a=b=c=100;
B)d++;
C)c+b;
D)d=(c=22)-(b++);
答案:C 3.2 以下选项中不是C语句的是
A){int i;i++;printf(“%d”, i);}
B);
C)a=5,c=10
D){;}
答案:C 3.3 以下合法的C语言赋值语句是
A)A=B=58
B)k=int(a+b);
C)a=58,b=58
D)--i;
答案:D 3.4 以下程序的输出结果是
A)0
B)1
C)3
D)不确定的值
main()
{
int x=10,y=3;
printf(“%d”, y=x/y);
}
答案:C 3.5 若变量已正确说明为int类型,要给a、b、c输入数据,以下不正确的输入语句是
A)read(a,b,c);
B)scanf(“%d%d%d”,a,b,c);
C)scanf(“%D%D%D”,&a,
D)scanf(“%d%d%d”,&a,
答案:D 3.6 若变量已正确说明为float类型,要通过以下赋值语句给a赋予
10、b赋予
22、c赋予33,以下不正确的输入形式是
A)10 22 33
B)10.0,22.0,33.0
C)10.0 22.0 33.0
D)10 22 33
scanf(“%f %f %f”, &a,
答案:B 3.7 若变量以正确定义,要将a和b中的数进行交换,下面不正确的语句组是
A)a=a+b,b=a-b,a=a-b;
B)t=a,a=b,b=t;
C)a=t;t=b;b=a;
D)t=b;b=a;a=t;
答案:C 3.8 若变量已正确定义,以下程序段的输出结果是
A)输出格式说明与输出项不匹配,输出无定值
B)5.17000
C)5.168000
D)5.169000
x=5.16894;
printf(“%f”,(int)(x*1000+0.5)/(float)1000);
答案:D 3.9 若有以下程序段,c3中的值是
A)0
B)1/2
C)0.5
D)1
int c1=1,c2=2,c3;
c3=c1/c2;
答案:A 3.10 若有以下程序段,其输出结果是
A)0,0,-10
B)0,0,5
C)-10,3,-10
D)3,3,-10
int a=0,b=0,c=0;
c=(a-=a-5),(a=b,b+3);
printf(“%d,%d,%d”,a,b,c);
答案:B 3.11 当运行以下程序时,在键盘上从第一列开始输入9876543210(此处代表Enter),则程序的输出结果是
A)a=98,b=765,c=4321
B)a=10,b=432,c=8765
C)a=98,b=765.000000,c=4321.000000
D)a=98,b=765,c=4321.0
main(){
int a;float b,c;
scanf(“%2d%3f%4f”,&a,
printf(“a=%d,b=%f,c=%f”,a,b,c);}
答案:C 3.12 以下程序的输出结果是
A)a=%2,b=%5
B)a=2,b=5
C)a=%%d,b=%%d
D)a=%d,b=%d
main(){ int a=2,b=5;
printf(“a=%%d,b=%%d”,a,b);}
答案:D 3.13 若int类型占两个字节,则以下程序段的输出是
A)-1,-1
B)-1,32767
C)-1,32768
D)-1,65535
int a=-1;
printf(“%d,%u”,a,a);
答案:D 3.14 以下程序段的输出是
A)*496 *
B)* 496*
C)*000496* D)输出格式符不合法
int x=496;
printf(“*%-06d*”,x);
答案:A 3.15 以下程序段的输出是
A)|3.1415|
B)| 3.0|
C)|
3|
D)|
3.|
float a=3.1415;
printf(“|%6.0f|”,a);
答案:C 3.16 以下程序段的输出是
A)|2345.67800|
B)|12345.6780|
C)|12345.67800|
D)|12345.678|
printf(“|%10.5f|”,12345.678);
答案:C 3.17 以下程序段的输出是
A)*0000057.66*
B)*
57.66*
C)*0000057.67*
D)*
57.67*
float a=57.666;
printf(“*%010.2f*”,a);
答案:C 3.18 若从终端输入以下数据,要给变量C赋以283.19,则正确的输入语句是
A)scanf(“%f”,c);
B)scanf(“%8.4f”,
C)scanf(“%6.2f”,
D)scanf(“%8”,
283.1900 表示Enter键
答案:由于印刷错误,本题没有正确答案。改正意见:
把选项A改为:scanf(“%f”, 或者把选项D改为:scanf(“%8f”, 则可分别选择A或者D为正确答案。
3.19 若变量已正确说明,要求用以下语句给a赋予3.12、给b赋予9.0,则正确的输入形式是(□代表空格)
A)3.12□□9.0
B)a=□□3.12b=□□□9
C)a=3.12,b=9
D)a=3.12□□,b=9□□□□
scanf(“a=%f,b=%f”, 表示Enter键
答案:C 3.20 以下程序的输出结果是
A)9 8
B)8 9
C)6 6
D)以上三个都不对
#include “math.h” main(){ double a=-3.0, b=2;
printf(“%3.0f %3.0f”,pow(b,fabs(a)),pow(fabs(a),b));}
答案:B
二、填空题
3.21 若有以下定义,请写出以下程序段中输出语句执行后的输出结果。(1)____(2)____(3)____
int i=-200,j=2500;
printf(“(1)%d %d”,i,j);
printf(“(2)i=%d, j=%d”,i,j);
printf(“(3)i=%d j=%d”,i,j);
答案:
-200 2500
i=-200, j=2500
i=-200 j=2500 3.22 变量i、j、k已定义为int类型并有初值0,用以下语句进行输入时
scanf(“%d”, scanf(“%d”, scanf(“%d”, 当执行第一个输入语句,从键盘输入:
12.3 表示Enter键
则变量i、j、k的值分别是____、____、____。
答案:12、0、0 3.23 复合语句在语法上被认为是____。空语句的形式是____。
答案:一条语句、; 3.24 C语句的最后用____结束。
答案:;
3.25 以下程序段,要求通过scanf语句给变量赋值,然后输出变量的值。写出运行时给k输入100,给a输入25.81,给x输入1.89234时的三种可能的输入形式____、_____、____。
int k;float a;double x;
scanf(“%d%f%lf”,&k,
printf(“k=%d,a=%f,x=%f”,k,a,x);
答案:
(1)100 25.81 1.89234
(2)100 25.811.89234
(3)100 25.81 1.89234 3.26 以下程序段的输出结果是____。
int x=0177;
printf(“x=%3d,x=%6d,x=$$%6o,x=%6x,x=%6u”,x,x,x,x,x);
答案:x=127,x= 127,x= 177,x=
7f,x= 127 3.27 以下程序段的输出结果是____。
int x=0177;
printf(“x=%-3d,x=%-6d,x=$$%-06d,x=$$%06d,x=%%06d”,x,x,x,x,x);
答案:
27、x=127,x=127,x=$$127,x=$$000127,x=%06d 3.28 以下程序段的输出结果是____。
double a=513.789215;
printf(“a=%8.6f,a=%8.2f,a=%14.8f,a=%14.8lf”,a,a,a,a);答案:a=513.789215,a= 513.79,a= 513.78921500,a= 513.78921500
三、编程题和改错题
3.16 【分析与解答】
(1)主函数名main后应有一对圆括号。(2)变量定义语句中,v的前面缺逗号。
(3)第三行的printf语句用以提示输入,但是原样输出的字符串没有用双引号括起来;另外,从输入的形式看,输入的数据紧跟在提示之后,因此,printf格式串中最后不应该有换行符——\n。
(4)因为输入项a、b、c从定义和计算结果来看都是double类型,因此,第四行scanf语句格式串中的格式说明不应当用%d而应当用%lf;且每一个变量之前应该加地址运算符&。
(5)第七行的printf语句中应当把%d都改成%lf或%f;按输出要求在格式串中应添加相应的原样输出的字符;因为下一个printf的输出从新的一行开始,因此在本输出语句的格式串的最后应当加换行符——\n。
(6)第八行的printf语句中应当把格式串整理合并放在输出项的前面,输出项放在后面,%d都改成%lf或%f;中间的\n删去。
(7)请读者自己写出修改后的程序,并上机调试。
3.17【分析与解答】
(1)分析:可用算术式560÷60把分钟换算成小时和分钟,商数就是小时数,余数就是分钟数。
(2)确定变量的名字和定义变量的类型:在程序中把小时数放在变量h中,把分钟数放在变量m中。这两个变量的类型可以是整型(本题中采用整型),也可以是实型。
(3)确定所用算法:求〖SX()560〖〗60〖SX〗〗的商数,在C语言中可以用整除的算法,语句是h=560/60。求余数可用求余运算符 %:560%60,其值放入变量m中的语句是:m=560%60。(4)设计输出格式。若输出的形式定为:小时:分钟,则按此形式设计输出语句。(5)把以上内容放在主函数的一对花括号中。(6)编写程序如下:
main() {
int h, m;
h=560/60;
m=560%60;
printf(″The result: %3d : %3d\n″, h,m);
}
运行结果是:
The result:
: 20
3.18 【分析与解答】
(1)确定变量的名字和定义变量的类型。若用a存放1500,用b存放350;用q存放商数,用r存放余数,所有变量应定义成int类型。
(2)设计输入语句从终端输入1500和350;在输入语句之前,应当设计一个输出语句,用以提示输入。(3)可用整除求商数,结果放在变量q中。可用求余运算符%求两数之余数,结果放在变量r中。(4)设计输出语句。输出a、b、q、r。
(5)把以上内容放在主函数的一对花括号中。
本题的程序与3.30相似,请读者参考上题并根据本题的解释自己编程,并上机调试。
3.19 【分析与解答】
(1)定义4个双精度变量a、b、c和ave,变量a、b、c分别存放读入的3个双精度数,ave存放它们的平均值。
(2)设计输入语句,以及在此之前用于提示输入的(printf)语句。(3)设计求平均值的算法,把所求得的平均值放入变量ave中。
(4)设计把变量ave中的数,从小数点后第二位数进行四舍五入的算法。现举例说明:若ave中的数为123.4644,为了保留此值小数点后一位,可用表达式:(int)(123.4644*10)/10.0;依次推算,为了保留此值小数点后二位,可用表达式:(int)(123.4644*100)/100.0;其他依此类推。
(5)若要求对小数点后第二位数进行四舍五入,则可对原数加0.05后再进行以上运算。如要求保留123.4644小数点后一位且对第二位数进行四舍五入,可用表达式:(int)((123.467+0.05)*10)/10.0。注意:分母一定要用实数10.0而不能用整数10,否则就变成整除了;若要求保留123.4644小数点后两位且对第三位数进行四舍五入,可用表达式:(int)((123.467+0.005)*100)/100.0;其他依此类推。(6)设计输出语句。输出a、b、c和ave。(7)把以上内容放在主函数的一对花括号中。(8)编写程序如下: main()
{
double a,b,c,ave; printf(″Enter a ,b ,c : ″);
scanf(″%lf%lf%lf″, &a, ave=(a+b+c)/3; printf(″ave=%f\n″, ave);
/*用以比较四舍五入前后的数据*/ ave=(int)((ave+0.05)*10)/10.0;
printf(″a=%f, b=%f, c=%f, ave=%f\n″, a,b,c,ave);
}
3.20 【分析与解答】
(1)关于对变量中的数进行交换的算法请参考3.7题中的解释和《教程》中有关的例题。
(2)定义4个整型变量a、b、c和t,变量a、b、c分别存放读入的3个整数,t用作临时存储单元。(3)设计输入语句,以及在此之前用于提示输入的(printf)语句。(4)输出a、b、c中的值,以便于比较。(5)交换的步骤如下: ① 把c中的值赋给t。 ② 把b中的值赋给c。 ③ 把a中的值赋给b。 ④ 把t中的值赋给a。
经过以上步骤,已按要求进行了交换。(6)输出a、b、c中的值。(7)编写程序如下: main()
{
int a, b, c, t;
printf(″Enter a, b, c :\n″); scanf(″%d%d%d″,&a,
printf(″(1)a=%d,b=%d,c=%d\n″,a,b ,c); t=c;c=b;b=a;a=t;
printf(″(2)a=%d,b=%d,c=%d\n″,a,b,c);
}
第四章、选择结构
一、选择题
4.1 下列运算符中优先级最高的运算符是
A)!
B)%
C)-=
D)&&
答案:A 4.2 下列运算符中优先级最低的运算符是
A)||
B)!=
C)=y)&&(y>=z)
B)(x>=y)AND(y>=z)
C)(x>=y>=z)
D)(x>=y)&(y>=z)
答案:A 4.4 设a、b和c都是int型变量,且a=3,b=4,c=5;则以下的表达式中,值为0的表达式是
A)a&&b
B)a0)
1(x0)
0(x0)
-1(x0)
y=-1;if(x!=0)y=1;
if(x>0)y=1;else y=0;答案:A 4.9 运行以下程序后,输出
A)****
B)&&&&
C)####&&&&
D)有语法错误不能通过编译
main(){ int k=-3;
if(k、=、、==、!=、&&、|| 4.15 C语言中逻辑运算符____的优先级高于算术运算符。
答案:!
4.16 将下列数学式改写成C语言的关系表达式或逻辑表达式A)____B)____。
A)a=b或a4
答案:A)a==b||a4||x100)printf(“%d”,a>100);
else
printf(“%d”,a0)
B)!0
答案:A)xc)
b=a;a=c;c=b;
答案:3、2、2 4.20 若变量已正确定义,以下语句段的输出结果是____。
x=0;y=2;z=3;
switch(x)
{ case 0: switch(y==2)
{ case 1: printf(“*”);break;
case 2: printf(“%”);break;
}
case 1: switch(z)
{ case
1: printf(“$$”);
case
2: printf(“*”);break;
default : printf(“#”);
}
} 答案:*#
三、编程题
4.21 【分析与解答】
相关内容请参考《教程》4.2节和4.4节。(1)改写如下: switch(a/10)
{ default : m=5;break;
case 0 : case 1 : case 2 : m=1;break; case 3 : m=2;break; case 4 : m=3;break; case 5 : m=4;break; };
(2)本题中对a的判断条件有一定的规律可寻;关键是,在switch语句后的表达式中利用了a/10,从而简化了case标号。
4.22 【分析与解答】
编写本题的程序,首先要解决如何计算学生当前的年龄(设存放实足年龄的变量是age)。(1)如果当前的月份大于生日的月份,则学生的实足年龄age=y1-y0。
(2)如果当前的月份等于生日的月份,就要看日数,当前的日数大于或等于生日的日数,则学生的实足年龄age=y1-y0。
(3)如果不满足以上的条件,就可断定当前的日期没有超过生日日期,就是说学生的年龄应当是age=y1-y0-1。 以上3条,用C语言可以描述如下:
if((m1>m0)[JB>1|][JB>1|](m1==m0&&d1>=d0))age=y1-y0;
else age=y1-y0-1;
读者可以参考以上语句写出程序,也可以根据分析写出与此形式不同的语句和程序。 4.23【分析与解答】
(1)若输入的整数a是奇数,输出 dd number,是偶数输出:even number。
(2)若一个a是偶数,它就能被2除尽,即a%2==0,输出even number;若是奇数,它就不能被2除尽,即a%2!〖KG-*2〗=0,输出odd number。
读者可以参考以上给出的算法,写出相应的C语句,并编写出完整的程序。 4.24 【分析与解答】
本题的主要算法是从3个数中找出最大的那个数。假定始终把最大的数放在变量max中。(1)假定a中的数最大,把a赋给max。
(2)用b去和max比较,若b大于max,则把b赋给max;若不大于max,则什么也不做。(3)用c去和max比较,若c大于max,则把c赋给max;若不大于max,则什么也不做。(4)经过以上操作,max中已放入了a、b、c三个数中的最大数,输出max即可。 读者可以参考以上给出的算法,写出相应的C语句,并编写出完整的程序。 4.25 【分析与解答】
(1)本题已给出了非常明确的条件,只要写出正确的条件判断语句就可基本完成程序的编写。
(2)由给出的函数可知,只有x的值在规定的范围内时,才求出y的值,因此程序应当对输入的x进行判断,若超过范围就不求y的值。
(3)现以使用if[CD#*2]else语句为例写出程序供参考。
main() {
int x,y;printf(″Enter x : ″);scanf(″%d″, if(x>-5&&x0)y=x+1; else if(x-5)y=x;
printf(″x=%d y=%d\n″, x,y);
}
printf(″***END***\n\n″);
}
第五章、循环结构
一、选择题
5.1 以下程序段的输出结果是
A)9
B)1
C)11
int k,j,s;
for(k=2;k7)
{ n--;
printf(“%d”, n);
}
答案:B 5.4 以下程序段的输出结果是
A)1
B)3 0
C)1-2
int x=3;
do
{ printf(“%3d”,x-=2);}
while(!(--x));
答案:C 5.5 以下程序段的输出结果是
A)15
B)14
C)不确定
main()
{ int i,sum;
for(i=1;i0;y--)
if(y%3==0)
{ printf(“%d”,--y);continue;
}
答案:B 5.7 若x是int型变量,以下程序段的输出结果是
A)**3
##4
**5
B)##3
**4
##5
C)##3
**4##5
D)**3##4
**5
for(x=3;xb;++b)i++;while(a>++c)j++;do k++;while(a>d++);
答案:5、4、6 5.12 以下程序段的输出结果是____。
int k,n,m;n=10;m=1;k=1;while(kamax)
amax=x;
if(____)
amin=x;
scanf(”%f“,
}
printf(”amax=%famin=%f“,amax,amin);
}
答案:x>=0、x
t=t/i; e+=t; i++; }
(6)请读者自己对变量做出正确的定义,设计输出语句,完善程序;也可以参考此程序段,按照自己的思路独立地完成程序。(7)e的值应当是:2.71828。
(8)根据以上分析,读者已不难用for循环来实现求e值的计算。
(9)注意:在完成此程序时,不要对分母中的阶乘值进行单独计算,因为17!的值已超过long类型的最大值,更无法求到50!。
5.19【分析与解答】
(1)从1880年至2000年的年数可用一个for循环来取得。
(2)对每一年,用以上指定的条件来进行判断,若满足条件即为闰年,进行输出。
(3)按输出的要求,需要设一个变量用于统计一行中输出的个数,若在一行上已连续输出了5个年数,就需输出一个换行符,使下一个输出项在新的一行上开始;若用变量n来做此统计,则当表达式n%5==0时就应输出一个换行符,同时使n重新置0值。
(4)若变量y代表年数,if语句的逻辑表达式可以写成如下:
(y%4==0 && y%100!=0[JB>1|][JB>1|]y%400==0)(5)以下程序段供参考:
for(y=1880;y1|][JB>1|]y%400==0) {
printf(″%d ″,y); n++;
if(n%5==0)
{ printf(″\n″);n=0;} }
(6)请读者自己对变量做出正确的定义并赋初值,完善程序;也可以参考此程序段,按照自己的思路独立地完成程序。从1880年至2000年有30个闰年。
5.20 【分析与解答】
(1)不难理解利用以下的for循环可以在一行上连续输出n个*号:
for(i=1;i=1;k--,k--)
{
for(i=1;i=''A'')&(c=c)
D)(c>=''A'')&&(c=''A''&&x,代表Enter。程序的输出结果是
A)668977
B)668966
C)66778777
D)6688766
#include ”stdio.h“ main(){ int c;
while((c=getchar())!='''')
{ switch(c-''2'')
{ case 0 :
case 1 : putchar(c+4);
case 2 : putchar(c+4);break;
case 3 : putchar(c+3);
default : putchar(c+2);break;
}
printf(”“);
} }
答案:A 6.11 若变量已正确说明,要求用以下语句给c1赋予字符%、给c2赋予字符#、给a赋予2.0、给b赋予4.0,则正确的输入形式是(□代表空格)
A)2.0□%□4.0□#
B)2.0%4.0#
C)2%□□4#
D)2□%□4□
scanf(”%f%c%f%c“,&a,&c1,
(代表Enter键)
答案:B
二、填空题
6.12 EOF的十进制值是____。
答案:-1 6.13 C语言中,字符占内存____个字节。
答案:1 6.14 调用C语言对字符处理的库函数时,在#include命令行中应包括的头文件是____。
答案:string.h 6.15 若输入字符A,在以下while语句执行后ch的值是____。
while(ch=getchar()==''A'');
答案:1 6.16 若要通过以下语句给a、b、c、d分别输入字符A、B、C、D,给w、x、y、z分别输入10、20、30、40,正确的输入形式是____,请用代表Enter键。
scanf(”%d%c%d%c%d%c%d%c“,&w,&a,&x,&b,&y,&c,
答案:10A20B30C40D 6.17 若有以下说明和输入语句,要求给c1、c2输入字符A和B,给a1、a2输入7.29和101.298,从键盘正确输入数据的形式是____。
char c1,c2;
float a1,a2;
scanf(”%f%f“,&a1,
scanf(”%c%c“,&c1,
答案:7.29101.298AB 6.18 若有以下说明和输入语句,要求给c1、c2输入字符A和B,给a1、a2输入7.29和101.298,从键盘正确输入数据的形式是____。
char c1,c2;
float a1,a2;
scanf(”%c%f%c%f“,&c1,&a1,&c2,
答案:A7.29B101.298 6.19 若有以下说明和输入语句,要求给c1、c2、c3输入字符A、B和C,请写出各种从键盘正确输入数据的形式。
char c1,c2,c;
scanf(”%4c“,
scanf(”%4c“,
scanf(”%4c“, 答案:A□□□B□□□C□□□
三、编程题
6.20【分析与解答】
(1)在进行字符输入时,即使一次输入了一行字符(最后用回车结束输入),字符也只能一个一个地读入。若ch已定义为char型变量,可以用以下的程序段来完成操作:
ch=getchar(); while(ch![KG-*2]=′\n′) {
„„ ch=getchar(); }
当读入的是一个回车符时,循环就结束。循环体内的“„„”符号表示需要在循环体内完成的其他操作。
(2)在循环内要求进行的操作之一是:输出每个字符以及与之对应的ASCII代码值。因此可用以下语句来实现。 printf(″%c : %d ″,ch,ch);
(3)在循环内要求进行的另一个操作是:每行只能输出3对字符和与之对应的ASCII代码值。若n已定义为int型变量,则可用来作计数器;使n的初值为0,每输出一次,n的值增1,当n的值为3的整数倍时,额外输出一个换行符。例如: n++;
if(n%3==0)putchar(′\n′);
(4)把(2)和(3)中给出的语句放在循环体内,并按要求给出正确的定义和初值,就可完成题目所要求的操作。(5)也可以在while后的一对括号中来完成字符的读入,如while((ch=getchar())![KG-*2]=′\n′)。这时,循环内、外的“ch=getchar();”语句应当去掉。
6.21【分析与解答】
(1)一行字符的读入,请参照题6.20(1)和(5)中的解释。循环体内的“„„”符号表示需要在循环体内完成的其他操作。
ch=getchar(); while(ch![KG-*2]=′\n′) {
„„ ch=getchar(); }
(2)在本题中循环体内需要把读入的所有数字字符转换成一个整数。若用变量n来存放这个整数,为了保证有效的存放,应当把它定义成long类型。
(3)要把输入的一串数字字符转换成一个整数,首先需要判断当前读入的字符是否是数字字符,若不是则什么也不做;若是,则进行以下操作:
① 把当前读入的一个字符转换成一个一位整数,这可由语句“d=ch-′0′;”来实现,在这里d是一个整型变量; ② 把d中的一位数归并到n的低位中,这可用语句“n=n*10+d;”来实现。这里所述的操作可由以下语句来完成:
if(ch>=′0′&&ch=′0′&&ch=′a′ && ch=i;k--)putchar(′ ′);
把此循环放在i控制的循环体内、输出每行字符的循环之前即可。
(8)请读者自己补充有关的include行、语句和变量的定义,以完成整个程序。注意,如果有能力可在某些地方作些简化。
第七章、函数
一、选择题
7.1 以下说法中正确的是
A)C语言程序总是从第一个定义的函数开始执行
B)在C语言程序中,要调用的函数必须在main函数中定义
C)C语言程序总是从main函数开始执行
D)C语言程序中的main函数必须放在程序的开始部分
答案:C 7.2 以下函数的类型是
A)与参数x的类型相同
B)void类型
C)int类型
D)无法确定
fff(float x)
{ printf(”%d“,x*x);}
答案:C 7.3 以下函数调用语句中,含有的实参个数是
A)1
B)2
C)4
D)5
func((exp1,exp2),(exp3,exp4,exp5));
答案:B 7.4 以下程序的输出结果是
A)11
B)20
C)21
D)31
fun(int a,int b){ int c;
c=a+b;
return c;
} main(){ int x=6,y=7,z=8,r;
r=func((x--,y++,x+y),z--);
printf(”%d“,r);}
答案:C 7.5 以下程序的输出结果是
A)-1
B)0
C)1
D)2
main(){ int i=2,p;
p=f(i,i+1);
printf(”%d“,p);} int f(int a, int b){ int c;
c=a;
if(a>b)c=1;
else if(a==b)c=0;
else c=-1;
return(c);}
答案:A 7.6 以下程序的输出结果是
A)0
B)1
C)6
D)无定值
fun(int a,int b,int c){ c=a*b;
} main(){ int c;
fun(2,3,c);
printf(”%d“,c);}
答案:D 7.7 以下程序的输出结果是
A)5.500000
B)3.000000
C)4.000000 D)8.25
double f(int n){ int i;
double s;
s=1.0;
for(i=1;ieps;n++)
{ s+=t;
t=n*t/(2*n+1);
}
return(2.0*_____);}
答案:n=
1、s 7.12 以下函数用以求x的y次方。请填空。
double fun(double x, int y){ int i;double z;
for(i=1;i_____;i++)
z=_____;
return z;}
答案:
main()
{ printf(”%d“,NULL);
}
答案: B
8.3 以下程序的输出结果是
A)5,2,3
B)-5,-12,-7
C)-5,-12,-17
void sub(int x,int y,int *z)
{ *z=y-x;
}
main()
{ int a,b,c;sub(10,5, sub(7,a, sub(a,b, printf(”%d,%d,%d“,a,b,c);
}
答案: B
8.4 以下程序的输出结果是
A)4
B)6
C)8
D)10
main()
{ int k=2,m=4,n=6;int *pb=&k,*pm= *(p=&n)=*pk*(*pm);
D)*pb=*x
D)1
D)5,-2,-7 printf(”%d“,n);
}
答案: C
8.5 已知指针p的指向如图8.5所示,则执行语句*p++;后,*p的值是
A)20
B)30
C)21
D)31
答案: B
8.6 已知指针p的指向如图8.5所示,则表达式*++p的值是
A)20
B)30
C)21
答案: B 8.7 已知指针p的指向如图8.5所示,则表达式++*p的值是
A)20
B)30
C)21
答案: C
8.8 以下程序的输出结果是
A)23
B)24
C)25
D)26
void prtv(int *x)
{ printf(”%d“,++*x);
}
main()
{ int a=25;prtv(
}
答案: D
8.9 以下程序的输出结果是
A)运行出错
B)100
C)a的地址
main()
{ int **k, *a b=100;a= printf(”%d“,**k);
}
答案: B
8.10 以下程序的输出结果是
A)4,3
B)2,3
C)3,4
D)3,2
void fun(float *a,float *b)
{ float w;*a=*a+*a;w=*a;*a=*b;
D)31
D)31 D)b的地址
*b=w;
}
main()
{ float x=2.0,y=3.0;float *px=&x,*py=&y;fun(px,py);printf(”%2.0f,%2.0f“,x,y);
}
答案: C
8.11 以下程序的输出结果是
A)9.000000
B)1.500000
10.500000
void sub(float x,float *y,float *z)
{ *y=*y-1.0;*z=*z+x;
}
main()
{ float a=2.5,b=9.0,*pa,*pb;pa=&a,pb=&b;sub(b-a,pa,pa);printf(”%f“,a);
}
答案: C
8.12 以下四个程序中不能对两个整形值进行交换的是
A)main(){ int a=10,b=20;
swap(
printf(”%d%d“,a,b);} swap(int *p, int *q){ int *t,a;
t=&a;
*t=*p;*p=*q;*q=*t;}
B)main(){ int a=10,b=20;
swap(
printf(”%d%d“,a,b);} swap(int *p, int *q){ int t;
t=*p;*p=*q;*q=t;
C)8.000000
D)
}
C)main(){ int *a,*b;
*a=10,*b=20;
swap(a,b);
printf(”%d%d“,*a,*b);} swap(int *p, int *q){ int t;
t=*p;*p=*q;*q=t;}
D)main(){ int a=10,b=20;
int *x=&a,*y=&b;
swap(x,y);
printf(”%d%d“,a,b);} swap(int *p, int *q){ int t;
t=*p;*p=*q;*q=st;}
答案:C
二、填空题
8.13 以下程序段的输出结果是_____。
int *var,ab;
ab=100;
var=
printf(”%d“,*var);答案:100
8.14 以下程序的输出结果是_____。
int ast(int x,int y,int *cp,int *dp)
{ *cp=x+y;*dp=x-y;
}
main()
{ int a,b,c,d;a=4;b=3;ast(a,b,
printf(”%d %d“,c,d);
}
答案:7 1 8.15 若有定义:char ch;
ab=*var+10;
(1)使指针p可以指向变量ch的定义语句是_____。
答案:char *p=
(2)使指针p可以指向变量ch的赋值语句是_____。
答案:p=&ch;
(3)通过指针p给变量ch读入字符scanf函数调用语句是_____。
答案:scanf(”%c“,*p);
(4)通过指针p给变量ch的赋字符的语句是_____。
答案:ch=*p;
5)通过指针p输出ch中字符的语句是_____。
答案: printf(”%c“,*p);
8.16 若有如图8.5所示五个连续的int类型的存储单元并赋值如图,且p和s的基类型皆为int,p已指向存储单元a[1]。
(1)通过指针p,给s赋值,使其指向最后一个存储单元a[4]的语句是____。
答案: s=p+3;
(2)用以移动指针s,使之指向中间的存储单元a[2]的表达式是____。
答案: s=s-2;
(3)已知k=2,指针s已指向存储单元a[2],表达式*(s+k)的值是____。
答案: 50
(4)指针s已指向存储单元a[2],不移动指针s,通过s引用存储单元a[3]的表达式是____。
答案: *(a+1)
5)指针s已指向存储单元a[2],p指向存储单元a[0],表达式s-p的值是____。
答案: 2
6)若p指向存储单元a[0],则以下语句的输出结果是____。
for(i=0;i代表Enter键:
a
b
cdef
则程序的输出结果是
A)abcdef
B)a
C)a
D)a
b
b
b
c
cd
cdef
d
e
f
#include ”stdio.h“
#define N 6
main()
{ char c[N];
int i=0;for(i=0;i=10){ uu[n++]=t/10;uu[n]=t%10;} else uu[n]=t;
}
main()
{ int i,n,aa[10]={0};scanf(”%d%d%d“,&n,&aa[0], for(i=1;is[k])____;return ____;
}
答案: k=p k
9.26 以下程序统计从终端输入的字符中每个大写字母的个数,num[0]中统计字母A的个数, 其它依次类推.用#号结束输入,请填空.#include
”stdio.h“
#include
”ctype.h“
main()
{ int num[26]={0},i;char c;while(____!=''''#'''')
if(isupper(c))
num[___]+=1;for(i=0;i行;也可用:ch>[KG-*3]=′0′&&ch[KG-*3]=j;i--)a[i+1]=a[i];(5)第三个步骤是把x放入a[j]中:a[j]=x;
(6)第四步是使存放数据个数的变量中的数增1:*n=*n+1;插入过程到此结束。
(7)可利用习题9.28中的outarr函数,在插入前和插入后两次输出数组元素,以判断操作是否正确。(8)请编写主函数,定义所需的数组和变量,给数组输入一组有序数,正确调用函数。(9)请按题目要求至少对程序运行3次,判断程序是否在各种情况下都能得到正确的结果。
(10)总结:插入算法是程序设计中的一种最基本的算法,希望读者在理解的基础上编写程序。
9.32【分析与解答】
(1)若函数名为change,函数首部如下:
void change(int x,int *a, int *n)
形参x中存放一个待转换的十进制数,指针a指向一个一维数组,数组中每一个元素中存放一个0或1代表一位二进制数,指针变量n指向一个整型变量,其中存放在一维数组中二进制位的个数。
(2)函数中定义一个指针变量s,并把a所指的数组的首地址赋给它以便保留。把x每次被2除后的余数放在a当前所指的数组元素中,然后移动指针a指向下一个元素,并使x的值除2;重复此过程,直到x的值为0。可用以下的while循环来进行转换:
s=a;
while(x)
{ *a=x%2;a+[KG-*3]+;x=x/2;}
退出循环时,已把转换后的二进制数的每一位上的数放入主函数的数组元素中,但是应当注意,在a[0]中放的是二进制数的最低位,最后放入的是最高位。例如,整数8转换成的二进制数为100,则在a[0]、a[1]中存放的是0,而a[2]中存放的是1。
(3)函数中最后用:*n=a-s;把存放在一维数组中二进制位的个数放入n所指的变量中。因为s已指向主函数中数组的第一个元素(下标为0);在循环中,指针a不断后移,最后指向存放二进制数最高位的元素;所以a-s的值就是已存入数据的元素的个数。
(4)在主函数中输入待转换的十进制数,调用change函数后输出数组元素中的值,注意,因为在a[0]中放的是二进制数的最低位,因此输出的顺序应该从a[n]到a[0]。
9.33【分析与解答】
(1)若函数名为getone,形参指针a指向主函数中存放指定数据的数组。函数的首部如下:
void getone(int a[])
(2)函数中变量x用来存放得到的一个随机数,变量n用来存放数组中已放入的不同的随机数的个数,变量i用作下标变量。
(3)所有的工作在一个while循环中完成:
while(n(此处代表Enter键),则输出结果是
A)oPEN tHE dOOR
B)open the door
C)OPEN T H E DOOR D)Open The Door
#include ”stdio.h“
char fun(char *c)
{ if(*c=''A'')*c-=''A''-''a'';return *c;
}
main()
{ char s[81],*p=s;gets(s);while(*p){ *p=fun(p);putchar(*p);p++;} putchar('''');
}
答案: B
10.5 以下程序的输出结果是
A)GFEDCBA
B)AGADAGA
C)AGAAGAG
D)GAGGAGA
#include ”stdio.h“
#include ”string.h“
void fun(char *w,int m)
{ char s,*p1,*p2;p1=w;p2=w+m-1;while(p1
}
main()
{ char a[]=”ABCDEFG“;fun(a,strlen(a));puts(a);
}
答案: C
10.6 以下程序的输出结果是
A)ABCD
B)A
C)D
D)ABCD
BCD
B
C
ABC
CD
C
B
AB
D
D
A
A
main()
{ char s[]=”ABCD“,*p;for(p=s;p''''&&p[i][j]&b[0])putchar(*chp);putchar('''');
}
答案:
GFEDCB
10.12 以下程序的输出结果是_____。
#include ”stdio.h“
void fun(char *a1,char *a2,int n)
{ int k;for(k=0;k0;i--,i--)printf(”%c“,*p[i]);printf(”“);
}
答案:SO
10.14 当运行以下程序时从键盘输入字符串qwerty和abcd,则程序的输出结果是____。
#include ”string.h“
#include ”stdio.h“
strle(char a[],char b[])
{ int num=0,n=0;while(*(a+num)!='''')num++;while(b[n]){ *(a+num)=b[n];num++;n++;} return(num);
}
main()
{ char str1[81],str2[81],*p1=str1,*p2=str2;gets(p1);gets(p2);printf(”%d“,strle(p1,p2));
}
答案:10 10.15 以下程序的输出结果是____。
#include ”string.h“
#include ”ctype.h“
void fun(char str[])
{ int i,j;for(i=0,j=0;str[i];i++)
if(isalpha(str[i]))str[j++]=str[i];str[j]='''';
}
main()
{ char ss[80]=”It is!“;fun(ss);printf(”%s“,ss);
}
答案:Itiss!
10.16 以下fun函数的功能是将一个字符串的内容颠倒过来,请填空。
#include ”string.h“
void fun(char str[])
{ int i,j,k;for(i=0,j=____;istrlen(s)||pos2)return(fib(n-1)+fib(n-2));else return(2);
}
main()
{ printf(”%ld“,fib(6));}
答案:C
二、填空题
11.5 假定以下程序经编译和连接后生成可执行文件PROG.EXE,如果在DOS提示符下键入
PROG ABCD EFGH IJKL(此处代表Enter键)
则输出结果为_____。
main(int argc, char *argv[])
{ while(--argc>0)printf(”%s“,argv[argc]);printf(”“);
}
答案:IJKLEFGHABCD
11.6 以下程序的输出结果是_____。
fun(int x)
{ int p;if(x==0||x==1)return(3);p=x-fun(x-2);return p;
}
main()
{ printf(”%d“,fun(9));}
答案:7 11.7 以下程序的输出结果是_____。
fun(int n,int *s)
{ int f1,f2;if(n==1||n==2)*s=1;else { fun(n-1,
fun(n-2,
*s=f1+f2;}
}
main()
{ int x;
fun(6, printf(”%d“,x);
}
答案:8
11.8 以下程序调用invert函数按逆序重新放置a数组中元素的值,a数组中的值在main函数中读入。请填空。
#define N 10
void invert(int *s,int i, int j)
{ int t;if(i1)n=*(c[1]+1)-′0′;
else n=10;
(6)按题目规定,如果a的值为1或者*[KG-*3]c[1]中的字符是′-′号时,输出s字符串的最后若干字符,这时调用output函数,把s数组的地址传给形参指针s,把开始输出的元素的下标len-n传给形参b,把最后一个输出的元素下标len-1传给形参e。可用以下语句来实现:
if(a==1 || *[KG-*3]c[1]==′-′)output(s,len-n,len-1);
(7)如果*[KG-*3]c[1]中的字符是′+′号时,将从字符串s的最前面开始输出,除了把s数组的地址传给output函数的形参指针s外,把开始输出的元素的下标0传给形参b,把最后一个输出的元素下标n-1传给形参e。
if(*[KG-*3]c[1]==′+′)output(s,1,n-1);
(8)总结:读者按以上所述写出相应的代码,存入OUTCH.C文件。在Turbo C 的环境下进行编译调试、运行,生成一个OUTCH.EXE文件。最后退出Turbo C,在OUTCH.EXE文件所在目录下,打入如题所示的命令行,在程序运行时输入一字符串,观察运行结果是否正确,如果不正确,则需回到Turbo C中进行修改。
11.12 【分析与解答】
习题9.32已经给出了把一个整数转换为二进制数的算法,这是一个把十进制整数不断被2除的过程,每次被2除的余数即是一个二进制位上的数(1或0)。转换的方法是一样的,只是每次转换的数被2除,这可用递归来完成,递归函数的部分内容可表示如下:
outbinary(int a)
第四篇:全国计算机2级c语言考试2012年上半年全国计算机等级考试
各设区市招考办,各设考点学校:
2012年上半年全国计算机等级考试定于2012年3月24-27日举行。为确保考试顺利进行,现将有关事项通知如下:
一、报名工作
1、报名要求
报名对象:报考者不受年龄、职业、学历的限制,任何人均可根据自己学习和使用计算机的实际需要,选择不同级别的考试,但考生一次只能报考一个级别的考试。
南昌市内高校考点只接收本校在校生报名考试,其他社会考生、未设考点学校和停考考点学校的学生,统一到江西师范大学继续教育学院报名和考试。
各高校考点的考生一律不得跨校报考。一旦发现跨校报考,将取消报名资格。
其他设区市社会考生、未设考点学校和停考考点学校的考生统一到省教育考试院指定的考点报名。指定的考点分别是:景德镇市报名点是景德镇高等专科学校,上饶市报名点是上饶师范学院,萍乡市报名点是萍乡高等专科学校,新余市报名点是新余学院,宜春市报名点是宜春学院,赣州市报名点是赣州市教育局电教馆,吉安市报名点是井冈山大学,抚州市报名点是东华理工大学,鹰潭市报名点是鹰潭职业技术学院,九江市报名点是江西财经职业学院(九江)。开考级别:一级B、一级WPS OFFICE、一级MS OFFICE;二级C语言、二级VB、二级VFP、二级JAVA、二级ACCESS、二级C++、二级Delphi语言程序设计;三级PC技术、三级信息管理技术、三级网络技术、三级数据库技术;四级网络工程师、四级数据库工程师、四级软件测试工程师。
报名时间:2011年12月1日—2012年1月10日
考试日期:2012年 3月24日上午为笔试;3月24日下午2:00至27日为上机考试。
2、考点要求
加大宣传力度。要做好在校学生的报名宣传工作,扩大考试规模。严格审查考生报名资格,各考点只能接受本校学生报考(指定考点除外),其他考生都必须到省教育考试院指定考点报考。
各考点要准确输入考生的各种信息,包括准考证号、身份证号、姓名、保留成绩种类、原准考证号码、报考类别、语种等。考生报考信息经考生本人在信息确认单及考试承诺书上签字,并保留半年备查。若因报考信息未经考生本人确认而影响考生成绩或证书的,一切后果由考点负责。
按时完成好各项工作。根据教育部考试中心的规定,考试前14天上报报名库必须100%准确,并按考务系统完成所有相关编排,考试后成绩库必须以本次报名数据为准。各考点考前要对机房进行全面检查,如计算机有USB接口和光驱,要用“考试专用USB封口”封条进行密封(“考试专用封条”由我院提供),对未按规定处理的计算机,一旦被查出,将追究考点相关人员责任。
二、试卷申报及报送报名软盘
1、试卷申报
各考点请于2012年1月12日前将《2012年上半年全国计算机等级考试试卷申报表》(见附件)填好加盖单位公章后用特快专递或传真(0791-86765391)方式报送省教育考试院成招与社考处梅老师(除南昌地区外,其他考点试卷申报表还须加盖所在设区市招考办公章)。
2、报送报名数据
报名数据请于2012年1月20日前上报省教育考试院信息处(0791-86765551)(本次上报的信息可以不编排准考证号和考场)并于2012年3月10日上报最终准确报名库(必须编排准考证号和考场)。报名数据要求准确无误,考试后不允许再对报名数据作任何修改,考试后成绩库必须以本次报名数据为准。
请各考点将考生的照片按要求报送我院信息处,截止上报时间为3月10日。各考点必须用ACDsee软件检查考生照片是否倒置或横置,凡是因考生照片不符合考务要求造成照片信息有误的由考点负责。根据教育部考试中心相关规定,没有照片的考生不得参加考试,我院将对考点上报的缺少照片的考生报名信息予以删除。
考生照片采集标准如下:
(1)背景要求:背景布为浅蓝色,要求垂感和吸光好。(2)成像要求:成像区上部空1/10,头部占7/10,肩部占1/5,左右各空1/10。采集图像大小最小为192*144(高*宽),彩色,成像区大小为48mm*33mm(高*宽);
(3)灯光要求:需要摄影灯,一台前灯基本满足要求,最好利用两台侧灯。灯具可以是专业摄影灯,也可以是舞台灯或家用立式客厅灯。
(4)文件格式要求:要求存储为JPG格式,图像文件名为*.JPG,其中“*”为14位“BMH”,并用“BMH”与“报名库”、“成绩库”连接。
(5)存储要求:每个考生的照片单独存储于目录名称为考点代码(省代码+考点序号,共六位)的目录下。
(6)打印机为黑白激光打印机,分辨率最少是600dpi,即每英寸600点。
三、考务要求
1、试卷的领取、回收由设区市招考办负责。各设区市招考办必须配备专职干部、公安干警和专车负责试卷的押运,在押运途中,任何情况下,押运人员不得少于两人。试卷运送到目的地后应严格核对数量,检查密封,履行交接手续,及时报平安。试卷必须存放在保密室的专用保险柜内,存放期间必须有专人昼夜值守,值班人员不少于两人。必须配备一部专门的值班电话并报我院以便随时保持联系。因试卷丢失、被盗或其它原因造成失密、泄密等事件,必须采取有效措施控制扩散范围,并立即向省教育考试院和当地公安、保密机构报告。
2、每个考场只能安排30人考试,超过30人,造成考生无成绩的由考点自负。每个考场同一语种、级别只能装订一袋试卷(含备用卷、10份卷)。试卷申报要准确,留作机动数应控制在百分之五左右。
3、特别提醒考生在笔试答题时一律用黑色签字笔或钢笔答题,2B铅笔填涂答题卡,如用其他颜色笔答题,造成无法网上阅卷或信息采集不到,一切后果由考生自负。监考老师填涂准考证、缺考标记也按上述要求执行。
4、为了做好2012年3月第35次全国计算机等级考试组考工作,确保因科目调整、考务软件更新、上机考试硬件设备及软件更新的衔接,考务工作一律按新版考务软件执行,请各考点组织好系统、考务管理人员的培训,提高业务素质。各考点必须按照教育部考试中心要求及上机考试的需要配置正版考试软件,确保考试顺利进行,凡因没有使用正版软件造成考生无成绩的由考点负责。
5、如考试时间安排有变动,以教育部考试中心文件为准。
关于做好江西省2012年下半年全国计算机等级考试工作的通知
各设区市招考办,各考点学校:
我省2012年下半年全国计算机等级考试将于2012年9月22 - 26日举行。为确保考试顺利进行,现将有关事项通知如下:
一、报名工作
1、报名要求
报名对象:报考者不受年龄、职业、学历的限制,任何人均可根据自己学习和使用计算机的实际需要,选择不同级别的考试,但考生一次只能报考一个级别的考试。
根据有关规定,从2012年10月起,自学考试中“00018计算机应用基础(含实践00019)”课程和“00051管理系统中计算机应用(含实践00052)”课程须分别参加全国计算机等级考试一级或以上考试和全国计算机等级考试二级或以上考试。南昌市内高校考点只接收本校在校生报名考试,其他社会考生、未设考点学校和停考考点学校的学生,统一到江西师范大学省直属考点所属青山湖校区考点(考点代码360023)报名和考试,报名地址:江西师范大学逸夫楼一楼105室(南昌市北京西路437号)。联系人:陈媛媛陆军,联系电话:0791—88507345,88507898,88506184。
各高校考点的考生一律不得跨校报考。一旦发现跨校报考,将取消其报名资格。
其他设区市社会考生、未设考点学校和停考考点学校的考生统一到省教育考试院指定的考点报名。指定的考点分别是:景德镇市报名点是景德镇高等专科学校,上饶市报名点是上饶师范学院,萍乡市报名点是萍乡高等专科学校,新余市报名点是新余学院,宜春市报名点是宜春市教育局计算机培训中心,赣州市报名点是赣州市教育局电教馆,吉安市报名点是井冈山大学,抚州市报名点是东华理工大学,鹰潭市报名点是鹰潭职业技术学院,九江市报名点是江西财经职业学院(九江)。
开考级别:一级B、一级WPS OFFICE、一级MS OFFICE;二级C语言、二级VB、二级VFP、二级JAVA、二级ACCESS、二级C++、二级Delphi语言程序设计;三级PC技术、三级信息管理技术、三级网络技术、三级数据库技术;四级网络工程师、四级数据库工程师、四级软件测试工程师。
报名时间:2012年6月1日—25日
考试日期:2012年 9月22日上午为笔试;9月22日下午至26日为上机考试。
报名时间:2011年12月1日—2012年1月10日
考试日期:2012年 3月24日上午为笔试;3月24日下午2:00至27日为上机考试。
2、考点要求
加大宣传力度。要做好在校学生的报名宣传工作,扩大考试规模。严格审查考生报名资格,各考点只能接受本校学生报考(指定考点除外),其他考生都必须到省教育考试院指定考点报考。
各考点要准确输入考生的各种信息,包括准考证号、身份证号、姓名、保留成绩种类、原准考证号、报考类别、语种等。考生报考信息经考生本人在信息确认单及考试承诺书上签字,并保留半年备查。若因报考信息未经考生本人确认而影响考生成绩或证书的,一切后果由考点负责。
按时完成好各项工作。根据教育部考试中心的规定,考试前14天上报报名库必须100%准确,并按考务系统完成所有相关编排,考试后成绩库必须以本次报名数据为准。各考点考前要对机房和考试用计算机进行全面检查,对未按规定处理的计算机,一旦被查出,将追究考点相关人员责任。
二、试卷申报及报送报名数据
1、试卷申报
各考点请于2012年6月29日前将《2012年下半年全国计算机等级考试试卷申报表》(见附件)填好加盖单位公章后用特快专递或传真(0791-86765391)方式报送省教育考试院成招与社考处梅老师(除南昌地区外,其他考点试卷申报表还须加盖所在设区市招考办公章)。
2、报送报名数据
报名数据请于2012年7月10日前上报省教育考试院信息处(0791-86765551)(本次上报的信息可以不编排准考证号和考场,通过FTP上报报名库,地址:ftp://111.75.211.150),并于2012年9月7日上报最终准确报名库(必须编排准考证号和考场,刻录光盘上报)。报名数据要求准确无误,考试后不允许再对报名数据作任何修改,考试后成绩库必须以本次报名数据为准。
请各考点将考生的照片按要求报送我院信息处,截止上报时间为9月7日(刻录光盘上报)。各考点必须用XNview(1.97及以上版本)软件检查考生照片是否倒置或横置,凡是因考生照片不符合考务要求造成照片信息有误的由考点负责。根据教育部考试中心相关规定,没有照片的考生不得参加考试,我院将对考点上报的缺少照片的考生报名信息予以删除。
考生照片采集标准如下:
(1)背景要求:背景布为浅蓝色,要求垂感和吸光好。
(2)成像要求:成像区上部空1/10,头部占7/10,肩部占1/5,左右各空1/10。采集图像大小最小为192*144(高*宽),彩色,成像区大小为48mm*33mm(高*宽);
(3)灯光要求:需要摄影灯,一台前灯基本满足要求,最好利用两台侧灯。灯具可以是专业摄影灯,也可以是舞台灯或家用立式客厅灯。
(4)文件格式要求:要求存储为JPG格式,图像文件名为*.JPG,其中“*”为14位“BMH”,并用“BMH”与“报名库”、“成绩库”连接。
(5)存储要求:每个考生的照片单独存储于目录名称为考点代码(省代码+考点序号,共六位)的目录下。
(6)打印机为黑白激光打印机,分辨率最少是600dpi,即每英寸600点。
三、考务要求
1、试卷(含上机考试系统盘)的领取、回收由设区市招考办负责。各设区市招考办必须配备专职干部、公安干警和专车负责试卷的押运,在押运途中,任何情况下,押运人员不得少于两人。试卷运送到目的地后应严格核对数量,检查密封,履行交接手续,及时报平安。试卷(含上机考试系统盘)必须存放在保密室的专用保险柜内,存放期间必须有专人昼夜值守,值班人员不少于两人。必须配备一部专门的值班电话并报我院以便随时保持联系。因试卷丢失、被盗或其它原因造成失密、泄密等事件,必须采取有效措施控制扩散范围,并立即向省教育考试院和当地公安、保密机构报告。考试期间,上机考试系统盘及相关资料仍属于保密材料,必须由专人、专车负责送回,否则,一旦出现问题,后果由考点负责。
2、每个考场只能安排30人考试,超过30人,造成考生无成绩的由考点负责。每个考场同一语种、级别只能装订一袋试卷(含备用卷、10份卷)。试卷申报要准确,留作机动数应控制在百分之五左右。
3、特别提醒考生在笔试答题时一律用黑色签字笔或钢笔答题,2B铅笔填涂答题卡,如用其他颜色笔答题,造成无法网上阅卷或信息采集不到,一切后果由考生自负。监考老师填涂准考证、缺考标记也按上述要求执行。
4、为了做好2012年9月第36次全国计算机等级考试组考工作,确保因科目调整、考务软件更新、上机考试硬件设备及软件更新的衔接,考务工作一律按新版考务软件执行,请各考点组织好系统、考务管理人员的培训,提高业务素质。各考点必须按照教育部考试中心要求及上机考试的需要配置正版考试软件,确保考试顺利进行,凡因没有使用正版软件造成考生无成绩的由考点负责。
5、如考试时间安排有变动,以教育部考试中心文件为准。
第五篇:计算机二级C语言测试题含答案C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。下面小编整理了计算机二级C语言测试题含答案,希望对大家有帮助!
1、设一棵满二叉树共有15个结点,则在该满二叉树中的叶子结点数为()。
A.7 B.8 C.9 D.10
参考答案:B
参考解析:在具有n个结点的满二叉树,其非叶子结点数为int(n/2),而叶子结点数等于总结点数减去非叶子结点数。本题n=15,故非叶子结点数等于int(15/2)=7,叶子结点数等于15-7=8。
2、数据流图用于抽象描述一个软件的逻辑模型,数据流图由一些特定的图符构成。下列图符名标识的图符不属于数据流图合法图符的是()。
A.控制流 B.加工 C.存储文件 D.源和潭
参考答案:A
参考解析:数据流图用于抽象描述一个软件的逻辑模型,它由一些特定的图符构成,包括4个方面,即加工、数据流、存储文件、源和潭。
3、对关系S和R进行集合运算,结果中既包含S中的所有元组也包含R中的所有元组,这样的集合运算称为()。
A.并运算 B.交运算 C.差运算 D.积运算
参考答案:A
参考解析:关系的并运算是指由结构相同的两个关系合并,形成一个新的关系,新关系中包含两个关系中的所有元组。
4、下列方法中,属于白盒法设计测试用例的方法的是()。
A.错误推测 B.因果图 C.基本路径测试 D.边界值分析
参考答案:C
参考解析:白盒测试方法也称为结构测试或逻辑测试,主要方法有逻辑覆盖测试、基本路径测试等。
5、设R是一个2元关系,有3个元组,S是一个3元关系,有3个元组。如T=RX S,则T的元组的个数为()。
A.6 B.8 C.9 D.1
2参考答案:C
参考解析:R为n元关系,有P个元组S为m元关系,有q个元组。两个关系笛卡儿积是一个n+m元的关系,元组个数是qXp。所以T的元组的个数为9个。
6、在数据库系统中,数据库用户能够看见和使用的局部数据的逻辑结构和特征的描述是()。
A.外模式 B.逻辑模式 C.概念模式 D.物理模式
参考答案:A
参考解析:外模式也称子模式,它是数据库用户(包括应用程序员和最终用户)能够看见和使用的局部数据的逻辑结构和特征的描述,它是由概念模式推导出来的,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。…个概念模式可以有若干个外模式。
7、数据管理技术发展的三个阶段中,()没有专门的软件对数据进行管理。
I.人工管理阶段
II.文件系统阶段
Ⅲ.数据库阶段
A.仅I B.仅Ⅲ C.I和II D.II和Ⅲ
参考答案:A
参考解析:数据管理技术发展的兰个阶段中,只有人工管理阶段,没有操作系统,没有管理数据的软件,数据处理方式是批处理。在文件系统阶段,操作系统中已经有了专门数据管理软件,一般称为文件系统。在数据库系统阶段,出现了统一管理数据的专门软件系统,即数据库管理系统。
8、数据库系统的核心是()。
A.数据模型 B.软件开发 C.数据库设计 D.数据库管理系统
参考答案:D
参考解析:数据库管理系统DBMS是数据库系统的核心。DBMS是负责数据库的建立、使用和维护的软件。DBMS建立在操作系统之上,实施对数据库的统一管理和控制。用户使用的各种数据库命令以及应用程序的执行,最终都必须通过DBMS。另外,DBMS还承担着数据库的安全保护工作,按照DBA所规定的要求,保证数据库的完整性和安全性。
9、以下叙述正确的是()。
A.变量的作用域取决于变量定义语句的位置
B.全局变量可以在函数以外的任何部位进行定义
C.局部变量的作用域可用于其他函数的调用
D.一个变量说明为static存储类型是为了限制其他编译单元的引用
参考答案:D
参考解析:本题考查函数调用的变量作用域。全局变量不在任何函数俸内定义,作用域为整个文件i局部变量在函数体内定义,作用域仅为本次函数;static类型是静态变量,为了方便其他编译单元的引用,不能随意改变。一个函数包含两部分:函数首和函数体,函数体包括花括号内的所有语句。
10、下列选项中,不属于数据管理员(DBA)职责的是()。
A.数据库维护 B.数据库设计
C.改善系统性能,提高系统效率 D.数据类型转换
参考答案:D
参考解析:数据库管理员(DataBaseAdministrator,DBA)是指对数据库的规划、设计、维护、监视等的人员,其主要工作如下:
·数据库设计。DBA的主要任务之一是数据库设计,具体地说是进行数据模式的设计。
·数据库维护。DBA必须对数据库中的数据安全性、完整性、并发控制及系统恢复、数据定期转储等进行实施与维护。
·改善系统性能,提高系统效率。DBA必须随时监视数据库的运行状态,不断调整内部结构,使系统保持最佳状态与效率。
文档为doc格式
相关专题全国计算机二级c语言计算机c语言二级考试国家计算机c语言二级 网址:https://www.xiexiebang.com/a15/201905153/ad934efcf579fc4c.html模拟卷1 1 [填空题] 下列给定程序中,函数fun的功能是:在形参S所指字符串中寻找与参数C相同的字符,并在其后插入一个与之相同的字符,若找不到相同的字符则不做任何处理。 例如,若......
计算机二级考试C语言知识点总结计算机二级考试C语言知识点总结 (完全针对考试大纲) 概述 总体上必须清楚的: 1)程序结构是三种: 顺序结构 , 循环结构(三个循环结构), 选择结构(if 和 switch) 2)读程序都......
计算机二级C语言上机题型总结全国计算机二级C语言考试上机题型总汇 (一)关于“******”问题 1、将字符串中的前导*号全部删除,中间和后面的*号不删除。 void fun(char *a) { char *p=a; while(*p= =’*’)......
计算机二级C语言题型和评分标准(合集5篇)1、选择题:40题,每题1分。按标答给分 2、程序填空:3处空,每空6分。共18分,按标答给分,如果和标答的写法不一样,就算对的也没有分。每一空有每一空的分数。做对一空就给6分 3、程序......
C语言计算机计算机程序设计基础 (C语言)实验指导书 信息基础学科 2005 实验总论 一、实验目的 上机实验是学习程序设计语言必不可少的实践环节,特别是C语言灵活、简洁,更需要通过编程的实......
计算机c语言1. ENIAC (Electronic Numerical Integrator 和 Computer): 第一台真正意义上的数字电子计算机。2.最早批量生产的大型主机是UNIVAC.3. ALGOL:第一个结构化程序设计语言, P......
计算机二级C语言考试试题及答案[5篇范文]C语言是一门通用计算机编程语言,应用广泛。下面小编整理了计算机二级C语言考试试题及答案,希望对大家有帮助!1.(A )是构成C语言程序的基本单位。A、函数B、过程C、子程序D、子......
计算机二级C语言测试题及答案解析(精选五篇)C语言的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,下面给大家整理了计算机二级C语言测试题及答案,欢迎阅读!计算机二级C语言测试......
>新闻中心>游戏新闻>新闻>正文 《3D定制指定女仆2(CUSTOM ORDER MAID 3D2)》S...[详细]