南昌航空大学2008—2009学年第一学期期末考试
课程名称:C 语言A 闭 卷 B1 卷 120 分钟
一、 填空(每空1分,共12空,共12分)
1.执行a=10>8*2?3+5:3*2;后,a 的值是
6 。
2.设int i=10;则执行j=++i;后j 的值为 11 。
3.(!x)==(x!=0)的值为 0 。
4.能表示一个整数y 既是奇数又是3的倍数的表达式是y%2!=0&&y%3==0 。
5.定义一指向整型数据的指针变量p 的语句是 int *p; 。
6.C 语言中三种常用的循环控制结构是for 循环、do-while 循环和while 循环。
7.int a[9]; 则a 数组的下标范围是 0~8 。
8.对应scanf("a=%d,b=%d",&a,&b);语句的输入a 为3,b 为7的键盘输入格式是 a=3,b=7 。
9.若a 为float 类型变量,且a=4.6785,则表达式(int)(a*100+0.5)/100.0的值为 4.68 。 10.设a=061(八进制数),b=026(八进制数),若想通过c=a^b 运算,求c 的十进制数值为 39 。
11. 若x=2,y=-3则x&y 的结果是 0 。
二、选择(每小题2分,共15小题,共30分) 1.C 语言中,要求运算数必须是整型的运算符是( A )
(A) % (B) / (C) < (D) ! 2.表达式10!=9的值是( B )
(A) 0 (B) 1 (C) true (D) false 3.连接两个字符串的C 语言库函数是( C )
(A) strcmp (B) strcpy (C) strcat (D) strlen
4. 以下定义整型3行4列的二维数组a并初始化不正确的是(C )
(A) int a[3][4]={0};
(B) int a[][4]={0,1,2,3,4,5,6,7,8,9,10,11,12};
(C) int a[3][]={0,1,2,3,4,5,6,7,8,9,10,11,12};
(D) int a[3][4]={{1,2},{1,2,3},{1,2,3,4}};
5.有如下程序,该程序的执行结果是( D )
main()
{ int i,sum=0;
for(i=1;i<=3;i++)
sum+=i++;
printf("%d\n",sum);
}
(A) 6 (B) 3 (C) 死循环(D) 4
6.有如下程序, 该程序的输出的结果是( C)
int addc(int a,int b,int c)
{ c=a+b;
return(c); }
main()
{ int x=4,y=2,z,r;
z=x+y;
r=addc(addc(x,y,z),addc(y,z,x),z);
printf("%d\n",r);
}
(A) 36 (B) 12 (C) 14 (D) 6
7.下列哪一个是C语言中合法的变量(C)
(A) 8ZSe (B) ±A0 (C) X0_2 (D) ?x0?
8.以下程序的输出结果是( D )
main()
{ int a;
for(a=1;a<=100;a++)
if (a%3= =0)
a+=3;
printf("%d\n",a);
}
(A) 100 (B) 101 (C) 102 (D) 103
9.以下程序的输出结果是( D )
void fun(int *a, int b)
{ *a = 2; b = 5; }
main()
{ int a = 3, b = 7;
fun(&a, b);
printf("%d%d\n", a, b); }
(A) 25 (B) 37 (C) 35 (D) 27
10. 以下程序的输出结果是( B )
#define MAX(x, y, z) x * (y) + z
main()
{ int a = 1, b = 2, c = 3;
printf("%d\n", MAX(a + b, b + c, c + a));
}
(A) 12 (B) 15 (C) 19 (D) 22
11.以下程序运行后的输出结果是( A )
main()
{ int i = 5, j = 0;
do
{
j = j + ( --i );
}while( i < 2 );
printf("%d\n", j);
}
(A) 4 (B) 5 (C) 6 (D) 9
12.以下程序的输出结果是( C )
int f(int b[], int m, int n)
{ int i, s = 1;
for (i = m; i < n; i ++)
{ b[i] = b[i - 2] + b[i +2];
s += b[i];
}
return s; }
main()
{ int x, a[]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
x=f(a, 4, 7);
printf("%d\n", x); }
(A) 22 (B) 26 (C) 42 (D) 64 13.以下程序的输出结果是( C)
int func(int n)
{ static int m = 0;
m = m + n;
return (m); }
main()
{ int i, a = 0;
for(i = 1; i <= 4; i ++)
a += func(i);
printf("%d\n", a); }
(A) 10 (B) 15 (C) 20 (D) 22
14.下列程序的输出结果是( C )
struct student
{ int a, b, c; };
main()
{ struct student stu[2] = {{1, 2, 3},{4, 5, 6}};
int t;
t = stu[0].a + stu[1].b % stu[0].c;
printf("%d \n", t);
}
(A) 0 (B) 1 (C) 3(D) 5
15. 当调用函数时,实参是一个数组名,则向函数传送的是(B)
(A) 数组的长度(B) 数组的首地址
(C) 数组每一个元素的地址(D) 数组每个元素中的值
三、程序填空(每空3分,共6空,共18分)
#include
void main ( )
{ FILE *fp;
char ch, filename[20];
scanf(“%s”, filename);
if ((fp = fopen(filename, “w”)) == NULL)
{ printf(“打开文件出错\n”);
exit(1);
}
ch = getchar( );
while ((ch = getchar( )) != …\n?)
{
fputc( ch,fp);
putchar (ch);
}
fclose (fp);
}
2.打印出[1900 2050]之间的所有的闰年,判断闰年的条件:(二者之一即可)(1)能被4整除,但不能被100整除。
(2)能被4整除,又能被400整除。
程序如下,请填空:
main()
{ int i;
for(i = 1900; i <= 2050; i ++)
if ((i%4==0 && i%100!=0)||(i%4==0 && i%400==0))
printf("%d,", i);
}
3、下面程序用于计算n!的值。
main()
{
int i, s, n;
s = 1;
printf(“enter n:”);
scanf(“%d”, &n);
for (i = 1; i <= n; i ++)
( s=s*i);
printf(“s = %d”, s);
}
4、输入10个整数存入一维数组,从中查找某个整数(该数从键盘上读取),查到则输出其是第几个数,查不到则输出“Not Find!”。
main()
{ int a[10], *p = a, x, n, flag = 0;
for ( ; p < a + 10; p ++ )
scanf(“%d”, p);
scanf(“%d”, &x);
for (n = 1, p = a; p < a + 10; p ++, n ++)
if ( *p==x)
{ flag = 1;
break;
}
if ( !flag )
printf(“Not Find! \n”);
else
printf(“%d\n”, n);
}
四、读程序题(每个小题5分,共4小题,共20分)
1.读程序从键盘输入1080,则程序的输出结果是:801
int f( int n )
{
int m = 0, c;
while ( n != 0 )
{ c = n % 10;
m = m * 10 + c;
n = n / 10;
}
return (m);
}
main()
{ int m;
scanf("%d", &m);
printf("%d\n", f(m));
}
2、写出程序的执行结果:21
main()
{ int a = 0, i;
for (i = 0; i < 5; i ++)
{ switch (i)
{ case 0:
case 3:a+=2;
case 1:
case 2:a+=3; break;
default:a+=5;
}
}
printf("%d\n", a);
} 147
258
369
3.写出程序的执行结果:
#define M 3
#define N 3
main()
{ int a[M][N] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int i, j, t;
for (i = 0; i < M; i ++)
for (j = i + 1; j < N; j ++)
{ t = a[i][j];
a[i][j] = a[j][i];
a[j][i] = t;
}
for (i = 0; i < M; i ++)
{ for ( j = 0; j < N; j++ )
printf("%d", a[i][j]);
printf("\n");
}
}
4.写出程序的执行结果:4,5
void swap(int *a, int *b)
{ int *tmp;
tmp = a;
a = b;
b = tmp;
*tmp = 4;
}
main()
{ int a = 3, b = 5;
swap(&a, &b);
printf("%d,%d", a, b);
}
五、编程序(每小题10分,共2小题,共20分)
1、按下列公式s(n)=12+22+......+n2编写计算并输出s值,其中的n值由键盘输入。
main( )
{
int i, s, n;
s = 0;
printf(“enter n:”);
scanf(“%d”, &n);
for (i = 1; i <= n; i ++)
s=s+i*i;
printf(“s = %d”, s);
}
2、编写一函数实现将字符串s中的第一个和最后一个字母改写成大写字母(如原来不是字母或已是大写字母,则不变),并在main函数中调用该函数,其中字符串s由键盘输入。
void f( char *s)
{
int len = strlen(s);
if(*s>=?a?&&*s<=?z?)
*s = *s-32;
if(*(s+len-1)>=?a?&&*(s+len-1)<=?z?)
*s = *s-32;
}
main( )
{
char a[]="abcd";
f(a);
printf("%s", a);
}