资源描述
《C语言程序设计》模拟试卷一
一、 单项选择题(每题2分,共30分)
1、下列有关C语言的叙述中错误的是()。
A) C语句必须以分号结束
B) 任何一个C程序中有且只有一个主函数
C) 复合语句在语法上可被看作一条语句
D) C程序中对数据的任何操作都可由运算符实现
2、以下不能定义为用户标识符的是()。
A) MAIN B) _HJ C) 2ong D) LINE1
3、下列符号中用来表示C语言中的回车换行的是()。
A) \r B) \n C) \b D) \t
4、如有如下定义:int a=1,则语句printf(“%d,%d”, a, ++a);的运行结果为()。
A) 1, 1 B) 1, 2 C) 2, 2 D) 2, 1
5、已知ch为字符型变量,下面表达式中正确的是()。
A) ch=’\xff ’ B) ch=’\ff ’ C) ch=’ ff ’ D) ch=” ff ”
6、以下能正确定义一维数组的是()。
A) int a[5]={0,1,2,3,4,5}; B) int a[5]=”012345”;
C) char a[ ]=”012345”; D) char a[5]={0,1,2,3,4,5};
7、以下语句中能正确定义变量并赋初值的是()。
A) char c=65; B) float f=f+1.1;
C) double x=12.3e3.6; D) int m=n=2.0;
8、在执行下列程序时输入:1357924,则程序的运行结果为()。
main( )
{ int x, y;
scanf(“%2d%2d”,&x,&y);
printf(“%2d”,x*y); }
A) 13 B) 1357 C) 74 D) 741
9、执行下列程序段后输出的结果是()。
x = 9;
while (x > 7)
{ printf(“*”); x- -; }
A) **** B) *** C) ** D) *
10、设char str1[10] = “ABCDE”, str2[10] = “xyz”;
则执行语句 printf(“%d”, strlen(strcpy(str1, str2))); 后的输出结果是()
A) 9 B) 8 C) 5 D) 3
11、若用数组名作为函数调用的实参,则传递给形参的是()
A) 数组的首地址 B) 数组第一个元素的值
C) 数组中全部元素的值 D) 数组元素的个数
12、在C程序中,若未在函数定义时说明函数类型,则函数默认的类型为( )
A)void B)double C)int D)char
13、下面不能正确进行字符串赋值操作的语句是( )
A) char s[5]={"ABCD"}; B) char s[5]; s="ABCD";
C) char *s;s="ABCDEF"; D) char *s="ABCD";
14、设有说明int s[5]={1,3,5,7,9}; int *p=s; 则下列表达式中值为3的是 ( )
A)++p B)++(*p) C) *(++p) D) *(p+=2)
15、下面程序的输出结果是()
int m=13;
int fun( int x, int y)
{ int m=3;
return( x*y-m); }
main( )
{ int a=7,b=5;
printf(“%d\n”, fun(a,b)/m); }
A) 1 B) 2 C) 3 D) 10
二、 判断(每空1分,共10分)
1、C语言有三种结构化程序设计方法,分别为顺序结构、选择结构和循环结构。 ( )
2、C语言规定:标识符应由字母、下划线和数字组成,且可以是上述字符的任意组合,其长度也是任意的。( )
3、数组在定义时没有必要指定数组的长度,其长度可以在程序中根据元素个数再决定。( )
4、if语句有多种使用方法,其中if子句和else 子句也都可以单独使用。 ( )
5、for语句作为循环控制语句时,从语法上将其括号内各个表达式都可缺省,但表达式内的分号却不可以却省。( )
6、字符串是C语言中一种基本数据类型,字符串总是以‘\n’作为结束标志。( )
7、在C语言中,程序的最小编译单位是源文件,最小功能单位是函数。( )
8、在定义指针型变量时指定的基类型为该指针变量所能指向的变量类型。( )
9、结构体与数组一样,属于构造类型数据,且在结构体中的各个成员的类型也可不同。( )
10、在发生函数调用时,主~被调函数中的参数可以是简单变量,也可以是数组名,当采用数组名作为参数时其数据传递方式为单向值传递。( )
三、 程序填空(每小题2分,共12分)
1、以下程序可求出所有水仙花数(指3位正整数中各位数字立方和等于该数本身,如153=13+53+33),请填空。
main( )
{ int x, y ,z, m;
printf(“shui xian huan shu :\n”);
for(m=100;m<1000;m++)
{ x=m/100;
y= (1) ;
z=m%10;
if( (2) )
printf(“%6d”,m ) ; } }
2、输入一个字符,如果是大写字母,则把其变成小写字母;如果是小写字母,则变成大写字母;其它字符不变。请补充()内缺省的内容。
#include <stdio.h>
main( )
{ char ch;
ch=getchar( );
if (___(3)____) { ch=ch+32; putchar(ch); }
else if(__(4)___) { ch=ch-32; putchar(ch);}
else putchar(ch);
}
3、以下程序使用递归法求n!, 请填空。
main( )
{ int n, y;
printf(“input a integer number”);
scanf(“%d”,&n);
y=(5);
printf(“%d! = %6d”, n, y );
}
int fac(int n)
{ int f;
if(n<0) {printf(“n<0” data error); f=-1;}
else if(n==0||n==1) f=1;
else f=(6) ;
return( f ); }
四、 读程序写出结果(本大题共5道小题,每小题4分,共20分)
1、写出下面程序的执行结果
#include <stdio.h>
main( )
{ int a,b,x;
x=(a=3,b=a--);
printf(“x=%d,a=%d,b=%d”,x,a,b); }
2、以下程序的运行结果是
#include <stdio.h>
main( )
{ int a = 2, b = 3, c ;
c = a ;
if ( a>b ) c = 1 ;
else if ( a == b ) c = 0 ;
else c = -1 ;
printf ( “%d\n”, c ) ; }
3、以下程序的运行结果是
#include <stdio.h>
main()
{ int i,j,k;
for(i=1;i<4;i++)
{ for(j=1;j<4-i;j++)
printf(" ");
for(k=1;k<=2*i-1;k++)
printf("%c",'A'+i-1);
printf("\n");} }
4、以下程序的运行结果是
main( )
{ int a[5][5],i, j ;
for( i=0;i<5;i++)
{ a[i][0] =1; a[i][i] =1; }
for( i=2; i<5; i++ )
for(j=1; j<i ; j++ )
a[i][j] =a[i-1][j-1] + a[i-1][j];
for(i=0; i<5; i++)
{ for( j=1; j<=i; j++)
printf(“%5d”,a[i][j]);
printf(“\n”);} }
5、以下程序运行后,如果从键盘上输入ABCDE<回车>,则输出结果为
#include<stdio.h>
#include<string.h>
int func(char str[])
{ int num =0;
while(*(str+num)!='\0') num++;
return(num);
}
main( )
{ char str[10],*p=str;
gets(p);
printf("%d\n",func(p)); }
五、 编程题(本大题28分,第一题8分,第二题9分,第三题11分)
1、请编程实现下列分段函数的值:
(1-x) 1/ 2 (x≤0)
y= 1-x (x≤1)
(1-x)2 (x>1)
2、百钱百鸡问题:用100元钱买100只鸡,公鸡每只5元,母鸡每只3元,小鸡每3只1元,要求每种鸡至少买1只,试编程求各种鸡各买多少只。
3、输入20位学生的成绩,分别用函数实现:
(1)将20位学生的成绩按从高到低进行排名。
(2)求所有成绩的平均分,并输出所有成绩中比平均分低的分数。
参考答案:
一、 单项选择题
1、D 2、C 3、B 4、B 5、A 6、C 7、A 8、D 9、C 10、D
11、A 12、A 13、A 14、B 15、B
二、判断题
1、T 2、F 3、F 4、F 5、T 6、F 7、T 8、T 9、T 10、F
三、程序填空题
1、(1) m/10%10 (2) m==x*x*x+y*y*y+z*z*z
2、(3) ch>’A’&&ch<’Z’ (4)ch>’a’&&ch<’z’
3、(5) fac(n) (6)n*fac(n-1)
四、读程序写结果
1、 x=3,a=2,b=3
2、 -1
3、 A
BBB
CCCCC
4、 1
2 1
3 3 1
4 6 4 1
5、 5
五、编程题
1、
#include<stdio.h>
#include<math.h>
void main()
{
int x;
double y;
printf("Please input x value:");
scanf("%d",&x);
if(x<=0)
y=sqrt(1-x);
else if(x<=1)
y=1-x;
else
y=(1-x)*(1-x);
printf("y=%f\n",y);
}
2、
#include<stdio.h>
void main()
{
int x,y,z;/*分别代表所买的公鸡数,母鸡数,小鸡数*/
for(x=1;x<99;x++)
for(y=1;y<99;y++)
for(z=1;z<99;z++)
if((x*5+y*3+z/3==100)&&(z%3==0)&&(x+y+z==100))
printf("公鸡数为%d只,母鸡数为%d只,小鸡数为%d只\n",x,y,z);
}
3、
#include<stdio.h>
void sort(int b[20])
{
int i,j;
int temp;
for(i=0;i<20;i++)
for(j=0;j<20;j++)
{
if(b[i]<b[j])
{temp=b[i];b[i]=b[j];b[j]=temp;}
}
for(i=0;i<20;i++)
printf("%d ",b[i]);
printf("\n");
}
double ave(int c[20])
{
double sum=0.0;
int i;
for(i=0;i<20;i++)
sum=sum+c[i];
sum=sum/20;
return sum;
}
void main()
{
int i;
int a[20];
double pingjun;
printf("Please input 20 students score!\n");
for(i=0;i<20;i++)
{
printf("Please input %d student score:",i+1);
scanf("%d",&a[i]);
}
for(i=0;i<20;i++)
printf("%d ",a[i]);
printf("\n");
sort(a);
pingjun=ave(a);
printf("平均分为:%f\n",pingjun);
printf("比平均分低的有:\n");
for(i=0;i<20;i++)
if(a[i]<pingjun)
printf("%d ",a[i]);
printf("\n");
}
《C语言程序设计》模拟试卷二
一、填空题。(每空2分,共30分)
1.设有变量说明语句
int x=1,y=2;
则执行下述printf语句的输出结果是______ _____。
printf("%f\n",1.0+x/y);
2.执行下述程序
#include <stdio.h>
main()
{
int x,y;
scanf("%2d%*2s%1d",&x,&y);
printf("%d\n",x+y);
}
若从键盘输入
12345671
则程序的输出结果是________。
3.以下程序的功能是:从键盘上输入若干名学生的成绩(百分制,可带小数,以输入负数或0为结束标志),统计并输出最高成绩和最低成绩。请填空。
#include <stdio.h>
main()
{
float x,amax,amin;
scanf("%f",&x);
amax=x;
amin=x;
while ( )
{
if (x>amax)
amax=x;
else if (x<amin)
amin=x;
scanf("%f',&x);
}
printf("\namax=%f\namin=%f\n",amax,amin);
}
4.设n是整型变量,且已具有某正整数值。根据下述数学式
求s的值并输出。
可编写如下之程序段实现之。请填空。
int k;
double s,d;
s=0.0;
d=1.0;
K=0;
do
{
s=s+d;
___ _________;
d=1.0/(k*(k+1));
} while (k<=n);
printf("%f\n",s);
5.执行下述程序的输出结果是____ ____。
#inclued <stdio.h>
main()
{
int a[6],i;
for (i=0;i<6;i++)
{
a[i]=9*(i-2+4*(i>3))%5;
printf("%3d",a[i]);
}
printf("\n");
}
6.执行下述程序时的输出结果是_________ ________。
#include <stdio.h>
main()
{
int a[]={2,4,6,},*ptr=&a[0],x=8,y,z;
for (y=0;y<3;y++)
z=(*(ptr+y)<x)?*(ptr+y):x;
printf("%d\n",z);
}
7.执行下述程序的输出结果是_____ _______。
#include <stdio.h>
main()
{
int a[][2]={10,20,30,40,50,60},(*p)[2];
p=a;
printf("%d\n",*(*(p+2)+1));
}
8.执行以下程序的输出结果是___ ______。
#include <stdio.h>
main()
{
int s,i,sum();
for (i=1;i<=10;i++)
s=sum(i);
printf("s=%d\n",s);
}
sum(int k)
{
int x=0;
return (x+=k);
}
9.下述函数定义用来求出两个整数之和,并通过函数的模拟传地址调用,传回两整数相加之和值,请填空。
void add(int x,int y,____ ___)
{
*z=x+y;
}
10.函数func的功能是将整型变量x的值转换成二进制数,并将该二进制数的每一位存入由整型指针b所指向的一维数组a,最低位存放于a[0]中,次低位存放于a[1]中,依此类推。请填空。
void func(int x,int *b)
{
int r;
do
{
r=x%2;
_____________=r;
x/=2;
} while (x);
}
11.以下程序中函数invert实现将数组内所有数组元素的值逆置。比如,执行本程序将输出
10 9 8 7 6 5 4 3 2 1
请填空。
#include <stdio.h>
main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10},i,n=10;
invert(a,n-1);
for (i=0;i<10;i++)
printf("%3d”,a[i]);
printf("\n");
}
invert(int *s,int num)
{
int *t,k;
t=s+num;
while (____ ________)
{
k=*s;
*s=*t;
*t=k;
s++;
t--;
}
}
12.若有以下定义和说明,则结构体变量w在内存中所占的字节数是_____
union aa
{
float x;
float y;
char c[6];
};
struct st
{
union aa v;
float w[5];
double ave;
} w;
13.执行下述程序的输出结果是______ _______。
#include <stdio.h>
struct str
{
float x;
char *y;
} *m;
struct str group[3]={
95.0,"Li",
82.5,"Wang",
73.5,"Sun"
};
main()
{
m=group;
printf("%.lf,%s\n",m->x,m->y);
}
14.下面的程序用来统计某文件文件中字符的个数。请填空。
#include <stdio.h>
#include <stdlib.h>
main()
{
FILE *fp;
long num=0;
if ((fp=fopen("fnam.dat","r"))==NULL)
{
printf("Can't open this file!\n");
exit(0);
}
while (____ _____)
{
fgetc(fp);
num++;
}
printf("num=%d\n",num);
fclose(fp);
}
15.执行下述程序后,输出结果为_____ _______。
#include <stdio.h>
#define FUN1(a,b) a+b
#define FUN2(a,b) a-b
#define CAL(a,b) a*b+a+3
main()
{
printf("%d\n",CAL(FUN1(3,5),FUN2(4,5)));
}
二、单项选择题。(每题1分,共20分)
1.以下不是c语言规定保留字的是( )。
(A)float (B)integer (C)signed (D) unsigned
2.设int型变量x有初始值3,则表达式x++*5/10的值是( )
(A)0 (B)1 (C)2 (D)3
3.下述程序执行后的输出结果是( )
#include <stdio.h>
main()
{
int x='f';
printf("%c\n",'a'+(x-'a'+1));
}
(A)g (B)h (C)i (D)j
4.设有程序
#include <stdio.h>
main()
{
int i,j;
for (i=0,j=1;i<=j+1;i+=2,j--)
printf("%d\n",i);
}
在运行上述程序时,for语句中循环体的执行次数是( )
(A)3 (B)2 (C)1 (D)0
5.在下述选项时,没有构成死循环的程序是( )
(A)int i=100
while (1)
{
i=i%100+1;
if (i>100)
break;
}
(B)for (;;);
(C)int k=1000;
do
{
++k;
}while (k>=10000);
(D) int s=36;
while (s);--s;
6.假定a和b为int型变量,则执行下述语句组后,b的值为( )。
a=1;
b=10;
do
{
b-=a;
a++;
} while (b--<0);
(A)9 (B)-2 (C)-1 (D)8
7.设有变量说明语句
int a=1,b=0;
则执行以下程序段的输出结果为( )。
switch (a)
{
case 1:
switch (b)
{
case 0:printf("**0**");break;
case 1:printf("**1**");break;
}
case 2:printf("**2**");break;
}
printf("\n");
(A)**0** (B)**0****2** (C)**0****1****2** (D)有语法错误
8.以下合法的数组说明是( )。
(A)char a[7]="string"; (B)int a[5]={0,1,2,3,4,5};
(C)char a="string"; (D)INT a[]={0,12,3,4,5};
9.下述程序代码中有语法错误的行是( )。
int i,ia[10],ib[10]; /*第1行*/
for (i=0;i<=9;i++) /*第2行*/
ia[i]=0; /*第3行*/
ib=ia; /第4行*/
(A)第1行 (B)第2行 (C)第3行 (D)第4行
10.若已定义
int a[9],*p=a;
并在以后的语句中未改变p的值,则不能表示a[1]地址的表达式是( )。
(A)p+1 (B)a+1 (C)a++ (D)++p
11.若有下述说明和语句
int **pp,*p,a=10,b=20;
pp=&p;
p=&a;
p=&b;
printf("%d,%d\n",*p,**pp);
则输出结果是( )。
(A)10,10 (B)10,20 (C)20,10 (D)20,20
12.执行下述程序后的输出结果是( )。
#include <stdio.h>
func(int a)
{
int b=0;
static int c=3;
a=c++,b++;
return (a);
}
main()
{
int a=2,i,k;
for (i=0;i<2;i++)
k=func(a++);
printf("%d\n",k);
}
(A)3 (B)0 (C)5 (D)4
13.执行下述程序的输出结果是( )。
#include <stdio.h>
main()
{
int aa[3][3]={{2},{4},{6}};
int i,*p=&aa[0][0];
for (i=0;i<2;i++)
{
if (i==0)
aa[i][i+1]=*p+1;
else
++p;
printf("%d",*p);
}
printf("\n");
}
(A)23 (B)26 (C)33 (D)36
14.读下面的程序,正确的输出结果是( )。
#include <stdio.h>
static int a=50;
void f1(int a)
{
printf("%d,",a+=10);
}
void f2(void)
{
printf("%d,",a+=3);
}
void main()
{
int a=10;
f1(a);
f2();
printf("%d\n",a);
}
(A)60,63,60 (B)20,23,23 (C)20,13,10 (D)20,53,10
15.执行下述程序的输出结果是( )。
#include <stdio.h>
int power(int x,int y);
main()
{
float a=2.6,b=3.4;
int p;
p=power((int)a,(int)b);
printf("%d\n",p);
}
int power(int x,int y)
{
int i,p=1;
for (i=y;i>0;i--)
p=p*x;
return (p);
}
(A)8 (B)9 (C)27 (D)81
16.已知函数scopy的定义如下
void scopy(char *s,char *t)
{
while (*s++=*t++);
}
则该函数的功能是( )。
(A)串复制 (B)求串长度 (C)串比较 (D)串反向
17.执行下述程序的输出是( )。
#include <stdio.h>
void main()
{
struct complex
{
int re;
int im;
};
struct complex cp[3]={2,5,4,7};
cp[2].re=cp[0].re+cp[1].re;
cp[2].im=cp[0].im+cp[1].im;
printf("%d %d\n",cp[2].re,cp[2].im);
}
(A)7 11 (B)6 12 (C)9 9 (D)12 6
18.执行下述程序的输出结果是( )。
#include <stdio.h>
main()
{
union
{
int k;
char i[2];
} *s,a;
s=&a;
s->i[0]=0x39;
s->i[1]=0x38;
printf("%x\n",s->k);
}
(A)cccc3839 (B)3938 (C)380039 (D)390038
19.有以下程序,则结果为 。
struct abc
{ int a, b, c; };
main()
{ struct abc s[2]={{1,2,3},{4,5,6}};
int t;
t=s[0].a+s[1].b;
printf(“%d \n”,t);
}
A) 5 B) 6 C) 7 D) 8
20.以下程序for语句循环体中printf语句执行次数是( )。
#include <stdio.h>
#define N 2
#define M N+1
#define NUM (M+1)*M/2
main()
{
int i;
for (i=1;i<=NUM;i++)
printf("%d\n",i);
}
(A)5 (B)6 (C)8 (D)9
三、程序分析题(每题5分,共30分)
1.阅读程序,写出执行该程序的输出结果。
#include <stdio.h>
main()
{
展开阅读全文