通信
1.進(jìn)制轉(zhuǎn)換
(1)十進(jìn)制數(shù)轉(zhuǎn)換為其他進(jìn)制數(shù)
一個(gè)十進(jìn)制正整數(shù)m轉(zhuǎn)換成r進(jìn)制數(shù)的思路是窟勃,將m不斷除以r取余數(shù)祖乳,直到商為0時(shí)止,以反序輸出余數(shù)序列即得到結(jié)果秉氧。
注意眷昆,轉(zhuǎn)換得到的不是數(shù)值,而是數(shù)字字符串或數(shù)字串汁咏。
例如亚斋,任意讀入一個(gè)十進(jìn)制正整數(shù),將其轉(zhuǎn)換成二至十六任意進(jìn)制的字符串攘滩。
#include <stdio.h>
int main(){
int Type,a,b[10],i=0,c=0;
printf("請(qǐng)輸入轉(zhuǎn)換類型:1帅刊、十進(jìn)制轉(zhuǎn)二進(jìn)制,2漂问、二進(jìn)制轉(zhuǎn)十進(jìn)制\n");
scanf("%d",&Type);
printf("請(qǐng)輸入原數(shù)據(jù)");
scanf("%d",&a);
switch(Type)
{
case 1 :
while(a!=0){
b[i]=a%2;
a/=2;
i++;
}
printf("二進(jìn)制位:");
i--;
//反序輸出余數(shù)序列
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("十進(jìn)制為:%d\n",c);
break;
}
}
參考:http://blog.csdn.net/lcj8/article/details/2174147
#include <stdio.h>
int main()
{
int num,a[100],i=0;
printf("輸入想要轉(zhuǎn)換的10進(jìn)制數(shù):");
scanf("%d",&num);
printf("\n轉(zhuǎn)換成16進(jìn)制數(shù)后是:");
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)其他進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)
其他進(jìn)制整數(shù)轉(zhuǎn)換為十進(jìn)制整數(shù)的要領(lǐng)是:“按權(quán)展開(kāi)”赖瞒,例如,有二進(jìn)制數(shù)101011蚤假,則其十進(jìn)制形式為1×25+0×24+1×23+0×22+1×21+1×20=43栏饮。若r進(jìn)制數(shù)an……a2a1(n位數(shù))轉(zhuǎn)換成十進(jìn)制數(shù),方法是an×r n-1+……a2×r1+a1×r0磷仰。
注意:其他進(jìn)制數(shù)只能以字符串形式輸入袍嬉。
例:任意讀入一個(gè)二至十六進(jìn)制數(shù)(字符串),轉(zhuǎn)換成十進(jìn)制數(shù)后輸出灶平。
2.矩陣轉(zhuǎn)置
矩陣轉(zhuǎn)置的算法要領(lǐng)是:將一個(gè)m行n列矩陣(即m×n矩陣)的每一行轉(zhuǎn)置成另一個(gè)n×m矩陣的相應(yīng)列伺通。
例:將以下2×3矩陣轉(zhuǎn)置后輸出。
即將
1 2 3
4 5 6
轉(zhuǎn)置成
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)字符統(tǒng)計(jì):對(duì)字符串中各種字符出現(xiàn)的次數(shù)的統(tǒng)計(jì)逢享。
例:任意讀入一個(gè)只含小寫(xiě)字母的字符串罐监,統(tǒng)計(jì)其中每個(gè)字母的個(gè)數(shù)。
參考: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++)
//大寫(xiě)字母加32為對(duì)應(yīng)小寫(xiě)字母
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)字符加密
例如瞒爬、對(duì)任意一個(gè)只含有英文字母的字符串笑诅,將每一個(gè)字母用其后的第三個(gè)字母替代后輸出(字母X后的第三個(gè)字母為A调缨,字母Y后的第三個(gè)字母為B,字母Z后的第三個(gè)字母為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弦叶,當(dāng)超過(guò)'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.整數(shù)各數(shù)位上數(shù)字的獲取
算法核心是利用“任何正整數(shù)整除10的余數(shù)即得該數(shù)個(gè)位上的數(shù)字”的特點(diǎn)妇多,用循環(huán)從低位到高位依次取出整數(shù)的每一數(shù)位上的數(shù)字伤哺。
例1、任意讀入一個(gè)5位整數(shù)者祖,輸出其符號(hào)位及從高位到低位上的數(shù)字立莉。
參考: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、任意讀入一個(gè)整數(shù)七问,依次輸出其符號(hào)位及從低位到高位上的數(shù)字蜓耻。
[分析]此題讀入的整數(shù)不知道是幾位數(shù),但可以用以下示例的方法完成此題:
例如讀入的整數(shù)為3796械巡,存放在x中刹淌,執(zhí)行x%10后得余數(shù)為6并輸出;將x/10得379后賦值給x讥耗。再執(zhí)行x%10后得余數(shù)為9并輸出有勾;將x/10得37后賦值給x……直到商x為0時(shí)終止。
例3古程、任意讀入一個(gè)整數(shù)蔼卡,依次輸出其符號(hào)位及從高位到低位上的數(shù)字。
[分析]此題必須借助數(shù)組將依次求得的低位到高位的數(shù)字保存后挣磨,再逆序輸出雇逞。