湖南工程学院C语言程序考试复习题有答案教学提纲.docx
《湖南工程学院C语言程序考试复习题有答案教学提纲.docx》由会员分享,可在线阅读,更多相关《湖南工程学院C语言程序考试复习题有答案教学提纲.docx(19页珍藏版)》请在冰豆网上搜索。
![湖南工程学院C语言程序考试复习题有答案教学提纲.docx](https://file1.bdocx.com/fileroot1/2022-12/9/77a7bc65-1818-4647-9a64-6ade478a8c19/77a7bc65-1818-4647-9a64-6ade478a8c191.gif)
湖南工程学院C语言程序考试复习题有答案教学提纲
2010湖南工程学院年C语言程序考试题
一、单选题
1.C程序的基本构成单位是(C)
A)文件B)命令C)函数D)语句
2.在C语言中,'a'是(B)
A)字符串常量B)字符常量C)变量D)函数
3.在C语言中,“a=b=c=5”属于哪种表达式?
(B)
A)关系B)赋值C)逻辑D)非法
4.设a、b为整型,则表达式(a=2,b=5,b++,a+b)的值是(D)
A)2B)6C)7D)8
5.若有以下变量定义:
intb=2;
floata=5;
则表达式“a/b”之值为(A)
A)2.5B)2C)3D)5/2
6.若j=3,则表达式(++j)+(j++)的值为(C)
A)6B)7C)8D)10
7.以下只能输入单个字符的函数是(C)
A)printf()B)puts()C)getchar()D)putchar()
8.若a的原值为4,则表达式“a*=a-=3”运算后,a的值是(D)
A)13B)4C)3D)1
9.若a=5、b=3、c=1,则表达式“a>b>c”的值为(A)
A)0B)1C)3D)5
10.若有代数式:
以下错误的C语言表达式是(C)
A)a/b/c*e*3B)3*a*e/b/cC)3*a*e/b*cD)a*e/c/b*3
11.下列能输出字符数组str中字符串的语句是(B)
A)printf("%c",str[0]);B)printf("%s",str);
C)printf("%s",str[]);D)putchar(str);
12.若p=&x,则下列关系表达式之值为1的是(B)
A)p==xB)*p==xC)&p==xD)*x==p
13.C语言中最基本的数据类型包括(B)
A)整型、实型、逻辑型B)整型、实型、字符型
C)整型、逻辑型、字符型D)整型、实型、字符串型
14.C语言中,要求运算对象必须是整型数据的运算符是(A)
A)%B)/C)\D)&&
15.表示数学关系“x≥y≥z”的C语言表达式是(C)
A)x>=y>=zB)x>=y||y>=zC)x>=y&&y>=zD)x≥y≥z
16.以下说法中正确的是(C)
A)C程序总是从文件中第一个函数开始执行
B)C程序中,只有main()函数才可以调用其他函数
C)C程序总是从main()函数开始执行
D)C程序中的main()函数必须放在程序的开头
17.若有定义:
inta=7;
floatx=2.5,y=4.7;
则表达式x+a%3*(int)(x+y)%2/4的值为(A)
A)2.5B)2.75C)3.5D)0
18.设变量a是整型,f是实型,i是双精度型,则表达式10+'a'+i*f值的数据类型为(C)
A)intB)floatC)doubleD)不确定
19.有输入语句:
scanf("%d,%d",&a,&b);
为使变量a、b分别为5和3,从键盘输入数据的正确形式为(B)
A)53<回车>B)5,3<回车>C)a=5b=3<回车>D)a=5,b=3<回车>
20.定义如下变量和数组:
intj;
intx[3][3]={1,2,3,4,5,6,7,8,9};
则下面语句的输出结果是(C)
for(j=2;j>=0;j--)
printf("%2d",x[j][2-j]);
A)159B)147C)753D)369
21.执行下面程序后,a的值是(B)
#include
#defineSQR(x)x*x
voidmain()
{inta=10,k=2,m=1;
a=SQR(k+m);
printf("%d\n",a);
}
A)10B)5C)2D)1
22.以下叙述不正确的是(C)
A)在函数内部定义的变量是局部变量
B)函数中的形式参数是局部变量
C)全局变量的作用范围仅限于其所在的整个文件
D)局部变量的作用范围仅限于本函数
23.设a=3,b=4,c=2,d=1,则表达式“a>b?
a:
c>d?
c:
d”的值为(C)
A)4B)3C)2D)1
24.有以下程序段:
x=-1;
do
x=x*x;
while(!
x);
执行时,循环体执行的次数为(B)
A)0B)1C)2D)不确定
25.以下不正确的if语句形式是(C)
A)if(x>y&&x!
=y);
B)if(x==y)x+=y;
C)if(x!
=y)scanf("%d",&x)
elsescanf("%d",&y);
D)if(x26.以下程序的输出结果是(C)
#include
voidmain()
{intx=2,y=-1,z=2;
if(xif(y<0)z=0;
elsez+=1;
printf("%d\n",z);}
A)0B)1C)2D)3
27.以下能正确计算1×2×3×…×10的程序段是(A)
A)i=1,s=1;B)s=1;i=1;
dowhile(i<=10)
{s=s*i;i++;}s=s*(++i);
while(i<11);
C)for(i=1,s=0;i<=10;i++)D)for(i=1,s=1;;i++)
s=s*i;s=s*i;
28.若j为整型变量,则以下循环执行次数是(C)
for(j=0;j==0;)
printf("%d",j--);
A)无限次B)0次C)1次D)2次
29.若有说明:
inta[10];则对a数组元素的正确引用是(C)
A)a[3.5]B)a(8)C)a[6-5]D)a[10]
30.C语言规定,变量做实参时,它和对应形参之间的数据传递方式是(B)
A)地址传递B)单向值传递C)双向值传递D)由用户指定传递方式
31.C中,一个float类型的数据在内存中占(C)个字节。
A)1B)2C)4D)8
32.设有程序段:
intk=5;
while(k<=0)
k--;
则下列描述中正确的是(C)
A)while循环执行5次B)循环是无限循环
C)循环语句一次也不执行D)循环体语句执行一次
33.下面程序段的运行结果是(B)
charc[5]={'a','b','\0','c','\0'};
printf("%s",c);
A)'a''b'B)abC)AbcD)"abc"
34.以下不正确的字符串赋值语句是(C)
A)char*s;s="abcde";B)chars[]="abcde";
C)chars[10];s="abcde";D)char*s="abcde";
35.设p1、p2是指向int型一维数组的指针变量,k为int型变量,以下错误的语句是(B)
A)k=*p1+*p2;B)p2=k;C)p1=p2;D)k=p2-p1;
36.下面程序的输出结果是(A)
#include
voidmain()
{chars[]="ABCD";
char*p;
for(p=s;p
printf("%s\n",p);
}
A)ABCDB)AC)DD)ABCD
BCDBCABC
CDCBAB
DDAA
37.以下关于C函数的定义和调用描述正确的是(B)
A)函数的定义可以嵌套,但函数的调用不可嵌套
B)函数的调用可以嵌套,但函数的定义不可嵌套
C)函数的定义和调用均可以嵌套
D)函数的定义和调用均不可嵌套
38.以下关于变量的作用域说法正确的是(D)
A)在不同函数中不能使用相同名字变量
B)在函数外部定义的变量只在本函数范围内有效
C)在函数内的复合语句定义的变量在本函数内有效
D)形式参数是局部变量
39.以下关于变量的作用域叙述不正确的是(C)
A)在函数内部定义的变量是局部变量
B)函数中的形式参数是局部变量
C)全局变量的作用范围仅限于其所在的文件
D)局部变量的作用范围仅限于本函数
40.以下关于C函数参数说法不正确的是(B)
A)实参可以是常量、变量和表达式
B)形参可以是常量、变量和表达式
C)实参可以为任意数据类型
D)形参应与对应的实参类型一致
41.以下关于C函数返回值的叙述正确的是(D)
A)被调函数中只有使用return语句才能返回主调函数
B)使用一个return语句可以返回多个函数值
C)函数返回值类型取决于return语句中的表达式类型
D)函数返回值类型取决于定义该函数时所指定的类型
42.在C中,“a>b>c”属于哪种表达式?
(A)
A)关系B)赋值C)逻辑D)非法
43.以下不合法的C表达式是(C)
A)10||8B)12==9+1C)++5D)x!
=y
44.给定以下程序段:
intn=10;
while(n>6)
{n--;
printf("%3d",n);
}
以上程序段输出结果是(D)
A)1098B)987C)10987D)9876
45.若i,j已定义为int型,则以下程序段中内循环总的执行次数是(C)
for(i=5;i>0;i--)
for(j=1;j<6;j++)
{……}
A)30B)24C)25D)20
46.若已定义:
float*p,m=3.14159;则使p指向m正确的赋值语句是(B)
A)p=m;B)p=&m;C)*p=m;D)*p=&m;
47.若已定义:
chars[10];则下面表达式中不能表示s[1]地址的是(A)
A)s++B)s+1C)&s[0]+1D)&s[1]
二、填空题
1.函数是C程序的基本构成单位,C程序总是从main函数____开始执行的。
2.赋值表达式x*=y+5的另一种书写形式为x=x*(y+5)
3.已知a=10,b=20,c=3,则表达式a>b||c的值为1
4.整数m既能被3整除又能被4整除的逻辑表达式为(m%3==0)&&(m%4==0)
5.若有定义:
doublea[10][5];则数组a中行下标最大值为9,列下标最大值为4。
6.若有定义:
inta[]={1,4,6,5,8,9};则*(a+5)的值为9
7.设有如下定义inta[5][6],*p;取数组元素a[4][2]的地址放到p中的语句为p=&a[4][2];
8.未加特别说明(说明为静态的)的全局变量是外部的,能被其它文件中的函数使用,而在引用它的文件中,需要用关键字extern说明。
9.已知a=10,b=20,则表达式!
a>b的值为0
10.写出011.若有定义:
inta[10],*p=a;则元素a[5]的值用p表示的形式是*(p+5)
12.若有定义:
int*p[4];则标识符p表示数组长度为4的一维指针数组
13.凡是函数中未指定存储类型的局部变量,其默认的存储类型为auto
三、程序填空
1.下面程序的功能是:
从键盘输入一个字符,若是大写字母,则转换为小写字母并输出,若为小写字母则直接输出,请在_____处填上合适内容,使程序完整。
#include
voidmain()
{charch;
ch=getchar();
if(ch>='A'&&ch<='Z')
ch+=32;
printf("%c",ch);
}
2.下面程序的功能是:
求1~100间的偶数和,请在_____处填上合适内容,使程序完整。
#include
voidmain()
{intnum,sum=0;
for(num=2;num<=100;num=num+2)
sum=sum+num;
printf("1-100间的偶数和是:
%d\n",sum);
}
3.下面程序段是求n!
的递归函数,请将函数补充完整。
doublefac(intn)
{doubleresult;
if(n==1)
result=1;
else
result=n*fac(n-1);
return(result);
}
4.以下程序的功能是:
输入一整数n,判断是否为素数。
#include
#include
voidmain()
{inti,n;
scanf("%d",&n);
for(i=2;i<=sqrt(n);i++)
if(n%i==0)
break;
if(i>sqrt(n))
printf("%disaprimenumber.\n",n);
else
printf("%disnotaprimenumber.\n",n);
}
四、阅读程序
1.#include
voidmain()
{charch;
intcnt1=0,cnt2=0;
while((ch=getchar())!
='\n')
if(ch>='a'&&ch<='z')cnt1++;
elsecnt2++;
printf("COUNT=%d\n",cnt1);
}
若输入“ThisisaCprogram.”,运行结果:
COUNT=13
2.#include
voidmain()
{inti,j,temp;
inta[]={0,1,2,3,4,5,6,7,8,9};
for(i=0,j=9;i{temp=a[i];a[i]=a[j];a[j]=temp;}
for(j=0;j<10;j++)
printf("%2d",a[j]);
}
运行结果:
9876543210
3.#include
#include
voidmain()
{charstr1[20]="good",str2[]="morning";
inti,j;
for(i=strlen(str1),j=0;str2[j]!
='\0';i++,j++)
str1[i]=str2[j];
str1[i]='\0';
printf("string1=%s",str1);
}
运行结果:
string1=goodmorning
4.#include
voidmain()
{inti,j,pos;
floatval,a[10];
for(i=0;i<10;i++)
scanf("%f",&a[i]);
val=a[0];
for(j=0;j<10;j++)
if(a[j]>val)
{val=a[j];pos=j;}
printf("Max=%f,position:
%d",val,pos);
}
本程序的功能是:
从键盘输入10个数存到数组a中,求10个数的最大值及其位置
当程序运行时,从键盘输入“1029384756”,运行结果:
Max=9.000000,position:
3
5.#include
floataverage(intx[],intn)
{inti;
floatsum=0;
for(i=0;isum+=x[i];
return(sum/n);
}
voidmain()
{inta[5]={2,4,6,8,10};
floatrst;
rst=average(a,5);
printf("result=%f\n",rst);
}
运行结果:
result=6.000000
6.给定如下程序:
#include
voidmain()
{chargrade;
scanf("%c",&grade);
switch(grade)
{case'A':
printf("85—100\n");break;
case'B':
printf("70—84\n");break;
case'C':
printf("60—69\n");break;
case'D':
printf("<60\n");break;
default:
printf("error\n");
}
}
当程序运行时,从键盘输入“D”,输出的结果是:
<60
7.给定如下程序:
#include
voidmain()
{inta[5]={2,5,3,7,6},i,j,t;
for(i=0;i<4;i++)
for(j=0;j<4-i;j++)
if(a[j]>a[j+1])
{t=a[j];a[j]=a[j+1];a[j+1]=t;}
for(i=0;i<5;i++)
printf("%3d",a[i]);
}
该程序的功能是:
用“起泡法”对数组a中的5个整数按由小到大排序并输出
输出的结果为:
23567
8.给定如下程序:
#include
voidfun()
{autointb=0;
staticintc=4;
b++;
c++;
printf("b=%dc=%d\n",b,c);
}
voidmain()
{inti;
for(i=0;i<3;i++)
fun();
}
运行结果是:
b=1c=5
b=1c=6
b=1c=7
9.给定如下程序:
#include
#include
voidmain()
{char*p1,*p2,c,s[50];
gets(s);
p1=s;p2=s+strlen(s)-1;
for(;p1{c=*p1;*p1=*p2;*p2=c;
}
printf("Thenewstringis%s\n",s);
}
此程序的功能是:
从键盘输入一字符串存放到数组s中,将此字符串逆序输出
当程序运行时,从键盘输入“abcwe#y”,输出的结果是:
Thenewstringisy#ewcba
五、按要求编程
1.编写0~100之间偶数之和的程序。
#include
voidmain()
{intnum,sum=0;
for(num=2;num<=100;num=num+2)
sum=sum+num;
printf("sum=%d\n",sum);
}
2.编程计算1!
+2!
+3!
+…+20!
。
#include
voidmain()
{
floats=0,t=1;
intn;
for(n=1;n<=20;n++)
{
t=t*n;
s=s+t;
}
printf("1!
+2!
+....+20!
=%e\n",s);
}
3.统计由键盘输入的任意一串字符中空格的个数。
#include
voidmain()
{
charch;
intspace=0;
while((ch=getchar())!
='\n')
if(ch=='')space++;
printf("konggeshu=%d\n",space);
}
4.编写程序找出1—100之间的素数,并统计素数的个数。
#include
#include
voidmain()
{
intm,k,i,n=0;
for(m=1;m<=100;m=m+2)
{
k=sqrt(m);
for(i=2;i<=k;i++)
if(m%i==0)
break;
if(i>=k+1)
{
printf("%3d",m);
n=n+1;
}
if(n%10==0)printf("\n");
}
printf("\ntotalnumberis=%d",n);
}
5.打印杨辉三角形(10行)。
要求:
使用二维数组和循环语句实现。
1
11
121
1331
……
#include
#defineN11
voidmain()
{
inti,j,a[N][N];
for(i=1;i{
a[i][i]=1;
a[i][1]=1;
}
for(i=3;ifor(j=2;j<=i-1;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=1;i{
for(j=1;j<=i;j++)
printf("%6d",a[i][j]);
printf("\n");
}
}
6.从键盘输入10个数,找出最大值与最小值,并计算它们的平均值。
#include
voidmain()
{
floata[10],aver,sum,max,min;
inti;
for(i=0;i<10;i++)
scanf("%f",&a[i]);
max=min=a[0];
sum=a[0];
for(i=1;i<10;i++)
{
if(a[i]>max)max=a[i];
e