资源描述
36 / 36
教育部人才培养模式
改革和开放教育试点
C 语言程序设计 A
形成性考核册
学校名称:
学生XX:
学生学号:
班级:
C 语言程序设计 A
形考作业 1
姓 名:
学 号:
得分:
教师签名:
一、选择题:(第 1~13 小题每题 2 分,第 14~17 小题每题 3 分,共 38分)
1. 在每个 C 语言程序中都必须包含有这样一个函数,该函数的函数名为( )。
A.mainB.MAINC.nameD.funtion
2.C 语言原程序文件的缺省扩展名为( )。
A.cppB.exeC.objD.C
3.由 C 语言目标文件连接而成的可执行的缺省扩展名为( )。
A.cppB.exeC.objD.C
4.程序运行中需要从键盘输入多于一个数据时,各数据之间应使用( )符号作为分隔符。
A.空格或逗号B.逗号或回车C.回车或分号D.空格或回车
5.每个 C 语言程序的编译错误分为( )类。
A.1B.2C.3D.4
6.设 x 和 y 均为逻辑值,则 x && y 为真的条件是( )。
A.它们均为真B.其中一个为真C.它们均为假D.其中一个为假
7.设有语句“int a=12;a+=a*a;”,则执行结束后,a 的值为( )。
A.12B.144C.156D.288
8.x>0 && x<=10 的相反表达式为( )。
A.x<=0 || X>10B.x<=0 && x>10C.x<=0 || x<=10D.x>0 && x>10
9.字符串“a+b=12\n”的长度为( )。
A.6B.7C.8D.9
10.在下列符号常量定义中。错误的定义语句格式为( )。
A.const M1=10;B.const int M2=20;C.const M3 10D.const char
mark=’3’;
11.带有随机函数的表达式 rand()%20 的值在( )区间内,
A.1~19B.1~20C.0~19D.0~20
-1-
12.当处理特定问题时的循环次数已知时,通常采用( )循环来解决。
A.forB.whileC.do-whileD.switch
13.在 switch 语句的每个 case 块中,假定都是以 break 语句结束的,则此 switch 语句容易被
改写为()语句。
A.forB.ifC.doD.while
14.for 语句能够被改写为( )语句。
A.复合B.ifC.switchD.while
15.下面循环语句执行结束后输出的 i 值为( )。
for(int i=0;i<n;i++)if(i>n/2){cout<<i<<endl;break;}
A.n/2B.n/2+1C.n/2-1D.n-1
16.在下面循环 w 语句中内层循环体 S 语句的执行次数为( )。
for(int i=0;i<n;i++)
for(int j=i;j<n;j++)S;
A.n2B.(n+1)/2C.n(n-1)/2D.n(n+1)/2
17.在下面的 do 循环语句中,其循环体被执行的次数为( )。
int i=0;do i++;while(i*i<10);
A.4B.3C.5D.2
二、填空题:(每空 0.5 分,共 22 分)
1.C 语言中的每条简单语句以___________作为结束符。
2.C 语言中的每条复合语句以__________作为结束符。
3.在 C 语言程序的每个程序行后面或单独一行的开始使用注释的标记符为_______。
4.单行或多行注释的结束标记符为________。
5.在一个 C 程序文件中,若要包含另外一个头文件或程序文件,则应使用以__________标识符
开始的预处理命令。
6.在#include 命令中所包含的头文件,可以是系统定义的头文件,也可以是_______定义的头
文件。
7.一个函数定义由____________和函数体两部分组成。
8.用于输出表达式的标准输出函数是_____________。
9.当不需要函数返回任何值时,则应使用__________标识符定义函数类型。
10.执行“printf(“%d-%d=%d”,43,18,43-18); ”语句后得到的输出结果为____________。
11.每个 C 程序文件在编译时可能出现有警告性错误,其对应的标识符为__________。
-2-
12.每个 C 程序文件在编译时可能出现有致命性错误,其对应的标识符为__________。
13.十进制数 25 表示成符合 C 语言规则的十六进制数为________。
14.在 C 语言中,转义字符序列________表示一个换行符。
15.执行“printf(“%c”,’F’-2);”语句后得到的输出结果为______。
16.已知’A’~’Z’的 ASCII 码为 65-90,当执行“intx=’C’+5;”语句所 x 的值为
________.
17.假定一个枚举类型的定义为“enum RB{ab,ac=3,ad,ae}x=ad;”,则 x 的值为________.
18.char 类型的大小为______个字节。
19.int 类型的大小为______个字节。
20.float 类型的大小为______个字节。
21.十进制数 28 类型为________。
22.十进制数 3.26 类型为________。
23.若需要定义一个符号常量,并且使 C 语言能够进行类型检查,则应在定义语句的开始使用
保留字_________。
24.使用 const 语句定义一个符号常量时,则必须对它同时进行__________________。
25.执行“int x=45,y=13;printf(“%d”,x%y);”语句序列后得到的输出结果为_______。
26.假定 x=5,则表达式 2+x++的值为______。
27.表达式(float)25/4 的值为_________。
28.表达式(int)14.6%5 的值为_______。
29.表达式 x=x+1 表示成增量表达式为_______。
30.增量表达式++y 表示成赋值表达式为________。
31.关系表达式(x!=0)的等价表达式为________。
32.假定不允许使用逻辑非操作符,则关系表达式 x+y>5 的相反表达式为__________。
33.假定不允许使用逻辑非操作符,则逻辑表达式 a>b||b==5 的相反表达式为
_________________。
34.若 x=5,y=10,则 x>y 逻辑值为_________。
35.若 x=5,y=10,则 x<=y 逻辑值为_________。
36.假定 x=5,则执行“a=(x?10:20);”语句后 a 的值为______。
37.执行“typedefintDataType;”语句后,在使用 int 定义整型变量的地方都可以使用
__________来定义整型变量。
38.在 switch 语句中,每个语句标号所含保留字 case 后面的表达式必须是_________。
-3-
39.作为语句标号使用的 C 保留字 case 和 default 只能用于_________语句的定义体中。
40.在 switch 语句时,在进行作为条件的表达式求值后,将从某个匹配的标号位置起向下执行,
当碰到下一个标号位置时(停止/不停止)_________执行。
41.若 do 循环的“尾”为“while(++i<10)”,并且 i 的初值为 0,同时在循环体不会修改 i 的
值,由循环体将被重复执行_________次后正常结束。
42.当在程序执行到__________语句时,将结束本层循环语句或 switch 语句的执行。
43.在程序中执行到__________语句时,将结束所在函数的执行过程,返回到调用该函数的位
置。
44.在程序执行完__________函数调用后,将结束整个程序的执行过程,返回到操作系统或 C
语句集成开发环境界面窗口。
三、写出下列每个程序运行后的输出结果:(每小题 5 分,共 40 分)
1. #include<stdio.h>
void main()
{
int x=5;switch(2*x-3){
case 4:printf("%d ",x);
case 7:printf("%d ",2*x+1);
case 10:printf("%d ",3*x-1);break;
default:printf("%s ","default\n");
}
printf("%s\n","switch end.");
}
输出结果为:
2. #include<stdio.h>
void main()
{
int i,s=0;
-4-
for(i=1;i<=6;i++)
s+=i*i;
printf("s=%d\n",s);
}
输出结果为:
3. #include<stdio.h>
void main()
{
int i,s1=0,s2=0;
for(i=0;i<10;i++)
if(i%2)s1+=i;
else s2+=i;
printf("%d %d\n",s1,s2);
}
输出结果为:
4. #include<stdio.h>
void main()
{
int n=10,y=1;
while(n--){y++;y++;}
printf("y=%d\n",y);
}
输出结果为:
-5-
5. #include<stdio.h>
void main()
{
int f,f1,f2,i;
f1=f2=1;
printf("%d %d ",f1,f2);
for(i=3;i<=10;i++){
f=f1+f2;
printf("%d ",f);
if(i%5==0)printf("\n");
f1=f2;
f2=f;
}
printf("\n");
}
输出结果为:
6. #include<stdio.h>
#include<math.h>
void main()
{
int i,n;
for(n=2;n<=20;n++){
int temp=(int)sqrt(n);//sqrt(n)求出 n 的平方根并取整
for(i=2;i<=temp;i++)
if(n%i==0)break;
-6-
if(i>temp)printf("%d ",n);
}
printf("\n");
}
输出结果为:
7. #include<stdio.h>
#include<math.h>
const int M=20;
void main()
{
int i,c2,c3,c5;
c2=c3=c5=0;
for(i=1;i<=M;i++){
if(i%2==0)c2++;
if(i%3==0)c3++;
if(i%5==0)c5++;
}
printf("%d %d %d\n",c2,c3,c5);
}
输出结果为:
8. #include<stdio.h>
#include<math.h>
const int M=20;
-7-
void main()
{
int i,s;
for(i=1,s=0;i<15;i++){
if(i%2==0 || i%3==0)continue;
printf("%d ",i);
s+=i;
}
printf("%d\n",s);
}
输出结果为:
-8-
C 语言程序设计 A
形考作业 2
姓 名:
学 号:
得 分:
教师签名:
一、选择题:(每小题 1 分,共 5 分)
1.在下面的一维数组定义中,( )语句有语法错误。
A.int a[]={1,2,3};B.int a[10]={0};C.int a[];D.int a[5];n
2.在下面的二维数组定义中,( )语句是正确的。
A.int a[5][];B.int a[][5];C.int a[][3]={{1,3,5},{2}};D.int
a[](10)
3.假定一个二维数组的定义语句为“inta[3][4]={{3,4},{2,8,6}};”,则元素 a[1][2]的值
为( )。
A.2B.4C.6D.8
4.假定一个二维数组的定义语句为“inta[3][4]={{3,4},{2,8,6}};”,则元素 a[2][1]的值
为( )。
A.0B.4C.8D.6
5.将两个字符串连接起来组成一个字符串时,选用( )函数。
A.strlen()B.strcap()C.strcat()D.strcmp()
二、填空题:(每空 1 分,共 16 分)
1.假定一维数组的定义为“char * a[8];”,则该数组所含元素的个数为__________。
2.假定一维数组的定义为“char * a[8];”,则该数组所占存储空间的字节数为__________。
3.假定二维数组的定义为“int a[3][5]”,则该数组所占存储空间的字节数为__________。
4.假定二维数组的定义为“char a[M][N];”,则该数组所所含元素的个数为_________。
5.假定二维数组的定义为“doublea[M][N];”,则每个数组元素的行下标取值X围在
________之间。
6.假定二维数组的定义为“doublea[M][N];”,则每个数组元素的列下标取值X围在
________之间。
-9-
7.使用“typedef char BB[10][50];”语句定义_________为含有 10 行 50 列的二维字符数组
类型。
8.存储字符’a’需要占用存储器的_______个字节空间。
9.空字符串的长度为__________。
10.存储一个空字符串需要占用_______个字节。
11.字符串”a:\\xxk\\数据”的长度为___________。
12.用于存储一个长度为 n 的字符串的字符数组的长度至少为___________。
13.strcmp 函数用于进行两个字符串之间的__________。
14.Strcpy 函数用于把一个字符串___________另一个字符数组空间中。
15.一个二维字符数组 a[10][20]能够存储________个字符串。
16.一个二维字符数组 a[10][20]能够存储的每个字符串的长度至多为_________。
三、写出下列每个程序运行后的输出结果:(每小题 4 分,共 24 分)
1. #include<stdio.h>
void main()
{
int a[10]={12,39,26,41,55,63,72,40,83,95};
int i,i1=0,i2=0;
for(i=0;i<10;i++)
if(a[i]%2==1)i1++;else i2++;
printf("%d %d\n",i1,i2);
}
输出结果为:
2. #include<stdio.h>
#include<string.h>
void main()
{
int i;
- 10 -
char *a[5]={"student","worker","cadre","soldier","peasant"};
char *p1,*p2;
p1=p2=a[0];
for(i=0;i<5;i++){
if(strcmp(a[i],p1)>0)p1=a[i];
if(strcmp(a[i],p2)<0)p2=a[i];
}
printf("%s %s\n",p1,p2);
}
输出结果为:
3. #include<stdio.h>
int a[10]={4,5,6,15,20,13,12,7,8,9};
void main()
{
int i,s0,s1,s2;
s0=s1=s2=0;
for(i=0;i<10;i++){
switch(a[i]%3){
case 0:s0+=a[i];break;
case 1:s1+=a[i];break;
case 2:s2+=a[i];break;
}
}
printf("%d %d %d\n",s0,s1,s2);
}
输出结果为:
- 11 -
4. #include<stdio.h>
void main()
{
char a[]="abcdbfbgacd";
int i1=0,i2=0,i=0;
while(a[i]){
if(a[i]=='a')i1++;
if(a[i]=='b')i2++;
i++;
}
printf("%d %d %d\n",i1,i2,i);
}
输出结果为:
5. #include<stdio.h>
void main()
{
int a[3][4]={{1,2,7,8},{5,6,10,6},{9,12,3,4}};
int m=a[0][0];
int ii=0,jj=0;
int i,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(a[i][j]>m){m=a[i][j];ii=i;jj=j;}
- 12 -
printf("%d %d %d\n",ii,jj,a[ii][jj]);
}
输出结果为:
6. #include<stdio.h>
void main()
{
int a,b;
for(a=1,b=2;b<50;){
printf("%d %d ",a,b);
a=a+b;
b=a+b;
}
printf("\n");
}
输出结果为:
四、写出下列每个函数的功能。(每小题 4 分,共 20 分)
1. #include<stdio.h>
int SA(int a,int b){
if(a>b)return 1;
else if(a==b)return 0;
else return -1;
}
函数功能为:
- 13 -
2. #include<stdio.h>
int SC(int a,int b,int c){
if(a>=b && a>=c)return a;
if(b>=a && b>=c)return b;
return c;
}
函数功能为:
3.double SF(double x,int n){ //n 为大于等于 0 的整数
double p=1,s=1;
for(i=1;i<=n;i++){
p*=x;
s+=p/(i+1);
}
return s;
}
函数功能为:
4. #include<math.h>
int SC(int x){
int a=(int)sqrt(x);
int i=2;
while(i<=a){
if(x%i==0)break;
i++;
}
if(i<=0)return 0;else return 1;
- 14 -
}
函数功能为:
5. #include<stdio.h>
void trans(int x)
{
char a[10];
int i=0,rem;
do{
rem=x%16;
x=x/16;
if(rem<10)a[i]=48+rem;//'0'字符的 ASCII 码为 48
else a[i]=65+rem;//'A'字符的 ASCII 码为 55
i++;
}while(x!=0);
while(i>0)printf("%c",a[--i]);
printf("\n");
}
函数功能为:
五、根据下列每个题目要求编写程序。(第 1~5 小题每题 6 分,第 6 小题 5 分,共
35 分)
1.编写一个函数,函数头格式为“void fun4(char *a , int b[])”,分别求出由字符指针 a
所指向的字符串中包含的每种十进制数字出现的次数,把统计结果保存在数组 b 的相应元素。
- 15 -
2.编写一个函数,函数头格式为“double Mean(double a[M][N] , int m , int n)”,要求返
回二维数组 a[m][n]中所有元素的平均值,假定在计算过程是采用变量 v 存放平均值。
3.编写一个递归函数“int FF(int a[] , int n)”,求出数组 a 中所有元素 n 个元素之积并返
回。
4.编写一个主函数,利用 while 循环,求出并显示满足不等式 1+1/2+1/3+……+1/n>5 的最小 n
值。
- 16 -
5.编写一个主函数,求满足不等式 22+42+……+n2<1000 的最大 n 值,假定分别用 i 和 s 为取偶
数值和累加值的变量,并限定使用 do 循环编程。
6.编写一个主函数,计算并输出 n 的值,其中 n 值由键盘输入。
- 17 -
C 语言程序设计 A
形考作业 3
一、选择题
姓 名:
学 号:
得 分:
教师签名:
1. 在下面的( )函数声明语句存在语法错误。
A.AA(int a,int b);B.AA(int ,int)C.AA(int a;int b)D.AA(int
a,int)
2.在下面的( )不能作为函数的返回类型。
A.voidB.intC.newD.long
3.下面正确的函数原型语句是( )。
A.int Function(void a);B.void Function( );
C.int Function(a);D.void int(double a);
4.函数调用 func(exp1,exp2),exp3*exp4-exp5)中所含实参的个数为()个。
A.1B.2C.4D.5
5.下面的标识符中,( )是文件级作用域。
A.函数形参B.语句标号C.外部静态类标识符D. 自动类标识符
6. 下面的标识符中,( )具有全局级作用域。
A.函数形参B.全局变量C.内部静态变量D. 自动变量
7.假定 p 是一个指向 float 型数据的指针,则 p+1 所指数据的地址比 p 所指数据的地址大()字
节。
A.1B.2C.4D.8
8.假定 a 为一个字符数组名,则元素 a[8]的地址比该数组的首地址大( )个字节。
A.4 B.8 C.16D.32
9.假定 a 为一个数组名,则下面的( )表示有错误。
A.a[i]B.*a++C.*aD.*(a+i)
- 18 -
10.用 calloc 函数创建具有 10 个整型元素的一维数组的正确语句是( )。
A.int *p=calloc(10,2);B.int *p=calloc(10);
C.int *p=calloc(10,4);D.int *p=malloc(10)
11.假定变量 m 定义为”int m=7;”,则定义变量 p 的正确语句为()。
A.int p=&m;B.int *p=&m;C.int &p=*m;D.int *p=m;
12. 假定 k 是一个 double 类型的变量,则定义变量 p 的正确语句为( )。
A.double p=&k;B.double *p=&k;
C.double &p=*k;D.char *p=”Thank you!”;
13.假定一条定义语句为“int a[10],x,*pa=a;”,若要把数组 a 中下标为 3 的元素赋值给 x,
则不正确的语句为( )。
A.x=pa[3];B.x=*(a+3);C.a=a[3];D.x=*pa+3;
14.假定有定义“int b[10];int *pb;”,则不正确的赋值语句为( )。
A.pb=b;B.pb=&b[0];C.pb=b+2;D.pb=b[5];
15.假定指针变量 p 定义为“int *p=new int(100);”,要释放 p 所指向的动态内存,应使用
语句( )。
A.delete[p];B.delete *p;C.delete &p;D.delete []p;
16.假定指针变量 p 定义为“int*p=calloc(30,sizeof(int));”,要释放 p 所指向的动态内
存,应使用语句( )。
A.delete[p];B.deldete(p);C.free[]p;D.free(p);
二、填空题
1.在 C 语言中,一个函数由函数头和____________组成。
2.在函数外定义的变量称为全局变量,若没有被初始化则系统隐含对它所赋的初值为
___________。
3.如果一个函数只允许同一程序文件中的函数调用,则应在访函数定义前加上的 C 保留字为为
__________。
4.如果一个函数直接或间接地调用自身,这样的调用被称为_________调用。
5.调用系统函数时,要先使用#include 命令包含该函数的原型语句所在_______文件。
6.函数形参的作用域是该函数的_______。
7.假定 p 所指对象的值为 25,p+1 所指对象的值为 46,则*p++的值为__________。
8.假定 p 所指对象的值为 25,p+1 所指对象的值为 46,则*++p 的值为__________。
9.假定 p 所指对象的值为 25,p+1 所指对象的值为 46,则执行“*(p++);”语句后,p 所指对
象的值为________。
- 19 -
10.假定 a 是一个指针数组,则 a+1 所指对象的地址比 a 地址大______字节。
11.若要把一个整型指针 p 转换为字符指针,则采用的强制转换表达式为___________。
12.假定一个数据对象为 int*类型,则指向该对象的指针类型为__________。
13.假定 p 是一个指向整数对象的指针,则用_______表示指针变量 p 的地址。
14.若 p 指向 x,则_______与 x 的等价的。
15.NULL 是一个符号常量,通常作为空指针值,它值为_________。
三、写出下列每个程序运行后的输出结果
1. #include<stdio.h>
void SB(char ch){
switch (ch){
case 'A':case 'a':
printf("WW");break;
case 'B':case 'b':
printf("GG");break;
case 'C':case 'c':
printf("PP");break;
default:printf("BB");break;
}
}
void main(){
char a1='b',a2='C',a3='f';
SB(a1);SB(a2);SB(a3);SB('A');
printf("\n");
}
输出结果为:
2. #include<stdio.h>
#include<stdlib.h>
double SD(int a,int b,char op){
- 20 -
double x;
switch(op){
case '+':x=a+b;break;
case '-':x=a-b;break;
case '*':x=a*b;break;
case '/':if(b)x=(double)a/b;
else exit(1);
break;
default:{("运算符错!\n");exit(1);}
}
return x;
}
void main(){
int x=20,y=8;
printf("%3.2lf ",SD(x,y,'-'));
printf("%3.2lf ",SD(x,y,'*'));
printf("%3.2lf ",SD(x,y,'/'));
}
输出结果为:
3. #include<stdio.h>
void WF(int x,int y){
x=x+y;
y=x+y;
printf("subs:x,y=%d,%d\n",x,y);
}
void main(){
int x=18,y=23;
printf("main:x,y=%d,%d\n",x,y);
- 21 -
WF(x,y);
x=2*x;
printf("main:x,y=%d,%d\n",x,y);
}
输出结果为:
4. #include<stdio.h>
#include<string.h>
void fun(char ss[]);
void main(){
char s[15]="567891234";
fun(s);
printf("%s\n",s);
}
void fun(char ss[]){
int i,n=strlen(ss);
for(i=0;i<n/2;i++){
char c=ss[i];
ss[i]=ss[n-1-i];
ss[n-1-i]=c;
}
}
输出结果为:
5. #include<stdio.h>
void InsertSort(int a[],int n)
{
int i,j,x;
- 22 -
for(i=1;i<n;i++){//进行 n 次循环
x=a[i];
for(j=i-1;j>=0;j--)//为 x 顺序向前寻找合适的插入位置
if(x>a[j])a[j+1]=a[j];
else break;
a[j+1]=x;
}
}
void main()
{
int i;
int a[6]={20,15,32,47,36,28};
InsertSort(a,6);
for(i=0;i<6;i++)printf("%d ",a[i]);
printf("\n");
}
输出结果为:
6. #include<stdio.h>
void main(){
int a[8]={3,5,7,9,11,13,15,17};
int i,*p=a;
for(i=0;i<8;i++){;
printf("%5d ",*p++);
if( (i+1)%4==0 )printf("\n");
}
}
输出结果为:
- 23 -
7. #include<stdio.h>
int LA(int *a,int n){
int i,s=0;
for(i=0;i<n;i++)
s+=a[i];
return s;
}
void main(){
int a[]={5,10,15,20,25,30};
int b=LA(a,4);
int c=LA(a
展开阅读全文