中易网

C++的题目

答案:2  悬赏:40  
解决时间 2021-04-28 21:01
  • 提问者网友:优雅ぉ小姐
  • 2021-04-28 01:04

题目2:09年春C04

【程序功能】

用一组整数验证命题:“任意一个百位数字与个位数字不同的三位正整数n1在经过以下操作后一定会变换到1089:将n1的百位数字与个位数字交换得到n2;求n1与n2差的绝对值得到n3;将n3的百位数字与个位数字交换得到n4;求n3与n4的和得到n5,n5一定是1089。若n1、n3是一位数或两位数,则在高位补0使其称为三位数。”

例如:n1:123,n2:321,n3:198(321-123),n4:891,n5:1089(198+891)

【编程要求】

(1)编写函数int fun(int a[],int b[],int n),其功能是用a指向数组的前n个整数验证上述命题,将所有符合命题的整数所在数组元素的下标依次保存到b指向的数组中,函数返回b数组中数据的个数。

(2)编写main函数,声明a数组并用测试数据初始化,用a数组作为实参调用fun函数,将a数组中所有符合命题的整数输出到屏幕及结果文件2.out中。最后将本人的学号字符串也保存到结果文件2.out中。

【测试数据与运行结果】

测试数据:123  765  1  45  121  1345  131  67  696  3589

运行结果:123  765  1  45  67         

【要求】

(1).将源程序文件取名为2.c,输出结果文件取名为2.out。

(2).数据文件的打开、使用和关闭均用C语言标准库中缓冲文件系统的文件操作函数实现。

最佳答案
  • 二级知识专家网友:萌萌哒小可爱
  • 2021-04-28 02:01


#include<stdio.h>



int fun(int a[],int b[],int n){
 int hundred,unit,n2,n3,n4,n5;
  int index_b=0;
 for(int i=0;i<n;i++)
 {


  
  hundred = a[i]/100%10;
  unit = a[i]%10;
  if(a[i] < 1000 && hundred != unit)
  {
  
   b[index_b++]=a[i];
   
  continue;
  }
  
  
  n2 = unit*100+hundred+a[i]/10%10+a[i]/1000*1000;
  n3 = (n2-a[i])>0?(n2-a[i]):(a[i]-n2);
  
  hundred = n3/100%10;
  unit = n3%10;
  n4 = unit*100+hundred+n3/10%10+n3/1000*1000;


  n5 = n3 +n4;
  
  if(n5 == 1089)
   b[index_b++]=a[i];
 }
 
 return index_b;
}
int main(){
    int testarraya[]={123,765,1,45,121,1345,131,67,696,3589};
 int testarrayb[10]={0};
 int count=fun(testarraya,testarrayb,10);
 
 printf("Before funned:");
 for(int i=0;i<10;i++)
  printf("%d ",testarraya[i]);
 printf("\n");
 
printf("After funned:");
 for( i=0;i<count;i++)
  printf("%d ",testarrayb[i]);
 printf("\n");
 
 FILE *fp;
 fp= fopen("2.out","w");
 for(i=0;i<count;i++)
 fprintf(fp,"%d ",testarrayb[i]);
 fclose(fp);


 printf("Done.\n");
 return 0;
}

全部回答
  • 1楼网友:木子香沫兮
  • 2021-04-28 02:11
#include<stdio.h> #include<math.h> int fun(int a[],int b[],int n) { int i,j,n1,n2,n3,n4,n5,x,y,z,c; j=0; for(i=0;i<n;i++) {n1=a; x=n1/100; y=n1/10%10; z=n1%10; n2=100*z+10*y+x; n3=fabs(n1-n2); x=n3/100; y=n3/10%10; z=n3%10; n4=100*z+10*y+x; n5=n3+n4; if(n5==1089) c=1; else c=0; if(c) {b[j]=i; j++;} return c; } } main() {int a[10]={123,765,1,45,121,1345,131,67,696,3589}; int i,n=10,b[10]; for(i=0;i<n;i++) if(a[i]<1000) {if(fun(a[i],b,n)) printf("%d  ",a[i]);} } 文件写入部分,你就只能看书或者笔记了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息