您的位置:首页 > 其它

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

2014-08-30 10:22 316 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: