iOS 阶段学习第四天笔记(循环)
iOS学习(C语言)知识点整理笔记
一、分支结构
1、分支结构分为单分支 即:if( ){ } ;多分支 即:if( ){ }else{ } 两种
2、单分支 if表达式成立则执行{ }里的语句;双分支 if表达式不成立 则执行else{ }里面的语句
3、字符串的输出系统会从数组地址一直打印到字符 ‘\0’为止,如果没有正确初始化,可能会打印出数组外的信息
4、如果分支结构里面只有一条执行语句可省略外面的大括号{} .
二、开关语句
1、语句结构 :switch (参数) case 常量: 执行语句;break;default: 执行语句;break; case 后面必须是常量且不能重复
2、无特殊情况每个case后面必须加上break 不然会造成 case穿透 执行
3、default 一般建议保留 用于处理所有case不满足的条件
三、循环结构
1、循环:即在满足表达式条件的时候反复执行语句组 ;循环必须有退出条件否则就是死循环。
2、循环类型:for( 初始化语句1; 条件判断语句2; 语句3){ 执行语句} ;while(条件语句){执行语句};do{ 执行语句}while(条件语句);
3、循环体中 continue 表示跳过当前条件内容执行下次循环 break表示结束整个循环
4、do while 第一次循环的时候,先执行语句后做判断,至少执行一次。
5、while 与 do while 在循环之前必须先初始化 ,for 循环自身已经包含初始化语句。
四、goto 跳转语句
1、goto 表示无条件跳转到一个标签,尽量避免使用 ,缺点:使代码目录不清晰,破坏层次感
2、goto 实例代码:
//使用goto语句 实现1~100求和
1 int main(){
3 int sum = 0;
5 int i = 1;
7 ADD:
9 sum +=i;
11 i++;
13 if(i<=100){
15 goto ADD;//跳到标签号所在行,往下执行
17 }
19 printf("sum=%d\n",sum);
21 return 0;
23 }
五、循环练习题
1、计算当前输入字符中数字、大/小字母、其他字符 个数
实现代码:
1 int main(){
3 int sz=0,xz=0,dz=0,qt=0;
5 char ch;
7 while ((ch=getchar())!='\n') {
9 if(ch>='0'&&ch<='9')
11 sz++;
13 else if(ch>='a'&&ch<='z')
15 xz++;
17 else if (ch>='A'&&ch<='Z')
19 dz++;
21 else
23 qt++;
25 }
27 printf("共输入了%d个数字字符\n",sz);
29 printf("共输入了%d个小写字母字符\n",xz);
31 printf("共输入了%d个大写字母字符\n",dz);
33 printf("共输入了%d个其他字符\n",dz);
35 return 0;
37 }
2、输出九九乘法表
1x1=1,
2x1=2,2x2=4
3x1=3,3x2=6,3x3=9
4x .....
实现代码:
1 int main(){
3 for (int i=1; i<=9; i++) {
5 for (int j=1; j<=i; j++) {
7 printf("%dx%d=%d\t\t",i,j,i*j);
}
11 printf("\n");
13 }
15 return 0;
17 }
3、输出1~100的所有质数 (质数:即除1以外只能被1和它本身整除的数)
实现代码:
1 int main(){
3 for (int i=1; i<=100; i++) {
5 for (int j=1; j<=i; j++) {
7 if(j==1)
9 continue;
11 if(i%j==0)
13 {
15 if(i!=j)
17 {
19 //printf("%d不是质数\n",i);
21 break;
23 }
25 else
27 {
29 printf("%d是质数\n",i);
31 break;
33 }
35 }
37 }
39 }
41 return 0;
43 }
4、一球从 100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10 次落地时,共经过多少米
实现代码:
1 int main(){
3 float hight=100,num=10,sumh=0;
5 for (int i=1; i<=num; i++) {
7 sumh+=hight;
9 hight/=2;
11 printf("第%d次回落(%.1f)米\n",i,hight);
13 }
15 printf("总共经过(%.1f)米",sumh);
19 return 0;
21 }
5、使用辗转相除求两个数的最大公约数
实现代码:
1 int main(){
3 //(28,35)=(35,28)=(28,7)=0
5 int m,n,temp,rst;
7 printf("请输入两个数字:\n");
9 scanf("%d %d",&m,&n);
11 while(m%n!=0){
13 if(m%n==m)
15 {
17 temp=m;
19 m=n;
21 n=temp;
23 rst=m%n;
25 printf("m=%d,n=%d\n",m,n);
27 }else {
29 rst=m%n;
31 m=n;
33 n=rst;
35 printf("m=%d,n=%d\n",m,n);
37 }
39 }
40 printf("%d",n);
41 return 0;
42 }
6、将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5
实现代码:
1 int main(){
2 int v;
3 scanf("%d",&v);
4 printf("%d=",v);
5 for (int i=2; i<=v; i++) {
6 while (v%i==0) {
7 if(i<v)
8 printf("%d*",i);
9 else
10 printf("%d",i);
11 v/=i;
12 }
13 }
14 return 0;
15 }
7、流程控制(for求阶乘的和 )输入n(int类型),打印1!+2!+3!+4!+5!+....+n!的值
实现代码:
1 int main(){
2 //例如 5的阶乘和=1*1 +2*2 +3*3*3+ 4*4*4*4 +5*5*5*5*5
3 int n,temp=0,sum=0;
4 scanf(“%d”,&n);
5 for (int i=1; i<=n; i++) {
6 temp=1;
7 for (int j=1; j<=i; j++) {
8 temp*=i;
9 }
10 sum+=temp;
11 }
12 printf("sum=%d",sum);
13 return 0;
14 }
8、整数逆序输出, 例如输入一个整数12345,输出54321
实现代码:
1 int main(){
2 int a;
3 scanf("%d",&a);
4 while(a/10!=0){
5 printf("%d ",a%10);
6 a/=10;
7 }
8 printf("%d ",a%10);
9 return 0;
10 }
9、流程控制(for循环)输出字母三角形 输入一个大写字母,如F输出:
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
实现代码 :
1 int main(){
2 char ch='A';
3 for (int i=0; i<='F'-ch; i++) {
4 for (int n='F'-ch-i; n>0; n--) {
5 printf(" ");
6 }
7 for (int j=0; j<=i; j++) {
8 printf("%c",ch+j);
9 }
10 for (int m=i;m>0 ;m-- ) {
11 printf("%c",ch+m-1);
12 }
13 printf("\n");
14 }
15 return 0;
16 }
10、流程控制(for循环),输出字母序列比如输入:F
输出:
FEDCBA
EDCBAB
DCBABC
CBABCD
BABCDE
ABCDEF
实现代码:
1 int main(){
2 char sh,nsh,bsh;
3 printf("请输入一个字符:");
4 scanf("%c",&sh);
5 bsh=sh;
6 int len=sh-'A';
7 for (int i=0; i<=len; i++) {
8 sh=bsh-i;
9 //nsh=bsh-len+1;
10 for (int j=1; j<=i; j++) {
11 printf(" ");
12 }
13 for (int n=i; n<=len; n++) {
14 printf("%c", sh--);
15 }
16 nsh=sh+2;
17 for (int m=0; m<i; m++) {
18 printf("%c", nsh++);
19 }
20 printf("\n");
21 }
22 return 0;
23 }
11、 输入一个日期年月日, 计算这一天是一年中的第几天(考虑闰年)
实现代码:
1 int main(){
2 int year,month,day,total=0;
3 scanf("%d%d%d",&year,&month,&day);
4 if (year<=0)
5 printf("请输入正确年份。");
6 for (int i=1; i<month; i++) {
7 switch (i) {
8 case 1:
9 case 3:
10 case 5:
11 case 7:
12 case 8:
13 case 10:
14 case 12:
15 total+=31;
16 break;
17 case 4:
18 case 6:
19 case 9:
20 case 11:
21 total+=30;
22 break;
23 case 2:
24 if ((!(year%4)&&year%100)||!(year%400))
25 total+=29;
26 else
27 total+=28;
28 break;
29 }
30 }
31 total+=day;
32 printf("%d年的第%d天",year,total);
33 return 0;
34 }
12、猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
实现代码:
int main(){
//分析: 第十天 1 第九天:4 第八天:10 第七天:22
int sum=1,i,index=10;
for(i=1;i<=9;i++)
{
printf("第%d天有桃%d个\n",index,sum);
sum=(sum+1)*2;
index--;
}
printf("猴子共摘了%d个桃子。\n",sum);
return 0;
}