C语言习题1.docx
《C语言习题1.docx》由会员分享,可在线阅读,更多相关《C语言习题1.docx(16页珍藏版)》请在冰豆网上搜索。
C语言习题1
一、选择题
(1)用C语言编写的代码程序()//考点:
程序
A)可立即执行 B)是一个源程序
C)经过编译即可执行 D)经过编译解释才能执行
(2)结构化程序由三种基本结构组成,三种基本结构组成的算法()//考点:
三种结构
A)可以完成任何复杂的任务B)只能完成部分复杂的任务
C)只能完成符合结构化的任务 D)只能完成一些简单的任务
(3)以下定义语句中正确的是()//赋值、指针
A)chara='A'b='B'; B)floata=b=10.0;
C)inta=10,*b=&a; D)float*a,b=&a;
(4)下列选项中,不能用作标识符的是()//标识符
A)_1234_B)_1_2C)int_2_D)2_int_
(5)有以下定义语句doublea,b;intw;longc;若各变量已正确赋值,则下列选项中不正确的表达式是()
A)a=a+b=b++B)w%(int)(a+b)
C)(c+w)%(int)aD)w=a==b;
(6)有以下程序//运算符的优先级、结合性
main()
{intm=3,n=4,x;
x=-m++;
x=x+8/++n;
printf(“%d\n”,x);
}
程序运行后的输出结果是()
A)3B)5C)-1D)-2
(7)有以下程序//++运算
main()
{chara='a',b;
printf(“%c,”,++a);
printf(“%c\n”,b=a++);
}
程序运行后的输出结果是()
A)b,bB)b,cC)a,bD)a,c
(8)有以下程序//各数整数的表示与输出
main()
{intm=0256,n=256;
printf(“%o%o\n”,m,n);
}
程序运行后的输出结果是()
A)02560400B)0256256C)256400D)400400
(9)有以下程序//输出控制符少的情况
main()
{inta=666,b=888;
printf(“%d\n”,a,b);}
程序运行后的输出结果是()
A)错误信息B)666C)888D)666,888
(10)有以下程序//循环、switch
main()
{inti;
for(i=0;i<3;i++)
switch(i)
{
case0:
printf(“%d”,i);
case2:
printf(“%d”,i);
default:
printf(“%d”,i);
}
}
程序运行后的输出结果是()
A)022111B)021021C)000122D)012
(11)若x和y为整型数,以下表达式中不能正确表示数学关系|x-y|<10的是()//表达式
A)abs(x-y)<10 B)x-y>-10&&x-y<10
C)(x-y)<-10||!
(y-x)>10 D)(x-y)*(x-y)<100
(12)有以下程序//if语句的嵌套配对
main()
{inta=3,b=4,c=5,d=2;
if(a>b)
if(b>c)
printf(“%d”,d+++1);
else
printf(“%d”,++d+1);
printf(“%d\n”,d);
}
程序运行后的输出结果是()
A)2B)3C)43D)44
(13)下列条件语句中,功能与其他语句不同的是()//if语句的条件
A)if(a)printf(“%d\n”,x);elseprintf(“%d\n”,y);
B)if(a==0)printf(“%d\n”,y);elseprintf(“%d\n”,x);
C)if(a!
=0)printf(“%d\n”,x);elseprintf(“%d\n”,y);
D)if(a==0)printf(“%d\n”,x);elseprintf(“%d\n”,y);
(14)有以下程序//循环、continue、break
main()
{inti=0,s=0;
for(;;)
{ if(i==3||i==5)continue;
if(i==6)break;
i++;
s+=i;
};
printf(“%d\n”,s);
}
程序运行后的输出结果是()
A)10B)13C)21D)程序进入死循环
(15)若变量已正确定义,要求程序段完成求5!
的计算,不能完成此操作的程序段是()//循环赋初位置问题
A)for(i=1,p=1;i<=5;i++)p*=i;
B)for(i=1;i<=5;i++){p=1;p*=i;}
C)i=1;p=1;while(i<=5){p*=i;i++;}
D)i=1;p=1;do{p*=i;i++;}while(i<=5);
(16)有以下程序//输入与输出
main()
{chara,b,c,d;
scanf(“%c,%c,%d,%d”,&a,&b,&c,&d);
printf(“%c,%c,%c,%c\n”,a,b,c,d);
}
若运行时从键盘上输入:
6,5,65,66<回车>。
则输出结果是()
A)6,5,A,BB)6,5,65,66C)6,5,6,5D)6,5,6,6
(17)以下能正确定义二维数组的是()//二维数组的定义
A)inta[][3]; B)inta[][3]={2*3};
C)inta[][3]={};D)inta[2][3]={{1},{2},{3,4}};
(18)有以下程序//循环的结束条件、函数的调用
intf(inta)
{returna%2;}
main()
{ints[8]={1,3,5,2,4,6},i,d=0;
for(i=0;f(s[i]);i++)d+=s[i];
printf(“%d\n”,d);
}
程序运行后的输出结果是()
A)9B)11C)19D)21
(19)若有以下说明和语句,intc[4][5],(*p)[5];p=c;能正确引用c数组元素的是()//二维数组的指针表示法//指向一维数组的指针
A)p+1 B)*(p+3) C)*(p+1)+3 D)*(p[0]+2)
(20)有以下程序 //指针的赋值操作
main()
{inta=7,b=8,*p,*q,*r;
p=&a;q=&b;
r=p;p=q;q=r;
printf(“%d,%d,%d,%d\n”,*p,*q,a,b);
}
程序运行后的输出结果是()
A)8,7,8,7B)7,8,7,8C)8,7,7,8D)7,8,8,7
(21)s1和s2已正确定义并分别指向两个字符串。
若要求:
当s1所指串大于s2所指串时,执行语句S;则以下选项中正确的是()//字符串大小的比较函数
A)if(s1>s2)S; B)if(strcmp(s1,s2))S;
C)if(strcmp(s2,s1)>0)S; D)if(strcmp(s1,s2)>0)S;
(22)设有定义语句//一维数组的指针表示法、指针运算
intx[6]={2,4,6,8,5,7},*p=x,i;
要求依次输出x数组6个元素中的值,不能完成此操作的语句是()
A)for(i=0;i<6;i++)printf(“%2d”,*(p++));
B)for(i=0;i<6;i++)printf(“%2d”,*(p+i));
C)for(i=0;i<6;i++)printf(“%2d”,*p++);
D)for(i=0;i<6;i++)printf(“%2d”,(*p)++);
(23)有以下程序//指针的赋值
#include
main()
{inta[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL;
*q=*(p+5);
printf(“%d%d\n”,*p,*q);
}
程序运行后的输出结果是()
A)运行后报错B)66 C)611D)510
(24)有以下定义和语句//一维数组的指针表示法、指针数组
inta[3][2]={1,2,3,4,5,6,},*p[3];
p[0]=a[1];
则*(p[0]+1)所代表的数组元素是()
A)a[0][1]B)a[1][0]C)a[1][1]D)a[1][2]
(25)有以下程序//二维字符串数组
main()
{charstr[][10]={“China”,”Beijing”},*p=str[0];
printf(“%s\n”,p+10);
}
程序运行后的输出结果是()
A)China B)BejingC)ngD)ing
(26)有以下程序//字符指针、字符串的输出
main()
{chars[]=“ABCD”,*p;
for(p=s+1;p
}
程序运行后的输出结果是()
A)ABCD B)A C)B D)BCD
BCD B C CD
CD C D D
D D
(27)在函数调用过程中,如果函数funA调用了函数funB,函数funB又调用了函数funA,则()//间接递归概念
A)称为函数的直接递归调用B)称为函数的间接递归调用
C)称为函数的循环调用 D)C语言中不允许这样的递归调用
(28)已有定义:
inti,a[10],*p;,则合法的赋值语句是()//数组与指针
A)p=100; B)p=a[5]; C)p=a[2]+2;D)p=a+2;
(29)以下叙述中正确的是()//局部变量、全局变量、生命期
A)局部变量说明为static存储类,其生存期将得到延长
B)全局变量说明为static存储类,其作用域将被扩大
C)任何存储类的变量在未赋初值时,其值都是不确定的
D)形参可以使用的存储类说明符与局部变量完全相同//形参不能用static
(30)设有定义语句:
charc1=92,c2=92;,则以下表达式中值为零的是()//位运算
A)c1^c2 B)c1&c2 C)~c2 D)c1|c2
(31)程序中对fun函数有如下说明 //各类指针、指向函数的指针等
void*fun();此说明的含义是()
A)fun函数无返回值
B)fun函数的返回值可以是任意的数据类型
C)fun函数的返回值是无值型的指针类型
D)指针fun指向一个函数,该函数无返回值
(32)有以下程序//字符指针、字符串的结束
main()
{chars[]=“Yes\n/No”,*ps=s;
puts(ps+4);
*(ps+4)=0;
puts(s);
}
程序运行后的输出结果是(选项D中的第一行是空行)()
A)n/No B)/No C)n/NO D)
Yes Yes Yes /No
/No /NoYes
(33)有以下程序//负数的补码表示
main()
{unsignedinta;
intb=-1;
a=b;
printf(“%u”,a);
}
程序运行后的输出结果是()
A)-1 B)65535 C)32767 D)-32768
(34)有以下程序//指针为形式参数、数组名为实际参数
voidfun(int*a,inti,intj)
{intt;
if(i {t=a[i];a[i]=a[j];a[j]=t;
i++;j--;
fun(a,i,j);
}
}
main()
{intx[]={2,6,1,8},i;
fun(x,0,3);
for(i=0;i<4;i++)printf(“%2d”,x[i]);
printf(“\n”);
}
程序运行后的输出结果是()
A)1268 B)8621C)8162D)8612
(35)有以下说明和定义语句//结构体成员的各种引用方法
structstudent
{intage;charnum[8];};
structstudentstu[3]={{20,”200401”},{21,”200402”},{10\9,”200403”}};
structstudent*p=stu;
以下选项中引用结构体变量成员的表达式错误的是()
A)(p++)->num B)p->numC)(*p).numD)stu[3].age
(36)有以下程序//一维数组、冒泡排序
main()
{intx[]={1,3,5,7,2,4,6,0},i,j,k;
for(i=0;i<3;i++)
for(j=2;j>=i;j--)
if(x[j+1]>x[j]){ k=x[j];x[j]=x[j+1];x[j+1]=k;}
for(i=0;i<3;i++)
for(j=4;j<7-i;j++)
if(x[j+1]>x[j]){k=x[j];x[j]=x[j+1];x[j+1]=k;}
for(i=0;i<3;i++)
for(j=4;j<7-i;j++)
if(x[j]>x[j+1]){k=x[j];x[j]=x[j+1];x[j+1]=k;}
for(i=0;i<8;i++)printf(“%d”,x[i]);
printf(“\n”);
}
程序运行后的输出结果是:
()
A)75310246 B)01234567 C)76310462 D)13570246
(37)有如下程序//文件
#include
main()
{FILE *fp1;
fp1=fopen(“f1.txt”,”w”);
fprintf(fp1,”abc”);
fclose(fp1);
}
若文本文件f1.txt中原有内容为:
good,则运行以上程序后文件f1.txt中的内容为()
A)goodabc B)abcd C)abc D)abcgood
48~50.以下程序的功能是:
建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中,请从与下划线处号码对应的一组选若中选择出正确的选项。
#include//链表
structnode
{chardata;structnode*next;};
(38) CreatList(char*s)
{structnode*h,*p,*q);
h=(structnode*)malloc(sizeof(structnode));
p=q=h;
while(*s!
='\0')
{ p=(structnode*)malloc(sizeof(structnode));
p->data= (39) ;
q->next=p;
q= (40) ;
s++;
}
p->next='\0';
returnh;
}
main()
{charstr[]=“linklist”;
structnode*head;
head=CreatList(str);
...
}
(38)A)char* B)structnode C)structnode* D)char
(39)A)*s B)s C)*s++ D)(*s)++
(40)A)p->next B)p C)sD)s->next
二、填空题
(1)以下程序段的输出结果是 11 。
inti=9;
printf(“%o\n”,i);
(2)以下程序运行后的输出结果是 252137 。
main()
{inta,b,c;
a=25;
b=025;
c=0x25;
printf(“%d %d %d\n”,a,b,c);
}
(3)以下程序运行后的输出结果是 24 。
main()
{intp[7]={11,13,14,15,16,17,18};
inti=0,j=0;
while(i<7&&p[i]%2==1)j+=p[i++];
printf(“%d\n”,j);
}
(4)以下程序运行后的输出结果是 21 。
main()
{intx=1,y=0,a=0,b=0;
switch(x)
{case1:
switch(y)
{case0:
a++;break;
case1:
b++;break;}
case2:
a++;b++;break;
}
printf(“%d %d\n”,a,b);
}
(5)以下程序运行后的输出结果是 92 。
main()
{inta[4][4]={{1,2,3,4},{5,6,7,8},{11,12,13,14},{15,16,17,18}};
inti=0,j=0,s=0;
while(i++<4)
{
if(i==2||i==4)continue;
j=0;
do{s+=a[i][j];j++;}while(j<4);
}
printf(“%d\n”,s);
}
(6)以下程序运行后的输出结果是 gae 。
main()
{chara[]=“Language”,b[]=“Programe”;
char*p1,*p2;intk;
p1=a;p2=b;
for(k=0;k<=7;k++)
if(*(p1+k)==*(p2+k))printf(“%c”,*(p1+k));
}
(7)以下程序运行后的输出结果是 *2*4*6*8* 。
main()
{chara[]=“123456789”,*p;inti=0;
p=a;
while(*p)
{if(i%2==0)*p='*';
p++;i++;
}
puts(a);
}
(8)以下程序中,for循环体执行的次数是 4 。
#define N2
#define MN+1
#define KM+1*M/2
main()
{inti;
for(i=1;i {...}
...
}
(9)通过函数求f(x)的累加和,其中f(x)=x2+1
main()
{
printf(“Thesum=%d\n”,SunFun(10));
}
SunFun(intn)
{
intx,s=0;
for(x=0;x<=n;x++) s+=F( x );
returns;
}
F(intx)
{ return x*x+1 );}
(10)以下程序从终端读入数据到数组中,统计其中正数的个数,并计算它们之和。
请填空。
main()
{inti,a[20],sum,count;
sum=count=0;
for(i=0;i<20;i++) scanf(“%d”, &a[i] );
fro(i=0;i<20;i++)
{if(a>0)
{count++;
sum+= a[i] ;
}
}
printf(“sum=%d,count=%d\n”,sum,count);
}
(11)以下程序中,函数sumColumM的功能是:
求出M行N列二维数组每列元素中的最小值,并计算它们的和值。
和值通过形参传回主函数输出。
请填空。
#define M2
#define N4
voidSumColumMin(inta[M][N],int*sum)
{inti,j,k,s=0;
for(i=0;i {k=0;
for(j=1;j if(a[k][i]>a[j][i])k=j;
s+= a[k][i] ;
}
*sum =s;
}
main()
{intx[M][N]={3,2,5,1,4,1,8,3},s;
SumColumMin( x,&s );
printf(“%d\n”,s);
}