C程序设计2测试题答案
程序设计模拟题2一 单项选择题
1.选出C语言的合法常量_____
A0fd B0xfdaL Ce8 D.e-4
2.选出合法的变量名______
Aauto B2_ends CTURBO_C D.month
3.选出合法的字符串常量_____。
A ’String’ B ”It\’s a boy”C ”C:\\x.txt”D ”He said,’Sorry!’”
4. 若a为一维整型数组的数组名,则对指针变量p的
正确说明和初始化为
A.int *p=a; B.int *p=&a;
C.int *p=*a; D.int *p=&a;
5.对两个静态数组A和B进行如下初始化.
static char A[]=”ABCDEF”;
static char B[]={’A’, ’B’, ’C’, ’D’, ’E’, ’F’};
则下列叙述正确的是______。
A. A和B完全相同 B.A和B只是长度相同
C. A和B不相同,A是指针数组 D.A数组长度比B数组长
6. 以下说法错误的是
A.宏替换只是字符替换 B.宏名必须用大写字母
C.宏替换是在预处理时进行的
D.程序中引用带参数的宏时,对参数的数据类型没有限制
7. 对于如下数据定义
float x,y;
为了使x和y分别为1.23和4.56,输入如下内容:
x=1.23,y=4.56<回车>
则正确的scanf调用是
A. scanf("%f%f",&x,&y); B. scanf("%f,%f",&x,&y);
C. scanf("x=%fy=%f",&x,&y); D. scanf("x=%f,y=%f",&x,&y); 8.以下共用体类型和变量的定义,正确的是______。
A.union student B. union
{ int number, {int number,
char name, char name,
}s; };s;
C.union student D. union student
{ int number; {int number;
char name; char name;
}s; };s;二 填空题
定义int x=10,y,z;
执行y=z=x;x=y==z;后,变量x的值为_______。
2.char str;
str="string";
这种字符串赋值方式正确吗?______(正确填1,不正确填0)。
3.设x为整型量,则表达式x∧x的值为_______。
4. 若有以下说明和语句 int a[]={1,2,3,4,5};
则a++是对数组元素地址的正确表示吗______(正确填1,不正确填0)。
5.表达式(1/2)*10.0的值为______。
6.将一维数组x的第i个元素的地址赋给指针变量p的语句是______。
7.定义int i=1;执行while(i++<5)后i的值为______。
8.设a=7,b=6,c=5;写出表达式(a+b)>(c*c)&&b的值是______。
三 程序填空题
1.输出由数字组成的三角图案,图案的行数n从键盘输入。
如果行数n为6,则图案如图所示:
AAAAAA
BBBBB
CCCC
DDD
EE
F
#include <stdio.h>
main( )
{
int i, j, n;
printf("Please input number of rows:");
scanf("%d", &n);
for( i=0; i__(1)__; i ++ )
{
for( j=__(2)_; j>i; j-- )
putchar( ’A’+__(3)_ );
putchar( ’\n’ );
}
}
2. 数组a中存放N个由小到大排列的有序整数。从键盘输入一整数x,使用二分法在数组中查找是否有此整数。二分查找法的思路是:将待查数据与全部数组元素中位于中间下标位置的元素相比较,如果待查数据大于中间元素,则缩小查找范围,在中点之后的数组元素中继续查找;否则在在中点之前继续查找。
#include <stdio.h>
#define N 10
main()
{int x, mid, lo, hi;
static int a={ 3, 5, 7, 9, 11, 13, 15, 17, 19, 21 };
scanf( "%d", &x );
lo=___(1)___; hi=N-1;
while(lo<=hi)
{mid=(lo+hi)/2;
if( x= =a ) ___(2)___;
elseif( x>a ) lo=mid+1;
else hi=__(3)__;
}
if(lo<=hi) printf("Found %d at %d\n", x, mid);
else printf("%d not found\n", x);
四 改错题 (下面每小题有三行程序存在错误,要求不改变程序的功能,指出出错语句,并写出完整的正确语句)
1.本程序计算N×N二维整型数组中元素值为负数的元素个数占全部元素个数的百分比(输出时保留一位小数)。
行号程序
01 #include <stdio.h>
02 #define N 4
03 float fun( int arr[] );
04 main( )
05 {
06 static int aa[]={
07 { 1, 2, 3, 4 }, { 4, 5, 6, 7 },
08 { 10,11,12,13 }, {20,21,22,23 } };
09 float p;
10 p=fun(&aa);
11 printf("p=%.1f%%", p*100);
12 }
13 void fun( int arr[] )
14 {
15 int i, j;
16 int s;
17 for( i=0; i<N; i++ )
18 for( j=0; j<N; j++ )
19 if(arr<0)
20 s++;
21 return (float)s/(N*N);
22 }
可能出错的程序语句的行号为:03、06、10、11、13、16、17、19、21,错误依次为:
行号______应改为___________________________________________。
行号______应改为___________________________________________。
行号______应改为___________________________________________。
参考答案:
1.行号10 应改为p=fun(aa);
行号13 应改为 floatfun(int arr[ ])
行号16 应改为 int s=0; 2.从键盘输入一行字符,查找字符串中是否有大写字母’A’。
若有则输出"Found",若无则输出"Not Found"。
行号程序
01 #include <stdio.h>
02 main( )
03 {
04 char a,*p=a;
char message;
message="Not Found";
07 printf("Please enter a string:");
08 gets(&a);
09 while(*p)
10 {
11 if(p==’A’)
12 {
13 message="Found";
14 break;
15 }
16 p++;
17 }
18 puts(message);
19 }
可能出错的程序语句的行号为:05、06、08、09、11、14、18,错误依次为:
行号______应改为___________________________________________。
行号______应改为___________________________________________。
行号______应改为___________________________________________。
参考答案:
2.行号05 应改为char *message;
行号08 应改为 gets(a);
行号11 应改为 if (*p==’A’); 五 阅读理解
1.下面程序的输出结果为:___________。
int i =2;
main ( )
{ int i =5;
sub1();sub1();
sub2();sub2();
printf(”%d”, i);
}
sub1( )
{static int i =6;
i ++;
printf(”%d,”, i);
}
sub2( )
{ int i =3;
i ++;
printf(”%d,”, i);
}
参考答案:
1.7,8,4,4,5 2. 下面程序的输出结果为:___________。
main( )
{
static int x[ ]={10,7,5,8};
int s, i,*p;
s=1; p=x;
for(i=0;i<4;i++)
s*=*(p+i);
printf("%d\n",s);
}
参考答案:
2.2800六 程序设计
1.试编写一函数,该函数将字符ch打印row行col列。(8分)
参考答案:
1.
main()
{
void ptr();
char ch;
int row,col;
scanf(“%d%c%d”,&row,&ch,&col);
ptr(ch,row,col);
}
void ptr(char ch, int row,int col);
{ int i ,j;
for(i=1;i<=row;i++)
{for(j=1;j<=col;j++)
printf(“%c”,ch);
printf(“\n”);
}
}2. 有一篇文章,共有3行文字,每行80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其它字符的个数。(10分)
参考答案:
2.
main()
{ int i,j,upper,lower,digit,space,others;
char text;
upper=lower=digit=space=others=0;
for(i=0;i<3;i++)
{
gets(text);
for(j=0;j<80&&text )!=’\0’;j++)
{
if((text>=’a’&& text<=’z’)
upper++;
else if(text>=’a’ text<=’z’)
lower++;
else if(text>=’0’&& text<=’9’)
digit++;
else if(text==’ ’)
space++;
else
others++;
}
printf(“upper:%d, lower:%d,digit:%d,space:%d,others:%d\n”,upper,lower,digit,space,others);
}3.输入5个实数,去掉一个最大值,去掉一个最小值,求其他三个数的平均值(输出时要求保留一位小数.)如输入2.1,3.5,4.3,1.9,3.7。则输出3.5+2.1+3.7的平均值:3.1。(10分)参考答案:
3.
#include <stdio.h>
main()
{ int i;
float a,max,min,av,sum=0;
for(i=0;i<5;i++)
scanf(“%f”,&a);
max=min=a;
for(i=0;i<5;i++)
{ if(max<a )max=a;
if(min>a )min=a;
sum+=a;
}
av=(sum-max-min)/3;
printf(“%0.1f\n”,av);
}无忧答案网 Q 761 2960 21
页:
[1]