C程序设计基础课后复习资料第四章.docx
《C程序设计基础课后复习资料第四章.docx》由会员分享,可在线阅读,更多相关《C程序设计基础课后复习资料第四章.docx(27页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、4.1 阅读下列程序,写出执行结果1#include void main() int i, conut=0, sum=0 ; float average ; int a = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ;for( i=0; i10; i+ ) if( ai % 2 = 0 ) continue ; sum += a i ; conut + ; average = sum / conut ;cout conut = conut t average = average endl ; 2.#include void main() int a9 = 1, 2, 3, 4
2、, 5, 6, 7, 8, 9 ; int *p = a , sum = 0 ; for( ; pa+9; p+ ) if( *p % 2 = 0 ) sum += *p ; cout sum = sum endl ; 3const int n = 5 ; #include #include void main() int ann= 0 , i, j, k ; for( k=1 , i=0 ; i= 0; j- , k+ )aji - j = k ; for( i=0 ; in ; i+ ) for( j=0; jn ; j+ ) cout setw( 3 ) aij ; cout endl
3、; 4int f(int ,int); #include void main() int a = -1, 3, 5, -7, 9, -11 ; cout f( a, 6 ) endl ; int f( int a, int size ) int i, t=1 ; for( i=0 ; i0 ) t *= ai ; return t;5int f( int 3, int, int ) ; #include void main() int a3 = 0, 1, 2, 3, 4, 5, 6, 7, 8 ; cout f( a, 3, 3 ) endl ; int f( int a3, int row
4、, int col ) int i, j, t=1 ; for( i=0; irow; i + ) for( j=0; jcol; j+ ) aij + ;if( i = j ) t *= aij ; return t ; 6#include void test1( int *a1 ) a1 = new int( 5 ) ; cout *a1 = *a1 endl ; void test2(int * & a2) a2 = new int( 5 ) ;cout *a2 = *a2 endl ; void main() int *p = new int( 1 ) ; test1( p ) ; c
5、out test1: *p1 = *p endl ; test2( p ) ; cout test2: *p2 = *p endl ; 7#include void main() char s = abccda ; int i ; char c ; for( i = 1 ; ( c=si ) != 0; i + ) switch( c ) case a : cout % ; continue ; case b : cout $ ; break ; case c : cout * ; break ; case d : continue ; cout # endl ; 8#include void
6、 main() char *str = c+, basic, pascal ; char *p ; int i ; p = str ; for( i=0 ; i3 ; i+ ) cout *( p+i ) endl ; 9#include void main() char s1 = Fortran , s2 = Foxpro ; char *p , *q ; p = s1 ; q = s2 ; while( *p & *q ) if ( *p = *q ) cout *p ; p + ; q + ; cout endl ; 10#include #include void main() cha
7、r str10 = vb, pascal, c+ , s10 ; strcpy( s , ( strcmp( str0 , str1 ) 0 str0 : str1 ) ) ; if( strcmp( str2, s ) 0 ) strcpy( s, str2 ) ; cout s i,j的下标变换公式,并用程序验证之。4有以下函数void query() int *p; p=new int3;/ delete p; p=new double5; / delete p;出现了编译错误。请分析错误的原因,并把上述程序补充完整,上机验证你的判断。5有以下程序根据输入值,调用函数create建立并初
8、始化动态数组,令ai=i。该程序运行后,主函数不能返回期望值。请分析程序的错误原因并修改之。#include void create(int *, int);void main() int *a, len; cinlen; create(a,len); for( int i = 0; ilen; i+ ) cout ai ; cout endl; delete a;void create(int *ap, int n) ap=new intn; for(int i=0; in; i+) api=i;1数组说明语句要向编译器提供什么信息?请写出一维数组、二维数组说明语句的形式。【答案】数组说明语
9、句要向编译器提供数组名(标识符),数组元素的类型、数组长度(元素的个数)等信息。一维数组说明语句为: 类型 数组名表达式二维数组说明语句为: 类型 数组名表达式1 表达式22数组名、数组元素的区别是什么?归纳一维数组元素地址、元素值不同的表示形式。若有说明int aa 3, *pa=aa;请使用aa或pa,写出3个以上及aa2 等价的表达式。【答案】数组名是一个标识符,执行代码中代表数组的地址,即指向数组起始位置的指针;而数组元素是下标变量,性质相当于普通变量。对一维数组aa第i个元素的地址可以表示为: &aai aa+i;对一维数组aa第i个元素的值可以表示为: ai *(a+i);及aa2
10、等价的表达式:*(aa+2) *(&a2) *(pa+2) pa23要把一维数组 int am*n 的元素传送到二维数组 int bmn 中,即在程序中要执行bij=ak;请写出ki,j的下标变换公式,并用程序验证。【答案】转换公式 i=k/n j=k%n验证程序:#include using namespace std;int main() const int M=3,N=4;int k,aM*N=1,2,3,4,5,6,7,8,9,10,11,12,bMN;int i,j;coutarray a:endl;for(k=0;kM*N;k+)bk/Nk%N=ak;for(k=0;kM*N;k+
11、) coutakt;coutendl;cout*After convert*endl;coutarray b:endl;for(i=0;iM;i+) for(j=0;jN;j+) coutbijt;coutendl;4有以下函数void query() int *p;p=new int3;/delete p;p=new double5;/delete p;出现了编译错误。请分析错误的原因,并把上述程序补充完整,上机验证你的判断。【答案】在语句p=new double5; 中企图把动态浮点型数组的地址写入整型指针p,造成错误。错误为error C2440: “=”: 无法从“double *”转
12、换为“int *”。改正方法:增加一个double*q指针。void query() int *p;p=new int3;delete p;/double *q;q=new double5;/delete q;5有以下程序根据输入值,设计功能是调用函数create建立并初始化动态数组,令ai=i。但该程序运行后不能得到期望结果,请分析程序的错误原因并修改之。#include using namespace std;void create(int *, int);int main() int *a = NULL, len;cinlen;create(a,len);for( int i = 0;
13、i len; i+ ) cout ai ;cout endl;delete a;a = NULL ;void create(int *ap, int n) ap=new intn;for(int i=0; in; i+) api=i;【答案】函数create中,指针参数int*ap是地址值的参数。调用函数时接受实际参数a的地址值作为初制值。ap仅是局部变量,ap=new intn获得新的地址值,函数执行完毕返回,ap被释放,完全及实际参数ap无关。程序没有编译错误,但main不能获得动态数组。修改方法是把ap改为指针引用参数。void create(int *&,int); /函数原型声明,使
14、用引用参数void create(int *&ap,int n) /函数定义 ap=new intn;for(int i=0;in;i+) api=i;4.3 编程题1已知求成绩的平均值和均方差公式: , , 其中n为学生人数, 为第i个学生成绩。求某班学生的平均成绩和均方差。答案 4.3-1 #include #include void main() double s = 76, 85, 54, 77, 93, 83, 90, 67, 81, 65 ; double sum1=0,sum2=0,ave,dev; int n, i; n = sizeof( s )/sizeof( double
15、 ); /求数组元素的个数 for( i=0; in; i+ ) sum1 += si;ave = sum1/n; for( i=0; in; i+ )sum2 += pow( si-ave, 2 );dev = sqrt( sum2/n );cout rve= ave t dev= dev endl; 2用随机函数产生10个互不相同的两位整数存放到一维数组中,并输出其中的素数。答案4.3-2 #include #include #include #include void main() int a10,i,j; long m; srand( time(0) ); /为随机数生成器设置种子值
16、for( i=0; i10; i+ ) l:ai = rand(); /产生随机数存放到数组中 if ( ai=100 ) goto l; for( j=0; ji; j+ )if( ai=aj ) goto l; for( i=0; i10; i+ ) cout ai ; cout endl; for( i=0; i10; i+ ) double m=sqrt( ai ); for( j=2; jm )cout ai ; cout 是素数! endl;3将一组数据从大到小排列后输出,要求显示每个元素及它们在原数组中的下标。答案 4.3-3 #include void main() int a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 基础 课后 复习资料 第四
限制150内