资源描述
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 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类型数组,不可以直接用数组名对数组进行整体输入或输出 只有字符数组才行
B)数组名代表的是数组所占存储区的首地址,其值不可改变
C)当程序执行中,数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息 不会提示
D)可以通过赋初值的方式确定数组元素的个数
(7)以下叙述中错误的是
A)C语言源程序经编译后生成后缀为.obj的目标程序
B)C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件
C)用C语言编写的程序称为源程序,它以ASCII代码形式存放在一个文本文件中
D)C语言中的每条可执行语句和非执行语句最终都将被转换成二进制的机器指令
(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)有以下程序段
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<stdio.h>
main()
{int y=9;
for( ; y>0;y--)
if(y%3= =0)
printf("%d",--y);
}
程序的运行结果是
A)741 B)963 C)852 D)875421
(12) 有以下程序
#include<stdio.h>
int a=4;
int f(int n)
{int t=0;
static int a=5;
if(n%2)
{a=6;
t+=a++;}
else
{ 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
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)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);
}
程序运行后的输出结果是 ()
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()
{ 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()
{int 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<b?a:c<d?c:d的值 ()
A)1 B)2 c)3 D)4
(20)有以下程序
main()
{
int p[8]={11,12,13,14,15,16,17,18},i=0,j=0;
while(i++<7)
if(p[i]%2)
j+=p[i];
printf("%d\n",j);
}
程序运行后的输出结果是
A)42 B)45 C)56 D)60
(21))有以下程序
#include <stdio.h>
void main()
{char c1,c2,c3,c4,c5,c6;
scanf("%c%c%c%c",&c1,&c2,&c3,&c4);
c5=getchar(); c6=getchar();
putchar(c1); putchar(c2);
printf("%c%c\n",c5,c6);
}
程序运行后,若从键盘输入(从第1列开始)
123〈回车〉
45678〈回车〉
则输出结果是
A)1267 B)1256 C)1278 D)1245
(22)有以下程序
#include <stdio.h>
void main()
{int y=10;
while(y--);
printf("y=%d\n",y);
}
程序执行后的输出结果是
A)y=0
B)y=-1
C)y=1
D)while构成无限循环
(23)有以下程序
#define P 3
#define F(int x) { return (P*x*x);}
main()
{
printf("%d\n",F(3+5));
}
程序运行后的输出结果是 ()
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("\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″, ″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’
(27)有以下程序 ()
#include<stdio.h>
void main()
{int i,j,x=0;
for(i=0;i<2;i++)
{ x++;
for(j=0;j<=3;j++)
{if(j%2) continue;x++;}
x++;
}
printf("x=%d\n",x);
}
程序执行后的输出结果是
A)x=4 B)x=8 C)x=6 D)x=12
(28)以下程序中函数f的功能是:当flag为1时,进行有由小到大排序;当flag为0时,进行由大到小排序。
void f(int b[],int n,int flag)
{int i,j,t;
for(i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if(flag?b[i]>b[j]:b[i]<b[j]) {t=b[i];b[i]=b[j];b[j]=t; }
}
main()
{int a[10]={5,4,3,2,1,6,7,8,9,10},i;
f(&a[2],5,0); f(a,5,1);
for(i=0;i<10;i++) 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<stdio.h>
int a=4;
int f(int n)
{int t=0;
static int a=5;
if(n%2)
{int a=6; t+=a++;}
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)
break;
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 ) 次。
#include <stdio.h>
main()
{char ch;
While((ch=getchar())==’0’) printf(“#”);
}
(3) 下面程序的运行结果是: 11 。
#include<stdio.h>
fun(int t[],int n)
{int i,m;
if(n==1)return t[0];
else
if(n>=2){m=fun(t,n-1); return m; }
}
main()
{int a[]={11,4,6,3,8,2,3,5,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不能构成三角形*/
}
(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 <stdio.h>
#include ″myfun.c″
main()
{ fun();
printf(″\n″);}
myfun.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 <stdio.h>
main()
{ int i=0,j=0,k=0;
scanf("%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;
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(“$”); break;
}
default : printf(“&”);
}
printf(“\n”);
}
三.写程序题
2、 写程序,实现矩阵(3行3列)的转置(即行列互换)。
例如,输入一面的矩阵:
程序输出:
试题程序:
#include <stdio.h>
#include <conio.h>
int fun(int array[3][3])
{
/*请在此处写下语句*/
int i,j,t;
for(i=0;i<3;i++)
for(j=0;j<2;j++)
{ 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");
}
}
展开阅读全文