大学C语言期末考试练习题详解答案及过程讲解 读程序数组.docx
《大学C语言期末考试练习题详解答案及过程讲解 读程序数组.docx》由会员分享,可在线阅读,更多相关《大学C语言期末考试练习题详解答案及过程讲解 读程序数组.docx(17页珍藏版)》请在冰豆网上搜索。
大学C语言期末考试练习题详解答案及过程讲解读程序数组
2020届大学c语言期末考试习题讲解
读程序
数组
1.
#include
main()
{inti,a[10];
for(i=9;i>=0;i--)
a[i]=10-i;
printf(“%d%d%d”,a[2],a[5],a[8]);
}
运行结果为:
852
详见p143-146.例题6.1一定看懂!
首先定义整型变量i,整型数组a,a的长度为10,即a中包含10个整型元素(整型变量)
执行for循环语句
初值i=9,使得循环条件i>=0成立,执行循环体
第1次循环
执行a[i]=10-i等价于a[9]=10-9=1
计算表达式3,即i--,i为8,使得循环条件i>=0成立,继续执行循环体
第2次循环
执行a[i]=10-i等价于a[8]=10-8=2
计算表达式3,即i--,i为7,使得循环条件i>=0成立,继续执行循环体
第3次循环
执行a[i]=10-i等价于a[7]=10-7=3
计算表达式3,即i--,i为6,使得循环条件i>=0成立,继续执行循环体
第4次循环
执行a[i]=10-i等价于a[6]=10-6=4
计算表达式3,即i--,i为5,使得循环条件i>=0成立,继续执行循环体
第5次循环
执行a[i]=10-i等价于a[5]=10-5=5
计算表达式3,即i--,i为4,使得循环条件i>=0成立,继续执行循环体
第6次循环
执行a[i]=10-i等价于a[4]=10-4=6
计算表达式3,即i--,i为3,使得循环条件i>=0成立,继续执行循环体
第7次循环
执行a[i]=10-i等价于a[3]=10-3=7
计算表达式3,即i--,i为2,使得循环条件i>=0成立,继续执行循环体
第8次循环
执行a[i]=10-i等价于a[2]=10-2=8
计算表达式3,即i--,i为1,使得循环条件i>=0成立,继续执行循环体
第9次循环
执行a[i]=10-i等价于a[1]=10-1=9
计算表达式3,即i--,i为0,使得循环条件i>=0成立,继续执行循环体
第10次循环
执行a[i]=10-i等价于a[0]=10-0=10
计算表达式3,即i--,i为-1,使得循环条件i>=0不成立,跳出循环体
2.
#include
main()
{inti,a[6];
for(i=0;i<6;i++)
a[i]=i;
for(i=5;i>=0;i--)
printf("%3d",a[i]);
}
运行结果为:
543210
首先定义整型变量i,整型数组a,a的长度为6,即a中包含6个整型元素(整型变量)
执行第一个for循环语句
初值i=0,使得循环条件i<6成立,执行循环体
第1次循环
执行a[i]=i等价于a[0]=0
计算表达式3,即i++,i为1,使得循环条件i<6成立,继续执行循环体
第2次循环
执行a[i]=i等价于a[1]=1
计算表达式3,即i++,i为2,使得循环条件i<6成立,继续执行循环体
第3次循环
执行a[i]=i等价于a[2]=2
计算表达式3,即i++,i为3,使得循环条件i<6成立,继续执行循环体
第4次循环
执行a[i]=i等价于a[3]=3
计算表达式3,即i++,i为4,使得循环条件i<6成立,继续执行循环体
第5次循环
执行a[i]=i等价于a[4]=4
计算表达式3,即i++,i为5,使得循环条件i<6成立,继续执行循环体
第6次循环
执行a[i]=i等价于a[5]=5
计算表达式3,即i++,i为6,使得循环条件i<6不成立,结束循环
执行第二个for循环语句
初值i=5,使得循环条件i>=0成立,执行循环体
第1次循环
执行printf("%3d",a[i]);即输出a[5]的值
计算表达式3,即i--,i为4,使得循环条件i>=0成立,继续执行循环体
第2次循环
执行printf("%3d",a[i]);即输出a[4]的值
计算表达式3,即i--,i为3,使得循环条件i>=0成立,继续执行循环体
第3次循环
执行printf("%3d",a[i]);即输出a[3]的值
计算表达式3,即i--,i为2,使得循环条件i>=0成立,继续执行循环体
第4次循环
执行printf("%3d",a[i]);即输出a[2]的值
计算表达式3,即i--,i为1,使得循环条件i>=0成立,继续执行循环体
第5次循环
执行printf("%3d",a[i]);即输出a[1]的值
计算表达式3,即i--,i为0,使得循环条件i>=0成立,继续执行循环体
第6次循环
执行printf("%3d",a[i]);即输出a[0]的值
计算表达式3,即i--,i为6,使得循环条件i>=0不成立,结束循环
3.
#include
main()
{inti,k,a[10],p[3];
k=5;
for(i=0;i<10;i++)
a[i]=i;
for(i=0;i<3;i++)
p[i]=a[i*(i+1)];
for(i=0;i<3;i++)
k+=p[i]*2;
printf("%d\n",k);
}
运行结果为:
21
首先定义整型变量i,k,整型数组a,a的长度为10,整型数组p,p的长度为3
k初值为5
第一个for循环语句为数组a进行初始化
执行完第一个for语句后,a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4,a[5]=5,a[6]=6,a[7]=7,a[8]=8,a[9]=9(循环过程略)
第二个for循环语句为数组p进行初始化
初值i=0,使得循环条件i<3成立,执行循环体
第1次循环
执行p[i]=a[i*(i+1)];即p[0]=a[0*(0+1)]=a[0]=0
计算表达式3,即i++,i为1,使得循环条件i<3成立,继续执行循环体
第2次循环
执行p[i]=a[i*(i+1)];即p[1]=a[1*(1+1)]=a[2]=2
计算表达式3,即i++,i为2,使得循环条件i<3成立,继续执行循环体
第3次循环
执行p[i]=a[i*(i+1)];即p[2]=a[2*(2+1)]=a[6]=6
计算表达式3,即i++,i为3,使得循环条件i<3不成立,结束循环
第三个for循环语句
初值i=0,使得循环条件i<3成立,执行循环体
第1次循环
执行k+=p[i]*2;即k=5+p[0]*2=5+0=5
计算表达式3,即i++,i为1,使得循环条件i<3成立,继续执行循环体
第2次循环
执行k+=p[i]*2;即k=5+p[1]*2=5+2*2=9
计算表达式3,即i++,i为2,使得循环条件i<3成立,继续执行循环体
第1次循环
执行k+=p[i]*2;即k=9+p[2]*2=9+6*2=21
计算表达式3,即i++,i为3,使得循环条件i<3不成立,结束循环
4.
#include
intm[3][3]={{1},{2},{3}};
intn[3][3]={1,2,3};
main()
{printf(“%d,”,m[1][0]+n[0][0]);
printf(“%d\n”,m[0][1]+n[1][0]);
}
运行结果为:
3,0
详见教材P149~152,图6.7看懂!
首先定义整型二维数组m,m为3行,3列的二维矩阵,并对其以行的形式初始化
m[0][0]=1m[0][1]=0m[1][2]=0
m[1][0]=2m[1][1]=0m[2][2]=0
m[2][0]=3m[2][1]=0m[2][2]=0
定义整型二维数组n,m为3行,3列的二维矩阵
n[0][0]=1n[0][1]=2n[1][2]=3
n[1][0]=0n[1][1]=0n[2][2]=0
n[2][0]=0n[2][1]=0n[2][2]=0
因此m[1][0]+n[0][0]=2+1=3
m[0][1]+n[1][0]=0+0=0
5.
#include
main()
{inti;
intx[3][3]={1,2,3,4,5,6,7,8,9};
for(i=1;i<3;i++)
printf("%d",x[i][3-i]);
}
运行结果为:
68
首先按存储顺序为数组x初始化
x[0][0]=1x[0][1]=2x[0][2]=3
x[1][0]=4x[1][1]=5x[1][2]=6
x[2][0]=7x[2][1]=8x[2][2]=9
初值i=1,使得循环条件i<3成立,执行循环体
第1次循环
执行printf("%d",x[i][3-i]),打印出x[i][3-i],即x[1][2]的值
计算表达式3,即i++,i为2,使得循环条件i<3成立,继续执行循环体
第2次循环
执行printf("%d",x[i][3-i]),打印出x[i][3-i],即x[2][1]的值
计算表达式3,即i++,i为3,使得循环条件i<3成立,结束循环
6.
#include
main()
{intn[3][3],i,j;
for(i=0;i<3;i++)
{for(j=0;j<3;j++)
{n[i][j]=i+j;
printf(“%d”,n[i][j]);
}
}
}
运行结果为:
012
123
234
循环变量i为0,循环条件i<3成立,执行循环体
外层for第1次循环相当于输出第1行
内层for循环j初值为0,循环条件j<3成立,执行循环体
内层for第1次循环
执行n[i][j]=i+j;即n[0][0]=0+0=0;
执行printf(“%d”,n[i][j]);
执行内层循环表达式3,j++,j为1,j<3成立,继续执行内层循环体
内层for第2次循环
执行n[i][j]=i+j;即n[0][1]=0+1=1;
执行printf(“%d”,n[i][j]);
执行内层循环表达式3,j++,j为2,j<3成立,继续执行内层循环体
内层for第3次循环
执行n[i][j]=i+j;即n[0][2]=0+2=2;
执行printf(“%d”,n[i][j]);
执行内层循环表达式3,j++,j为3,j<3不成立,结束内层循环
执行printf(“\n”);
执行外层for语句的表达式3,i++,i为,1,i<3成立,继续执行外层循环体
外层for第2次循环相当于输出第2行
内层for循环j初值为0,循环条件j<3成立,执行循环体
内层for第1次循环
执行n[i][j]=i+j;即n[1][0]=1+0=1;
执行printf(“%d”,n[i][j]);
执行内层循环表达式3,j++,j为1,j<3成立,继续执行内层循环体
内层for第2次循环
执行n[i][j]=i+j;即n[1][1]=1+1=2;
执行printf(“%d”,n[i][j]);
执行内层循环表达式3,j++,j为2,j<3成立,继续执行内层循环体
内层for第3次循环
执行n[i][j]=i+j;即n[1][2]=1+2=3;
执行printf(“%d”,n[i][j]);
执行内层循环表达式3,j++,j为3,j<3不成立,结束内层循环
执行printf(“\n”);
执行外层for语句的表达式3,i++,i为,1,i<3成立,继续执行外层循环体
外层for第2次循环相当于输出第3行
内层for循环j初值为0,循环条件j<3成立,执行循环体
内层for第1次循环
执行n[i][j]=i+j;即n[2][0]=2+0=1;
执行printf(“%d”,n[i][j]);
执行内层循环表达式3,j++,j为1,j<3成立,继续执行内层循环体
内层for第2次循环
执行n[i][j]=i+j;即n[2][1]=2+1=2;
执行printf(“%d”,n[i][j]);
执行内层循环表达式3,j++,j为2,j<3成立,继续执行内层循环体
内层for第3次循环
执行n[i][j]=i+j;即n[2][2]=2+2=3;
执行内层循环表达式3,j++,j为3,j<3不成立,结束内层循环
执行printf(“\n”);
执行外层for语句的表达式3,i++,i为,3,i<3不成立,结束外层循环
7.
#include
main()
{
chardiamond[][5]={{‘_’,’_’,’*’},{‘_‘,’*’,’_’,’*’},
{‘*’,’_’,’_‘,’_‘,’*’},{‘_’,’*’,’_’,’*’},{‘_’,’_’,’*’}};
inti,j;
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf(“%c”,diamond[i][j]);
printf(“\n”);
}
}注:
“_”代表一个空格。
运行结果为:
*
**
**
**
*
8.
#include
main()
{inti,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(“%d”,f[i]);
}
}
运行结果为:
1123
581321
3455
9.
#include“stdio.h”
func(intb[])
{intj;
for(j=0;j<4;j++)
b[j]=j;
}
main()
{inta[4],i;
func(a);
for(i=0;i<4;i++)
printf(“%2d”,a[i]);
}
运行结果为:
0123
详见教材P194
定义函数func
函数头:
未定义函数的类型,则系统默认为int型。
函数func的形参为整型数组名,即只接收整型数组地址。
函数体:
定义整型变量j
循环变量初值(表达式1)j=0,使得循环条件(表达式2)j<4成立,执行循环体
第1次循环
执行b[j]=j;即b[0]=0;
执行循环变量自增(及表达式3)j++,j为1,使得j<4成立,继续执行循环体
第2次循环
b[1]=1;
j++,j为2,使得j<4成立,继续执行循环体
第3次循环
b[2]=2;
j++,j为3,使得j<4成立,继续执行循环体
第4次循环
b[3]=3;
j++,j为4,使得j<4不成立,结束循环
main函数:
定义整型变量i和数组a,其长度为4,
func(a);表示调用函数func,并以数组名a作为调用的实参(数组名在C语言中表示数组所在内存空间的首地址,在以数组名作为实参时,形参与实参公用存储空间,因此对数组b的操作,即对数组a的操作。
)
10.
#include
main()
{floatfun(floatx[]);
floatave,a[3]={4.5,2,4};
ave=fun(a);
printf(“ave=%7.2f”,ave);
}
floatfun(floatx[])
{intj;
floataver=1;
for(j=0;j<3;j++)
aver=x[j]*aver;
return(aver);
}
运行结果为:
ave=36.00
11.
#include
main()
{inta[2][3]={{1,2,3},{4,5,6}};
intb[3][2],i,j;
for(i=0;i<=1;i++)
{for(j=0;j<=2;j++)
b[j][i]=a[i][j];
}
for(i=0;i<=2;i++)
{for(j=0;j<=1;j++)
printf("%5d",b[i][j]);
}
}
运行结果为:
142536
12.
#include
f(intb[],intn)
{inti,r;
r=1;
for(i=0;i<=n;i++)
r=r*b[i];
return(r);
}
main()
{intx,a[]={1,2,3,4,5,6,7,8,9};
x=f(a,3);
printf(“%d\n”,x);
}
运行结果为:
24
13.
#include"stdio.h"
main()
{intj,k;
staticintx[4][4],y[4][4];
for(j=0;j<4;j++)
for(k=j;k<4;k++)
x[j][k]=j+k;
for(j=0;j<4;j++)
for(k=j;k<4;k++)
y[k][j]=x[j][k];
for(j=0;j<4;j++)
for(k=0;k<4;k++)
printf("%d,",y[j][k]);
}
运行结果为:
0,0,0,0,1,2,0,0,2,3,4,0,3,4,5,6