day5 复习、总结、练习半知的例题
2014-08-30 10:22
316 查看
9.9.for循环。[//while循环处理循环次数不确定的情况,for循环确定循环次数]
字符串,输出两分数之和
输入两个分数,输出两分数之和(要求约分)
比如:
输入 3/57/8
输出: 59/40
10.
输入一个大写字母,如 F,输出
比如:
输入:F
输出:
F
EFE
DEFED
CDEFEDC
BCDEFEDCB
ABCDEFEDCBA
11.
输入一个大写字母,如F
比如:
输入:F
输出:
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
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
法一:
法二:
递归函数:
分解质因数.
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
交换两数:
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.
****************************************************
/*字符串匹配,
输入一个字符串,一个子字符串,查找出现次数
*/
/*
字符串原地压缩。题目描述:"e5a3f2"
解压缩为 “eeeeeaaaff"。
字符串压缩算法,把s字符串压缩处理后结果保存在res中
比如:
输入
a4e2f1g3
输出为
aaaaeefggg
*/
字符串,输出两分数之和
输入两个分数,输出两分数之和(要求约分)
比如:
输入 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; }
相关文章推荐
- 转贴:赵珏琼同学的离散复习总结 V1.0
- 考完了托福,总结一下9天复习参加托福的经验吧
- (教学思路 C#数组三)数组的常用方法例题,复习数组
- c++ primer 3rd 练习223 总结
- 单元测试技术培训练习总结报告
- 练习总结
- 大复习!总结交流一下经验
- 分布式数据库复习总结
- SQL 条件语句(练习总结)
- 应用架构设计与分析相关资料的收集、总结与复习(动态更新)
- oracle 9i期末考试复习的练习
- 以前做MIT 6.828练习的一点总结
- 系统分析师 复习经验总结(转)
- 学习方法总结之 - 复习
- 系统分析师复习经验总结
- 【转】系统分析师 复习经验总结
- T-SQL复习总结--用T-SQL创建,修改,管理,删除数据库
- C++复习总结(涵盖所有C++基本考点)!
- C语言复习笔记三:三种程序结构记习题总结(1)
- 传智播客--AJAX知识点和实用练习总结