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

2016-08-21  本文已影响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、任意读入一个整数,依次输出其符号位及从高位到低位上的数字。
[分析]此题必须借助数组将依次求得的低位到高位的数字保存后,再逆序输出。

上一篇下一篇

猜你喜欢

热点阅读