C语言continue
一、类型转换:
只有相同类型的数据才能运算,若不相同需要先转换为相同类型后再进行计算
自动类型转换:
转换规则:以不丢失数据为基础,可以适当地牺牲一些空间;1.字节少的向字节多的转2.有符号的向无符号的转(有符号数据环状)3.整型向浮点型转 123为优先级
注意:char short与不同类型的数据运算时,会先提升为int类型后参与运算
sizeof 内式子不参与计算,猜测结果最大值sizeof(3?1:3.1)得出8
强制类型转换:
(新类型名)数据;这种方式有可能会丢失数据,要慎重使用
二、switch开关分支语句:
switch(n) //n为数值、表达式,运算结果必须是整数
{
case val: //如果val == 表达式则打开执行开关
...
break; //关闭执行开关,结束Switch
//如果每个case后都加break形成分支结构
case val2: //val必须是常量
...
default: //所有case都没有被打开则最后打开default,可不加,break也需要(放case前面也是最后执行,但是若没break则同理未关上开关)
}
switch中不可使用continue
Case a ... b可表示[a,b]但是只有GNU编译器才支持该语法,不建议使用
练习1:输入一个月份判断是什么季度(123 第一季度 456 第二季度 789 第三季度 101112第四季度 other 季度有误)
#include <stdio.h>
int main(int argc,const char* argv[])
{
char month = 0;
printf("Please input a month:\n");
scanf("%hhd",&month);
switch(month)
{
case 1:printf("first jidu");break;
case 2:printf("first jidu");break;
case 3:printf("first jidu");break;
case 4:printf("second jidu");break;
case 5:printf("second jidu");break;
case 6:printf("second jidu");break;
case 7:printf("third jidu");break;
case 8:printf("third jidu");break;
case 9:printf("third jidu");break;
case 10:printf("forth jidu");break;
case 11:printf("forth jidu");break;
case 12:printf("forth jidu");break;
default:printf("the month your input is wrong");
}
return 0;
}
练习2:输入一个月份判断该月多少天(2月算28)
#include <stdio.h>
int main(int argc,const char* argv[])
{
char month = 0;
printf("Please input a month:\n");
scanf("%hhd",&month);
switch(month)
{
case 1:printf("this month has 31 days");break;
case 2:printf("this month has 28 days");break;
case 3:printf("this month has 31 days");break;
case 4:printf("this month has 30 days");break;
case 5:printf("this month has 31 days");break;
case 6:printf("this month has 30 days");break;
case 7:printf("this month has 31 days");break;
case 8:printf("this month has 31 days");break;
case 9:printf("this month has 30 days");break;
case 10:printf("this month has 31 days");break;
case 11:printf("this month has 30 days");break;
case 12:printf("this month has 31 days");break;
default:printf("the month your input is wrong");
}
return 0;
}
三、for循环语句:
循环就是一种让代码反复执行的方法,最终达到想要的效果
for循环是一种非常灵活变化多样且危险系数高(相比其他循环而言)的循环语句
for一般使用一个变量来引导循环的执行,该变量叫循环变量i index
For([1] ;[2] ;[3] )
{
[4] //[]内容可有可无
}
[1].给循环变量赋初始值,C99以上标准才可以在此处定义循环变量,-std=gnu99 for循环内定义的变量无法带出(不能在外面用) [2].判断循环变量是否到达边界,未到达则进入循环到[4]循环体被反复执行 [3].改变循环变量,防止出现死循环,一般进行自加自减
大括号问题:
1.建议上下对齐2.如果循环体中只有一行代码可以省略大括号,但是不利于扩展不建议去大括号,一般的商业代码都要求大括号不能省略
for循环的各种写法:
for( ;//不写永远为真 ; )
{
//死循环
}
int i =0;
for (;i<10;i++)
{
}
for(int i =0; ;i++)
{
if(i>=10)
{
break;
}
}
练习3:计算出所有的三位水仙花数(abc == a^3+b^3+c^3)
#include <stdio.h>
int main(int argc,const char* argv[])
{
int i = 0,num1=0,num2=0,num3=0;
for(i=100;i<1000;i++)
{
num1=i%10;
num2=((i-num1)/10)%10;
num3=i/100;
if(i==num1*num1*num1+num2*num2*num2+num3*num3*num3)
{
printf("%d\n",i);
}
}
return 0;
}
练习4:输入一个正整数判断是否是素数
#include <stdio.h>
int main(int argc,const char* argv[])
{
int numi=0,i=0;
printf("Please input a Z number:\n");
scanf("%d",&numi);
for(i=2;i<numi;i++)
{
if(numi%i==0)
{
printf("this Z number is not a prime number");break;
}
}
if(i==numi)
{
printf("this Z number is a prime number");
}
if(numi==1)
{
printf("既不是质数也不是合数");
}
return 0;
}
四、while循环:
while(表达式)
{
//若表达式为真反复执行此处循环体代码
}
while相当于for的精简版本,for循环专门负责解决明确知道循环次数的问题,while循环专门负责解决不确定循环次数的问题
五、do-while循环:
do{
// 循环体
}while(表达式); //这个封号必须加
先执行循环体再判断循环条件,最少执行一次,适合先干活后检查的特殊情况,例如输密码、文件内容判断,表达式为真继续循环
for、while、do-while的区别:(自己的话概括)while是for的精简版本,while便于解决循环次数不确定的问题,for便于解决循环次数确定的问题,do-while是先进入循环体再判断,至少会执行一次,适合不同的特殊情况
六、循环嵌套:
循环语句中包含了循环语句,外层循环执行一次,内层循环执行n次,n为决定内层循环的次数。最好控制三个循环之内。
练习5:输入一个正整数,判断是不是回文数(例如12321 123321正着念=倒着念)
#include <stdio.h>
int main(int argc,const char* argv[])
{
int num = 0,n = 0,same = 0,temp = 0;
printf("Please input a Z number:\n");
scanf("%d",&num);
temp=num;
while(num>0)
{
n=num%10;
num=num/10;
same=same*10+n;
}
if(same==temp)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
return 0;
}
练习6:模拟输入六位密码,输入成功则显示“登陆成功”,错误则提示还剩几次机会(总3次),如果还有机会则继续输入密码,超三次显示“账号已锁定请联系柜台”,结束程序。
#include <stdio.h>
int main(int argc,const char* argv[])
{
int key=200105,answer=0,n=3;
printf("请输入密码,共3次机会\n");
do
{
scanf("%d",&answer);
if(key==answer)
{
printf("登录成功\n");break;
}
else
{
n=n-1;
if(n==0)
{
printf("密码错误,当前帐号已锁定,请联系工作人员\n");break;
}
printf("登录失败,你还有%d次机会\n",n);
}
}while(n>0);
return 0;
}
作业:
1.打印99乘法表
#include <stdio.h>
int main(int argc,const char* argv[])
{
char i=1,j=1,m=0;
printf(" 九九乘法表\n");
printf("*************************************************************************************************************\n");
for(i=1;i<10;i++)
{
for(j=i;j<10;j++)
{
m=i*j;
printf("%-2hhd*%2hhd = %2hhd ",i,j,m);
}
printf("\n");
}
printf("*************************************************************************************************************\n");
return 0;
}
2.编程解决百钱百鸡问题(公鸡rooster一个五块钱,母鸡hen一个三块钱,小鸡Chicken单数chick三个一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?)
#include <stdio.h>
int main(int argc,const char* argv[])
{
char roosters = 0,hens = 0,chicken = 0;
for(roosters=0;roosters<100;roosters++)
{
for(chicken=0;chicken<100-roosters;chicken=chicken+3)
{
hens=100-roosters-chicken;
if(5*roosters+3*hens+chicken/3==100)
{
printf("roosters=%2hhd,hens=%2hhd,chicken=%2hhd\n",roosters,hens,chicken);
}
}
}
return 0;
}
3.计算出(100~1000)之间所有素数
#include <stdio.h>
int main(int argc,const char* argv[])
{
int num = 0,i = 0,count = 0;
for(num=100;num<=1000;num++)
{
for(i=2;i<num/2;i++)
{
if(num%i==0)
{
break;
}
}
if(i==num/2)
{
count++;
printf("%d ",num);
}
if(count==20)
{
printf("\n");
count = 0;
}
}
return 0;
}