6-11-02 求二维数组中的最大值
分数 10
全屏浏览题目
切换布局
作者 唐艳琴
单位 中国人民解放军陆军工程大学
本题要求实现一个函数,可计算二维数组中的最大值。
函数接口定义:
int fun(int a[][N]);
其中 a 是用户传入的参数。函数须返回数组a中的最大值。
裁判测试程序样例:
#include <stdio.h>
#define M 3
#define N 4
int fun(int a[][N]);
int main()
{
int x[M][N],i,j,max;
for(i=0;i<M;i++)
for(j=0;j<N;j++)
scanf("%d",&x[i][j]);
max=fun(x);
printf("max=%d",max);
return 0;
}
/* 请在这里填写答案 */
输入样例:
1 2 3 4 5 6 7 8 9 10 11 12
输出样例:
max=12
int fun(int a[][N])
{
int max=0,m=0,n=0;
for (;m<M;m++)
{
for (;n<N;n++)
{
if (a[m][n]>max)
max=a[m][n];
}
n=0;
}
return max;
}
6-12-02 统计每列最小元素
分数 15
全屏浏览题目
切换布局
作者 唐艳琴
单位 中国人民解放军陆军工程大学
找出二维数组每列中最小元素,并依次放入b所指一维数组中
函数接口定义:
void small(int a[][N],int b[]);
其中 b中存储 a 数组中的每列最小值。
裁判测试程序样例:
#include <stdio.h>
#define M 3
#define N 4
void small(int a[][N],int b[]);
int main()
{
int i,j,x[M][N],y[N];
for(i=0;i<M;i++)
for(j=0;j<N;j++)
scanf("%d",&x[i][j]);
small(x,y);
for(i=0;i<N;i++)
printf("%d ",y[i]);
return 0;
}
/* 请在这里填写答案 */
输入样例:
1 2 3 4
5 6 1 9
9 5 2 3
输出样例:
1 2 1 3
void small(int a[][N],int b[])
{
int i=0,min=0,j=0,l=0;
for (;i<N;i++)
{
min=a[0][i];
for (j=0;j<M;j++)
{
if (a[j][i]<min)
min=a[j][i];
}
b[l]=min;
l++;
}
}
6-13 判回文
分数 10
全屏浏览题目
切换布局
作者 唐艳琴
单位 中国人民解放军陆军工程大学
本题要求实现一个函数,判断字符串是否是回文。如果是则返回1,否则返回0。
函数接口定义:
int isecho(char a[]);
返回值为1,表示是回文;返回值为0,表示不是回文。
裁判测试程序样例:
#include <stdio.h>
#define N 100
int isecho(char a[]);
int main()
{
char a[N];
int k;
scanf("%s",a);
k=isecho(a);
if(k)
printf("%s yes",a);
else
printf("%s no",a);
return 0;
}
/* 请在这里填写答案 */
输入样例:
1234321
输出样例:
在这里给出相应的输出。例如:
1234321 yes
int isecho(char a[])
{
int i,n;
for (n=0;;)
{
if (a[n]!='\0')
n++;
else break;
}
for (i=0;i<n/2;i++)
{
if (a[i]!=a[n-1-i])
break;
}
if (i==n/2)
return 1;
else return 0;
}
6-14 二维数组变一维数组
分数 10
全屏浏览题目
切换布局
作者 唐艳琴
单位 中国人民解放军陆军工程大学
将一M行N列的二维字符数组按列优先顺序存储到一个字符串中。例如,若二维数组中数据为:
W W W W
S S S S
H H H H
则字符串中内容应是WSHWSHWSHWSH。
函数接口定义:
void move(char a[][N],char b[]);
裁判测试程序样例:
#include <stdio.h>
#define M 3
#define N 4
void move(char a[][N],char b[]);
int main()
{
int i,j;
char x[M][N],y[M*N+1];
for(i=0;i<M;i++)
for(j=0;j<N;j++)
scanf("%c",&x[i][j]);
move(x,y);
printf("%s",y);
return 0;
}
/* 请在这里填写答案 */
输入样例:
WWWWSSSSHHHH
输出样例:
WSHWSHWSHWSH
void move(char a[][N],char b[])
{
int m,n,i=0;
for (n=0;n<N;n++)
for (m=0;m<M;m++)
{
b[i]=a[m][n];
i++;
}
}
6-15 简单表达式求值
分数 15
全屏浏览题目
切换布局
作者 唐艳琴
单位 中国人民解放军陆军工程大学
本题要求实现两个整数的运算,运算符仅有四种:+、-、* 、/ ,但是以字符串的形式输入表达式。注意这里的除数结果是整数,即5/4=1。
函数接口定义:
int cal( char *a );
其中 a是用户传入的参数,此处为表达式,表达式。
裁判测试程序样例:
在这里给出函数被调用进行测试的例子。例如:
#include <stdio.h>
int cal( char *s );
int main()
{
char a[100];
int res;
scanf("%s",a);
res=cal(a);
printf("%d",res);
return 0;
}
/* 请在这里填写答案 */
输入样例:
123+12=
输出样例:
135
int cal( char *a )
{
int n,i=0,j=0,p; // P是运算符
for (n=0;a[n]>='0'&&a[n]<='9';n++)
i=i*10+a[n]-48;
p=n;
for (n=n+1;a[n]>='0'&&a[n]<='9';n++)
j=j*10+a[n]-48;
if (a[p]=='+')
return i+j;
if (a[p]=='-')
return i-j;
if (a[p]=='*')
return i*j;
if (a[p]=='/')
return i/j;
}
6-16 字符串移位
分数 15
全屏浏览题目
切换布局
作者 唐艳琴
单位 中国人民解放军陆军工程大学
本题要求实现一个函数,字符串由字符和 * 号组成,要求除头部与尾部的 * 号外,删除字符串中其他 * 号。如 * * * ab * CDd * * * ef * * ,则函数执行结果为* * * abCDdef * * 。
函数接口定义:
void move(char a[]);
裁判测试程序样例:
#include <stdio.h>
#define N 100
void move(char a[]);
int main()
{
char a[N];
scanf("%s",a);
move(a);
printf("%s",a);
return 0;
}
/* 请在这里填写答案 */
输入样例:
***ab*CDd***ef**
输出样例:
***abCDdef**
void move(char a[])
{
int i,j=0,m;
char b[100];
for (i=0;a[i]!='\0';i++)
{
if (a[i]=='*')
{
b[j]=a[i];
j++;
}
else break;
}
for (;a[i]!='\0';i++)
{
if (a[i]>='a'&&a[i]<='z'||a[i]>='A'&&a[i]<='Z')
{
b[j]=a[i];
j++;
m=i;
}
}
for (m=m+1;a[m]!='\0';m++)
{
if (a[m]=='*')
{
b[j]=a[m];
j++;
}
else break;
}
for (i=0;i<j;i++)
a[i]=b[i];
a[i]='\0';
}
6-17 字符串删除
分数 10
全屏浏览题目
切换布局
作者 唐艳琴
单位 中国人民解放军陆军工程大学
本题要求实现一个函数,删除字符串ASCII值为奇数的字符。
函数接口定义:
void del(char a[]);
裁判测试程序样例:
#include <stdio.h>
#define N 100
void del(char a[]);
int main()
{
char a[N];
scanf("%s",a);
del(a);
printf("%s",a);
return 0;
}
/* 请在这里填写答案 */
输入样例:
abcdefg
输出样例:
bdf
void del(char a[])
{
int i,n,b[N],j;
n=sizeof(a);
for (i=0,j=0;i<n;i++)
{
if (a[i]%2==0)
{
b[j]=a[i];
j++;
}
}
for (i=0;i<j;i++)
{
a[i]=b[i];
}
a[j]='\0';
}
6-18 统计单词个数
分数 15
全屏浏览题目
切换布局
作者 唐艳琴
单位 中国人民解放军陆军工程大学
本题要求实现一个函数,可统计字符串有几个单词。注意这里的单词不依赖于任何语言,单词的认定以空格分隔开的即为单词,而且单词间的空格可以有多个。
例如x^2 = 6,则该函数应该返回3,分别对应x^2,= 和6三个单词。
函数接口定义:
int total(char s[]);
函数返回单词个数。
裁判测试程序样例:
#include <stdio.h>
#define N 100
int total(char s[]);
int main()
{
char a[N];
int k;
gets(a);
k=total(a);
printf("%d",k);
return 0;
}
/* 请在这里填写答案 */
输入样例:
i am a student
输出样例:
4
int total (char s[])
{
int k,i,j,x=0;
k=strlen(s);
for (i=0,j=1;i<k;i++)
{
if(x==0)
{
if(s[i]==' ')
{
while(s[i]==' ')
{
i++;
}
}
x++;
}
for(;i<k;i++)
{
if(s[i]==' ')
{
while(s[i]==' ')
{
i++;
}
j++;
}
}
}
if(s[i-2]==' ') j--;
return j;
}
6-19 求结构体平均成绩
分数 10
全屏浏览题目
切换布局
作者 唐艳琴
单位 中国人民解放军陆军工程大学
本题要求实现一个函数,可统计结构体中成绩项的平均成绩。
结构体由两项组成:学号和成绩。
函数接口定义:
double avg(RECORD x[],int n);
其中 n 是结构体数组的元素个数。
裁判测试程序样例:
#include <stdio.h>
#define N 20
typedef struct
{
char no[10];
double score;
}RECORD;
double avg(RECORD x[],int n);
int main()
{
RECORD a[N];
int n,i;
double av;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%s%lf",a[i].no,&a[i].score);
av=avg(a,n);
printf("%f",av);
return 0;
}
/* 请在这里填写答案 */
输入样例:
5
1001 1
1002 2
1003 3
1004 4
1005 5
输出样例:
3.000000
double avg(RECORD x[],int n)
{
double sum=0;
int i;
for (i=0;i<n;i++)
sum+=x[i].score;
sum/=n;
return sum;
}
6-20 阶乘计算升级版
分数 20
全屏浏览题目
切换布局
作者 陈越
单位 浙江大学
本题要求实现一个打印非负整数阶乘的函数。
函数接口定义:
void Print_Factorial ( const int N );
其中N是用户传入的参数,其值不超过1000。如果N是非负整数,则该函数必须在一行中打印出N!的值,否则打印“Invalid input”。
裁判测试程序样例:
#include <stdio.h>
void Print_Factorial ( const int N );
int main()
{
int N;
scanf("%d", &N);
Print_Factorial(N);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
15
输出样例:
1307674368000
int a[100];
void Print_Factorial ( const int N )
{
long long int sum;
int i,j=0;
if (N<0)
printf ("Invalid input");
if (N==0)
printf ("1");
if (N>0)
{
int a[3000]={0};
a[0]=1;
int i,j,k;
int m,n;
for (i=2;i<=N;i++)
{
n=0;
for (j=0;j<3000;j++)
{
m=a[j]*i+n;
a[j]=m%10;
n=m/10;
}
}
for (i=2999;i>=0;i--)
if (a[i]!=0)
break;
for (j=i;j>=0;j--)
printf ("%d",a[j]);
}
}
6-21 长整数转化成16进制字符串
分数 15
全屏浏览题目
切换布局
作者 张泳
单位 浙大城市学院
本题要求实现一个将长整数转化成16进制字符串的简单函数。
函数接口定义:
void f( long int x, char *p );
其中x是待转化的十进制长整数,p指向某个字符数组的首元素。函数f的功能是把转换所得的16进制字符串写入p所指向的数组。16进制的A~F为大写字母。
裁判测试程序样例:
#include <stdio.h>
#define MAXN 10
void f( long int x, char *p );
int main()
{
long int x;
char s[MAXN] = "";
scanf("%ld", &x);
f(x, s);
printf("%s\n", s);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例1:
123456789
输出样例1:
75BCD15
输入样例2:
-125
输出样例2:
-7D
void f( long int x, char *p )
{
int a,b=0,i=0;
char q[MAXN];
if (x<0)
{
p[b]='-';
b++;
x=-1*x;
}
//if (x==0)
// p[b]='0';
while (x>0)
{
a=x%16;
switch (a)
{
case 0: q[i]='0';break;
case 1: q[i]='1';break;
case 2: q[i]='2';break;
case 3: q[i]='3';break;
case 4: q[i]='4';break;
case 5: q[i]='5';break;
case 6: q[i]='6';break;
case 7: q[i]='7';break;
case 8: q[i]='8';break;
case 9: q[i]='9';break;
case 10: q[i]='A';break;
case 11: q[i]='B';break;
case 12: q[i]='C';break;
case 13: q[i]='D';break;
case 14: q[i]='E';break;
case 15: q[i]='F';break;
}
i++;
x/=16;
}
if (strlen(q)==0)
p[b]='0';
else for (;i>=0;b++)
{
p[b]=q[i-1];
i--;
}
}
6-22 顺序表的插入
分数 15
全屏浏览题目
切换布局
作者 唐艳琴
单位 中国人民解放军陆军工程大学
本题实现在有序顺序表中插入一个元素仍然保持其有序状态。
函数接口定义:
void insert(int a[],int *n,int x);
其中 a 是有序顺序表, *n 是数组中元素的个数。 x 是待插入的元素,将x插入后保持顺序表中的元素仍然有序。
裁判测试程序样例:
#include <stdio.h>
#define N 10
void insert(int a[],int *n,int x);
int main()
{
int a[N],n,i,x;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&x);
insert(a,&n,x);
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
/* 请在这里填写答案 */
输入样例:
5
1 2 3 4 6
8
输出样例:
1 2 3 4 6 8
void insert(int a[],int *n,int x)
{
int i;
i=*n;
for (;i>0;i--)
{
a[i]=a[i-1];
if (x>a[i-1])
{
a[i]=x;
break;
}
}
if (x<a[0]) a[0]=x;
*n=*n+1;
}
6-23 顺序表的删除
分数 15
全屏浏览题目
切换布局
作者 唐艳琴
单位 中国人民解放军陆军工程大学
本题实现在顺序表中删除一个元素。
函数接口定义:
int del(int a[],int *n,int x);
其中 a 是顺序表, *n 是数组中元素的个数。 x 是待删除的元素。返回值为1时表示删除成功,0表示表中无x元素
裁判测试程序样例:
#include <stdio.h>
#define N 10
int del(int a[],int *n,int x);
int main()
{
int a[N],n,i,x,flag;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&x);
flag=del(a,&n,x);
if(flag)
{
for(i=0;i<n;i++)
printf("%d ",a[i]);
}
else
printf("no %d",x);
return 0;
}
/* 请在这里填写答案 */
输入样例:
5
3 1 8 5 6
8
输出样例:
3 1 5 6
int del(int a[],int *n,int x)
{
int i;
for (i=0;i<*n;i++)
{
if (a[i]==x)
{
for (;i<*n-1;i++)
a[i]=a[i+1];
*n=*n-1;
return 1;
}
}
return 0;
}
6-24 构造有序顺序表
分数 15
全屏浏览题目
切换布局
作者 唐艳琴
单位 中国人民解放军陆军工程大学
本题实现构造有序顺序表。从键盘输入n(不超过10)个元素并输出表中元素。
函数接口定义:
void process(int a[],int n);
其中 a 是顺序表, n 需构造的元素个数(无序数据)。process函数将此n个无序数据有序存放在数组a中。
裁判测试程序样例:
#include <stdio.h>
#define N 10
void process(int a[],int n); //数据在此处输入
int main()
{
int a[N],n,i;
scanf("%d",&n);
process(a,n);
for(i=0;i<n;i++)
printf("%d ",a[i]);
return 0;
}
/* 请在这里填写答案 */
输入样例:
5
4 1 2 5 3
输出样例:
1 2 3 4 5
void process(int a[],int n)
{
int i,j;
for (i=0;i<n;i++)
scanf ("%d ",&a[i]);
for (i=0;i<n;)
{
for (j=0;j<n-1;j++)
{
if (a[j]>a[j+1])
change (&a[j],&a[j+1]);
}
n--;
}
}
int change (int *x,int *y)
{
int i;
i=*x;
*x=*y;
*y=i;
return 0;
}
Pingback:PTA2023作业练习函数题(1-10) – 热眶