weixin_64662807 2022-05-26 17:22 采纳率: 0%
浏览 25

C语言一道好的题能不能解答

7.编程题:【程序功能】
/矩阵数据生成及排序。
编程要求】
1 .编写函数void cresort(int a[][3], int n)。函数功能是先根据a指向的二维数组中第1列(列下标为0)和第2列(列下标为1)的值按下文所列规则生成第3列(列下标为2)各元素的值,再以行为单位重排a数组的各行,使得所有行按第3列元素值从小到大排列。若第三列数值相同,不需要再进行排列(保持原先后次序)。/第3列生成规则:若数组中第1列(列下标为0)和第2列(列下标为1)的值均为非素数,则生成1;若数组中第1列和第2列的值均为素数,则生成4;若数组中第1列的值为非素数,第2列的值为素数,则生成2;若数组中第1列的值为素数,第2列的值为非素数,则生成3。/2 .编写main函数。函数功能是声明4行3列二维数组a并用测试数据(范围为-2^20~2^20)初始化,用数组a作为实参调用cresort函数,将a数组中的数据输出保存到文本文件myf2.out中。
【测试数据与运行结果】/测试数据:
/27 16 0
11 12 0/6 9 0
7 13 0
屏幕输出:
27 16 1/6 9 1
11 12 3
7 13 4

  • 写回答

1条回答 默认 最新

  • a5156520 2022-05-27 15:14
    关注

    一个实现,程序应会在编译生成exe的那个目录生成一个myf2.out的文件,进入那个目录查看文件,代码如下,供参考:

    
    #include <stdio.h>
    #include <math.h>
    /*
    
      判断传入的整数n是否为素数 
    * 算法参考:https://blog.csdn.net/weixin_35452394/article/details/117099737 
    */
    int prime(int n){
        
        int i; 
        int result=1;
        if(n<=1){ //小于等于1的都不是素数 
            result = 0;
        }
        for(i=2;i<=(int)sqrt(n);i++){ 
            if(n%i==0){ //如果传入的参数n能被2到n的平方根之间的数整除,说明n不是素数 ,如果不能被整数说明是素数 
                result=0;
                break;
            }
        }
        
        return result;
    }
    
    
    void cresort(int a[][3],int n){
        
        int i,j;    
        int firstcolPrime;
        int secondcolPrime;
        for(i==0;i<4;i++){        
                
            firstcolPrime = prime(a[i][0]); //判断每一行第一列的数是否为素数 
            secondcolPrime = prime(a[i][1]);  //每一行第二列的数是否为素数 
            
            //下面四个判断题目说明判断每一行第三列的数为几 
            if(firstcolPrime==0&&secondcolPrime==0){  
                a[i][2]=1;
            }else if(firstcolPrime==0&&secondcolPrime==1){
                a[i][2]=2;
            }else if(firstcolPrime==1&&secondcolPrime==0){
                a[i][2]=3;
            }else if(firstcolPrime==1&&secondcolPrime==1){
                a[i][2]=4;
            } 
                        
        }
        
    //    printf("计算后,数组a的元素为:\n");    
    //    for(i=0;i<4;i++){
    //        for(j=0;j<3;j++){
    //            printf("%d ",a[i][j]);
    //        }
    //        printf("\n");
    //    }
        int k;
        int temp;
        for(i=0;i<n-1;i++){        
            for(j=i;j<n;j++){
         //根据当前行第三列的比其他行第三列的数的大,则把其他行的数移到当前行,当前行的数移到其他行 ,达到从小到大排序每一行的目的        
                if(a[i][2]>a[j][2]){
                    
                    for(k=0;k<3;k++){  
                        temp=a[i][k];
                        a[i][k]=a[j][k];
                        a[j][k]=temp;
                    }
                    
                }
                
            }        
        }
        
        FILE * fp = fopen("myf2.out","w+"); //这里应会在程序编译成exe的那个目录生成一个myf2.out的文件
        if(fp==NULL){
            printf("打开或创建文件失败!\n");
            return ;
        } 
        //把数组的每一个元素输入文件中 
        for(i=0;i<4;i++){
            for(j=0;j<3;j++){
                fprintf(fp,"%d ",a[i][j]);
            }    
        }
        
        fclose(fp);
    
    } 
    
    
    
    int main(void){
        
        int a[4][3]={{27,16,0},{11,12,0},{6,9,0},{7,13,0}};
        //int a[4][3]={{3,5,0},{11,10,0},{4,7,0},{12,15,0}};
        
    //    printf("2 is prime :%d\n",prime(2));
            int i,j; 
    //    printf("排序前,数组a的元素为:\n");    
    //    for(i==0;i<4;i++){
    //        for(j=0;j<3;j++){
    //            printf("%d ",a[i][j]);
    //        }
    //        printf("\n");
    //    }
        
        cresort(a,4); 
        
    //    printf("排序后,数组a的元素为:\n");    
        for(i=0;i<4;i++){
            for(j=0;j<3;j++){
                printf("%d ",a[i][j]);
            }
            printf("\n");
        }
        
    }
    

    img

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月26日

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!