day5 复习、总结、练习半知的例题

9.9.for循环。[//while循环处理循环次数不确定的情况,for循环确定循环次数]

字符串,输出两分数之和

输入两个分数,输出两分数之和(要求约分)

比如:

输入  3/57/8

输出: 59/40


#include <stdio.h>
int main()
{
   int a1,b1,a2,b2,up,down,i;
   char ch1,ch2;
    scanf("%d%c%d",&a1,&ch1,&b1);
    getchar();
    scanf("%d%c%d",&a2,&ch2,&b2);
    up=a1*b2+a2*b1;
    down=b1*b2;
   for (i=up; i>1; i--) {
       if ((up%i==0)&&(down%i==0)) {
            up=up/i;
            down=down/i;
        }
    }
    printf("%d/%d",up,down);
   return0;
}



10.

输入一个大写字母,如 F,输出

比如:

输入:F

输出:

F

EFE

DEFED

CDEFEDC

BCDEFEDCB

ABCDEFEDCBA


#include <stdio.h>

int main()
{
   char ch,i,j;
    scanf("%c",&ch);
   for (i=ch; i>='A'; i--) {
       for (j=i; j<=ch; j++) {
            printf("%c",j);
        }
       for (j=ch-1; j>=i; j--) {
            printf("%c",j);
        }
        printf("\n");
    }
   return0;
}



11.

输入一个大写字母,如F

比如:

输入:F

输出:

A

ABA

ABCBA

ABCDCBA

ABCDEDCBA

ABCDEFEDCBA


#include <stdio.h>

int main()
{
   char ch;
   char i,j;
    scanf("%c",&ch);
    
   for (i='A'; i<=ch; i++) {
       for (j='A'; j<=i-1;j++ ) {
            printf("%c",j);
        }
       for (j=i; j>='A'; j--) {
            printf("%c",j);
        }
        printf("\n");
    }
   return0;
}



12.

输入一个大写字符,如F

比如:

输入:F

输出:

FEDCBA

EDCBAB

DCBABC

CBABCD

BABCDE

ABCDEF




13.

循环进阶:


1.输出下面序列的前n.斐波那切

1 1   2   3   5    8    13   21   34  55

a  b   ret


法一:

#include <stdio.h>

int main()
{
   int n,i,a=0,b=1,sum=1;
    scanf("%d",&n);
   for (i=1; i<=n; i++) {
        printf("%d ",sum);
        sum=a+b;
        a=b;
        b=sum;
    }
   return0;
}



法二:

递归函数:



分解质因数.

60  =2 *2 *3 *5

分解成为几个质数的乘积

60 =2*30 =2*2*15 =2*2*3*5


<1>手工计算:

60 %2 ==0

printf("%d",2);

60 /2 =30

30 %2 ==0

printf("%d",2);'

30 /2 =15

15 %3  ==0   --> 3

15 /3 =5


#include <stdio.h>

int main()
{
   int num,i;
    scanf("%d",&num);
   for (i=2; i<=num; i++) {
       while (num%i==0) {
           num=num/i;
           printf("%d ",i);
        }
    }
   return0;
}



交换两数:

1.中间变量法

2.加减法

  a=a+b;

  b=a-b;

  a=a-b;


3.异或法

  a=a^b;

  b=b^a;

  a=a^b;


异或运算符是指: 参与运算的两个值,如果两个相应位相同,则结果为0,否则为1。

           即:0^0=0, 1^0=1, 0^1=1, 1^1=0

例如:10100001^00010001=10110000

0^0=0,0^1=1 可理解为: 0异或任何数,其结果=任何数

1^0=1,1^1=0 可理解为: 1异或任何数,其结果=任何数取反
任何数异或自己,等于把自己置0


1)按位异或可以用来使某些特定的位翻转,如对数10100001的第1位和第2位翻转,可以将数与00000110进行按位异或运算。
  10100001^00000110=10100111

用十六进制表示: 0xA1 ^ 0x06 = 0xA7

(2)通过按位异或运算,可以实现两个值的交换,而不必使用临时变量。例如交换两个整数a,b的值,可通过下列语句实现:

a=10100001, b=00000110

a=a^b;   //a=10100111

b=b^a;   //b=10100001

a=a^b;   //a=00000110

(3)异或运算符的特点是:数a两次异或同一个数b(a=a^b^b)仍然为原值a.



****************************************************

/*字符串匹配,


输入一个字符串,一个子字符串,查找出现次数

*/


#include <stdio.h>
#include <string.h>

int count(char *p1,char *p2,int len1,int len2)
{
   int count = 0;
   int i,j;
   for (i = 0; i <= len1 - len2; i++)
    {
       for (j = 0; j < len2; j++)
        {
           if(*(p1+i+j)!=*(p2+j))
               break;
            
           //匹配最后一个字符
           if (j==len2-1)
                count ++;
        }
    }
   return count;
    
}

int main()
{
   char ch1[30];
   char ch2[10];
    
    scanf("%s",ch1);
    scanf("%s",ch2);
   int len1 = strlen(ch1);
   int len2 = strlen(ch2);
    
    printf("%d\n ",count(ch1,ch2,len1,len2));
    
   return 0;
}


/*
 字符串拼接
 */
#include <stdio.h>

void add_array(char *p1,char *p2)
{
   int i = 0;
   int j = 0;
   while (*(p1+i)!='\0') {
        i++;
    }
    
   while (*(p2+j)!='\0') {
        *(p1+i) = *(p2+j);
        i++;
        j++;
    }
    
}

int main()
{
   char ch1[20];
   char ch2[10];
    
    scanf("%s%s",ch1,ch2);
    
    add_array(ch1,ch2);
    
    printf("%s\n",ch1);
    
   return 0;
}


/*

 字符串原地压缩。题目描述:"e5a3f2" 解压缩为 “eeeeeaaaff"

 字符串压缩算法,把s字符串压缩处理后结果保存在res

 

 比如:

 输入

 a4e2f1g3

 输出为

 aaaaeefggg

 

 */


#include <stdio.h>
#include <string.h>

int main()
{
   char ch[20];
   char res[30];
    scanf("%s",ch);
   int i = 0,j = 0;
   int count = 0;
    
   while (ch[i]!='\0')
    {
        count = ch[i+1]-48;
       while ( count > 0)
        {
            res[j] = ch[i];
            j++;
            count--;
        }
        i =i +2;
    }
    
    res[j] ='\0';
    printf("%s",res);
    
   return 0;
}



//二进制转换



#include <stdio.h>

void binshow(int num,int len)
{
   int i = 0;
   for (i = len-1 ; i >=0;i--)
    {
        printf("%d",0x1&(num>>i));
    }
    printf("\n");
    
}

int main()
{
    unsigned int n;
   int len;
    scanf("%d%d",&n,&len);
    binshow(n,len);
   return 0;
}








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值