信息学奥赛初赛程序填空
- 格式:docx
- 大小:18.24 KB
- 文档页数:5
1.下列程序计算1000以内能被3整除的自然数之和,请完成程序。
#include <iostream.h>
void main()
{
int x=1, sum;
[1]
while(1)
{
if( [2] )break;
if( [3] )sum+=x;
x++;
}
cout<<sum<<endl;
}
2.下面的函数fun未使用中间变量实现对两个数的交换,请完成下列函数的定义。
void fun(int &x, int &y)
{
x+=y;
y= [1] ;
[2] ;
}
3.下面的函数bubble()是对整数数组a按升序排序的冒泡算法,其中,参数a存储将被排序的数据,
size是数组a中存储的元素数目,请完成该函数。
void bubble(int a[], int size)
{
[1] ;
for(int p=1; [2] ; p++)
for(int i=0; [3] ; i++)
if(a[i]>a[i+1])
{
temp=a[i];
[4] ;
[5] ;
}
}
3. 下面的函数Sort()用于对整数数组array按升序排序的选择排序算法,其中参数n表示array数
组中存储的数组元素数。
例如,假设数组array中有10个元素,选择排序就是:先将10个数
中的最小数与a[0]对换;再将a[1]到a[9]中的最小数与a[1]对换,….,直到排序完成。
请完成
该函数。
void Sort( int array[], int n)
{
int k;
[1] ;
for(int i=0; i<n-1; i++)
{
[2] ;
for(int j= [3] ; j<n; j++)
if(array[j]<array[k])k=j;
t=array[k];
[4] ;
[5] ;
}
}
4. 统计字符串中英文字母个数的程序。
#include <iostream>
using namespace std;
int count (char str[]);
void main()
{
char s1[80];
cout<<"Enter a line:";
[1] ;
cout<<"count="<<count(s1)<<endl;
}
int count (char str[])
{
int num=0;
for (int i=0;str[i];i++)
if (str[i]>='a' && str[i]<='z' || str[i]>='A' && str[i]<='Z') [2] ;
return [3] ;
}
5. 下面的函数Fun将一个整数字符串转换为一个整数。
# include <iostream>
# include <string>
using namespace std;
int Fun (char *str)
{
int num, digital, len;
[1] ;
len=strlen(str);
while (*str!=NULL)
{
digital=*str-'0';
for (int i=0; [2] ; i++)
[3] ;
len--;
str++;
num+=digital;
}
return num;
}
6. 以下程序求二维数组的最大值及其行列下标并打印。
#include <iostream>
#include <iomanip>
using namespace std;
void find( int a[3][4], int *maxi, int *maxj )
{
int i, j;
*maxi=0; *maxj=0;
for (i=0; i<3; i++)
for (j=0; j<4; j++)
if (a[i][j] [1] a[*maxi][*maxj])
*maxi=i, *maxj=j;
}
void main()
{
int a[3][4]={{3,8,9,5},{0,-1,1,-2},{3,7,6,3}}, maxp, minp, i, j;
find( [2] );
cout<<"max="<< [3] <<endl;
cout<<"i="<<maxp<<endl;
cout<<"j="<<minp<<endl;
}
7. 下面的Max函数用于求给定矩阵a中的最大元素值,以及其所在的行号和列号。
#include <iostream>
using namespace std;
void Max(int *a,int m,int n)
{
if (m<=0 || n<=0) return;
int i,j,row=0,column=0,max;
max=*a;
for (i=0;i<m;i++)
for (j=0;j<n;j++)
if ( [1] )
{
max= [2] ;
row=i;
column=j;
}
cout<<"max="<<max<<",row="<<row<<",column="<<column<<endl;
}
int main()
{
int a[3][4]={{5,12,23,56},{19,28,37,46},{-12,128,6,8}};
Max( [3] , 3, 4);
getchar();
return 0;
}
8. 下面的函数rotate()实现将二维数组m参数表示的方阵进行顺时针旋转90°。
例如,它将数组
11 22 33
44 55 66
77 88 99
变为:
77 44 11
88 55 22
99 66 33
请将程序补充完整。
[1] int SIZE=4;
[2] int Matrix[SIZE][SIZE];
void rotate(Matrix m)
{
[3] ;
for(int i=0; i<SIZE;i++)
for(int j=0; j<SIZE;j++)
temp[i][j]=m[ [4] ][i];
for(int i=0; i<SIZE; i++)
for(int j=0; j<SIZE;j++)
m[i][j]= [5] ;
}
9.下面的C++程序中,定义了一个描述时间的类Time,请在下划线处填入正确的程序代码。
#include <iostream>
using namespace std;
class Time {
public:
void set_time();
void [1] ;
private:
int hour;
int minute;
int [2] ;
};
void Time::set_time()
{
cin>>hour;
cin>> [3] ;
cin>>sec;
}
void Time::show_time()
{
cout<<hour<<":"<<minute<<":"<<sec<<endl; }。