C程序设计基础课后复习资料第四章.docx
- 文档编号:8875506
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:16
- 大小:27.43KB
C程序设计基础课后复习资料第四章.docx
《C程序设计基础课后复习资料第四章.docx》由会员分享,可在线阅读,更多相关《C程序设计基础课后复习资料第四章.docx(16页珍藏版)》请在冰豆网上搜索。
C程序设计基础课后复习资料第四章
4.1阅读下列程序,写出执行结果
1.#include
voidmain()
{inti,conut=0,sum=0;
floataverage;
inta[]={1,2,3,4,5,6,7,8,9,10};
for(i=0;i<10;i++)
{if(a[i]%2==0)continue;
sum+=a[i];
conut++;
}
average=sum/conut;
cout<<"conut="< } 2.#include voidmain() {inta[9]={1,2,3,4,5,6,7,8,9}; int*p=a,sum=0; for(;p if(*p%2==0)sum+=*p; cout<<"sum="< } 3.constintn=5; #include #include voidmain() {inta[n][n]={0},i,j,k; for(k=1,i=0;i for(j=i;j>=0;j--,k++) a[j][i-j]=k; for(i=0;i {for(j=0;j cout< cout< } } 4.intf(int[],int); #include voidmain() {inta[]={-1,3,5,-7,9,-11}; cout< } intf(inta[],intsize) {inti,t=1; for(i=0;i if(a[i]>0)t*=a[i]; returnt; } 5.intf(int[][3],int,int); #include voidmain() {inta[][3]={0,1,2,3,4,5,6,7,8}; cout< } intf(inta[][3],introw,intcol) {inti,j,t=1; for(i=0;i for(j=0;j {a[i][j]++; if(i==j)t*=a[i][j]; } returnt; } 6.#include voidtest1(int*a1) {a1=newint(5); cout<<"*a1="<<*a1< } voidtest2(int*&a2) {a2=newint(5); cout<<"*a2="<<*a2< } voidmain() {int*p=newint (1); test1(p); cout<<"test1: *p1="<<*p< test2(p); cout<<"test2: *p2="<<*p< } 7.#include voidmain() {chars[]="abccda"; inti;charc; for(i=1;(c=s[i])! ='\0';i++) {switch(c) {case'a': cout<<'%';continue; case'b': cout<<'$';break; case'c': cout<<'*';break; case'd': continue; } cout<<'#'< } } 8.#include voidmain() {char*str[]={"c++","basic","pascal"}; char**p; inti; p=str; for(i=0;i<3;i++) cout<<*(p+i)< } 9.#include voidmain() {chars1[]="Fortran",s2[]="Foxpro"; char*p,*q; p=s1;q=s2; while(*p&&*q) {if(*p==*q) cout<<*p; p++; q++; } cout< } 10.#include #include voidmain() {charstr[][10]={"vb","pascal","c++"},s[10]; strcpy(s,(strcmp(str[0],str[1])<0str[0]: str[1])); if(strcmp(str[2],s)<0)strcpy(s,str[2]); cout< } 4.2思考题 1.数组说明语句要向编译器提供什么信息? 写出一维数组、二维数组说明语句的形式。 2.数组名、数组元素的区别是什么? 归纳一维数组元素地址、元素值不同的表示形式。 有说明 intaa[3],*pa=aa; 使用aa或pa,写出3个以上与aa[2]等价的表达式。 3.要把一维数组inta[n*n]的元素传送到二维数组intb[n][n]中,即在程序中要执行 b[i][j]=a[k]; 写出k->i,j的下标变换公式,并用程序验证之。 4.有以下函数 voidquery() {int*p; p=newint[3]; //…… delete[]p; p=newdouble[5]; //…… delete[]p; } 出现了编译错误。 请分析错误的原因,并把上述程序补充完整,上机验证你的判断。 5.有以下程序根据输入值,调用函数create建立并初始化动态数组,令a[i]=i。 该程序运行后,主函数不能返回期望值。 请分析程序的错误原因并修改之。 #include voidcreate(int*,int); voidmain() {int*a,len; cin>>len; create(a,len); for(inti=0;i cout< delete[]a; } voidcreate(int*ap,intn) {ap=newint[n]; for(inti=0;i } 1.数组说明语句要向编译器提供什么信息? 请写出一维数组、二维数组说明语句的形式。 【答案】 数组说明语句要向编译器提供数组名(标识符),数组元素的类型、数组长度(元素的个数)等信息。 一维数组说明语句为: 类型数组名[表达式] 二维数组说明语句为: 类型数组名[表达式1][表达式2] 2.数组名、数组元素的区别是什么? 归纳一维数组元素地址、元素值不同的表示形式。 若有说明 intaa[3],*pa=aa; 请使用aa或pa,写出3个以上与aa[2]等价的表达式。 【答案】 数组名是一个标识符,执行代码中代表数组的地址,即指向数组起始位置的指针;而数组元素是下标变量,性质相当于普通变量。 对一维数组aa第i个元素的地址可以表示为: &aa[i]aa+i; 对一维数组aa第i个元素的值可以表示为: a[i]*(a+i); 与aa[2]等价的表达式: *(aa+2)*(&a[2])*(pa+2)pa[2] 3.要把一维数组inta[m*n]的元素传送到二维数组intb[m][n]中,即在程序中要执行 b[i][j]=a[k]; 请写出k→i,j的下标变换公式,并用程序验证。 【答案】 转换公式i=k/nj=k%n 验证程序: #include usingnamespacestd; intmain() {constintM=3,N=4; intk,a[M*N]={1,2,3,4,5,6,7,8,9,10,11,12},b[M][N]; inti,j; cout<<"arraya: "< for(k=0;k b[k/N][k%N]=a[k]; for(k=0;k cout< cout<<"**Afterconvert**"< cout<<"arrayb: "< for(i=0;i {for(j=0;j cout< } } 4.有以下函数 voidquery() {int*p; p=newint[3]; //…… delete[]p; p=newdouble[5]; //…… delete[]p; } 出现了编译错误。 请分析错误的原因,并把上述程序补充完整,上机验证你的判断。 【答案】 在语句p=newdouble[5];中企图把动态浮点型数组的地址写入整型指针p,造成错误。 错误为errorC2440: “=”: 无法从“double*”转换为“int*”。 改正方法: 增加一个double*q指针。 voidquery() {int*p; p=newint[3]; delete[]p; //…… double*q; q=newdouble[5]; //…… delete[]q; } 5.有以下程序根据输入值,设计功能是调用函数create建立并初始化动态数组,令a[i]=i。 但该程序运行后不能得到期望结果,请分析程序的错误原因并修改之。 #include usingnamespacestd; voidcreate(int*,int); intmain() {int*a=NULL,len; cin>>len; create(a,len); for(inti=0;i cout< delete[]a; a=NULL; } voidcreate(int*ap,intn) {ap=newint[n]; for(inti=0;i } 【答案】 函数create中,指针参数int*ap是地址值的参数。 调用函数时接受实际参数a的地址值作为初制值。 ap仅是局部变量,ap=newint[n]获得新的地址值,函数执行完毕返回,ap被释放,完全与实际参数ap无关。 程序没有编译错误,但main不能获得动态数组。 修改方法是把ap改为指针引用参数。 voidcreate(int*&,int);//函数原型声明,使用引用参数 voidcreate(int*&ap,intn)//函数定义 {ap=newint[n]; for(inti=0;i } 4.3编程题 1.已知求成绩的平均值和均方差公式: ,其中n为学生人数, 为第i个学生成绩。 求某班学生的平均成绩和均方差。 答案4.3-1 #include #include voidmain() {doubles[]={76,85,54,77,93,83,90,67,81,65}; doublesum1=0,sum2=0,ave,dev; intn,i; n=sizeof(s)/sizeof(double);//求数组元素的个数 for(i=0;i sum1+=s[i]; ave=sum1/n; for(i=0;i sum2+=pow(s[i]-ave,2); dev=sqrt(sum2/n); cout<<"rve="< } 2.用随机函数产生10个互不相同的两位整数存放到一维数组中,并输出其中的素数。 答案4.3-2 #include #include #include #include voidmain() {inta[10],i,j;longm; srand(time(0)); //为随机数生成器设置种子值 for(i=0;i<10;i++) {l: a[i]=rand();//产生随机数存放到数组中 if(a[i]<10||a[i]>=100)gotol; for(j=0;j if(a[i]==a[j])gotol; } for(i=0;i<10;i++) cout< cout< for(i=0;i<10;i++) {doublem=sqrt(a[i]); for(j=2;j<=m;j++) if(a[i]%j==0)break; if(j>m) cout< } cout<<"是素数! "< } 3.将一组数据从大到小排列后输出,要求显示每个元素及它们在原数组中的下标。 答案4.3-3 #include voidmain() {inta[]={38,6,29,1,25,20,6,32,78,10}; intindex[10]; inti,j,temp; for(i=0;i<10;i++) index[i]=i; for(i=0;i<=8;i++) for(j=i+1;j<=9;j++) if(a[i] {temp=a[i];a[i]=a[j];a[j]=temp; temp=index[i];index[i]=index[j];index[j]=temp; } for(i=0;i<10;i++)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 基础 课后 复习资料 第四