标准C语言
一,类型转换
只有相同类型的数据才能计算,如果类型不相同需要先转换类型相同后在进行运算。
自动类型转换:
转换规则:一不丢失数据为基础,可以适当牺牲一些空间
1,字节少的向字节多的转
2,有符号的向无符号的转
3,整型向浮点型转
tap:char short 如果与不同类型的数据运算时,会先提升为int类型后参与运算
强制类型转换:
(新类型名)数据;有可能会丢书数据,所以要慎重使用
二,for循环语句
循环就是一种让代码反复执行的方法,达到你想要的效果
for循环语句是一种非常灵活,变幻多样且危险(相比其他循环)得循环
for一般使用一个变量来引导循环的执行;该变量叫做循环变量 i
for([1];[2];[3])
{
[4]
}
[1],给循环变量赋初始值 ,只有C99以上标准才可以在此处定义循环变量
[2],判断循环变量是否到达边界,如果没到达就进入循环[4]
[4],被反复执行的代码,称为循环体
[3],改变循环变量的值,防止出现死循环,一般是对循环变量的自加或自减。
大括号问题:
1,建议上下对其
2,如果循环体中只有一行代码,大括号可以省略但是不利于扩展,一般商业代码要求大括号不省略
for循环的几种写法:
for(;;)
{
//死循环
}
for(;i<10;i++)
{
}
for(int i=0;;i++)
{
if(i>=10)
{
break;
}
}
for(int i=0;i<10;)
{
...
i++;
...
}
三, while 循环语句
while(表达式)
{
//循环体
}
当表达式为真时执行循环体,执行完后重新判断表达式,以此类推,直到表达式为假,结束循环。
while 相当与 for 的精简版本
for 循环专门负责解决明确知道循环次数的问题
while 循环专门负责解决不知道循环次数的问题
四,do-while 循环语句
do{
//循环体
}while(表达式);//表达式为真循环继续,为假结束循环
先执行循环体,在判断循环条件,该循环体至少执行一次,适合先干活,后检查的特殊情况
例如输入密码,文件内容判断
for while do while 循环的区别:
for循环一般指定一个循环变量,来让代码反复执行
while循环是for循环的精简版,一般用来执行不知道精确次数的循环
do while 与while相似,但do while 至少执行一次
五,循环嵌套
循环语句中包含了循环语句
外层循环执行一次,内层循环执行n次
六,跳转语句
goto
可以在函数内任意跳转
标签名:
...
goto 标签名;
它可能会破坏已经设计好的分支或者循环结构,因此绝大多数公司禁止使用goto
但是在驱动编程时特别适合处理异常
break
1,在 switch 中关闭 case 执行开关
2,跳出循环,只能跳出当前单层循环
continue
结束本次循环,进入下一次循环
return
1,结束函数的执行,程序跳转到函数调用的地方继续执行
2,可能返回一个数据给函数的调用者
每日一练:
练习1: 输入一个月份,判断是什么季节
练习2: 输入一个月份,判断该月有多少天,忽略润平年问题
练习3: 计算出所有的三位水仙花数
练习4: 输入一个正整数,判断是否为素数
练习5: 输入一个正整数,判断是否时回文数
练习6: 模拟输入6位密码,输入的密码正确显示"登录成功",输入错误提示还剩几次机会,
并继续输入密码,最多错三次,否则显示"账号已锁定,请联系柜台",并结束程序
作业1: 打印99乘法表
作业2: 编程解决百钱百鸡问题
公鸡五块一只 母鸡三块一只 小鸡一块三只
作业3: 计算出100~1000之间所有素数
#include <stdio.h>
int main(int argc,const char* argv[])
{
int mouth = 0;
printf("请输入一个月份:");
scanf("%d",&mouth);
if(mouth>12 || mouth<1)
{
printf("输入月份有误!!!");
return 0;
}
switch(mouth)
{
case 1:case 2:case 3:
printf("%d月是春天",mouth);
break;
case 4:case 5:case 6:
printf("%d月是夏天",mouth);
break;
case 7:case 8:case 9:
printf("%d月是秋天",mouth);
break;
default:
printf("%d月是冬天",mouth);
}
}
#include <stdio.h>
int main(int argc,const char* argv[])
{
int month = 0;
printf("请输入一个月份:");
scanf("%d",&month);
if(month>12 || month<1)
{
printf("输入有误!!!");
return 0;
}
switch(month)
{
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
printf("%d月有31天\n",month);
break;
case 2:
printf("%d月有28天\n",month);
break;
default:
printf("%d月有30天\n",month);
}
}
~
#include <stdio.h>
int main(int argc,const char* argv[])
{
for(int i=100;i<1000;i++)
{
int a,b,c;
a=i/100;
b=(i-a*100)/10;
c=(i-a*100)%10;
if(i == (a*a*a+b*b*b+c*c*c))
{
printf("%d ",i);
}
}
}
1 #include <stdio.h>
2
3 int main(int argc,const char* argv[])
4 {
5 int num,flag=1;
6 printf("请输入一个正整数:");
7 scanf("%d",&num);
8 if(1>=num)
9 {
10 printf("输入有误,你个大傻逼!!!");
11 return 0;
12 }
13 for(int i=2;i<num;i++)
14 {
15 if(0 == num%i)
16 {
17 flag = 0;
18 break;
19 }
20 }
21 if(flag)
22 {
23 printf("%d是素数",num);
24 }
25 else
26 {
27 printf("%d不是素数",num);
28 }
29 }
#include <stdio.h>
int main(int argc,const char* argv[])
{
long long num;
long long i=0,s=0;
printf("请输入一个正整数:");
scanf("%lld",&num);
s = num;
while(s>0)
{
i = i*10+s%10;
s = s/10;
}
if(i == num)
{
printf("%lld 是回文数",num);
}
else
{
printf("%lld 不是回文数",num);
}
}
#include <stdio.h>
int main()
{
int passwd;
int flag = 123456,count = 3;
printf("请输入密码:");
scanf("%d",&passwd);
do{
if(passwd != flag)
{
printf("输入有误!!!(还剩%d次)\n请再次输入:",--count);
scanf("%d",&passwd);
}
else
{
break;
}
}while(count>1);
if(passwd == flag)
{
printf("登陆成功!!!");
}
else
{
printf("账号已锁定,请联系柜台");
return 0;
}
}
#include <stdio.h>
int main(int argc,const char* argv[])
{
for(int i = 1; i <= 9; i++)
{
for(int j = 1; j <=i; j++)
{
printf("%d*%d=%d \t", j, i, j*i);
}
printf("\n");
}
}
#include <stdio.h>
int main(int argc,const char* argv[])
{
int flag=1;
for(int i=100;i<1000;i++)
{
flag = 1;
printf("%d",flag);
for(int j=2;j<=(i/2);j++)
{
if(0 == i%j)
{
flag = 0;
break;
}
}
if(flag)
{
printf("%d ",i);
}
}
}
#include <stdio.h>
int main(int argc,const char* argv[])
{
int i=0,j=0,k=0;
for(i=0;i<=20;i++)
{
for(j=0;j<33;j++)
{
k=100-i-j;
if(100 == 5*i+3*j+k/3 && 0 == k%3)
{
printf("公鸡:%d 母鸡:%d 小鸡:%d\n",i,j,k);
}
}
}
}