飞音时代公司的c语言测试题目


题目如下

有一个文本文件保存了9*9矩阵数据
通过回车换行分隔行
行内通过,分隔元素
1-9的数字是有效元素,其他内容都认为是空
要求
1. 实现矩阵转置
2. 矩阵内元素如果是数字进行1-9,2-8,3-7,4-6互相映射,即如果原来数字是1,改成9,如果是9改成1

 

有一个文本matrix.txt,内容如下:

 

 , , , ,1, , ,3,
5, ,4, , , , , ,
 , , , ,5,3,8, ,9
 ,8,9, , , , , ,
 , , , , ,1,6, ,
 , , ,5,9, ,3,1,
 ,6, ,8, , ,9, ,
8,4,1, , , , , ,
2, , , ,6, , , ,7

代码:

#include <stdio.h>
#include <stdlib.h>
/*
 *作者没拉链的布加拉提
 */
int main(int argc,const char *argv[])
{
    char buff[9][9];
    FILE *fp;


    //判断是否成功读取
    if ((fp = fopen("matrix.txt","r")) == NULL)
    {
        perror("fail to read");
        exit(1);        
    }
    //把文件的数字字符提取到buff[9][9]中
    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 18; j++)
        {
            char buf = fgetc(fp);
            if (buf == EOF)
                break;           
            if(buf != ',' && buf != '\n')
                buff[i][j/2] = buf; 
        }
        
    }
    
    //把buff[9][9]反转并且数字对应
    for (int i = 0; i < 9; i++)
    {
        for (int j = i; j < 9; j++)
        {
            char temp = buff[j][i];
            if(buff[i][j] != ' ')
                buff[j][i] = '9' + '1' - buff[i][j];
            else
                buff[j][i] = buff[i][j];



            if(temp != ' ')
                buff[i][j] = '9' + '1' - temp;
            else
                buff[i][j] = temp;
        }
    
    }


    fclose(fp);
    //写入到一个新文件
    fp = fopen("matrix1.txt","w+");



    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 9; j++)
        {
           fputc(buff[i][j],fp);
           if(j<8)
             fputc(',',fp);
        }
        fputc('\n',fp);
    }


  fclose(fp);
    return 0;
}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM