上机考试答案
HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】
1.请编写函数long fun(long int x),功能是:将长整型数x中每一位上为奇数的数依次取出,并逆序构成一个新数返回。
#include<>
long fun(long int x)
{
long b = 0;
while(x>0)
{
if((x%10)%2==1)
b=b*10+x%10;
x/=10;
}
return b;
}
int main()
{
long a,b;
printf("Please input a long int num:");
scanf("%ld",&a);
b=fun(a);
printf("b=%ld\n",b);
}
2.编写函数void fun(char *s,char *t,char *p)将未在字符串s中出现、而在字符串t中出现的字符, 形成一个新的字符串放在p中,p中字符按原字符串中字符顺序排列,但去掉重复字符。
例如: 当s为"12345", t为"8624677"时, p中的字符为: "867";
当s为”good luck”,t为”thank you very much”时,输出:”thanyverm”#include<>
#include<>
int test(char *s,int n,char ch)
{ int i;
for(i=0;i if(s[i]==ch) return 1; return 0; } void fun(char *s,char *t,char *p) { int i,j; for(i=j=0;t[i]!=0;i++) if(test(s,strlen(s),t[i])==0&&test(t,i,t[i])==0) {p[j]=t[i]; j++; } p[j]=0; int main() {char s1[50],s2[50],s3[50]; gets(s1);gets(s2); fun(s1,s2,s3); puts(s3); } 3.编写函数int fun(int m),计算并返回满足表达式:1+(1+2)+(1+2+3)+(1+2+3+4)+……+(1+2+3+……+n)<=m最大的n。例如,当m=10000时,程序输出:n=38。 #include<> int fun(int m) {int a,i,s; for(a=1,s=0;s<=m;a++) for(i=1;i<=a;i++) s+=i; return a-2; } int main() {int x; scanf("%d",&x); printf("n=%d\n",fun(x)); } 4.编写函数void fun(int *x,int n),它的功能是:删除有n个数据的数组x 中所有包含数字6的数据,后续的剩余元素赋值为-1。n为数组长度,规定x中数据都为正数。 如程序运行时若输入:122 1461 6234 16 11 663 911 2671 381 6 删除后输出: 122 11 911 381 -1 -1 -1 -1 -1 -1 #define N 10 #include<> void fun(int *x,int n) { int i,j=0,k,t; for (i=0;i { k=x[i]; while (k!=0) { t=k%10; if(t==6) break; else k=k/10; } if(k==0) x[j++]=x[i]; for(;j x[j]=-1; return; } int main() { int a[N],i; for(i=0;i scanf("%d",a+i); fun(a,N); for(i=0;i printf("%d ",a[i]); printf("\n"); } 5.编写函数long fun(int high,int n),功能是:计算并返回high以内(不包含high)最大的n个素数之和。若不足n个,则到最小素数2为止。例如:若 high=100,n=10,则函数的返回值为:732;若high=11,n=10,则函数返回:17。 #include<> long sushu(long m) { int i; for(i=2;i if(m%i==0) break; if(i>=m) return 1; else return 0; } long fun(int high,int n) { int i,j=0; long s=0; if(high<=2) return 0; for(i=high-1;i>1;i--) if(sushu(i)) { s+=i; j++; if(j>=n) return s; } return s; } int main() {int k,n; scanf("%d%d",&k,&n); printf("sum=%ld\n",fun(k,n)); 6.请编写函数int fun(int *a,int n),它的功能是:把形参a所指数组中的偶数按原顺序依次存放到a[0]、a[1]、a[2]、……中,把奇数从数组中删除,偶数个数通过函数值返回,以-1作为有效数据的结束标志。例:若输入:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15,输出:2 4 6 8 10 12 14 n=7 #include<> int fun(int *a,int n) { int i,j; for(i=0,j=0;i { if(*(a+i)%2==0) { a[j]=a[i]; j++; } } a[j]=-1; return j; } int main() {int x[15],i,n; for(i=0;i<15;i++) scanf("%d",x+i); n=fun(x,15); for(i=0;x[i]!=-1;i++) printf("%d ",x[i]); printf("n=%d\n",n); } 7.给定程序中,函数fun的功能是:有M×N二维数组,分别将每一行的最大值与本行的最后一个数据(第N-1列数据)对调,其余数据保持不变。然后按每一行的最大值对二维数据各行降序排序。例如,有右侧数组数据: 11 52 43 4 25 22 求最大值并对调后:11 22 43 4 25 52 22 33 46 58 16 47 22 33 46 47 16 58 83 42 54 26 47 0 0 42 54 26 47 83 4 5 6 7 8 9 4 5 6 7 8 9 45 96 17 18 39 2 45 2 17 18 39 96 排序后最终输出: 45 2 17 18 39 96 0 42 54 26 47 83 22 33 46 47 16 58 11 22 43 4 25 52 4 5 6 7 8 9 #define N 6 #define M 5 #include<> void fun(int a[M][N]) { int i,j,k,m,t; for(i=0;i { k=0; for(j=1;j