6-1-01 整数交叉合并
分数 10
全屏浏览题目
切换布局
作者 唐艳琴
单位 中国人民解放军陆军工程大学
【难度为1级,难度等级为1-5级】
本题目要求将两个2位整数合并,交叉合并。当a=45,b=12,调用该函数后,c=1425。
函数接口定义:
int swap(int a,int b);
其中 a 和 b 是需要合并的两位数;函数返回交叉合并后的值。
裁判测试程序样例:
#include<stdio.h>
int swap(int a,int b);
int main()
{
int x,y,z;
scanf("%d%d",&x,&y);
z=swap(x,y);
printf("%d",z);
return 0;
}
/* 请在这里填写答案 */
小贴士:这是第一个函数题,一是请大家先去了解值传递、形参、返回值这些基本的函数语法,不要上来就做。你自己不懂函数的语法,自己造函数语法,你能解决报错吗?二是注意这里的形参a和b就是你要处理的变量,对a和b进行拆数,组合。三是这里的返回结果不是0,是组合后的新数。三是int swap(int a,int b)函数定义不要末尾加分号成int swap(int a,int b);这不是一条语句结束,这是一个函数的起始定义。四是不要写main函数了,读清楚题目!题目只要你写一个swap函数的功能,因此你的代码只需要长这样:
int swap(int a,int b)
{//写入函数功能的代码
}
不要写#include和main函数,多写算错。
输入样例:
12 34
输出样例:
3142
int swap(a,b)
{
return (b/10*1000+a/10*100+b%10*10+a%10);
}
6-2-01 水仙花数
分数 10
全屏浏览题目
切换布局
作者 唐艳琴
单位 中国人民解放军陆军工程大学
【难度为1级,难度等级为1-5级】
本题要求实现一个函数,判断输入的数是否为水仙花数。
函数接口定义:
int flower(int x);
函数返回值为1表示是水仙花数,0表示不是水仙花数。
裁判测试程序样例:
#include<stdio.h>
int flower(int x);
int main()
{
int a,k;
scanf("%d",&a);
k=flower(a);
if(k)
printf("%d yes",a);
else
printf("%d no",a);
}
return 0;
}
/* 请在这里填写答案 */
输入样例:
153
输出样例:
153 yes
int flower(int x)
{
int i,s,h;
s=0;
h=x;
while(x!=0)
{
i=x%10;
s=s+(i*i*i);
x=x/10;
}
if(s==h) return 1;
else return 0;
}
6-3-01 数列求和
分数 10
全屏浏览题目
切换布局
作者 唐艳琴
单位 中国人民解放军陆军工程大学
编写函数计算, sn=(1-1/2)+(1/3-1/4)+…+(1/(2n-1)-1/(2n)),sn作为函数值返回。
函数接口定义:
double add(int n);
函数返回sn。
裁判测试程序样例:
#include <stdio.h>
double add(int n);
int main()
{
int n;
double sum;
scanf("%d",&n);
sum=add(n);
printf("%.2f",sum);
return 0;
}
/* 请在这里填写答案 */
输入样例:
1
输出样例:
0.50
double add(int n)
{
double s=0;
for(int i=1;i<=n;i++)
{
s+=(1.0/(2*i-1)-1.0/(2*i));
}
return s;
}
6-4-01 求天数
分数 15
全屏浏览题目
切换布局
作者 唐艳琴
单位 中国人民解放军陆军工程大学
本题要求实现一个函数sumday,可计算输入的日期是这年中的第几天。
函数接口定义:
int sumday(int year,int month,int day);
函数返回第几天。
小贴士:这题有复杂做法,也有简单做法,关键是因为思路不同,算法不同,代码是顺着你的算法走的,代码是算法步骤的翻译,因此复杂的不是代码问题,是你的算法设计问题。
简单的做法:需要借助数组这种存储结构。一年只有365天和366天两种,区别就是平年2月28天,闰年2月是29天。因此把12个月的天数,用数组保存下来,2月存28天。如果判断year那一年是闰年,就把数组对应的2月改为29天,其他月不变。接下来用一个单循环来循环把每个月天数加起来,直到加到month对应的月。
这题的设计思路体现了算法+数据结构的理念。我的算法借助了数组这种存储结构,二者配合得到好的设计才能落地生成好的代码。
裁判测试程序样例:
#include<stdio.h>
int sumday(int year,int month,int day);
int main()
{
int year,month,day,days;
scanf("%d/%d/%d",&year,&month,&day);
days=sumday(year,month,day);
printf("%d",days);
return 0;
}
/* 请在这里填写答案 */
输入样例:
2020/2/5
输出样例:
36
int sumday(year,month,day)
{
int run,x=0;
int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
if((year%400==0)||((year%100!=0)&&(year%4==0))) run=1;
else run=0;
if(run) days[1]=29;
for(int i=0;i<month-1;i++) x+=days[i];
x+=day;
return x;
}
6-5-01 月纳税额计算
分数 15
全屏浏览题目
切换布局
作者 唐艳琴
单位 中国人民解放军陆军工程大学
本题目要求读入每月工资,计算按月需要累计缴纳的税额(税率见下图),此处只需显示应缴纳的税额,无需减去已缴纳部分。结果保留两位小数。 注意:每月有5000元免税额。

上图为按年累计应纳税所得额
函数接口定义:
double m_tax(double salary,int month);
其中salary和 month 是用户传入的参数,函数返回每月累计应纳税额。
裁判测试程序样例:
#include<stdio.h>
double m_tax(double salary,int month);
int main()
{
double money,tax;
int i;
for(i=1;i<=12;i++)
{
scanf("%lf",&money);
tax=m_tax(money,i);
printf("the sum of %d months tax is %.2f\n",i,tax);
}
return 0;
}
/* 请在这里填写答案 */
输入样例:
1000
2000
10000
5000
8000
500
2000
15000
1000
5000
6000
9000
输出样例:
在这里给出相应的输出。例如:
the sum of 1 months tax is 0.00
the sum of 2 months tax is 0.00
the sum of 3 months tax is 0.00
the sum of 4 months tax is 0.00
the sum of 5 months tax is 30.00
the sum of 6 months tax is 0.00
the sum of 7 months tax is 0.00
the sum of 8 months tax is 105.00
the sum of 9 months tax is 0.00
the sum of 10 months tax is 0.00
the sum of 11 months tax is 15.00
the sum of 12 months tax is 135.00
注意 :3月虽然工资为10000元,但3个月累计免税额为15000元,因此无需纳税。5月时累计免税额为25000元,累计工资收入为26000元,因此应纳税额为1000元,按税率为30元,后面同理所得。
double m_tax(double salary,int month)
{
double tax,s;
static double x=0;
static int j=0;
x+=salary;
s=x-5000*month;
if(s<=0) tax=0;
else if(s<=36000) tax=s*0.03;
else if(s<=144000) tax=s*0.1-2520;
else if(s<=300000) tax=s*0.2-16920;
else if(s<=420000) tax=s*0.25-31920;
else if(s<=660000) tax=s*0.3-52920;
else if(s<=960000) tax=s*0.35-85920;
else tax=s*0.45-181920;
return tax;
}
6-6-01 找素数并保存到数组中
分数 15
全屏浏览题目
切换布局
作者 唐艳琴
单位 中国人民解放军陆军工程大学
本题目要求查找n~m之间所有素数,存入一维数组a中。
函数接口定义:
int fun(int n,int m,int a[]);
其中 a 为存储的素数;函数返回素数的个数。
小贴士:
1.scanf语法”%d%d”没有空格,如果你还以为需要写成”%d %d”说明你没有明白scanf的默认语法。好比你睡觉默认是需要闭上眼睛的,还要先说闭上眼睛,再说睡觉吗?scanf语法”%d”默认的分割符是所有的空白字符(空格,回车和tab都行)默认可以用空格、回车等作为输入分隔符的。
2.注意下标不要越界,数组下标0-N-1。
裁判测试程序样例:
#include <stdio.h>
#define N 1000
int fun(int n,int m,int a[]);
int main()
{
int n,m,k,a[N],i;
scanf("%d%d",&n,&m);
k=fun(n,m,a);
for(i=0;i<k;i++)
printf("%d ",a[i]);
return 0;
}
/* 请在这里填写答案 */
输入样例:
10 100
输出样例:
11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
int fun(int n,int m,int a[])
{
int x=0,flag;
for(int i=n;i<=m;i++)
{
flag=0;
for(int j=1;j<=i;j++)
{
if(i%j==0) flag++;
}
if(flag==2)
{
a[x]=i;
x++;
}
}
return x;
}
6-7-01 整数数组移位
分数 10
全屏浏览题目
切换布局
作者 唐艳琴
单位 中国人民解放军陆军工程大学
整数数组有n个元素,将数组元素循环右移p位。假设元素原来为:1,2,3,4,5,6,p为3,则移动后的数组为:456123。
函数接口定义:
void move(int a[], int p);
裁判测试程序样例:
#include <stdio.h>
#define N 10
void move(int a[], int p);
int main()
{
int i,a[N]={1,2,3,4,5,6,7,8,9,10},k;
scanf("%d",&k);
move(a,k);
for(i=0;i<N;i++)
printf("%d ",a[i]);
return 0;
}
/* 请在这里填写答案 */
输入样例:
3
输出样例:
8 9 10 1 2 3 4 5 6 7
void move(int a[],int p)
{
int i,j,b[N+1];
if (p>N) p=p%N;
for(i=0;i<=N-1;i++) b[i]=a[i];
for(j=1;j<=p;j++)
{
for(i=10;i>=1;i--) b[i]=b[i-1];
b[0]=b[10];
}
for(i=0;i<=N-1;i++) a[i]=b[i];
}
6-8-01 统计比均分高的人数及成绩
分数 15
全屏浏览题目
切换布局
作者 唐艳琴
单位 中国人民解放军陆军工程大学
把高于等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过函数值返回。
函数接口定义:
int h_avg(int a[],int n,int b[]);
n 的值是a中的元素个数; b 中存储高于均分的成绩,高于均分的人数通过函数返回。
裁判测试程序样例:
#include <stdio.h>
#define N 10
int h_avg(int a[],int n,int b[]);
int main()
{
int n,i,x[N],k,y[N];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&x[i]);
k=h_avg(x,n,y);
for(i=0;i<k;i++)
printf("%d ",y[i]);
return 0;
}
/* 请在这里填写答案 */
输入样例:
5
1 2 3 4 5
输出样例:
3 4 5
int h_avg(int a[],int n,int b[])
{
int i,x=0,s=0;
double av;
for(i=0;i<n;i++) s+=a[i];
av=(double)s/n;
for(i=0;i<n;i++)
{
if(a[i]>=av)
{
b[x]=a[i];
x++;
}
}
return x;
}
6-9-02 整理奇偶数增强篇
分数 15
全屏浏览题目
切换布局
作者 唐艳琴
单位 中国人民解放军陆军工程大学
本题要求实现一个函数,将数组中的奇数元素排在前半段,偶数排在后半段。
此方法采用从前往后找偶数,再从后往前找奇数的方法,找到后两者交换。
如1,2,3,4,7,6,5经过函数整理后变成1,5,3,7,4,6,2。其中2和5进行了交换,4和7进行了交换。
提示:

函数接口定义:
void oddeven(int a[],int n);
其中 n 为数据元素个数。
裁判测试程序样例:
#include <stdio.h>
#define N 20
void oddeven(int a[],int n);
int main()
{
int a[N],i,n;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
oddeven(a,n);
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
/* 请在这里填写答案 */
输入样例:
7
1 2 3 4 7 6 5
输出样例:
1 5 3 7 4 6 2
void oddeven(int a[],int n)
{
int i,j,k;
for(i=0;i<n/2;i++)
{
for(j=n-1;j>=0;j--)
{
if((a[i]%2==0)&&(a[j]%2!=0))
{
k=a[i];
a[i]=a[j];
a[j]=k;
break;
}
}
}
}
6-10-02 简单排序
分数 10
全屏浏览题目
切换布局
作者 唐艳琴
单位 中国人民解放军陆军工程大学
本题要求实现一个函数,将数据完成从小到大排序功能。
函数接口定义:
void sort(int x[],int n);
其中 n 表示排序的元素个数。
裁判测试程序样例:
#include <stdio.h>
#define N 20
void sort(int x[],int n);
int main()
{
int a[N],n,i;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,n);
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
/* 请在这里填写答案 */
输入样例:
5
3 2 1 5 4
输出样例:
1 2 3 4 5
void sort(int x[],int n)
{
int i=0,a,b;
for(;i<n;i++)
{
b=0;
for (;b<n-1;b++)
{
if (x[b]>x[b+1])
{
a=x[b];
x[b]=x[b+1];
x[b+1]=a;
}
}
b=0;
}
}
Pingback:PTA2023作业练习函数题(11-24) – 热眶