目录
一、顺序结构程序设计
所谓的顺序结构程序设计,就是按照解决问题的顺序写出相应的语句即可.如下图示:
例题:将华氏温度转为摄氏温度:
步骤:
<1>输入华氏温度
<2>代入公式
t
=
5
/
9
(
f
−
32
)
t=5/9(f-32)
t=5/9(f−32)
<3>输出结果t
程序:
#include<stdio.h>
int main()
{
float t,f;
printf("请输入华氏温度f:\n");
scanf("%f", &f);
t = (5.0/9)*(f - 32);
printf("f = %f\nt = %f\n", f, t);
return 0;
}
结果:
以上程序若是在VS上运行时会编译不通过,可通过以下两种方法解决:
<1>将scanf改成scanf_s
<2>或者是在开头添加 #define _CRT_SECURE_NO_WARNINGS
二、选择结构程序设计
由于程序处理问题的需要,在大多数程序中都会包含选择结构,需要再进行下一个操作之前先要进行条件判断,C语言有两种选择语句:
<1>if 语句,用来实现两个分支的选择结构
<2>switch 语句,用来实现多分支的选择结构
用if语句实现选择结构
例题:输入两个整数,按从小到大的顺序输出
#include<stdio.h>
int main()
{
int a, b, tmp;
printf("请输入两个数:\n");
scanf("%d %d",&a, &b);
if (a > b)
{
tmp = a;
a = b;
b = tmp;
}
printf("%d %d\n",a, b);
return 0;
}
结果:
if语句的一般形式
/*一般形式
if(表达式) {语句1}
[else {语句2}]
根据if语句的一般形式,if语句有最常用的三种形式
<1>有else子句部分
if(表达式) {语句1}
else {语句2}
<2>无else子句部分
if(表达式) {语句1}
<3>在else部分又嵌套了多层的if语句
if(表达式1) {语句1}
else if(表达式2) {语句2}
else if(表达式3) {语句3}
.......
else if(表达式n) {语句n}
else {语句n+1}
*/
- 其中,表达式可以是关系表达式、逻辑表达式,甚至是数值表达式等
- []中的语句可有可无
用switch实现多分支的选择结构
废话不多说,上个简单的例子:
要求按照考试成绩输出百分制分数段,90-100 A,80~89 B,70-79 C,60-69 D,60以下为E.
#include<stdio.h>
int main()
{
char score;
printf("Please Input Your Score:");
scanf("%c", score);
printf("Your Score:");
switch (score)
{
case 'A': printf("90~100\n");break;
case 'B': printf("80~89\n");break;
case 'C': printf("70~79\n");break;
case 'D': printf("60~69\n");break;
case 'E': printf("<60\n");break;
default: printf("Enter Data Error!\n");
}
return 0;
}
结果:
由这个例题可以看出:switch语句的作用是根据表达式的值,是流程跳转到不同的语句.
switch语句的一般形式
/*
switch(表达式)
{
case 常量1: 语句1;
case 常量2: 语句2;
......
case 常量n: 语句n;
default: 语句n+1;
}
*/
说明:
<1> ()中的表达式,其值的类型应为整数类型(包括字符型).
<2> case后面跟一个常量(或常量表达式),它们和default都是起标号作用,用来标志一个位置;执行switch语句时,先计算switch后面的“表达式”的值,然后将它与各case标号比较,如果与某一个case标号中的常量相同,流程就转到此case标号后面的语句。如果没有与switch表达式相匹配的case常量,流程转去执行default标号后面的语句.
<3>在执行switch语句时,根据switch表达式的值找到匹配的入口标号,在执行完一个case标号后面的语句后,就从此标号开始执行下去,不再进行判断。因此,一般情况下,在执行一个case子句后,应当用break语句使流程跳出switch结构。最后一个case子句(今为default子句)中可不加break语句.
更加详细说明可见“《C语言程序设计》 谭浩强 著 第四版“第103-104页.
三、循环结构程序设计
while循环
一般形式:
/*
while(表达式)
{
语句;
}
*/
其中,表达式为循环条件,语句为循环体.当此循环条件为真(非0)时,执行循环语句,当为假(0)时,就不执行循环体.
特点:先判断条件表达式,再决定是否执行循环体.
例题:求1+2+3+4+…+100.
#include<stdio.h>
int main()
{
int n, sum = 0, i = 1;
printf("请输入数字:");
scanf("%d", &n);
while (i <= n)
{
sum = sum + i;
++i;
}
printf("sum为: %d\n", sum);
return 0;
}
结果:
do…while循环
一般形式:
/*
do
{
语句
}
while (表达式)
*/
特点;先无条件的执行循环体,然后判断循环条件是否成立.
用do…while循环求1+2+3+4+…+100.
#include<stdio,h>
int main()
{
int n, i = 1, sum = 0;
printf("请输入数字:");
scanf("%d", &n);
do
{
sum = sum + i;
i++;
}
while (i < n);
printf("sum为:%d\n", sum);
}
结果:
用for语句实现循环
for语句的一般形式:
/*
for(表达式1; 表达式2; 表达式3)
{
语句;
}
*/
3个表达式的主要作用;
表达式1:设置初始条件,只执行一次.可以为零个、一个或多个变量设置初值.
表达式2;是循环条件表达式,在每次执行循环体前先执行此表达式.
表达式3:作为循环的调整,是在执行完循环体后才进行的.
注意:
- 表达式1可以省略,但表达式1后的";"不能省略.例如for(;i<=100;i++).应当注意: 由于省略了表达式1,未对循环变量赋初值,因此,为了能正常执行循环,应在for语句之前给循环变量赋以初值.
- 表达式2可以省略,但此时循环会无终止地进行下去,也就是认为表达式2始终为真.
- 表达式3亦可以省略,但此时程序设计者应另设法保证循环能正常结束.
几种循环的嵌套
一个循环体内又包含另一个完整的循环结构,称为循环的嵌套.
改变循环执行的状态
<1>break语句提前终止循环,使流程跳到循环体之外,接着执行循环体下面的语句.
<2>continue语句结束本次循环,返回继续执行下一次是否循环的判定.
例题:
要求输出1~50能被3整除的数.
#include<stdio.h>
int main()
{
int i = 1
for (; i <= 50; i++)
{
if (i % 3 != 0)
{
continue;//所有i%3!=0的都跳过
}
printf("%d ", i);
}
printf("\n");
return 0;
}
结果:
循环程序举例
<1>求斐波那契数列的前n个数
1,1,2,3,5,8,13,…
该数列的特点就是从第三个数开始,该数时前面两个数之和.
#include<stdio.h>
int main()
{
int f1 = 1;
int f2 = 1;
int f3, n;
printf("Please Input Number:");
scanf("%d", &n);
int i = 1;
printf("%d %d ", f1, f2);
for (; i <= n; i++)
{
f3 = f1 + f2;
printf("%d ", f3);
f1 = f2;
f2 = f3;
}
printf("\n");
return 0;
}
比如说前15个数:
<2>求100–200之间的全部素数
素数:在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数.
#include<stdio.h>
//判断一个数是否为素数
/*int main()
{
int n,i;
printf("Please Input num:");
scanf("%d", &n);
for (i = 2; i < n; i++)
{
if (n % i == 0)
{
break;
}
}
if (i < n)
{
printf("%d不是素数", n);
}
else
{
printf("%d是素数", n);
}
return 0;
}*/
//输出100-200之间的全部素数
int main()
{
for (int n = 100; n <= 200; n++)
{
int i = 2;
for (; i < 200; i++)
{
if (n % i == 0)
{
break;
}
}
if (i >= n)
{
printf("%d ", n);
}
}
printf("\n");
return 0;
}
结果: