选择结构的补充
if的特殊用法
判断时是需要==
if (a==5)--->if (5==a)
if (a=5)--->if (5=a) 这种会报错,赋值等号左边必须是变量
判断整数a的值为0
if (a==0)--->if (la)
判断整数a不会0
if (a!=0)--->if (a)
switch
switch的执行速度最快
格式:
switch(表达式)
{
case 常量表达式1:执行操作 break;
case 常量表达式2:执行操作 break;
case 常量表达式3:执行操作 break;
case 常量表达式4:执行操作 break;
case 常量表达式5:执行操作 break;
.......
case 常量表达式n:执行操作 break;
default:执行操作 break;
}
*解析
*表达式:可以是任意表达式,但是最终结果必须是整数或是单字符类型
*{}:可有可无,当c语句只有一句话时可以省略不写
*case:案例,case案例与常量表达式之间需要使用空格隔开
*常量表达式:是表达式的所有结果,只能是整数或是单字符常量
*break:退出switch
*default:执行除了以上case以外的所有情况
*多个case执行一个语句
*执行操作中如需要定义变量,用{}将整段执行操作框起来(限制作用区域)
例:输入一个天数,使用switch判断是星期几
输入一个表达式,使用switch实现加减乘除
循环结构
循环结构:while;do...while ;for(重复执行某一段代码)
while
格式:
表达式1;
while(表达式2)
{
循环体;
表达式3;
}
*解析
*表达式1:初始值
*表达式2:循环条件,如果条件成立则循环,条件为假则退出循环,可以是任意表达式,但是一般是算数,关系,逻辑组成
*{}:可有可无,当c语句只有一句话时可以省略不写
*表达式3:步长
*执行过程:如果表达式2条件为真则循环,若表达式2条件为假则退出循环
*死循环:
while(1)
{
}
练习:输出1-5
输入一个起始值,终止值,循环输出起始到终止,并起算之间的和
输入一个整数判断这是几位数
do... while
格式:
表达式1;
do
{
循环体;
表达式3;
}while(表达式2);
*解析
*表达式1:初始值
*表达式2:循环条件,如果条件成立则循环,条件为假则退出循环,可以是任意表达式,但是一般是算数,关系,逻辑组成
*{}:可有可无,当c语句只有一句话时可以省略不写
*表达式3:步长
*执行过程:先执行循环体,如果表达式2条件为真则继续循环,若表达式2条件为假则退出循环
*死循环:
do
{
}while(1)
练习:输出1-5
输入一个起始值,终止值,循环输出起始到终止,并起算奇数的和
循环输入数据,输入0结束,计算乘积
用do...while实现用户和密码的三次登录,用户名‘A',密码1234
如果用户密码正确则登录成功
如果登陆失败则提示
第一次登录失败还有两次机会
第二次登录失败还有一次机会
第三次登录失败账户被锁定
for
格式:
for(表达式1;表达式2;表达式3)
{
循环体
}
*解析
*表达式1:初始值
*表达式2:循环条件,如果条件成立则循环,条件为假则退出循环,可以是任意表达式,但是一般是算数,关系,逻辑组成
*{}:可有可无,当c语句只有一句话时可以省略不写
*表达式3:步长
*执行过程:先执行循环体,如果表达式2条件为真则继续循环,若表达式2条件为假则退出循环
*不写表达式1表达式2表达式3则均默认为1(真)
*死循环:
for(1;1;1)--->for(;;)
{
}
练习:使用for循环,循环26个英文字母
输入一个数,判断是否为素数
goto
goto:在C语言中式有害的,不建议使用,太灵活
格式:
标识符:
goto 标识符;
标识符:类似于变量名(满足命名规范)
循环跳转语句
break
功能:退出结束一层循环
使用场景:只能用于switch及(循环)while,do...while,for
*break不可以单独使用在if语句中,否则报错
continue
功能:结束本次循环,进入下次循环
使用场景:只能用于(循环)while,do...while,for
例:1-100逢7过(7的倍数/个位是7或十位是7的数均跳过)
return
功能:结束函数
goto
goto:无条件跳转语句
exit
功能:退出整个程序
循环嵌套
任意循环可任意嵌套
for(表达式1;表达式2;表达式3)
{
for(表达式1;表达式2;表达式3)
{
循环体;
}
}
外部循环控制行数,内部循环控制列数。for
练习:打印直角三角形
打印倒直接三角形
练习
输入一个数判断是否为回文数(正序倒序结果一样)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, const char *argv[])
{
int num,a,new=0;
printf("输入一个数值\n");
scanf("%d",&num);
a=num;
while(a)
{
new=new*10+a%10;
a=a/10;
}
if(new==num)
{
printf("%d是回文数\n",num);
}
else
{
printf("%d不是回文数数\n",num);
}
return 0;
}
输入一个起始值和终止值,输出起始值与终止值之间的素数
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, const char *argv[])
{
int start,end;
printf("输入一个起始值\n");
scanf("%d",&start);
printf("输入一个终止值\n");
scanf("%d",&end);
while(start<=end)
{
int j=0;
for(int i=2;i<=sqrt(start);i++)
{
if(start%i==0)
{
j++;
}
}
if (j==0&&start!=1)
{
printf("%d ",start);
}
start++;
}
putchar(10);
return 0;
}
输入一个数,判断是否为完美数(除本身外的约数和等于本身)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, const char *argv[])
{
int num,yue=0;
printf("输入一个数值\n");
scanf("%d",&num);
int i=1;
while(i<=num)
{
if(num%i==0&&num!=i)
{
yue+=i;
}
i++;
}
if(yue==num)
{
printf("是完美数\n");
}
else
{
printf("不是完美数\n");
}
return 0;
}
打印图形:
4:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int i,j;
int m;
printf("输入直角三角形直角边长度\n");
scanf("%d",&m);
for(i=1;i<=m;i++)
{
for(j=1;j<=i;j++)
{
printf(" ");
}
for(j=m;j>=i;j--)
{
printf("*");
}
putchar(10);
}
return 0;
}
5.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int i,j;
int m;
printf("输入直角三角形直角边长度\n");
scanf("%d",&m);
for(i=1;i<=m;i++)
{
for(j=m;j>=i;j--)
{
printf(" ");
}
for(j=1;j<=i;j++)
{
printf("*");
}
putchar(10);
}
return 0;
}
6.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int i,j;
int m;
printf("输入金字塔端层数\n");
scanf("%d",&m);
for(i=1;i<=m;i++)
{
int n=2*m-1;
for(j=(n/2);j>=i;j--)
{
printf(" ");
}
for(j=1;j<=(2*i-1);j++)
{
printf("*");
}
putchar(10);
}
return 0;
}