C语言第四章练习题.docx
《C语言第四章练习题.docx》由会员分享,可在线阅读,更多相关《C语言第四章练习题.docx(16页珍藏版)》请在冰点文库上搜索。
C语言第四章练习题
注意,本套题目中有些涉汲到函数的调用和指针的使用,大家自已先去看下,不懂就问,培养自己的自学能力。
一,选择题
1.若有以下定义
intx[10],*pt=x;
则对x数组元素的正确引用是
A)pt+3
B)*&x[10]
C)*(pt+10)
D)*(x+3)
2.有以下程序
#include
main()
{inti,s=0,t[]={1,2,3,4,5,6,7,8,9};
for(i=0;i<9;i+=2)s+=*(t+i);
printf("%d\n",s);
}
程序执行后的输出结果是
A)20
B)25
C)45
D)36
3.#include
main()
{intc[6]={10,20,30,40,50,60},*p,*s;
p=c;s=&c[5];
printf("%d\n",s-p);
}
程序运行后的输出结果是
A)5
B)50
C)6
D)60
4.#include
main()
{inta[3]={0},i,j,k=2;
for(i=0;ifor(j=0;jprintf("%d\n",a[1]);
}
程序运行后的输出结果是
A)0
B)2
C)1
D)3
5..有以下程序
#include
main()
{inta[5]={2,4,6,8,10},*p,**k;
p=a;k=&p;
printf("%d",*(p++));
printf("%d\n",**k);
}
程序运行后的输出结果是
A)46
B)44
C)22
D)24
6.以下叙述中正确的是
A)一条语句只能定义一个数组
B)每个数组包含一组具有同一类型的变量,这些变量在内存中占有连续的存储单元
C)数组说明符的一对方括号中只能使用整型常量,而不能使用表达式
D)在引用数组元素时,下标表达式可以使用浮点数
7.以下叙述中正确的是
A)数组下标的下限是1
B)数组下标的下限由数组中第一个非零元素的位置决定
C)数组下标的下限由数组中第一个被赋值元素的位置决定
D)charc1,c2,*c3,c4[40];是合法的变量定义语句
8.以下叙述中正确的是
A)语句inta[8]={0};是合法的
B)语句inta[]={0};是不合法的,遗漏了数组的大小
C)语句chara[2]={"A","B"};是合法的,定义了一个包含两个字符的数组
D)语句chara[3];a="AB";是合法的,因为数组有三个字符空间的容量,可以保存两个字符
9.有以下程序
#include
main()
{inta[]={2,4,6,8,10},x,*p,y=1;
p=&a[1];
for(x=0;x<3;x++)y+=*(p+x);
printf("%d\n",y);
}
程序的输出结果是
A)13
B)19
C)11
D)15
10.有以下程序
#include
main()
{
inta[]={2,4,6,8},*p=a,i;
for(i=0;i<4;i++)
a[i]=*p++;
printf("%d\n",a[2]);
}
程序的输出结果是
A)2
B)8
C)4
D)6
11.以下叙述正确的是
A)不能在数组说明符的一对方括号中使用表达式
B)charc1,*c2,**c3,c4[2];是C语言的合法语句
C)数组下标的最小值可以是负值
D)若有数组定义intarray[5];则语句printf("%d",array[1.23]);是合法的
12.设有如下程序段
inta[1]={0};
intb[]={9};
charc[3]={"A","B"};
chard="12";
以下叙述正确的是
A)a,b的定义合法,c,d的定义不合法
B)a,b,c,d的定义都是合法的
C)a,b,c的定义是合法的,d的定义不合法
D)只有a的定义是合法的
12.对于函数声明
voidfun(floatarray[],int*ptr);
下叙述正确的是
A)调用函数时,array数组的元素和ptr都是按值传送
B)函数声明有语法错误,参数array缺少数组大小定义
C)调用函数时,array数组中将存储从实参中复制来的元素值
D)函数参数array,ptr都是指针变量
13.要求定义一个具有6个元素的int型一维数组,以下选项中错误的是
A)inta[2*3]={0};
B)intN=6,a[N];
C)#defineN3
inta[N+N];
D)inta[]={1,2,3,4,5,6};
14.设有定义:
inta[10]={0,1,2,3,4,5,6,7,8,9},*p=a,i;,若0≤i≤9,则对a数组元素的引用错误的是
A)*(&a[i])
B)a[10]
C)p[i]
D)a[p-a]
15.有以下程序
#include
intfun(intx[],intn)
{
staticintsum=0,i;
for(i=0;ireturnsum;
}
main()
{
inta[]={1,2,3,4,5},b[]={6,7,8,9},s=0;
s=fun(a,5)+fun(b,4);
printf("%d\n",s);
}
程序执行后的输出结果是
A)55
B)50
C)45
D)60
二,填空题
1.#include
voidfun(int*s,intn1,intn2)
{
inti,j,t;
i=n1;j=n2;
while(i{
t=s[i];s[i]=s[j];s[j]=t;i++;j--;
}
}
main()
{
inta[10]={1,2,3,4,5,6,7,8,9,0},k;
fun(a,0,3);fun(a,4,9);fun(a,0,9);
for(k=0;k<10;k++)
printf("%d",a[k]);
printf("\n");
}
则输出结果是。
2.有以下程序
#include
main()
{
Ints[12]={1,2,3,4,4,3,2,1,1,1,2,3},c[5]={0},i;
for(i=0;i<12;i++)
c[s[i]]++;
for(i=1;i<5;i++)
printf("%d",c[i]);
printf("\n");
}
程序的运行结果是.
3.#include
voidfun(inta[],intn)
{intt,i,j;
for(i=1;ifor(j=i+2;jif(a[i]>a[j]){t=a[i];a[i]=a[j];a[j]=t;}
}
main()
{intc[10]={10,9,8,7,6,5,4,3,2,1},i;
fun(c,10);
for(i=0;i<10;i++)printf("%d,",c[i]);
printf("\n");
}
则程序的输出结果是。
4.有如下程序
#include
intsum_mod(inta,intb)
{
returna+b%2;
}
main()
{
inti;
for(i=0;i<5;i++)
printf("%d",sum_mod(i,4));
printf("\n");
}
程序运行后的输出结果是。
5.有以下程序
#include
voidfun(inta[],intn)
{inti=0;
for(i=0;i{if(i%2==0)
a[i]+=n;
else
a[i]-=n;
}
}
main()
{intc[5]={5,4,3,2,1},i;
fun(c,5);
for(i=0;i<5;i++)printf("%d,",c[i]);
printf("\n");
}
程序运行后的输出结果是。
6.有以下程序
#include
voidfun(inta[],intn)
{
inti;
for(i=0;i{
if(i%3==0)
a[i]-=n;
else
a[i]+=n;
}
}
main()
{intc[5]={6,7,8,9,10},i;
fun(c,5);
for(i=0;i<5;i++)printf("%d,",c[i]);
printf("\n");
}
程序运行后的输出结果是。
7.#include
voidchange(int*array,intlen)
{
for(;len>=0;len--)
array[len]-=1;
}
main()
{
inti,array[5]={2,2};
change(array,4);
for(i=0;i<5;i++)
printf("%d,",array[i]);
printf("\n");
}
程序运行后的输出结果是。
8.有以下程序
#include
voidfun(int*a,intn)/*fun函数的功能是将a所指数组元素从大到小排序*/
{intt,i,j;
for(i=0;ifor(j=i+1;jif(a[i]}
main()
{intc[10]={1,2,3,4,5,6,7,8,9,0},i;
fun(c+4,6);
for(i=0;i<10;i++)printf("%d,",c[i]);
printf("\n");
}
程序的运行结果是。
9.以下程序调用fun函数求数组中最大值所在元素的下标。
#include
voidfun(int*s,intn,int*k)
{inti;
for(i=0,*k=i;iif(s[i]>s[*k])__________;
}
main()
{inta[5]={1,6,2,8,0},k;
fun(a,5,&k);
printf("%d%d\n",k,a[k]);
}
在横线处应填入的内容是。
10.以下fun函数返回数组中最大值的下标
#include
intfun(int*s,intn)
{inti,k;
for(i=0,k=i;iif(s[i]>s[k])__________;
return(k);
}
在横线处应填入的内容是。
三,编程题
1,打印如图所示的扬挥三角形
#include
#include
#definen10
intmain()
{
inti,j,k;
inta[n][n];
for(i=0;i{
a[i][0]=1;
a[i][i]=1;
}
for(i=1;ifor(j=1;j
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i{for(k=n;k>i;k--)
printf("");
for(j=0;j<=i;j++)
printf("%4d",a[i][j]);
printf("\n");
}
return0;
}
2.请编写函数fun,该函数的功能是:
将M行N列的二维数组中的数据,按列的顺序依次放到一维数组中。
一维数组中数据的个数存放在形参n所指的存储单元中。
例如,若二维数组中的数据为
33333333
44444444
55555555
则一维数组中的内容应是:
334455334455334455334455
#include
voidfun(ints1[],ints2[][4],intm,intn)
{inti,j,k=0;
for(i=0;ifor(j=0;js1[k]=s2[j][i];
}
voidmain()
{
inti;
inta[3][4]={33,33,33,33,44,44,44,44,55,55,55,55};
intb[12];
fun(b,a,4,3);
for(i=0;i<12;i++)
printf("%d",b[i]);
}
2.编写函数fun,其功能是:
实现B=A+A',即将矩阵A加上A的转置,存放在矩阵B中。
计算结果在main函数中输出。
例如,输入下面的矩阵:
其转置矩阵为:
程序输出:
#include
#include
intmain()
{
inti,j;
ints[3][3]={1,2,3,4,5,6,7,8,9};
intq[3][3];
fun(s,q);
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%d",q[i][j]);
printf("\n");
}
return0;
}
intfun(inta[][3],ints[][3])
{
inti,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
s[i][j]=a[i][j]+a[j][i];
return(s);
}