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;
}