记录自己复习中的第二个小总结
C语言中选择和循环
前言
第二次记录自己的最近所学知识点的一个小总结,希望能对大家有帮助。
一、选择结构
在C语言中,经常使用的两种选择语句:
(1)if 语句:一般用来实现两个分支的选择的结构。
(2)Switch 语句:一般用来实现多个分支的选择的结构。
1.if 语句
举个例子:输入两个数,按从小到大的顺序输出这两个数
代码如下:
#include<stdio.h>
int main()
{
float a, b, t;
scanf_s("%f %f", &a, &b);
if (a > b)
{
t = a;
a = b;
b = t;//如果if成立的话则交换位置并输出
}
printf("%5.2f %5.2f\n", a, b);
return 0;
}
2.Switch 语句
举个例子:将考试成绩按照等级制度来分为多个分数段,A是85分以上,B是70—84分,C是60—69分,D是60分以下,输入等级之后显示你的分数段。
代码如下:
#include<stdio.h>
int main()
{
char grade;
scanf_s("%c", &grade);
printf("Your score:");
switch (grade)
{
case'A':printf("85~100\n"); break;
case'B':printf("70~84\n"); break;
case'C':printf("60~69\n"); break;
case'D':printf("<60\n"); break;
default:printf("enter date error!\n");
}
return 0;
}
3.选择的嵌套
在 if 语句中还包括一个或者多个的 if 语句称为 if 语句的嵌套。一般形式如下:
但在写的时候应该注意 if 与 else 的配对关系。else总是习惯于它上面最近的未配对的 if 配对。如果是这种情况:
在写的时候把 else 写在了第一个 if 的同一列上,但是实际上 else 是与第二个 if 配对。
你可以换一种方式,将第二个 if 用花括号括起来。
二、循环结构
1.while 语句
while语句的一般形式是:while(表达式) 语句
while语句的特点是先执判断条件表达式,后执行循环体语句。
举个例子:求1+2+3+····+100
代码如下:
#include<stdio.h>
int main()
{
int i = 1, sum = 0;
while (i<=100)//当i>100,不执行语句,反之执行
{
sum = sum + i;
i++;
}
printf("sum=%d\n", sum);
return 0;
}
2.do…while 语句
do…while 语句一般形式:
do
语句
while(表达式)
举个例子:求1+2+3+····+100
代码如下:
#include<stdio.h>
int main()
{
int i = 1, sum = 0;
do
{
sum = sum + i;
i++;
} while (i<=100);
printf("sum=%d\n", sum);
return 0;
}
跟上面的while语句比较,do…while语句的特点是不一样的,do…while执行过程是先执行循环体,然后再检查条件是否成立,若成立,再执行循环体,所以当条件不成立的时候,while一次循环体也不执行,但是do…while至少会执行一次。
3.for 语句
for语句的一般形式:
for(循环变量赋初值;循环条件;循环变量增减值)
语句
可以将上面的例子用for语句执行:
代码如下:
#include<stdio.h>
int main()
{
int i,sum=0;
for (i = 1; i <= 100; i++)
sum = sum + i;
printf("sum=%d\n", sum);
return 0;
}
显然,使用for语句将会更加简单、方便。
4.循环的嵌套
上面几种循环之间都可以互相嵌套,嵌套形式如下:
三、相关问题实现
1.输出除了1以外,100以内的所有素数。
代码如下:
#include<stdio.h>
#include<math.h>
int main()
{
int i, k, n, m = 0;
for (n = 2; n <= 100; n++)
{
k = sqrt(n);//sqrt是平方根函数
for (i = 2; i <= k; i++)
if (n % i == 0)
break;//若n被i整除,终止内循环,此时i<k+1
if (i >= k + 1)
{
printf("%3d", n);
m = m + 1;//m是用来控制换行的,一行输出10个数
}
if (m % 10 == 0)
printf("\n");//累计的10的倍数,换行
}
printf("\n");
return 0;
}
运行结果:
代码解析:
首先是求除了1以外,100以内的所有素数,所以定义完变量之后,第一个循环中 i 直接从2开始。为了减少循环次数,所以我们在做算法的时候,使得 n 被 2—√n 的整数除即可。
判断是否为素数的话是根据最后结束循环时 i 的值是多少,如果n能够被 2—√n 的整数相除的话,肯定是由break导致的的语句提前结束,即 i 并未达到 n 得值循环就结束了。显然此时 i <n ,如果不能被
2—√n 的任何一个整数整除,就不会执行break语句, i 一直变化到等于 n ,然后再根据第一个 for 循环里面的判断 i<n ,得到条件不成立,从而结束循环。这种才属于正常的结束循环。最后在根据结束时的 i 等于多少,跟 n 相比即可得到是否为素数。
2.Fibonaccci(斐波那契数列)
有一对兔子,从出生后第三月起每个月都生一对兔子,小兔子长到第三个月又生一对兔子。假设所有兔子不死,问每个月的兔子总数是?
解题思路:
根据题意,可以根据刚开始两个月的兔子数退出第三个月的兔子数。假设第一个月的兔子数是 f1=1, 第二个月兔子数是 f2=1 ,则第三个月的兔子数是 f3=f1+f2=2。以此类推,f4=f2+f3,f5=f3+f4。
代码如下:
#include<stdio.h>
int main()
{
int f1 = 1, f2 = 1;
int i;
for (i = 1; i <= 20; i++)//每个循环中输出2个月的数据,所以循环20次
{
printf("%12d %12d", f1, f2);//输出已知两个月的兔子数
if (i % 2 == 0)printf("\n");//输入四个数后换行
f1 = f1 + f2;//将下一个月的兔子数放在f1中
f2 = f2 + f1;//将下两个月的兔子数放在f2中
}
return 0;
}
运行结果:
总结
这些就是我在C语言中总结关于选择和循环的一些知识点,选择跟循环不管在什么时候都是我们经常会使用到的一个语法结构,希望我的一些小总结能够帮助到大家,我也会再接再厉。