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

通信

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,817评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,329评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,354评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,498评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,600评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,829评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,979评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,722评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,189评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,519评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,654评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,329评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,940评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,762评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,993评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,382评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,543评论 2 349

推荐阅读更多精彩内容