《高级语言程序设计C++》平时作业.docx
《《高级语言程序设计C++》平时作业.docx》由会员分享,可在线阅读,更多相关《《高级语言程序设计C++》平时作业.docx(16页珍藏版)》请在冰豆网上搜索。
《高级语言程序设计C++》平时作业
一、分析程序,写输出结果
1. #include
#include
void main()
{int m, k, i ;
for( m=1; m<=10; m+=2 )
{ k = m/3;
for( i=2; i<=k; i++ )
if( m%i ) cout << m << " ";
}
}
7 9
2. #include
void fun();
void main()
{int i;
for(i=1;i<5;i++) fun();
cout<}
void fun()
{ static int a;
int b=2;
a += 2 ;
cout<< a+b <<'\t';
}
4 6 8 10
3. #include
int fun(int n)
{ if(n==0) return 1;
return 2*fun(n-1);
}
void main()
{ int a=5;
cout<}
32
4. #include
void main()
{ char *cp="word";
for (int i=0 ; i<4; i++ )
cout<}
wordordrdd
二、.根据程序功能填空。
1. 程序把 10 个数存储到一维数组 a 中,并求该数组中最大值。
#include
void main()
{ int max;
int a[10]={76,55,95,87,85,83,65,90,77,85};
int *p=a;
max=*p;
for( ; p<&a[10]; p++)
if( *p>max ) max= *p;
cout<<"max= "<}
2.下面程序的功能是输出 1 至 100 之间每位数字的乘积大于每位数的和的数。
例如,45 两位
数字的乘积为 4×5=20,和为 4+5=9。
#include
void main()
{ int n, k=1, s=0, m;
for(n=1; n<=100; n++)
{ k=1; s=0;
1m=n;
while(2m)
{ k*=m%10;
s+=m%10;
3 m/=10;
}
if(k>s) cout<}
}
3.程序对输入的 n 求 s = 1 + 1/23 + 1/33 + … + 1/n3 。
#include
void main()
{double s; int i, n;
cout<<" n= ";cin>>n;
s = 0;
for (i=1;is=s=s+(1.0/(n*n*n) ;
cout<<"s="<
}
4.函数 create 从键盘输入整数序列,以输入 0 为结束。
按输入顺序建立一个以 head 为表头
的单向链表。
struct node{int data; node * next;};
create(node *head)
{node *p, *q;
p=new node;
cin>>p->data;
q=p;
while(p->data)
{if(head==NULL) head=p;
elseq->next=p;;
q=p;
p=new node;;
cin>>p->data;
}
q->next=NULL;
delete p;
} }
5.以下程序求方程的全部整数解:
3x + 2y - 7z = 5( 0 ≤ x, y, z ≤ 100 )
#include
void main()
{ int x, y, z ;
for( x=0; x<=100; x++ )
for( y=0; y<=100; y++ )
{ if( ( z=3*x+2*y-5 ) % 7 )
break;
z=3*x+2*y-5)/7;//求出z的值
if(z<=100&&z>=0) //检查z的范围
cout << "x=" << x << " y=" << y << " z=" << z << endl ;
}
三、程序设计
1. 编写函数输出以下形状的图形,其中构成图形的数字和输出的行数通过参数传送。
1
2 2 2
3 3 3 3 3
4 4 4 4 4 4 4
#include
void main()
{
int i,n;
for (i=0;i<5; i++){
for (n=0;n<2*i-1;n++){
cout<
}
cout<}
}
2. 请编程序,输入两个正整数啊 a 和 b(a
。
每行输出数据不超过 10 个。
例如,若输入 a 为 6,b 为 8,则输出格式要求如下:
the factors of 6 :
2 3
the factors of 7 :
no factor
the factors of 8 :
2 4
#include
using namespace std;
void printFactor(int i);
void main()
{
int numA,numB;
cout<<"Input Two Numbers:
"<cin>>numA>>numB;
for (int i=numA;i<=numB;i++)
{
printFactor(i);
}
}
void printFactor(int i)
{
cout<<" FACTORS OF "<
"<int *fact=new int();
int n=0;
for (int k=2;k
{
if (i%k==0)
{
fact[n]=k;
n++;
}
}
if (n==0)
{
cout<<"NO FACTOR"<}
else
{
for (int j=0;j{
cout<if ((j+1)%10==0)
{
cout<}
}
cout<}
}
3.请编程序,找出 1 至 99 之间的全部同构数。
同构数是这样一组数:
它出现在平方数的右边。
例如:
5 是 25 右边的数,25 是 625 右边的数,所以 5 和 25 都是同构数。
#include
using namespace std;
int main()
{
long x,y,i=10;
int flag=0;
for(x=1;x<100;x++)
{
y=x*x;
while(y/i!
=0)
{
if(y%i==x)
{
flag=1;
break;
}
i=i*10;
}
if(flag==1) cout<flag=0;
i=10;
}
return 0;
}
4. 编写一个程序,实现如下功能:
(1)从键盘输入 a op b。
其中 a, b 为数值;op 为字符,限制为+、-、*、/ 。
(2)调用函数 count(op,a,b),计算表达式 a op b 的值。
由主函数输出结果。
#include
using namespace std;
template
T COUNT(char op,T a,T b)
{
switch(op)
{
case '+':
return (a+b);break;
case '-':
return (a-b);break;
case '*':
return (a*b);break;
case '/':
return (a/b);break;
default:
cout << "Error." << endl;break;
}
}
int main()
{
int a,b;
char op;
cin >> a >> op >> b;
if( op == '/' && b == 0 )
{
cout << "Input Error." << endl;
}
cout << "Result is " << COUNT(op,a,b) << endl;
system("pause");
return 0;
}
5. 编写一个程序,实现如下功能:
(1)输入 k(<100)个整数到数组 x[100]中;
(2)计算 k 个数的平均值及大于平均值的元素个数。
#include
float average(int [],int);
int num(int [],int);
void main()
{
int k,i,x[100];float ave;
for(k=0;k<100;k++)
{
cin>>i;
if(i==0){
break;
}
x[k]=i;
}
ave=average(x,k);
cout<<"平均值"<cout<<"大于平均值的元素个数"<}
float average(int u[],int k)
{
int a,sum=0;
for(a=0;asum+=u[a];
return (float)sum/k;
}
int num(int u[],int k)
{
int b,c,m=0;
int ave=average(u,k);
for(c=0;c{
if(u[c]>ave)m++;}
return m;
}
6. 定义函数
void reversion(int ary[],int size);
逆置数组ary的元素。
例如实参数组原来为 [ 1,5,3,2,6,8,9,4 ],调用函数
reversion 后变成为 [ 4,9,8,6,2,3,5,1 ]。
void reversion(int ary[],int size){
int i;
int temp;
for(i=0;itemp = ary[i];
ary[i] = ary[size-i];
ary[size-i] = temp;
}
}
7.数组 a 包含 50 个整数,把 a 中所有的后项除以前项之商取整后存入数组 b(即 b[i]=a[i]
/a[i-1],并且 b[50]=a[20]/a[1]),最后按每行 5 个元素的格式输出数组 b。
#include
void main()
{ int a[50],b[50];
int i,j=0;//j 用来控制换行
for(i=1;i<=50;i++)
{ cout<<"\nInput a[ "<
"; cin>>a[i];
}
for(i=1;i<=50;i++)
{ if(i!
=50)b[i]=a[i]/a[i-1];
elseb[i]=a[20]/a[1];
}
for(i=0;i<=50;i++)
{ if(j!
=5) cout<<"\n";
cout<<""<
}
}
8. 编程输出所有不超过 100 的其平方具有对称性质的正整数(也称回文数)。
输出格式如下:
number square
11
24
39
11 121
22 484
26 676
#include
void main()
{ int i;
long text(int i);//判断 i 的 i^2 是不是回文数的函数
for(i=4;i<=100;i++)
{ if(text(i)!
=0) cout<<"\n "<
}
}
long text(int i)
{ long sum,k,sum1=0;
sum=i*i;
k=sum;
while(k>0)
{ sum1=sum1*10+k%10 ;
k=k/10;
}
if(sum1==sum)return i*i;
elsereturn 0;
}
9. 编写程序,打印如下杨辉三角。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
#include
void main()
{
int a[5][5],i,j;
for(i=0;i<5;i++)
{
for(j=5;j>=i;j--)
printf("%2c",' ');/*两个空格*/
for(j=0;j<=i;j++)
{
if(i==j||j==0)
a[i][j]=1;
else
a[i][j]=a[i-1][j]+a[i-1][j-1];
printf("%3d ",a[i][j]); /*%3d 后一个空格*/
if(i==j)
printf("\n");
}
}
}
10.定义一个函数,计算长度为 k 的整型数组元素的平均值及大于平均值的元素个数。
调用函
数的语句为:
count(a,k,ave,num);
其中 a 是数组名,k 是数组元素个数,ave 返回的平均值,num 返回大于平均值的元素个数。
void count(a,k,&ave,&num){
int count = 0,sum = 0;
int i;
//求平均数
for(i = 0; i < a; i++){
sum += a[i];
}
ave = (float)sum / (float)a;
//求大于平均数的个数
for(i = 0; i < a; i++){
if(a[i] > ave) count++;
}
num = count;
}