当前位置:文档之家› 华南理工《高级语言程序设计C》平时作业

华南理工《高级语言程序设计C》平时作业

一、分析程序,写输出结果1.#include<iostream.h>#include<math.h>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 << " ";}}解:m 的取值为1,3,5,7,9 对应k的取值为0,1,1,2,3, 第二个for循环:只有当k=2和k=3时才执行,当k=2,i=2,m%i等于1为真,输出m为7 当k=3,i=2,m%i等于1为真,输出m为9, i=3,m%i等于0为假,无输出结果为: 7 92.#include<iostream.h>void fun();void main(){int i;for(i=1;i<5;i++) fun();cout<<endl;}void fun(){ static int a;int b=2;a += 2 ;cout<< a+b <<'\t';}解:主函数循环4次调用fun(); fun()函数内定义了静态局部变量a,所以a的值会保持到下一次调用。

结果为:4,6 ,8,103.#include<iostream.h>int fun(int n){ if(n==0) return 1;return 2*fun(n-1);}void main(){ int a=5;cout<<fun(a)<<endl;}解:fun()函数用递归求出2的n次方,结果为: 324.#include<iostream.h>void main(){ char *cp="word";for (int i=0 ; i<4; i++ )cout<<cp+i << '\t';}解:主函数4次循环中,第一次输出cp+i,此时cp指向“word”的第一个字符,所以输出“word”,之后cp依次往后移一个位置,输出此位置及后面的字符结果为:word ord rd d二、.根据程序功能填空。

1. 程序把10个数存储到一维数组a中,并求该数组中最大值。

#include<iostream.h>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= "<<max<<endl;}2.下面程序的功能是输出1至100之间每位数字的乘积大于每位数的和的数。

例如,45两位数字的乘积为4×5=20,和为4+5=9。

#include<iostream.h>void main(){ int n, k=1, s=0, m;for(n=1; n<=100; n++){ k=1; s=0;m=n ;while( m>0 ){ k*=m%10;s+=m%10;m=m/10 ;}if(k>s) cout<<n<<'\t';}}3.程序对输入的n求s = 1 + 1/23 + 1/33 + … + 1/n3 。

#include<iostream.h>void main(){double s; int i, n;cout<<" n= "; cin>>n;s = 0;for (i=1; i<n ; i++)s= s+/(i*i*i);cout<<"s="<<s<<endl;}4.函数create从键盘输入整数序列,以输入0为结束。

按输入顺序建立单向链表并返回表头。

struct node{int data; node * next;};node * create(){node *head, *p, *q;p = new node;head = p;cin>>p->data;while( p ){q = p;p=->data ;q->next = p;cin>>p->data;}if (head == p) head = NULL;else p=0 ;;return head;}5.以下程序求方程的全部整数解:3x + 2y - 7z = 5 ( 0 ≤ x, y, z ≤ 100 )#include<iostream.h>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 )continue ;z=z/7 ; //求出z的值if( z>=0 && z<100 ) //检查z的范围cout << "x=" << x << " y=" << y << " z=" << z << endl ;}}三、程序设计1. 编写函数输出以下形状的图形,其中构成图形的数字和输出的行数通过参数传送。

12 2 23 3 3 3 34 4 4 4 4 4 4答: void PrintFigure(int num, int row) {int i, j, k;num = num - row +1;for(i = 1; i <= row; i++) {j = 2*i-1;for(k = 1;k <= j; k++) cout<<num<<" "; num++; cout<<endl;}}2.请编程序,输入两个正整数啊a和b(a<b),输出a、b之间所有整数的因数(除1和本身)。

每行输出数据不超过10个。

例如,若输入a为6,b为8,则输出格式要求如下:the factors of 6 :2 3the factors of 7 :no factorthe factors of 8 :2 4答: #include<iostream.h> #include<math.h>void out(int a, int b) {int i, j, count;for(i = a; i <= b; i++) {count = 0;printf("\nthe factor of %d\n", i);for(j = 2; j < i; j++) {if(i % j == 0) {printf("%s%d", (count == 0 ? "":","), j);count++;}}if(count == 0)printf("no factor");}}3.请编程序,找出1至99之间的全部同构数。

同构数是这样一组数:它出现在平方数的右边。

例如:5是25右边的数,25是625右边的数,所以5和25都是同构数。

答:#include<iostream> using namespace std;void main() {int i, j, k; k = 10;for(i = 1; i <= 99; i++) {if(i == k) k *= 10;j = i * i;if(j % k == i)cout<< i << " ";}cout<<endl;}4. 编写一个程序,实现如下功能:(1)从键盘输入a op b。

其中a, b为数值;op为字符,限制为+、-、*、/ 。

(2)调用函数count(op,a,b),计算表达式a op b的值。

由主函数输出结果。

答:#include "stdafx.h" #include <iostream> using namespace std; class cal { public:int add(int x,int y) //加法定义函数 { return x+y; }int sub(int x,int y) //减法定义函数 { return x-y; }int mul(int x,int y) //乘法定义函数 { return x*y; }int div(int x,int y) //除法定义函数 { if(y==0)cout<<"0不能作除数"<<endl; else return x/y; } };int main() {cal c; //定义对象 int x,y;char ID;cout<<"请输入要计算的两个数及运算符,中间用空格隔开比如2 3 +"<<endl; cin>>x>>y>>ID;switch (ID) { case '+': cout<<c.add(x,y)<<endl;break;case '-': cout<<c.sub(x,y)<<endl;break;case '*': cout<<c.mul(x,y)<<endl;break;case '/': cout<<c.div(x,y)<<endl; }; return 0; }5. 编写一个程序,实现如下功能:(1)输入k(<100)个整数到数组x[100]中;(2)计算k个数的平均值及大于平均值的元素个数。

答:#include<iostream.h> voidmain() {Int x[100],k,i,n;Double sum=0.0,ave;cout<<"HowmanyData?\n";cin>>k;for(i=0;i<k;i++) { cin>>x[i];sum+=x[i];}ave=sum/k;n=0;for(i=0;i<k;i++)//求大于平均值的元素个数if(x[i]>ave)n++; cout<<"average="<<ave<<"\n";cout<<"Thereare"<<n<<"elementslargethanaverage.\n";}6. 定义函数void reversion(int ary[],int size);逆置数组ary的元素。

相关主题