1.本题要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0a1⋯an−1)变换为(an−m⋯an−1a0a1⋯an−m−1)(最后m个数循环移至最前面的m个位置)。
#include
#define MAXN 10
void ArrayShift(int a[], int n, int m)
{
if(m > n) //判断是否超过数组超度,如是则取余移动
m=m%n;
int i,j,b[MAXN];
for(i = 0;i < m;i++) //移动m次
{
int temp = a[n-1];
for(j = n-1;j > 0;j--)
{
a[j] = a[j-1];
}
a[0] = temp;
}
}
int main()
{
int a[MAXN], n, m;
int i;
scanf("%d %d", &n, &m);
for (i = 0; i < n; i++) scanf("%d", &a[i]);
ArrayShift(a, n, m);
for (i = 0; i < n; i++) {
if (i != 0) printf(" ");
printf("%d", a[i]);
}
printf("\n");
return 0;
}
int ArrayShift(int a[], int n, int m )
{
int b[MAXN], i;
if(m > n) m=m%n; //m为移动距离,n为数组长度,将移动距离调整为右移量
for(i=0;i
2.本题要求实现一个用选择法对整数数组进行简单排序的函数。
void sort( int a[], int n )
{
int i,j,temp;
for (i = 0; i < n -1; i++)
{
for (int j = 0; j < n - i -1; j++)
{
if (a[j] > a[j + 1])
{
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
3.本题要求实现一个函数,从一张成绩单中求平均成绩。成绩结构体定义如下:
typedef struct
{
char name[50]; //姓名
int score; //成绩
}Score;
//本程序输入n,再输入n个学生及成绩,输出平均成绩。
#include
#include
typedef struct
{
char name[50]; //姓名
int score; //成绩
}Score;
double average ( Score a[], int n );
int main()
{
Score *s;
int n,i;
scanf("%d",&n);
if(n<=0) return 0;
s=(Score *)malloc(n*sizeof(Score));
for(i=0;i
double average ( Score a[], int n )
{
int i;
double sum=0,ave=0;
for(i=0;i
4. 某歌唱比赛计分规则是:对于评委给出的分数,去掉一个最高分,去掉一个最低分,剩余分数求算术平均值并保留2位小数,作为选手最终得分。本题要求实现这样一个计分函数。
评委给出的分数存在数组中,分数均为0~100
之间的整数,并且保证评委人数在3~20
之间。
double getScore(int *score, int total);
其中score
和total
是传入的参数,score
是评委打分数组的首地址,total
是评委人数;
函数将选手的得分以double
类型返回,注意:函数返回的分数只需保证小数点后至少2位精确数字即可,打印2位小数得分的 *** 作由函数调用者进行。
/* 此测试程序仅为示例,实际的测试程序可能不同,不要仅针对样例的输入和输出编写函数,而是要根据题意要求编写函数 */
#include
double getScore(int *score, int total);
int main()
{
int score[5] = {92, 90, 99, 95, 98}; /* 仅为示例,实际的测试程序中,数组大小和元素数值都可能与样例不同 */
printf("%.2f\n", getScore(score, 5) ); /* getScore( )函数只负责返回分值,由main函数中的代码负责按照2位小数打印输出 */
return 0;
}
/* 你所编写的函数代码将被嵌在这里,注意:不要提交你编写的用于测试的main( )函数,否则无法通过编译 */
double getScore(int *score, int total)
{
int min=999,max=0,i;
double sum = 0;
for(i = 0;i < total;i++)
{
if(max < *(score+i))
{
max=*(score+i);
}
if(min > *(score+i))
{
min=*(score+i);
}
}
for(i=0;i
5.编写三个函数:求两个整数的最大值、最小值、和。分别用这三个函数作为实参,再写一个计算函数compute,对两个整数进行各种计算。其中一个形参为指向具体算法函数的指针。
函数接口定义:int max(int a, int b);
int min(int a, int b);
int sum(int a, int b);
int compute(int a, int b, int(*func)(int, int));
#include
using namespace std;
int max(int a, int b);
int min(int a, int b);
int sum(int a, int b);
int compute(int a, int b, int(*func)(int, int));
int main()
{
int a, b, res;
cin >> a >> b;
res = compute(a, b, & max);
cout << "Max of " << a << " and " << b << " is " << res << endl;
res = compute(a, b, & min);
cout << "Min of " << a << " and " << b << " is " << res << endl;
res = compute(a, b, & sum);
cout << "Sum of " << a << " and " << b << " is " << res << endl;
return 0;
}
int compute(int a, int b, int(*func)(int, int))
{
return (*func)(a, b);//func(a, b)
}
int max(int a, int b)
{
return a>b?a:b;
}
int min(int a, int b)
{
return a>b?b:a;
}
int sum(int a,int b)
{
return a+b;
}
6.本题要求实现一个函数swap,实现两个整数的交换。
void swap (int &a,int &b)
{
int t;
t = a;
a = b;
b = t;
}
7.求矩阵的所有不靠边元素之和,矩阵行的值m从键盘读入(2<=m<=10),调用自定义函数Input实现矩阵元素从键盘输入,调用Sum函数实现求和。(只考虑float型,且不需考虑求和的结果可能超出float型能表示的范围)。
void Input(float a[][N],int m)
{
for(int i=0;i
8.英美人的姓名比较复杂,一般都由三个名字组成:教名、自取名和姓氏。假设所有名字的长度均不超过30个字符。请编写函数,根据教名、自取名和姓氏,生成完整的名字。
void FullName(char* full, const char* first, const char* middle, const char* last)
{
int i = 0, j = 0;
for (i = 0;first[i] != ''; i++)
{
full[j++] = first[i];
}
if (j != 0 && middle[0] != '') {
full[j++] = ' ';
}
for (i = 0;middle[i] != ''; i++) {
full[j++] = middle[i];
}
if (j != 0 && last[0] != '')
{
full[j++] = ' ';
}
for (i = 0; last[i] != ''; i++)
{
full[j++] = last[i];
}
if (j==0)
{
strcpy(full,"Noname");
full[6]='';
}
else
full[j] = '';
}
9.某商店开展买一送一活动,购买两件商品时,只需支付价格较高的商品的金额。要求程序在输入两个商品的价格后,输出所应支付的金额,请根据裁判程序编写函数cut,将代码补充完整。
#include
using namespace std;
//请在此处添加代码
int main(){
float a,b;
cin>>a>>b;
cut(a,b)=0;
cout<<"to pay:"<
10.输入10个整数,完成一个函数使数据 重新排序以后输出(也按空格分隔),要求:
输出奇数在前偶数在后
#include
#include
#include
using namespace std;
void sort_array(int* a);
/* 请在这里填写答案 */
int main(){
int a[10];
for (int i=0;i < 10; i++)
cin>>a[i];
sort_array(a);
return 0;
}
void sort_array(int *a)
{
int s[10], b[10], c[10], i, j = 0, k = 0, m, n;
for (i = 0; i < 10; i++)
{
if (*(a + i) % 2 == 0) //偶数
{
b[j++] = *(a + i);
}
else//奇数
{
c[k++] = *(a + i);
}
}
for (m = 0; m < j - 1; m++) //升序
{
for (n = 0; n < j - 1 - m; n++)
{
if (b[n] > b[n + 1])
{
int temp1 = b[n];
b[n] = b[n + 1];
b[n + 1] = temp1;
}
}
}
for (m = 0; m < k - 1; m++) //降序
{
for (n = 0; n < k - m - 1; n++)
{
if (c[n] < c[n + 1])
{
int temp2 = c[n];
c[n] = c[n + 1];
c[n + 1] = temp2;
}
}
}
int ct = 0, nt = 0;
for (i = 0; i < 10; i++)
{
if (i < k )
s[i] = c[ct++];
else
s[i] = b[nt++];
}
for (i = 0; i < 10; i++)
{
if (i != 9)
cout << s[i] << ' ';
else
cout << s[i];
}
}
int cmp(int a,int b)
{
if((a%2==1&&b%2==0)||((a%2==1&&b%2==1)&&a>b)||((a%2==0&&b%2==0)&&a
11.
梦山高中现需要将某普通班的最优秀学生调整入理科实验班。为此,将从两个方面考察学生,一是数学和英语两门课的总分;另一个是所有四门课的总分。分别找出两科总分和全科总分的第一名,并从中决定调整人选。
输入将首先输入学生数n, (n为不超过80的正整数);接下来依次输入各位学生的学号,数学、英语、语文、理科综合成绩。学号及四科成绩均为不超过300的正整数。
输出时:第一行输出两科总分第一的学号,第二行输出四科总分第一的学号。 约定在两位学生成绩相同时,优先选择学号较小的学生;各位学生的学号均不相同
#include
using namespace std;
const int N=80;
struct Student{
int num;
int score[4];
};
/* 请在这里填写答案 */
int main()
{
int i, j, k, n;
bool s2(const Student &, const Student &);
bool s4(const Student &, const Student &);
Student st[N];
cin>>n;
for(i=0;i>st[i].num;
for(j=0;j<4;j++) cin>>st[i].score[j];
}
cout<
bool s2(const Student &a, const Student &b)
{
if((a.score[0]+a.score[1]>b.score[0]+b.score[1])||((a.score[0]+a.score[1]==b.score[0]+b.score[1])&&a.numb.score[0]+b.score[1]+b.score[2]+b.score[3])||((a.score[0]+a.score[1]+a.score[2]+a.score[3]==b.score[0]+b.score[1]+b.score[2]+b.score[3])&&(a.num
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)