美文网首页
(3)进制转换 矩阵转置 字符处理

(3)进制转换 矩阵转置 字符处理

作者: 笑笑学生 | 来源:发表于2016-08-21 21:05 被阅读93次

    通信

    1.进制转换

    (1)十进制数转换为其他进制数
    一个十进制正整数m转换成r进制数的思路是,将m不断除以r取余数,直到商为0时止,以反序输出余数序列即得到结果。
    注意,转换得到的不是数值,而是数字字符串或数字串。
    例如,任意读入一个十进制正整数,将其转换成二至十六任意进制的字符串。

    #include <stdio.h>
    int main(){
        int Type,a,b[10],i=0,c=0;
        printf("请输入转换类型:1、十进制转二进制,2、二进制转十进制\n");
        scanf("%d",&Type);
        printf("请输入原数据");
        scanf("%d",&a);
        switch(Type)
        {
            case 1 :
                while(a!=0){
                    b[i]=a%2;
                    a/=2;
                    i++;
                }
                printf("二进制位:");
                i--;
                //反序输出余数序列
                for(;i>=0;i--)
                    printf("%d ",b[i]);
                printf("\n");
                break;
            case 2 :
                while(a!=0){
                    b[i]=a%10;
                    a/=10;
                    i++;
                }
                i--; 
                for(;i>=0;i--)
                    c=c*2+b[i];
                printf("十进制为:%d\n",c);
                break;  
        } 
    }
    

    参考:http://blog.csdn.net/lcj8/article/details/2174147

    #include <stdio.h>
    int main()
    {
      int num,a[100],i=0;
      printf("输入想要转换的10进制数:");
      scanf("%d",&num);
      printf("\n转换成16进制数后是:");
      do{
        a[i]=num%16;
        num=num/16;
        i++;
        }while(num);
        i--;
        for (;i>=0;i--){
          if(a[i]>=10){
            a[i]+=55;
            printf("%c",a[i]);
            }else{
                printf("%d",a[i]);
            }
        }
        printf("\n");
        return 0;
    }
    

    (2)其他进制数转换为十进制数
    其他进制整数转换为十进制整数的要领是:“按权展开”,例如,有二进制数101011,则其十进制形式为1×25+0×24+1×23+0×22+1×21+1×20=43。若r进制数an……a2a1(n位数)转换成十进制数,方法是an×r n-1+……a2×r1+a1×r0。
    注意:其他进制数只能以字符串形式输入。
    例:任意读入一个二至十六进制数(字符串),转换成十进制数后输出。

    2.矩阵转置

    矩阵转置的算法要领是:将一个m行n列矩阵(即m×n矩阵)的每一行转置成另一个n×m矩阵的相应列。
    例:将以下2×3矩阵转置后输出。
    即将
    1 2 3
    4 5 6
    转置成
    1 4
    2 5
    3 6

    #include <stdio.h>
    #define M 3
    #define N 4 
    int main(){
        int a[M][N]={0},b[N][M]={0};
        int i,j;
        for(i=0;i<M;i++)
            for(j=0;j<N;j++)
                scanf("%d",&a[i][j]);
        for(i=0;i<M;i++){
            for(j=0;j<N;j++)
                printf("%d ",a[i][j]);
            printf("\n");
        }
        for(i=0;i<M;i++)
            for(j=0;j<N;j++)
                b[j][i]=a[i][j];
        for(i=0;i<N;i++){
            for(j=0;j<M;j++)
                printf("%d ",b[i][j]);
            printf("\n");
        }
    }
    

    3.字符处理

    (1)字符统计:对字符串中各种字符出现的次数的统计。
    例:任意读入一个只含小写字母的字符串,统计其中每个字母的个数。

    参考:http://blog.csdn.net/cyuyanenen/article/details/51736607
        for (i = 0; i < strlen(str); i++)
            if (str[i] >= 'a' && str[i] <= 'z')
                lowAlpha++;
            else if (str[i] >= 'A' && str[i] <= 'Z')
                upAlpha++;
            else if (str[i] >= '0' && str[i] <= '9')
                num++;
    
    #include <stdio.h>
    int main()
    {
        int a[100]={0},i;
        char c;
        while((c=getchar())!='\n'){
            for(i=65;i<=90;i++)
            //大写字母加32为对应小写字母
                if(c==i+32)
                    a[i]++;
        }
        for(i=65;i<=90;i++)
            if(a[i]>0)
                printf("%c:%d\n",i+32,a[i]);
    }
    

    (2)字符加密
    例如、对任意一个只含有英文字母的字符串,将每一个字母用其后的第三个字母替代后输出(字母X后的第三个字母为A,字母Y后的第三个字母为B,字母Z后的第三个字母为C。)
    参考:http://blog.csdn.net/liuhui_8989/article/details/13398793

    #include <stdio.h>
    #include <string.h>
    #define MAX_LENGTH 20
    
    int main()
    {
     int nlen = 0,i;
     char words[MAX_LENGTH] = {};
     scanf("%s", words);//读入字符串
     nlen = strlen(words);
     if (nlen > 0 && nlen <= MAX_LENGTH)
      printf("input: %s\n", words);
     else
     {
      printf("input words too long!\n");
      return -1;
     }
     for(i = 0; i < nlen; i++)
     {
        //所有都加3,当超过'z'的值后,减去26 
      if (words[i] >= 'a' && words[i] <= 'z')
      {
       words[i] += 3;
       if (words[i] > 'z')
        words[i] -= ('z' - 'a'+1);
      }
      
      if (words[i] >= 'A' && words[i] <= 'Z')
      {
       words[i] += 3;
       if (words[i] > 'Z')
        words[i] -= ('Z' - 'A'+1);
      }
     }
     printf("output: %s\n", words);
     return 0;
    }
    

    4.整数各数位上数字的获取
    算法核心是利用“任何正整数整除10的余数即得该数个位上的数字”的特点,用循环从低位到高位依次取出整数的每一数位上的数字。

    例1、任意读入一个5位整数,输出其符号位及从高位到低位上的数字。
    参考:http://blog.csdn.net/yuliu0552/article/details/6649312/

    #include <stdio.h>
    #define MAX 10
    int main(){
        int a,i=0;
        int b[MAX]={0};
        scanf("%d",&a);
        if(a>=0){
            printf("+");
        }else{
            printf("-");
            a=(-a);
        }
        while(a){
            b[i]=a%10;
            a/=10;
            i++;
        }
        i--;
        for(;i>=0;i--){
            printf("%d",b[i]);
        }
    } 
    

    例2、任意读入一个整数,依次输出其符号位及从低位到高位上的数字。
    [分析]此题读入的整数不知道是几位数,但可以用以下示例的方法完成此题:
    例如读入的整数为3796,存放在x中,执行x%10后得余数为6并输出;将x/10得379后赋值给x。再执行x%10后得余数为9并输出;将x/10得37后赋值给x……直到商x为0时终止。

    例3、任意读入一个整数,依次输出其符号位及从高位到低位上的数字。
    [分析]此题必须借助数组将依次求得的低位到高位的数字保存后,再逆序输出。

    相关文章

      网友评论

          本文标题:(3)进制转换 矩阵转置 字符处理

          本文链接:https://www.haomeiwen.com/subject/hujwsttx.html