循环分支结构
分支语句有两种:if [else]语句与switch-case语句;if语句有三种:单分支、双分支以及多分支语句;switch语句的用法特点以及使用过程中常见的问题;循环语句有两种:while(包括do…while)语句与for语句;辅助循环的关键字有三种:break,continue,return。
1 、if /switch分支
if(条件表达式或变量){
语句块;
}
条件表达式或变量成立时,是,则执行语句块(按照语句,逐句执行 ) 否则跳过不执行,可嵌套。
2、if …else语句
if(条件表达式或变量){
语句块1;
}else{
语句块2;
}
条件表达式或变量成立则执行语句块1 否则执行语句块2
3、if else if 语句嵌套
if(表达式1){
语句1;
}else if(表达式2){
语句2;
}else if(表达式3){
语句3;
}else if(表达式4){
语句4;
}else{
语句5;
}
4、Switch…case
switch(条件表达式或变量){
case字面值:语句1;break;
case字面值:语句2;break;
case字面值:语句3;break;
…
default语句块n;(其余)
}
5、while与do while语句
while(表达式){
语句;
}
do{
语句
}while(表达式);
6、for循环
for(表达式1;表达式2;表达式3){
语句;
}
一般表达式1为设定循环初始值
表达式2为条件表达式,为真则继续执行为假则跳出循环
表达式3一般为控制循环执行跨度
第一个语句可以省略,第三个语句也可以省略,但是分号不能省略
7、辅助循环的三大关键字
1、break让程序跳转到循环体之外
2、return让程序跳转到整个函数之外
3、continue是让程序跳转到循环头部
1. break关键字
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(){
int i = 0, n = -1;
float sum = 0;
printf("请连续输入多个数字以0作为结束:");
for (;;) {
scanf("%d", &n);
if (n == 0)
break;
sum += n;
++i;
}
printf("您总共输入了%d个数字,平均值是:%0.2f\n", i, sum / i);
return 0;
}
break语句可以中断循环,条件区也可以结束循环,两者可以互相替换,条件区内是让循环继续执行的条件,而break关键字之前的条件是中断循环的条件,因此两者相互替换时条件是刚好相反的。
2.return关键字
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <stdio.h>
int main(){
int i = 0, n = -1;
float sum = 0;
printf("请连续输入多个数字以8作为结束:");
while (1)
{
scanf_s("%d", &n);
if (n == 8)
return 1;
sum += n;
++i;
}
printf("你总共输入了%d个数字,平均值是:%0.2f\n", i, sum / i);
return 0;
}
3.continue关键字
#include <stdio.h>
int main(){
int i = 5, sum = 0;
for (; i < 42; ++i){
if (i % 7)
continue;
++sum;
printf("i=%d\n", i);
}
printf("总共%d个\n", sum);
return 0;
}
continue关键字必须在循环体内部使用,如果程序在循环体内运行时遇到了continue关键字,程序会立即跳转,跳转目标不是循环体之外,而是跳转到循环体的头部继续执行循环。
练习:
1.回文数
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
#include<stdio.h>
bool ispalindrome(int x){
if(__builtin_expect(!!(x<0),0))return false;
int y=0,z=x;
while(x){
y=y*10+x%10;
x/=10;
}
return z==y;
}
cpu分支预测(仅在linux平台可使用?)
#define likely(x) __builtin_expect(!!(x), 1)
#define unlikely(x) __builtin_expect(!!(x), 0)
#include <iostream>
using namespace std;
int main(char *argv[], int argc){
int a;
a = atoi (argv[1]);
if (unlikely (a == 2))
{
a++;
}
else
{
a--;
}
printf ("%d\n", a);
return 0;
}