C语言学习笔记第三天
-
类型转换
-
只有类型相同的数据才能运算,如果类型不同的数据需要先转换为相同的类型后在进行计算。
自动类型转换:
转换规则:
以不丢失数据为基础,可以适当地牺牲一些空间,
- 字节少的向字节多的转换(优先级最高)
- 有符号的向无符号的转换(优先级次高)
- 整型向浮点型转换(优先级最低)
注意:char short 如果与不同类型的数据运算时,会提升为int类型后参与运算
sizeof运算符里面的表达式不会进行计算
-
强制类型转换:
(新类型名)数据
:这种方法可能会丢失数据
-
-
switch分支语句
-
格式
switch(n)//n可以是数值、表达式、运算结果必须是整数 { case val1: 语句表达式 ;break;//如果val1==n,则打开执行开关 case val2: 语句表达式 ;break;//value 必须是常量 default:break;// case a ... b 可以表示[a,b],但是只有GNU编译器才支持该语法,不建议使用 }
-
注意:如果case语句后面没有break语句,那么满足case条件后,接下来的语句乃至后面case语句的代码也会执行,知道遇到break,或者执行完所有剩下语句。
int num=0; switch(num) { case 0: printf("====0====\n");// 1 case 1: printf("====1====\n");// 2 case 2: printf("====2====\n");// 3 default: printf("=default=\n");// 4 }
该程序会执行1 2 3 4 语句
-
练习1:输入一个月份,判断是什么季节
1 2 3春 4 5 6夏 7 8 9秋 10 11 12冬
other 月份有误
练习2:练习输入一个月份,判断该月有多少天忽略润平年问题
练习一:
#include <stdio.h> int main(int argc,const char* argv[]) { int month; printf("输入一个月份:"); scanf("%d",&month); switch(month) { case 1: case 2: case 3:printf("春\n");break; case 4: case 5: case 6:printf("夏\n");break; case 7: case 8: case 9:printf("秋\n");break; case 10: case 11: case 12:printf("冬\n");break; default:printf("月份有误\n");break; } }
练习二:
#include <stdio.h> int main(int argc,const char* argv[]) { int month; printf("请输入月份:"); scanf("%d",&month); if(month<1||month>12) { printf("输入不合法\n"); }else switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: printf("该月有31天\n"); break; case 2: printf("该月有28天\n"); default: printf("该月有30天\n"); break; } }
-
-
for循环语句
循环就是一种可以让代码反复执行的方法,到达你想要的效果
for循环是一种非常灵活,变化多样且危险(相比于其他循环)的循环
for一般使用一个变量来引导循环的执行,该变量叫做循环变量i
格式:
for([1];[2];[3]) { [4] }
[1]给循环变量赋初值,c99标准以上才可以在此定义循环变量,在编译的时候需要加上 -std=gnu99
[2]判断变量是否到达边界,如果没到达,进入循环
[3]改变循环变量,防止出现死循环,一般对循环变量进行自加躲着自减
[4]被反复执行的代码,成为循环体
一般用法:
for(int i=0;i<10:i++) { printf("%d\n",i); }
练习三:计算出所有的三位水仙花数
水仙花数:abc == a * a * a + b * b * b + c * c * c
练习三:
#include <stdio.h> int main(int argc,const char* argv[]) { int a,b,c; for(int i=100;i<1000;i++) { a = i/100; b = i/10%10; c = i%10; if(i == a*a*a+b*b*b+c*c*c) { printf("%d\n",i); } } return 0; }
练习四:输入一个正整数,判断是否为素数
#include <stdio.h> int main(int argc,const char* argv[]) { unsigned int num; printf("请输入一个正整数:"); scanf("%d",&num); for(int i=2;i<num/2;i++) { if(num%i==0) { printf("不是素数\n"); return 0; } } if(num==1) { printf("这个数不是素数\n"); }else printf("这个数是素数\n"); return 0; }
-
while循环语句
while(表达式)
{
//循环体
}
当表达式为真时执行循环体,执行完后重新判断表达式,以此类推,直到表达式为假,结束循环
while循环相当于for的精简版本 for(;表达式)
for循环专门负责解决明确知道循环次数的问题
while循环专门负责解决不确定循环次数的问题
-
do while循环语句
do{ //这里写循环执行语句 }while(表达式);
先执行循环体,在判断循环条件,该循环体至少执行一次,适合先干活,后检查的特殊情况,例如输入密码,文件内容判断
问for\while\do-while区别?
-
循环嵌套
循环语句中包含了循环语句
外层循环执行一次,内存循环执行n次
练习五:输入一个正整数,判断是否为回文数
回文数格式: 12321 123321
练习六:模拟输入6位密码,输入的密码正确显示“登录成功”,输入错误提示还剩几次机会,并继续输入密码,最多错三次,否则显示“账号已锁定,请联系柜台”,并结束程序
123456
123 2次,请继续
123 1次
123 锁定,结束
练习五
#include <stdio.h> int main(int argc,const char* argv[]) { int a,b,c; scanf("%d",&a);//a是源数据 b=a;//创建一个a的副本 c=0;//存放a反转后的数据 do{ c*=10; c+=a%10; a=a/10; }while(a); if(c==b) { printf("yes\n"); }else { printf("no\n"); } }
练习六
#include <stdio.h> int main(int argc,const char* argv[]) { int password=123456; int ans; int i=0; for(;i<3;i++) { printf("请输入密码:"); scanf("%d",&ans); if(ans==password) { break; } if(i==0) { printf("还剩两次机会,请继续……\n"); } if(i==1) { printf("还剩一次机会,请继续……\n"); } if(i==2) { printf("系统已锁定,请联系柜台\n"); } } if(i<3) { printf("登录成功\n"); } return 0; }
作业1:打印99乘法表
作业2:编程解决百钱百鸡问题
鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?
双层for语句
作业3:计算出100~1000之间所有素数