参考答案
一、单项选择题:(10分,每题2分)
1.char (*p)[10];该语句声明了一个:A。
A) 指向含有10个元素的一维字符型数组的指针变量p
B) 指向长度为10的字符串的指针变量p
C) 有10个元素的指针数组p,每个元素可以指向一个字符串
D) 有10个元素的指针数组p,每个元素存放一个字符串
2.以下错误的描述是(C )。
A)不同的函数中可以使用相同名字的变量,互不干扰
B)形式参数都是局部变量
C)函数定义可以嵌套
D)C语言中的函数参数传递都是单向值传递
3.以下对二维数组进行正确初始化的是(  B )。
A)int a[2][3]={{1,2},{3,4},{5,6}};
B)int a[][3]={1,2,3,4,5,6};
C)int a[2][]={1,2,3,4,5,6};
D)int a[2][]={{1,2},{3,4}};
4.已知:
union
{
double k;
char c;
float a;
}test;
则sizeof(test)的值是:A。
A)8  B)1 C)4 D)13
5.设有语句int a = 3; 执行了语句a += a -= a *= a; 后,变量a的值是____B____。
A)  3 B)  0    C)  9      D)  -12
二、写出下列程序的运行结果。(10分,每题2分,第2、4、5题打印结果正确但是没有换行时,给1分)
1.
#include <stdio.h>
main()
{
char  c;
while ((c = getchar()) != '$')
{
putchar(c);
}
printf("End!\n");
}
程序运行时输入abcdefg$abcdefg↙则程序的运行结果为
abcdefgEnd!
2.
#include<stdio.h>
void Fun(int *y)
{
printf("*y = %d\n", *y);
*y = 20;
printf("*y = %d\n", *y);
}
main()
{
int x = 10;
printf("x = %d\n", x);
Fun(&x);
printf("x = %d\n", x);
c语言暑期培训班
}
运行结果是:
x = 10
*y = 10
*y = 20
x = 20
3.
#include <stdio.h>
main()
{
int  n;
for (n=1; n<=5; n++)
{
if (n % 2)
{
printf("*");
}
else
{
continue;
}
printf("#");
}
printf("$\n");
}
运行结果是:
*#*#*#$
4.
#i nc lu de <st d io.h>
st ru ct d at e
{
in t y ea r;
in t m on th;
in t d ay;
};
vo id f un c(st r uc t da te *p)
{
p->y ea r = 2006;
p->m on th = 11;
p->d ay = 18;
}
ma in()
{
st ru c t da te d;
< a r = 2005;
< n th = 12;
d.da y = 10;
pr in t f(“%d,%d,%d\n”,d.ye nt h,d.da y);
fu nc(&d);
pr in t f(“%d,%d,%d\n”,d.ye nt h,d.da y);
}
运行结果是:
2005,12,10
2006,11,18
5.
#include<stdio.h>
in t Fu n(in t x)
{
st at ic i nt y= 10;
y += x;
re tu rn y;
}
ma in()
{
in t  y= 0, k;
fo r (k=0; k<2; k++)
{
y = Fu n(k);
pr in tf("y = %d\n", y);
}
}
运行结果是:
y = 10
y = 11
三、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。(8分,每空2分)
1.下面这个程序用于对键盘输入的任意整数判断其是否为素数。
#include <math.h>
#include <stdio.h>
int IsPrimeNumber(int number);
main()
{
int n, ret;
printf("Input n:");
scanf("%d",&n);
ret = IsPrimeNumber(n);
if (ret != 0)
{
printf("%d is a prime number\n",n);
}
else
{
printf("%d is not a prime number\n",n);
}
}
int IsPrimeNumber(int number)
{
int i;
if (number <= 1)
return 0;
for (i=2; i<=sqrt(number); i++)
{
if ((number % i) == 0)
return 0;
}
return 1;
}
2.下面程序用于从键盘输入一行字符,统计其中单词(以空格作为间隔符的字符串)的个数,已知判断是否有新单词出现的方法为:当前被检验字符不是空格而前一被检验字符是空格,则表示有新单词出现。例如:输入How are you时,要求统计结果为3。
#include <stdio.h>
main()
{
char  str[20];
int    i, num;
gets(str);
if (str[0] != ' ')
{
num = 1;
}
else
{
num = 0;
}
for (i=1; str[i]!=’\0’; i++)
{
if (str[i]!=’’ && str[i-1]==’’)
{
num++;
}
}
printf("num=%d\n", num);
}
四、在下面给出的4个程序中,有15处错误(包括语法错误和逻辑错误),请出其中的错误,并改正之。(30分,每对1个错误,加1分,每修改正确1个错误,再加1分。)
1.下面程序用于从键盘输入3*4矩阵的元素,通过调用函数FindMax,求出这3*4矩阵元素中的最大值及其所在行列位置,然后输出这个最大值及其所在行
列位置。(4处错误)
#i nc lu de <st d io.h>
in t Fi nd Ma x(i nt x[3][4],i n t *p Ro w,in t *pC ol);
ma in()
{
in t a[3][4],ma x, i, j, r o w, c ol;
fo r (i=0; i<3; i++)
{
fo r (j=0; j<4; j++)
{
sc an f("%d",&a[i][j]); //原来缺&
}
}
ma x = Fi nd Ma x(a,&ro w,&c ol);
pr in tf("ma x=%d,ro w=%d,c ol=%d\n",ma x,ro w,c ol);
}
in t Fi nd Ma x(i nt x[3][4],i n t *p Ro w,in t *pC ol)
{
in t ma x, i, j;
ma x = x[0][0];
*p Ro w = 0; //原来缺该语句
*p Co l = 0; //原来缺该语句
fo r (i=0; i<3; i++)
{
fo r (j=0; j<4; j++)
{
if (x[i][j] > m ax) //原来多了分号
{
ma x = x[i][j];
*p Ro w = i;
*p Co l = j;
}
}
}
re tu rn m ax;
}
2.编程将若干字符串按字母顺序由小到大排序输出。(3处错误)#include  <stdio.h>
main()
{
double term, result = 1;  // result未赋初值1
int n;
for (n = 2; n <= 100; n = n + 2)
{
term =(double)( n * n)/(( n - 1) * ( n + 1));
//( n * n)/( n - 1) * ( n + 1)改为(double)( n * n)/(( n -
1) * ( n + 1))否则精度丢失,另外,分母两项乘积要加括号
result = result * term;
}
printf("result = %f\n", 2*result);
}
3.下面程序用于将输入的两个字符串连接起来,然后打印连接后的字符串。(5

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。