模 拟 试 卷 二

一、填空题(20分,每空1分)。

1. 一个C语言源程序必须包含
正确答案
正确答案:主函数或main函数
2.若char型常量在内存中存放的是
正确答案
正确答案:ASCII码
3.若有int a=12,b=20,t=18;,则执行下列语句后a,b,t的值为
  if(a>b) t=a; a=b; b=t;
正确答案
正确答案:20,18,18
4.将数学表达式 改写成C语言表达式,正确的为
正确答案
正确答案:a*b/(c-d*f)
5.变量a,b已定义为int类型并赋值21和55,要求用printf函数以a=21,b=55的形式输出,请写出完整的输出语句
正确答案
正确答案:printf(“a=%d,b=%d”,a,b);
6.设x,y,z均为int型变量,请写出描述“x或y中有一个小于z”的表达式
正确答案
正确答案:x<z||y<z
7.设有以下宏定义, 则执行赋值语句: v = LENGTH * 10;(v为int型变量)后,v的值是
   #define WIDTH 10
   #define LENGTH WIDTH+30
正确答案
正确答案:310
8.若定义数组int a[]={1,2,3,4,5,6}; ,则此数组元素a[a[2]]的值为
正确答案
正确答案:4
9.局部静态变量放在内存的 ,该类型变量初始化 次。。
正确答案
正确答案:静态存储 1
10.若有定义int a[5]={1,2,3,4,5};*p=a;,则*(p+3)的值为
正确答案
正确答案:4
11. 有以下源程序
#include<stdio.h>
void main()
{ int a=0,b=0,c=0,d=0;
 if (a=1) b=1;c=2;
 else d=3;
 printf(“%d,%d,%d,%d\n”,a,b,c,d);
}
请说明无法编译通过的原因是
正确答案
正确答案:if后面的赋值语句应变为复合语句
12.若有以下定义: 则执行printf(“%d”, ++(*p)); 后输出的结果是
 int a[5]={10,20,30,40,50},*p=&a[1];
正确答案
正确答案:21
13.有说明char *s1="Abcdef" ,*s2="aBCD";,则strcmp(s1,s2)>0;的结果是  
正确答案
正确答案:0
14.若有char s1[20]=”hello”,s2[]=”world”;,则将s2与s1连接的语句是
正确答案
正确答案:strcat(s1,s2)
15.在说明语句:int *f();中,标识符f代表的是
正确答案
正确答案:函数名
16.已有定义语句:
 char *s[]={“one”, “two”, “three”},*p;
 p=s[1];
 printf(“%c, %s”, *(p+1),s[0]);的结果为

正确答案
正确答案:w,one
17.设有如下定义语句:FILE *fp;若要打开D盘上user子目录下的名为abc.txt的文本文件进行读、写操作,正确的语句应该写为fp=
正确答案
正确答案:fopen(“D:\\user\\abc.txt”,”r+”)
18.当正确读文件时,函数调用语句fread(buffer,size,count,fp);的返回值为
正确答案
正确答案:count
19.当文件打开失败时,fopen函数的返回值是
正确答案
正确答案:NULL

二、阅读程序,写出程序运行的结果(30分,每题5分)
1. 以下程序段的输出结果为:
 #include<stdio.h>
 void main()
 {
  char c1,c2,c3;
  c1 = 'a';c2='z';
  c3 = c2 - c1;
  printf("%c,%c,%d",c1,c2,c3);
 }
正确答案
正确答案:a,z,25
2.有以下程序段,程序运行后,输入5<回车>,输出结果是:
 c=getchar();
 switch(c-‘2’)
  { case 0:
   case 1: putchar( c + 4 );
   case 2: putchar( c + 4 );break;
   case 3: putchar( c + 3 );
   case 4: putchar( c + 2 );break;}
  }
正确答案
正确答案:87
3.执行下面的程序,输出结果是:
 #include <stdio.h>
 void 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) ;
 }
正确答案
正确答案:4
4.执行下面的程序,输出结果是:
 #include<stdio.h>
 int fun(int n)
 {
  static int f = 1;
  f = f * n ;
  return f ;
 }
 void main()
 {
  int i,a[5] ;
  for( i = 1 ; i <= 5 ; i++) a[i-1]=fun(i) ;
   printf(“%d\n”,a[3]);
 }
正确答案
正确答案:24
5. 执行下面的程序,输出结果是:
 #include<stdio.h>
 void fun1(char *p)
 {
  char *q; q = p;
  while( *q != ‘\0’ )
  { (*q)++; q++; }
  }
 void main()
 {
  char a[ ]={“Program”}, *p;
  p=&a[3];
  fun1(p);
  printf(“%s\n”,a);
 }
正确答案
正确答案:prohsbn
6. 执行下面的程序,输出结果是:
 #include<stdio.h>
 void main()
 {
  int i , f[5] = { 1, 2};
  for( i = 2 ; i < 5 ; i++)
  f[i] = f[i-2] * f[i-1];
  for( i = 0 ; i < 5 ; i++)
  printf(“%d,”,f[i]);
 }
正确答案
正确答案:1,2,2,4,8,
三、程序填空(20分,每空2分)阅读程序说明及程序,把它补充成一个完整的程序。
1.以下程序的功能是输出100以内(不含100)能被3整除且个位数为6的所有整数, 请填空。
 #include<stdio.h>
 void main()
 { int i, j ;
  for ( i = 0 ; ; i++)
  {
   j = i * 10 + 6 ;
   if () continue ;
   printf(“%d\t”, j);
  }
 }
正确答案
正确答案:第一空:i<10  第二空: j%3!=0
2.下面程序运行结果输出如下图形。
    *
   ***
   *****
  *******
 #include<stdio.h>
 void main( )
 {
  int i;
  for ( i = 1; i <= 4; i++)
   ;
 }
 void printstar( int i )
 {
  int j,k;char space=’’;
  for( j = 1; j <= 5-i; j++) printf(“%c”, space);
  for( k = 1; ; k++) printf(“%c”, ‘*’);
  
 }

正确答案
正确答案:第一空:printstar(i) 第二空: k<=2*i-1 第三空: printf(“\n”);
3. 用冒泡法对10个数由小到大排序。
 #include<stdio.h>
 void sort( )
 { int i,j,temp;
  for( i = 1; i < n ; i++)
  for( j = 0; ; j++)
  if( a[j] > a[j+1] )
  { temp = a[j]; ; a[j+1] = temp;}
  }
 void main()
 {
  int a[10],i;
  printf(“Enter the array:\n”);
  for( i = 0 ; i < 10 ; i++)
  scanf(“%d”, );
  sort( );
  printf("\n排好序的10个整数为:\n");
  for(i=0;i<10;i++) printf(“%3d”,a[i]);
 }
正确答案
正确答案:第一空:int a[],int n   第二空:j<n-i  第三空:a[j]=a[j+1]  第四空: &a[i]   第五空:a,10
四、编写程序(30分)
1.编写一个函数isprime(n),判断n是否是素数,如果是素数,则返回1,否则返回0;再编写一个主函数,输入一个整数,调用isprime()函数,判断此整数是否为素数,并输出结果。请编程实现。
正确答案
正确答案:略
2.编写程序,由键盘输入一个字符串(长度不超过20)存到数组中,将该字符串的有效字符按反序存放(要求:转换时不能使用辅助数组),并输出结果。
正确答案
正确答案:略
3.从文本文件infile.txt中读入一个字符串,然后将其中的小写字母全部转换成大写字母,再输出到outfile.txt文件中。
正确答案
正确答案:略