程序流程结构
一、程序结构分类:
(一)顺序结构:
从上到下依次执行
//华氏温度转换为摄氏温度
//转换公式:c=5/9(f-32)
#include <stdio.h>
int main(){
double f;
double c;
f = 69.0;
//注意:在整数的除法运算中,如果两个都是整数,则结果为整数
//c = (5/9)*(f-32);//5/9为0
c = (5.0/9)*(f-32);
prirntf("69华氏温度的摄氏温度为:%lf\n",c);
}
(二)选择结构:
1.if 语句:
注意点:
2.if…else语句:
if(条件)[条件为真执行]
else[条件为假执行]
int age;
printf("请输入你的年龄:");
scanf("%d",&age); //注意:scanf的%d后面不能加\n换行,否则回车无法输出
if(age >= 18){
printf("可以上网!");
}else{
printf("滚回家去!");
}
3.if…elseif …else语句:
//成绩评定:大于等于90为A,80到90为B,60到80为C,60以下为D
double score;
printf("请输入你的成绩:");
scanf("%lf",&score);
if(score >= 90){
printf("A");
}else if(score>= 80 && score < 90){//注意不要写为80>=score<90
printf("B");
}else if(score >= 60 && score < 80){
printf("C");
}else{
printf("D");
}
//输出a和b较大的数
double a;
double b;
printf("请输入a的值:");
scanf("%lf",&a);
printf("请输入b的值:");
scanf("%lf",&b);
if(a > b){
printf("a");
}else if(a == b){
printf("a = b");
}else{
printf("b");
}
//a大于等于 b则输出a 否则输出b
double a;
double b;
printf("请输入a的值:");
scanf("%lf",&a);
printf("请输入b的值:");
scanf("%lf",&b);
printf("最大值:%lf\n",a>=b?a:b);
三目运算符:
逻辑运算表达式(a>b) ? 表达式2(a):表达式3(b) 为真则为表达式2,为假则为表达式3
4.switch语句:
//模拟计算器的+ - *,1为+ 2为- 3为* 4为/ 其他为非法操作 /
int info;
printf("请输入你的操作(1为+ 2为- 3为* 4为/ 其他为非法操作):");
scanf("%d",&info);
switch(info){
case 1:
printf("+");
break;
case 2:
printf("-");
break;
case 3:
printf("*");
break;
case 4:
printf("/");
break;
default:
printf("非法操作");
}
注意事项:
switch语句的()里面的表达式只能是整型或者字符型
案例:
//通过程序实现两个数的交换
int a = 2,b = 3;
printf("交换前:");
printf("a = %d,b = %d\n",a,b);
int temp;
temp = a;
a = b;
b = temp;
printf("交换后:");
printf("a = %d,b = %d\n",a,b);
//判断用户输入的是否是闰年
/*
闰年:
年份/4可整除但不能被100整除,或年份能被400整除*/
int year;
printf("请输入年份:");
scanf("%d",&year);
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
printf("%d是闰年",year);
}
(三)循环语句:
1.while语句:
先判断后执行
1.1.格式:
1.2.C语言实现:
int main(){
//用while实现5次hello world的输出
int n = 1;
while(n <= 5){
printf("hollo world\n");
n ++;//切记使用自加 否则陷入死循环
}
//求1到100的数的和
int a = 1;
int sum = 0;
while(a <= 100){
sum = sum + a;
a++;//a++一般放在循环末尾 先执行sum求和 然后自加
}
printf("%d\n",sum);
2.do_while语句:
先执行后判断
2.1.格式:
2.2.C语言实现:
//求1到100的数的和
int a = 1;
int sum = 0;
do{
sum = sum + a;
a++;
} while(a <= 100);//注意分号
printf("%d\n",sum);
3.for语句:
3.1.C语言实现:
//求1到100的数的和
int i ; //操作数
int sum = 0;//结果数
for(i = 1;i <= 100;i++){
sum = sum + i;
}
printf("%d\n",sum);
3.2.执行顺序:
先判断,后执行循环体,然后自增或自减
4.循环嵌套:
C语言实现:
//for循环的嵌套
int i;//外层
int j;//内层
for(i = 1;i <= 5;i++){
printf("你好 ");
for(j = 1;j <= 5;j++){
printf("hello ");
}
}
实现结果:
外层循环每执行一次,内层循环执行一个大循环,可以讲内层循环理解为一个简单的语句,外层循环执行,内层循环完成自己的语句
5.循环结构的具体训练:
5.1.素数求和:
判断一个数是否为素数
素数:只能被1和它本身整除的数
方法一:
int num;//接收用户输入
printf("请输入一个正整数:");
scanf("%d",&num);
int i;//外层循环定义
int count = 0;//素数计数
for(i = 1; i <= num;i++ ){
if(num % i == 0){
count ++;
}
}
if(count == 2){
printf("%d是素数",num);
} else{
printf("%d不是素数",num);
}
方法二:
int num;//接收用户输入
printf("请输入一个正整数:");
scanf("%d",&num);
int i;//外层循环定义
for(i = 2; i <= num-1;i++ ){//剔除1和它本身
if(num % i == 0){
break;
}
}
if(i <= num - 1){
printf("%d不是素数",num);
} else{
printf("%d是素数",num);
}
方法三:
#include <math.h> //利用数学函数sqrt()[开根号]将判断的范围缩小
int main(){
int num;//接收用户输入
printf("请输入一个正整数:");
scanf("%d",&num);
int i;//外层循环定义
for(i = 2; i <= sqrt(num);i++ ){//剔除1和它本身
if(num % i == 0){
break;
}
}
if(i <= sqrt(num)){
printf("%d不是素数",num);
} else{
printf("%d是素数",num);
}
5.2.水仙花数(三位数):
153 = 1^3 + 5^3 + 3^3 = 153
注:计算机表达5的三次方是 5 * 5 * 5
类型一:
#include <stdio.h>
#include <math.h>//pow()为求n方函数 :pow(2,2) = 2^2
int main(){
int num;//接收用户输入
printf("请输入一个三位正整数:");
scanf("%d",&num);
//获取个十百位
int ge = num % 10;
int shi = num / 10 % 10;
int bai = num / 100;
//判断是否为水仙花数
int sum = pow(ge,3) + pow(shi,3) + pow(bai,3);
if(sum == num){
printf("%d是水仙花数!",num);
}else{
printf("%d不是水仙花数!",num);
}
return 0;
}
类型二:
#include <stdio.h>
#include <math.h>//pow()为求n方函数 :pow(2,2) = 2^2
int main(){
int i;
int sum;//三位求和
for( i = 100; i <= 999; i ++){
//获取个十百位
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 100;
//求和
sum = pow(ge,3) + pow(shi,3) + pow(bai,3);
//判断是否为水仙花数
if(sum == i){
printf("%d是水仙花数!",i);
}
}
return 0;
}
5.3.斐波拉切数列:
1 1 2 3 5 8 13 21 :后一个数是前两个数的和
# include <stdio.h>
//1 1 2 3 5 8 13 21 :后一个数是前两个数的和
//用户输入6 则输出第三个数列,即8
int main(){
int n;//接收用户输入
printf("请输入一个正整数:");
scanf("%d",&n);
int f1 = 1,f2 = 1;//定义出数列的前两个
int result = 0;
int i ;
for(i = 3;i <= n;i ++){
result = f1 + f2;
f1 = f2;
f2 = result;
}
printf("%d ",result);
return 0;
}
5.4.打印九九乘法表:
int i ,j;
for(i = 1;i <= 9;i ++){
for(j = 1;j <= i ;j ++){//注意j <= i 不要写为j <= 9
printf("%d*%d=%d ",j,i,i*j);
}
printf("\n");
}