河南中医药大学C语言程序设计练习

本试卷为河南中医药大学C语言程序设计练习,题目包括:单项选择题,判断题,填空题,程序分析题,编程题。

覆盖的内容包括:理论题,基础知识,控制结构,循环结构,指针,数组/指针数组,字符串/字符串指针,函数/函数指针,程序题,结构体,文件。

C语言程序设计练习

一、单项选择题 (共20题,每题2分,共计40分)

(  A  )
1、以下叙述中正确的是________。
A、a是实型变量,C允许进行赋值a=10,但不可以这样说:实型变量中允许存放整型值
B、在赋值表达式中,赋值号左边既可以是变量也可以是任意表达式
C、执行表达式a=b后,在内存中a和b存储单元中的原有值都将被改变,a的值已由原值改变为b的值,b的值由原值变为0
D、已有a=3,b=5,当执行了表达式a=b,b=a之后,使a中的值为5,b中的值为3
(  B  )
2、以下只有在使用时才为该类型变量分配内存的存储类型说明是________。
A、aut0和static
B、auto和register
C、register和static
D、extern和register
(  D  )
3、c语言对嵌套的if语句的规定是:else总是与 配对。
A、与之前最近的if
B、第一个if
C、缩进位置相同的if
D、与之前最近的且尚未配对的if
(  A  )
4、定义如下变量和数组: int i; int x[3][3]={ 1,2,3,4,5,6,7,8,9 } 则下面语句的输出结果是________。 for(i=0;i<3;i++) printf("%d",x[i][2-1]);
A、2 5 8
B、1 4 7
C、3 5 7
D、3 6 9
(  C  )
5、有以下程序
#include<stdio.h>
main() {
int s,t,a=10;
double b=6;
s=sizeof(a);
t=sizeof(b);
printf("%d,%d\n",s,t);
} 在vc6平台上编译运行,程序运行后的输出结果是________。
A、2,4
B、4,4
C、4,8
D、10,6
(  B  )
6、以下程序的输出结果是
main()
{
int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1;
for(i=0;i<3;i++) for(j=i;j<=i;j++) t=t+b[i][b[j][j]];
printf("%d\n",t);
}
A、3
B、4
C、1
D、9
(  D  )
7、下面程序的输出是______。
main ()
{
struct cmplx
{
int x ;
int y ;
}
cnum[2]={1 , 3 , 2 , 7};
printf ( "%d\n" , cnum[0].y/cnum[0].x*cnum[1].x );
}
A、0
B、1
C、3
D、6
(  B  )
8、t为int类型,进入下面的循环之前,t的值为0。while(t=1) {...}则以下叙述中,正确的是________。
A、循环控制表达式的值为0
B、循环控制表达式的值为1
C、循环控制表达式不合法
D、以上说法都不对
(  C  )
9、若有说明语句:int i,x[3][4]; 则不能将x[1][1]的值赋给变量i的语句是______。
A、i=*(*(x+1)+1)
B、i=x[1][1]
C、i=*(*(x+1))
D、i=*(x[1]+1)
(  B  )
10、有下列程序:
main()
{
int i,j;
for(i=1;i<4;i++)
{
for(j=i;j<4;j++) printf("%d*%d=%d",i,j,i*j);
printf("\n");
}
}
程序运行后的输出结果是________。
A、1*1=1 1*2=2 1*3=3 2*1=2 2*2=4 3*1=3
B、1*1=1 1*2=2 1*3=3 2*2=4 2*3=6 3*3=9
C、1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9
D、1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9
(  D  )
11、以下能正确定义数组并正确赋初值的选项是______。
A、int N=5,a[N][N];
B、int b[1][2]={{1},{2}};
C、int c[2][]={{1,2},{3,4}};
D、int d[3][2]={{1,2},{3,4}};
(  A  )
12、若有定义 int a[]={10,20,30 },*p=a; ,当执行p++; 后,下列说法错误的是______。
A、p向高地址移了一个字节
B、p向高地址移了一个存储单元
C、p向高地址移了四个字节
D、p与a+1等价
(  D  )
13、表示关系1<=x<=100的c语言表达式为________。
A、x>=1 & x<=100
B、x>=1 and x<=100
C、1<=x<=100
D、x>=1 && x<=100
(  B  )
14、有以下程序
void f (int b[])
{
int i;
for(i=2;i<6;i++) b[i]* =2;
}
main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10},i;
f(a);
for(i=0;i<10;i++) printf("%d,",a[i]);
}
程序运行后的输出结果是______。
A、1,2,3,4,5,6,7,8,9,10,
B、1,2,6,8,10,12,7,8,9,10,
C、1,2,3,4,10,12,14,16,9,10,
D、1,2,6,8,10,12,14,16,9,10,
(  B  )
15、以下叙述中正确的是________。
A、一条语句只能定义一个数组
B、每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元
C、数组说明符的一对方括号中只能使用整型常量,而不能使用表达式
D、在引用数组元素时,下标表达式可以使用浮点数
(  C  )
16、设 char *s="\ta\017bc";
则指针变量s指向的字符串所占的字节数 是________。
A、9
B、5
C、6
D、7
(  A  )
17、已定义两个字符数组a,b,则以下正确的输入格式 是________。
A、scanf("%s%s", a, b);
B、get(a, b);
C、scanf("%s%s", &a, &b);
D、gets("a"),gets("b");
(  C  )
18、定义结构体的关键字是________。
A、union
B、enum
C、struct
D、typedef
(  D  )
19、以下选项中正确的 c 语言常量是________。
A、2.46E-1.5
B、0382
C、'123'
D、'\0'
(  D  )
20、有输入语句:scanf("a=%d,b=%d,c=%d",&a,&b,&c);
为使变量a的值为1,b为3,c为2,从键盘输入数据的正确形式应当 是________。(注:┗┛表示空格)
A、132<回车>
B、1,3,2<回车>
C、a=1┗┛b=3┗┛c=2<回车>
D、a=1,b=3,c=2<回车>

二、判断题 (共10题,每题2分,共计20分)

(   F  )
1、使用不带参数的for(;;)语句可以正常控制循环。 
(   T  )
2、在c语言中,一行可以书写多个语句 
(   F  )
3、局部变量只有当它所在的函数被调用时才会被使用,当函数调用结束时局部变量还会一直存在。 
(   T  )
4、main函数是c语言的主函数。 
(   F  )
5、在定义数组时,什么时候都不可以将该数组的维数省略。 
(   F  )
6、若有说明语句char *p= "it is mine "则 p 变量中存放的是整个字符串 
(   T  )
7、在c语言中,当一个逻辑表达式的值为"假"时,该表达式的值一定是 0 ( ) 
(   F  )
8、在标准c中, for 语句后的三个表达式可以是任意类型的表达式。 
(   F  )
9、随机操作只适用于二进制文件。 
(   F  )
10、函数的形参可以是常量,变量或表达式 

三、填空题 (共5题,每题4分,共计20分)

1、在循环中,continue语句与break语句的区别是:continue语句是语句的区别是:continue语句是 ________ ,break 是 ________ 。
2、在c语言中,格式输入库函数为________,格式输出库函数为________。
3、以下程序的输出结果是________。
main()
{
int x=5,y=6;
printf("%daa%d",++x,y――);
}
4、定义二维数组int a[3][5];
,那么该数组中的第6个元素的访问形式为 ______。27. 在程序运行过程中,其值能被改变的量称为________。
5、int x=1,y=1,z=1; x+=y+=z; 则表达式x

四、程序分析题 (共4题,每题5分,共计20分)

1、有以下程序,请填空____,程序的执行结果是____
main( )
{
int x=5,y;
y=++x*++x;
printf("y=%d\\n",y);
}
float fun (float)
main
{
nfloat x, y;
int flag;
printf("enter x:");
scanf(" %f ", &x);
flag=fun(x);
if (________) printf("x=%f is out of range.\n", x);
else printf("x=%f,y=%f\n", x, fun(x) );
}
________fun(float x)
{
nfloat s;
if ( abs(x)>1 ) return (2);
else
{
s=sqrt (1-x*x);
________;
}
}
2、以下程序的输出结果是________ 。
main()
{
int a[3][3]=
{{1,2,9},{3,4,8},{5,6,7}},i,s=0;
for(i=0;i<3;i++) s+=a[i][i]+a[i][3-i-1];
printf("%d\n",s);
}
3、下面程序的运行结果是________。
main()
{
int i,f[10];
f[0]=f[1]=1;
for(i=2;i<10;i++)f[i]=f[i-2]+f[i-1];
for(i=0;i<10;i++)
{
if(i%4==0) printf("\n");
printf("%3d",f[i]);
}
}
4、请阅读并分析以下程序,该程序的输出结果是:
#include <stdio.h>
main( )
{
int n[3][3], i, j;
for(i=0;i<3;i++ )
for(j=0;j<3;j++ )n[i][j]=i+j;
for(i=0;i<2;i++ )
for(j=0;j<2;j++ )n[i+1][j+1]+=n[i][j];
printf("%d\n", n[i][j]);
}

五、编程题 (共3题,每题0分,共计50分)

1、若有以下银行卡信息:
struct card{
int id;//银行卡号
int bonus; //金额
};
请编写程序,从键盘输入5条银行卡记录,使用结构体数组存
储这些数据,并按金额升序排序,输出排序后的结果。
【输入形式】5条银行卡记录分行输入,每行数据用空格间隔
【输出形式】分5行输出数据,每行数据均使用空格间隔
【输入样例】
1001 20
1002 80
1003 50
1004 10
1006 40
【输出样例】
1004 10
1001 20
1006 40
1003 50
1002 80
2、打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
3、编程判断输入的字符串是否为“回文”。所谓“回文”是指顺读和倒读都一样,如abcba。