奥特曼 发表于 2020-3-17 08:27:01

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]
查看完整版本: C程序设计2测试题答案