C++课后习题答案第四章

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
cout << s << endl ;
}
答案:
C++
4.
1.已知求成绩的平均值和均方差公式: , , 其中n为学生人数,s 为第i个学生成绩。求某班学生的平均成绩和均方差。
解答:略。
2.用随机函数产生10个互不相同的两位整数存放到一维数组中,并输出其中的素数。
解答:
程序定义了三个函数:函数createAry对数组元素赋值,函数outAry输出数组,以及函数isPrime判断素数。由主函数main调用它们,完成题目要求。
(c)数组中全部元素的值(d)数组元素的个数
10.在下列选项中,(b, d)是错误的。
(a)gets和puts函数可以输入输出包含空格的字符串
(b)cin不能输入包含空格的字符串
(c)cout不能输出包含空格的字符串
(d)使用赋值运算符可以对字符数组整体赋值
11.下列描述中,错误的是(c)。
(a)输出字符指针就是输出字符串
char *p , *q ;
p = s1 ; q = s2 ;
while( *p &&*q )
{if ( *p == *q )
cout << *p ;
p ++ ;
q ++ ;
}
cout << endl ;
}
答案:
For
9.#include <string.h>
#include <iostream.h>
(c)int a[3]={0,1,2};(d) int a[3]={0};
3.已知 int a[10]={0,1,2,3,4,5,6,7,8,9},*p=a;则不能表示数组a中元素的式子是(c)。
(a)*a(b) *p(c) a(d) a[ p-a ]
4.已知 int a[] = { 0, 2, 4, 6, 8, 10 }, *p = a ; 值不等于0的表达式是(b,d)。
C++作业答案

4.1
1.以下对一维数组a的正确定义是(c)。
(a)int n=5,a[n];(b)int a(5);
(c) constint n=5;int a[n];(d)int n;cin>>n; int a[n];
2.下列数组定义语句中,不合法的是(a)。
(a)int a[3]={0,1,2,3};(b)int a[]={0,1,2};
j++;
if (j>i) a[i++]=x;//不同元素送入数组
}
}
void outAry(const int a[], int n)//输出数组元素
{ cout<<"数组元素:"<<endl;
for( int i=0; i<n; i++ )
cout << a[i] << '\t';
cout<<endl;
a[j][i - j ] = k ;
for( i=0 ; i<n ; i++ )
{for( j=0; j<n ; j++ )
cout << setw( 3 ) << a[i][j] ;
cout << endl ;
}
}
答案:
1 3 6 10 15
2 5 9 14 0
4 8 13 0 0
7 12 0 0 0
n = n/10;
} while( n != 0);
flag=1;//判断标志
i=0; j=k-1;//设置指示下标的指针
while(i<j)
if( b[i++] != b[j--] )//对称位置元素不相等
{ flag = 0;
break ;
}
if( flag ) cout << num << "是回文!" << endl;
}
int isPrime(int k)//判断k是否为素数
{ int i;
int m=int(sqrt(k));
for(i=2; i<=m; i++)
if (k%i==0) return 0;
return 1;
}
3.将一组数据从大到小排列后输出,要求显示每个元素及它们在原数组中的下标。
解答:略。
4.从键盘上输入一个正整数,判别它是否为回文数。所谓回文数是指正读和反读都一样的数。例如,123321是回文数。
cout << f( a, 3, 3 ) << endl ;
}
int f( int a[][3], int row, int col )
{int i, j, t=1 ;
for( i=0; i<row; i ++ )
for( j=0; j<col; j++ )
{a[i][j] ++ ;
if( i == j ) t*= a[i][j] ;
2.#include <iostream.h>
void main()
{ int a[9] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 } ;
int *p = a , sum = 0 ;
for( ; p<a+9; p++ )
Hale Waihona Puke Baiduif( *p % 2 == 0 ) sum += *p ;
cout << "sum = " << sum << endl ;
{char *str[]={"c++","basic","pascal"};
char **p;
int i;
p=str;
for(i=0;i<3;i++)
cout<<*(p+i)<<endl;
}
答案:
c++
basic
pascal
8.#include <iostream.h>
void main()
{char s1[] = "Fortran" , s2[] = "Foxpro" ;
解答:
本程序首先拆分整数的每位数字按顺序存放一个数组中。然后用两个变量记录数组元素最大和最小的下标值,它们是两个高端和低端指针。在循环中,比较这两个下标指示对称位置的元素,并使两个指针同时向中间移动(i++, j--)。只要发现一个不相等的元素,表示不是回文。直至i==j,若没有出现不相等元素,则该整数是回文。
(a)s1>s2(b)strcmp(s1,s2)==0
(c)strcmp(s1,s2)>0(d)strcmp(s2,s1)>0
4.2
1.#include <iostream.h>
void main()
{ int i,conut=0,sum=0;
float average;
int a[]={1,2,3,4,5,6,7,8,9,10};
else cout << num << "不是回文!" << endl;
}
本题判断一个整数是否回文,可以不用数组拆分数字,直接用高位与低位数字比较。还可以把程序写成递归方式。请读者试一试。
}
return t ;
}
答案:
45
6.#include <iostream.h>
void main()
{ char s[] = "abccda" ;
int i ; char c ;
for( i = 1 ; ( c=s[i] ) != '\0'; i ++ )
{switch( c )
{case 'a' : cout << '%' ; continue ;
{ int a[10]={0};
createAry(a,10);//对数组元赋值
outAry(a,10);//输出数组元素
for( int i=0; i<10; i++ )//寻找数组中的素数
{ if (isPrime(a[i]))
cout << a[i] << "是素数!" << endl;
}
cout<<(isPrime(25))<<endl;
(b)输出字符指针的间接引用就是输出单个字符
(c)具有相同字符的两个字符串常量相等
(d)两个数组名的比较是地址的比较
12.判断字符串s1和s2是否相等的表达式为(d)。
(a)s1=s2(b)s1==s2
(c)strcpy(s1,s2)==0(d)strcmp(s1,s2)==0
13.判断字符串s1是否大于字符串s2的表达式为(c)。
8.已知char*a[]={"fortran","basic","pascal","java","c++";则cout<<a[3];的显示结果是(c)。
(a) t(b)一个地址值(c) java(d)javac++
9.若用数组名作为调用函数的实参,则传递给形参的是(a)。
(a)数组存贮首地址(b)数组的第一个元素值
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int isPrime(int);
void createAry(int[], int);
void outAry(const int[], int);
void main()
{int i, t=1 ;
for( i=0 ; i<size; i ++ )
if( a[i]>0 ) t *= a[i] ;
return t;
}
答案:
135
5.int f( int [][3], int, int ) ;
#include <iostream.h>
void main()
{int a[][3] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 } ;
#include <iostream.h>
void main()
{ int b[10], i, j, k, flag ;
long num, n ;
cout << "num=" ; cin >> num;
k = 0;
n = num;
do//拆分整数,把各数字放入数组b
{ b[k++] = n % 10;
11 0 0 0 0
4.int f(int [],int);
#include <iostream.h>
void main()
{int a[] = { -1, 3, 5, -7, 9, -11 } ;
cout << f( a, 6 ) << endl ;
}
int f( int a[], int size )
}
void createAry(int a[], int n)
{ srand( time(0) );
int i, j, x;
i=0;
while(i<n)
{ x = rand();
if ( x<10 || x>=100 )//取两位数的随机值
continue;
j=0;
while(j<=i && a[j]!=x )//舍弃相同元素
void main()
{char str[][10] = { "vb", "pascal", "c++" }, s[10] ;
strcpy( s , ( strcmp( str[0] , str[1] ) < 0 ? str[0] : str[1] ) ) ;
if( strcmp( str[2], s ) < 0 ) strcpy( s, str[2] ) ;
}
答案:
sum = 20
3.const int n = 5 ;
#include <iostream.h>
#include <iomanip.h>
void main()
{int a[n][n]={ 0 }, i, j, k ;
for( k=1 , i=0 ; i<n ; i++ )
for( j=i; j>= 0; j-- , k++ )
for(i=0;i<10;i++)
{ if(a[i]%2==0)continue;
sum+=a[i];
conut++;
}
average=sum/conut;
cout<<"conut="<<conut<<'\t'<<"average="<<average<<endl;
}
答案:
conut = 5 average = 5
case 'b' : cout << '$' ; break ;
case 'c' : cout << '*' ; break ;
case 'd' : continue ;
}
cout << '#' << endl ;
}
}
答案:
$#
*#
*#
%
7.#include <iostream.h>
void main()
6.已知int a[][3]={{0,1},{2,3,4},{5,6},{7}};则a[2][1]的值是(c)。
(a)0(b)2(c)6(d)7
7.已知int a[3][3]={1,2,3,4,5,6,7,8,9};则不能表示数组元素a[2][1]的地址是(a,b)。
(a)&[2][1](b)*(a[2]+1)(c)a[2]+1(d)*(a+2)+1
(a) *(p++)(b) *(++p)(c) *(p--)(d) *(--p)
5.以下不能对二维数组a进行正确初始化的语句是(c)。
(a)int a[2][3]={0};
(b)int a[][3]={{0,1},{0}};
(c)int a[2][3]={{0,1},{2,3},{4,5}};
(d)int a[][3]={0,1,2,3,4,5};
相关文档
最新文档