当前位置:文档之家› C 课后习题答案第四章

C 课后习题答案第四章

case 'b' : cout << '$' ; break ;
case 'c' : cout << '*' ; break ;
case 'd' : continue ;
}
cout << '#' << endl ;
}
}
答案:
$#
*#
*#
%
7.#include <iostream.h>
void main()
#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()
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] ;
}
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 )//舍弃相同元素
}
答案:
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++ )
char *p , *q ;
p = s1 ; q = s2 ;
while( *p &&*q )
{if ( *p == *q ;
q ++ ;
}
cout << endl ;
}
答案:
For
9.#include <string.h>
#include <iostream.h>
解答:
本程序首先拆分整数的每位数字按顺序存放一个数组中。然后用两个变量记录数组元素最大和最小的下标值,它们是两个高端和低端指针。在循环中,比较这两个下标指示对称位置的元素,并使两个指针同时向中间移动(i++, j--)。只要发现一个不相等的元素,表示不是回文。直至i==j,若没有出现不相等元素,则该整数是回文。
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;
#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;
(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};
{ 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;
}
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.从键盘上输入一个正整数,判别它是否为回文数。所谓回文数是指正读和反读都一样的数。例如,是回文数。
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++ )
if( *p % 2 == 0 ) sum += *p ;
cout << "sum = " << sum << endl ;
(c)数组中全部元素的值(d)数组元素的个数
10.在下列选项中,(b, d)是错误的。
(a)gets和puts函数可以输入输出包含空格的字符串
(b)cin不能输入包含空格的字符串
(c)cout不能输出包含空格的字符串
(d)使用赋值运算符可以对字符数组整体赋值
11.下列描述中,错误的是(c)。
(a)输出字符指针就是输出字符串
(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)。
(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};
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] ) ;
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
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
相关主题