一.》语句
条件判断语句也叫分支语句:if语句、switch语句;
循环执行语句:do while语句、while语句、for语句;
转向语句:break语句、goto语句、continue语句、return语句。
二.》C-分支语句(选择结构)判断
在C 语言中 把任何非零和非空的值假定为 true,把零或 null 假定为 false。
单独的if构成的语句
1.1-if 语句
一个 if 语句 由一个布尔表达式后跟一个或多个语句组成
1.2-代码
我们经常写的 三数比大小
#include <stdio.h>
int main()
{
int a,b,c,t; /*定义4个基本整型变量a、b、c、t*/
printf("Please input a,b,c:\n"); /*双引号内的普通字符原样输出并换行*/
scanf("%d,%d,%d",&a,&b,&c); /*输入任意3个数*/
if(a>b) /*如果a大于b,借助中间变量t实现a与b值的互换*/
{
t = a;
a = b;
b = t;
}
if(a>c) /*如果a大于c,借助中间变景t实现a与c值的互换*/
{
t = a;
a = c;
c = t;
}
if(b>c) /*如果b大于c,借助中间变量t实现b与c值的互换*/
{
t = b;
b = c;
c = t;
}
printf("The order of the number is:\n");
printf("%d,%d,%d",a,b,c); /*输出函数顺序输出a、b、c的值*/
return 0;
}
如果 条件满足--》 过一遍if里的代码块内容(有printf就打印,有什么工作就做前提:条件满足)
#include <stdio.h>
int main (){
int a = 15;
if( a < 56 ){ /* 如果条件为真,则输出下面的语句 */
printf("a 小于 56\n" );//a 小于 56
}
printf("a 的值是 %d\n", a);//a 的值是 15
return 0;
}
if..else
一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。
闰年判断
#include<stdio.h>
int main(){
int year;
scanf("%d",&year);
//是真的返回1
//不是 返回0
year=(year%100==0)?(year%400==0?1:0):(year%4==0?1:0);
printf("%d",year);
if(year){
printf("是闰年");
}
else if(!year){
printf("不是闰年");
}
}
1. 其中 if(year){}里面不写成year==1的原因是默认为“1”。在计算机中1就是真就进入
2.三目运算符 其实是if..else的简写形式
Exp1 ? Exp2 : Exp3;
? 表达式的值是由 Exp1 决定的。如果 Exp1 为真,则计算 Exp2 的值,结果即为整个表达式的值。如果 Exp1 为假,则计算 Exp3 的值,结果即为整个表达式的值。
3.C 嵌套 if 语句
if 或 else if 语句内使用另一个 if 或 else if 语句
示意图如下
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1123)
if (b == 23333)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
值得注意的是:else 会和最近的那个if 自动匹配
总结if注意事项:if 关键字之后均为表达式。通常是逻辑表达式或关系表达式,也可以是一个变量。
4.switch
一个 switch 语句允许测试一个变量等于多个值时的情况
下方的示意图 和上面if的嵌套的图相似
switch 语句必须遵循下面的规则:
· switch 语句中的 expression 是一个常量表达式,必须是一个整型或枚举类型。
· 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。
· case 的 constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量。
· 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
· 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。
· 不是每一个 case 都需要包含 break。如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。
· 一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的。
case '+':
case '-':
字符类型case说没有问题的
4.1-需要break的情况
利用switch我们可以做一下蓝桥杯里的一道题
解答:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);
switch(a){
case 1:printf("Jan");break;
case 2:printf("Feb");break;
case 3:printf("Mar");break;
case 4:printf("Apr");break;
case 5:printf("May");break;
case 6:printf("Jun");break;
case 7:printf("Jul");break;
case 8:printf("Aug");break;
case 9:printf("Sep");break;
case 10:printf("Oct");break;
case 11:printf("Nov");break;
case 12:printf("Dec");break;
}
printf("%02d",b);
return 0;
}
/*C语言中输出格式%m.nf的意思
m:表示宽度
.n:表示精度*/
4.2-不需要break的
#include <stdio.h>
int main ()
{
/* 局部变量定义 */
char grade = 'B';
switch(grade)
{
case 'A' :
printf("很棒!\n" );
break;
case 'B' :
case 'C' :
printf("做得好\n" );
break;
case 'D' :
printf("您通过了\n" );
break;
case 'F' :
printf("最好再试一下\n" );
break;
default :
printf("无效的成绩\n" );
}
printf("您的成绩是 %c\n", grade );
return 0;
}
//default子句放在语句项的最后一行,是可以省略break的
4.3-注意
当我们输入了一个switch语句中没有的常量值,需要default
case后跟的是冒号:
没有break的case是会进入下一个case
三.》C-循环
循环是程序设计语言中反复执行某些代码的一种计算机处理过程,常见的有按照次数循环和按照条件循环。
while循环
while是计算机的一种基本循环模式。当满足条件时进入循环,进入循环后,当条件不满足时,跳出循环。while语句的一般表达式为:while(表达式){循环体}。
while(计算机循环语句)_百度百科 (baidu.com)
只要给定的条件为真,C 语言中的 while 循环语句会重复执行一个目标语句。
//看看有几位数
#include<stdio.h>
int main(){
//可以先将count=1,就可以少一部分
int x,count=0;
scanf("%d",&x);
//0也是一位数
count++;
x/=10;
while(x>0){
count++;
x/=10;}
printf("%d",count);
}
1.1-公约数求法
01》
#include <stdio.h>
int main(){
int m=24;
int n=18;
int r;
while(m%n){
//也可以在while直接赋值给r
r=m%n;
m=n;
n=r;
}printf("%d",n);
}
02》
#include <stdio.h>
int main()
{
int n1, n2;
printf("输入两个数,以空格分隔: ");
scanf("%d %d",&n1,&n2);
while(n1!=n2)
{
if(n1 > n2)
n1 -= n2;
else
n2 -= n1;
}
printf("GCD = %d",n1);
return 0;
}
03》通过for循环的 for可以是while的简写形式
#include <stdio.h>
int main()
{
int n1, n2, i, gcd;
printf("输入两个正整数,以空格分隔: ");
scanf("%d %d", &n1, &n2);
for(i=1; i <= n1 && i <= n2; ++i)
{
// 判断 i 是否为最大公约数
if(n1%i==0 && n2%i==0)
gcd = i;
}
printf("%d 和 %d 的最大公约数是 %d", n1, n2, gcd);
return 0;
}
04》递归
#include <stdio.h>
int hcf(int n1, int n2);
int main()
{
int n1, n2;
printf("输入两个正整数: ");
scanf("%d %d", &n1, &n2);
printf("%d 和 %d 的最大公约数为 %d", n1, n2, hcf(n1,n2));
return 0;
}
int hcf(int n1, int n2)
{
if (n2 != 0)
return hcf(n2, n1%n2);
else
return n1;
1.2-注意代码块
执行’{}‘之中的
while得给一个条件终止循环 才能结束
如:EOF
#include <stdio.h>
int main(){
//EOF---END OF FILE 本质是-1
char ch;
while((ch=getchar())!=EOF){
putchar(ch);
}
}
for循环
for循环是编程语言中一种循环语句,而循环语句由循环体及循环的判定条件两部分组成,其表达式为:for(单次表达式;条件表达式;末尾循环体){中间循环体;}
2.1-C 语言中 for 循环的语法:
for ( init; condition; increment ){ statement(s);}
// 初始条件 ,循环条件, 循环动作
2.2-注意事项
1.for循环中的变量可以是一个也可以是多个。
2.for循环中语句可以为语句体, 语句体外加大括号"{}"将参加循环的语句括起来。
3. for循环中的"单次表达式"、"条件表达式"和"循环体语句"都是选择项, 即可以缺省成只剩下“;”的空语句,。
2.3-我们的阶乘写法:
//阶乘 n! 而for=对于
//for(count=10;count>0;count--)
//求和应该让初始化变量为0
// 积 1
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
int fact=1;
int i=1;
// for(i=2;i<=n;i++){
for(i=1;i<=n;i++){//初始条件,循环条件,循环动作
fact*=i;
printf("%d\t",fact);
}
printf("%d!=%d\n",n,fact);
}
2.4例子--素数
素数(两种办法)开平方sqrt +试除法 :
sqrt原型:来源:<math.h>
double sqrt( double x );
//The sqrt function returns the square-root of x. If x is negative, sqrt returns an indefinite (same as a quiet NaN).
素数除了2以外都是奇数那么什么控制好i的起始量不是2那么在循环条件就i+=2;更加的快速
素数代码如下
#include <stdio.h>
#include <math.h>
int main(){
//i=a*b 那么a和b里至少有一个数字<=开平方i
//sqrt--开平方的数学库函数
int i=0,count=0;
for(i=101;i<=200;i+=2){
int j=0;
for(j=2;j<=sqrt(i);j++){
if(i%j==0){
break;
}
}
if(j>sqrt(i)){
count++;
printf("%d\n",i);
}
}
printf("%d个·",count);
/*// 试除法
int i=0,count=0;
for(i=100;i<=200;i++){
产生2->i-1如 问13是不是 则在2-12中找
int j=0;
for(j=2;j<i;j++){
if(i%j==0){
break;
}
}
if(j==i){
count++;
printf("%d",i);
}
}
printf("\n count=%d ",coount);
*/
do-while循环
3.1- C 语言中,do...while 循环是在循环的尾部检查它的条件。
do...while 循环与 while 循环类似,但是 do...while 循环会确保至少执行一次循环。
然后在while()内检查条件是否为真,如果条件为真的话,就会重复do...while这个循环,直至while()为假。
//do-while 循环语法 格式:
do{
循环体;
}
while (条件表达); //条件表达,可以引用外传感器返回值。
3.2-接下来有一个while和 do-while的对比算平均数的代码
#include<stdio.h>
int main(){
int number;
int sum=0,count=0;
/*do{
scanf("%d",&number);
if(number!=-1){
sum+=number;
count++;}
}while(number!=-1);
*/
scanf("%d",&number);
while(number!=-1){
sum+=number;
count++;
scanf("%d",&number);
}
printf("%f",1.0*sum/count);
return 0;
}
3.3-循环输出:
#include <stdio.h>
int main (){
/* 局部变量定义 */
int a = 10;
/* do 循环执行,在条件被测试之前至少执行一次 */
do{
printf("a 的值: %d\n", a);
a = a + 1;
}while( a < 20 );
return 0;
}
//结果: 10~19挨个换行输出
四.》C-循环控制语句
BREAK; CONTINUE ;GOTO
BREAK
以下两种用法:
1. 当 break 语句出现在一个循环内时,循环会立即终止,且程序流将继续执行紧接着循环的下一条语句。
它可用于终止 switch 语句中的一个 case。
2. 如果您使用的是嵌套循环(即一个循环内嵌套另一个循环),break 语句会停止执行最内层的循环,然后开始执行该块之后的下一行代码。
#include <stdio.h>
int main ()
{
/* 局部变量定义 */
int a = 10;
/* while 循环执行 */
while( a < 20 )
{
printf("a 的值: %d\n", a);
a++;
if( a > 15)
{
/* 使用 break 语句终止循环 */
break;
}
}
return 0;
}
2.continue
continue语句并不跳出循环,跳过本次循环continue语句只能用于循环体中。
#include <stdio.h>
int main ()
{
/* 局部变量定义 */
int a = 10;
/* do 循环执行 */
do
{
if( a == 15)
{
/* 跳过迭代 */
a = a + 1;
continue;
}
printf("a 的值: %d\n", a);
a++;
}while( a < 20 );
return 0;
}
//【10,15)U(15,19】
3.goto
goto 语句的语法:
goto label;
..
.
label: statement;
//goto out 和out 直接跳出(多重循环)
#include<stdio.h>
int main(){
int x;
int one,two,five;
scanf("%d",&x);
for(one=0;one<=x*10;one++){
for(two=0;two<=x*10/2;two++){
for(five=0;five<=x*10/5;five++){
if(one+two*2+five*5==x*10){
//goto out; }
}printf("可以用%d个1角,%d个2角,%d个5角得到%d元\n",one,two,five,x);
}
}
// out:
//return 0;
}}