1、C语言期中测试 (开卷测试,答案写在白纸上) 一. 选择题 (1)C语言源程序名的后缀是 A).exe B).C C).obj D).cpp 这是C++的 (2)以下选项中,合法的一组C语言数值常量是 A)O28 B)12. C).177 D)0x8A 5e-3 OXa23 4c1.5 10,000 -0xf 4.5e0 Oabc
2、 3.e5 (3)以下正确的字符串常量是 A)"\\\" B)’abc’ C)OlympicGames D)"" (4) 表达式3.6-5/2+1.2+5%2的值是 5/2=2 A)4.3 B)4.8 C)3.3 D)3.8 (5)以下关于long、int和short类型数据占用内存大小的叙述中正确的是 A)均占4个字节 B)根据数据的大小来决定所占内存的字节数 C)由用户自己定义 D)由C语言编译系统决定 (6)以下叙述中错误的是 A)对于double类型
3、数组,不可以直接用数组名对数组进行整体输入或输出 只有字符数组才行 B)数组名代表的是数组所占存储区的首地址,其值不可改变 C)当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息 不会提示 D)可以通过赋初值的方式确定数组元素的个数 (7)以下叙述中错误的是 A)C语言源程序经编译后生成后缀为.obj的目标程序 B)C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件 C)用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中 D)C语言中的每条可执行语句和非执行语句最终都将被转换成二进
4、制的机器指令 (8)以下数组定义中错误的是 A)int x[][3]={0}; B)int x[2][3]={{1,2},{3,4},{5,6}}; C)int x[][3]={{1,2,3},{4,5,6}}; D)int x[2][]={1,2,3,4,5,6}; (9)若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是 A)函数的实参和其对应的形参共占同一存储单元 B)形参只是形式上的存在,不占用具体存储单元 C)同名的实参和形参占同一存储单元 D)函数的形参和实参分别占用不同的存储单元 (10)有以下程序段
5、
int j;
float y;
char name[50];
scanf("%2d%f%s",&j,&y,name);
当执行上述程序段,从键盘上输入55566 7777abc后,y的值为
A)55566.0 B)566.0 C)7777.0 D)566777.0
(11)有以下程序
#include
6、 B)963 C)852 D)875421
(12) 有以下程序
#include
7、"%d\n",s); } 程序运行后的输出结果是 A)24 B)28 C)32 D)36 12 (13) 要求通过while循环不断读入字符,当读入字母N时结束循环。若变量已正确定义以下正确的程序段是 A)while((ch=getchar())!=′N′)printf(″%c″,ch); B)while(ch=getchar()!=′N′)printf(″%c″,ch); C)while(ch=getchar()==′N′)printf(″%c″,ch); D)
8、while((ch=getchar())==′N′)printf(″%c″,ch); (14)数字字符0的ASCII值为48,若有以下程序 main() { char a='1',b='2'; printf("%c,",b++); printf("%d\n",b-a); } 程序运行后的输出结果是 () A)3,2 B)50,2 C)2,2 D)2,50 (15)有以下程序 main() { int m=12,n=34; printf("%d%d",m++,++n); printf("%d%d\n",n++,++m); } 程序运行
9、后的输出结果是 () A)12353514 B)12353513 C)12343514 D)12343513 (16)有以下程序 main() { int a=1,b; for(b=1;b<=10;b++) { if(a>=8) break; if(a%2==1) { a+=5; continue;} a-=3; } printf("%d\n",b); } 程序运行后的输出结果是 () A)3 B)4 C)5 D)6 (17)有以下程序 main()
10、 { int m,n,p; scanf("m=%dn=%dp=%d",&m,&n,&p); printf("%d%d%d\n",m,n,p); } 若想从键盘上输入数据,使变量m中的值为123,n中的值为456,p中的值为789,则正确的输入是() A)m=123n=456p=789 B)m=123 n=456 p=789 C)m=123,n=456,p=789 D)123 456 789 (18)有以下程序 () int fun(int n) {if(n==1)return 1; else return(n+fun(n-1)); } main() {i
11、nt x; scanf(″%d″,&x); x=fun(x); printf(″%d\n″,x); } 执行程序时,给变量x输入10,程序的输出结果是 A)55 B)54 C)65 D)45 (19)若整型变量a、b、c、d中的值依次为:1、4、3、2。则条件表达式a
12、\n",j);
}
程序运行后的输出结果是
A)42 B)45 C)56 D)60
(21))有以下程序
#include
13、267 B)1256 C)1278 D)1245
(22)有以下程序
#include
14、的输出结果是 () A)192 B)29 C)25 D)编译出错 (24)有以下程序 main() { int num[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}},i,j; for(i=0;i<4;i++) { for(j=1;j<=i;j++) printf("%c",' '); for(j= ;j<4;j++) printf("%4d",num[i][j]); printf("\
15、n"); } } 若要按以下形式输出数组右上半三角 1 2 3 4 6 7 8 11 12 16 则在程序下划线处应填入的是 () A) i-1 B) i C) i+1 D) 4-i (25)有以下程序 () fun(char p[][10]) {int n=0,i; for(i=0;i<7;i++) if(p[i][0]==′T′)n++; return n; } main() {char str[][10]={ ″Mon″, ″Tue
16、″, ″Wed″, ″Thu″, ″Fri″, ″Sat″, ″Sun″}; printf(″%d\n″,fun(str)); } 程序执行后的输出结果是 A)1 B)2 C)3 D)0 (26)已知大写字母A的ASCII码是65,小写字母aASCII码是97,以下不能将变量c中大写字母转换为对应小写字母的语句是( ) A)c=(c-‘A’)%26+’a’ B)c=c+32 C)c=c-‘A’+’a’ D)c=(‘A’+c)%26-‘a’
17、27)有以下程序 ()
#include
18、[],int n,int flag)
{int i,j,t;
for(i=0;i 19、) printf(“%d,”,a[i]);
}
程序运行后的输出结果是
A)1,2,3,4,5,6,7,8,9,10,
B)3,4,5,6,7,2,1,8,9,10,
C)5,4,3,2,1,6,7,8,9,10,
D)10,9,8,7,6,5,4,3,2,1,
(29) 有以下程序
#include 20、
else
{int a=7;t+=a++;}
return t+a++;
}
void main()
{int s=a,i=0;
for(;i<2;i++)
s+=f(i);
printf("%d\n",s);
} 程序运行后的输出结果是
A)24 B)28 C)32 D)36
(30)有以下程序:
main()
{ int i=0,a=0;
while(i<30)
{for(;;)
{if((i%10)==0)
bre 21、ak;
else
i--;
}
i+=11;
a+=i;
}
printf(“%d\n”,a);
}
程序的输出结果是:( )
a) 66 b) 63 c) 33 d) 32
二. 填空题
(1). 已知
f(int x)
{
if (x>2)
x+f(--x);
else
return 0;
}
则 f(3)= 0 。
(2) 当执行以下程序时,输入1234567890<回车>,则其中while循环体将执行( 0 ) 次。
22、 #include 23、9,2};
printf("%d\n",fun(a,10));
}
(4)以下程序用于判断a、b、c能否构成三角形,若能,输出YES,否则输出NO。当a、b、c输入三角形三条边长时,确定a、b、c能构成三角形的条件是需同时满足三条件:a+b>c,a+c>b,b+c>a。请填空。
main()
{ float a,b,c;
scanf(″%f%f%f″,&a,&b,&c);
if( (4)(a+b>c)&&(a+c>b)&&(b+c>a) )printf(″YES\n″); /*a、b、c能构成三角形*/
else printf(″NO\n″); /*a、b、c不能构成三 24、角形*/
}
(5)以下程序的功能是:输出100以内(不包含100)能被3整除且个位数为6的所有整数,请填空。
main()
{ int i,j;
for(i=0; (5)i<10 ;i++)
{ j=i*10+6;
if((5.2)J%3!=0 )continue;
printf(″%d ″,j);
}
}
(6)现有两个C程序文件T18.c和myfun.c同在TC系统目录(文件夹)下,其中T18.c文件如下:
#include 25、yfun.c文件如下:
void fun()
{char s[80],c;
int n=0;
while((c=getchar())!=′\n′)
s[n++]=c;
n--;
while(n>=0) printf(″%c″,s[n--]);
}
当编译连接通过后,运行程序T18时,输入Thank!则输出结果是: (6) Knah 。
(7)以下程序运行时若从键盘输入:10 20 30<回车>。输出结果是 10300 。
#include 26、canf("%d%*d%d",&i,&j,&k);
printf("%d%d%d\n",i,j,k);
}
(8) 以下isprime函数的功能是判断形参a是否为素数,是素数,函数返回1,否则返回
0。请填空。
int isprime(int a)
{ int i;
for(i=2;i<=a/2;i++)
if(a%i==0) return 0 ;
return 1 ;
}
(9) 以下程序的运行结果是 @#& 。
main()
{int a=2,b=7,c=5;
27、 switch(a>0)
{case 1:switch(b<0)
{case 1: printf (“@”); break;
Case 2: printf(“!”); break;
}
case 0: switch(c==5)
{ case 0: printf(“*”); break;
case 1: printf(“#”); break;
case 2: printf(“$”); brea 28、k;
}
default : printf(“&”);
}
printf(“\n”);
}
三.写程序题
2、 写程序,实现矩阵(3行3列)的转置(即行列互换)。
例如,输入一面的矩阵:
程序输出:
试题程序:
#include 29、
{ t=array[i][j];array[i][j]=array[j][i]; array[j][i]=t;}
}
main()
{ int i,j;
int array[3][3]={{100,200,300},{400,500,600},{700,800,900}};
clrscr();
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
printf("%7d",array[i][j]);
printf("\n");
}
fun(array);
printf("Converted array:\n");
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
printf("%7d",array[i][j]);
printf("\n");
}
}






