复习:
1、数据类型:signed char 1 %hhd -128~127signed short 2 %hd -32768~32767signed int 4 %d 正负20亿signed long 4 %ldsigned long long 8 %lld 9天开头的19位数unsigned char 1 %hhu 0~255unsigned short 2 %hu 0~65535unsigned int 4 %u 0~40亿unsigned long 4 %lu unsigned long long 8 %llu 1开头的20位数float 4 %fdouble 8 %lflong double 12 %LF
2、变量取名规则1、由数字 字母 下划线组成2、不能以数字开头3、不能与关键字重名4、见名知义
3、变量的输入输出printf 提示信息+占位符+变量名scanf 占位符+变量地址%nd %0nd %-nd %n.mf
3、运算符/ % 除数不能0,否则会产生浮点数例外,核心已转储错误== 变量尽量放在右边++/-- 一行代码中不要过多使用&& || 具有短路特性A?B:C 不能出现流程控制语句
4、类型转换自动类型转换:不同类型的数据会先转换成相同类型的数据才能进行运算。转换规则(以不丢失数据为基础,适当牺牲一些空间):1、字节少向字节多转2、相同字节数有符向无符转3、整型向浮点型转强制类型转换:(目标类型)数据 , 可能会造成数据丢失,慎重使用。
一、开关语句
switch
switch(n)//运算结果必须是整型
{case val: // val必须是整常量 ,如果val等于n,则打开执行开关... break; // 关闭执行开关注意:如果每个cast后都有break,就形成了分支结构。default:// 如果所有的case都没有匹配成功则打开执行开关
}
case a ... b: 判断一个范围,此为GNU编译器独有的语法,不建议使用。
练习1:输入一个月份,判断季节。
123 春天
456 夏天
789 秋天
10 11 12 冬天
other 输入的月份有误
#include <stdio.h>int main()
{unsigned int month = 0;printf("请输入一个月份:");scanf("%u",&month);switch(month){case 1 ... 3: printf("春天"); break;case 4 ... 6: printf("夏天"); break;case 7 ... 9: printf("秋天"); break;case 10 ... 12: printf("冬天"); break;default: printf("输入的月份有误!\n"); break;}
}
练习2:输入一个月份,判断该月有多少天,忽略闰年问题。
#include <stdio.h>
#include <stdint.h>int main(int argc,const char* argv[])
{uint8_t month = 0;printf("请输入一个月份:");scanf("%hhu",&month);if(month < 1 || month > 12){printf("输入的月份有误!\n");return 0;}switch(month){case 2: printf("28天\n"); break;case 4: case 6:case 9:case 11: printf("30天\n"); break;default: printf("31天\n"); break;}
}
for循环语句:
循环就是让一段代码反复执行,达到你想要的结果。
for一种比较灵活且危险(与其它循环相比)的一种循环。
一般使用一个变量来引导它的运行,这个变量就叫作循环变量。
for([1];[2];[3])
{[4];
}1、给循环变量赋初值,C99标准才可以定义循环变量。此处定义的循环变量,只能for循环内使用。
2、判断循环变量的是否到达边界。
4、被反复执行的代码,也叫循环体。
3、改变循环变量,防止变成死循环,一般对循环变量自加或自减。大括号问题:1、建议上下对齐2、循环体如果只有一行代码,大括号可以省略但不利于扩展,一般商业代码要求大括号不能省略。for循环的多种写法:
for(;;)
{// 死循环
}int i = 0;
for(;i<10; i++)
{}for(int i=0; i<10;)
{printf("----");i++;
}
while语句:
while(条件) // 当条件为真执行循环体,为假时结束
{// 循环体
}while循环相当于for循环的精简版本。
for循环负责解决明确知道循环次数的问题。
while负责解决只知道结束条件而不确定循环次数的问题。
do while语句:
do{循环体
}while(条件);
先执行循环体,再判断循环条件,该循环至少执行一次。
循环嵌套:
循环语句中包含循环语句。
外层循环执行一次,内存循环执行遍。
练习3:计算出所有的水仙花数。
#include <stdio.h>int main(int argc,const char* argv[])
{for(int i=100; i<1000; i++){int g = i%10;int s = i/10%10;int b = i/100;if(g*g*g+s*s*s+b*b*b == i){printf("%d\n",i);}}
}
练习4:输入一个正整数,判断是否是素数。
#include <stdio.h>int main(int argc,const char* argv[])
{int num = 0;printf("请输入一个整数:");scanf("%d",&num);if(num < 2){printf("输入的数据有误!\n");return 0;}int cnt = 0;for(int i=1; i<=num; i++){if(0 == num%i){cnt++;}}if(2 == cnt){printf("是素数\n");}else{printf("不是素数\n");}
}
#include <stdio.h>int main(int argc,const char* argv[])
{int num = 0;printf("请输入一个整数:");scanf("%d",&num);if(num < 2){printf("输入的数据有误!\n");return 0;}int i = 2;for(; i<num; i++){if(0 == num%i){printf("不是素数\n");return 0;}}printf("是素数!\n");}
练习5:输入一个整数,分解显示。
-1234
-1 2 3 4
#include <stdio.h>
#include <math.h>
#include <stdlib.h>int main(int argc,const char* argv[])
{int num = 0;printf("请输入一个整数:");scanf("%d",&num);if(num < 0 ){printf("-");num = abs(num);}int copy = num , cnt = 0;while(copy){copy /= 10;cnt++;}for(int i=cnt; i>0; i--){printf("%.0lf ",num/pow(10,i-1));num = num % (int)pow(10,i-1);}
}
练习6:输入一个正整数,判断是否是回文数。
1234
4321
#include <stdio.h>int main(int argc,const char* argv[])
{int num = 0 , new = 0;printf("请输入一个正整数:");scanf("%d",&num);if(num < 0){printf("输入的数据有误\n");return 0;}int copy = num;while(copy){new = (new*10)+(copy%10);copy /= 10;}printf("%d %d\n",num,new);if(num == new){printf("是回文数\n");}else{printf("不是回文数\n");}
}
跳转语句:
goto 可以在函数内任意跳转。
它可能会破坏已经设计好的分支或循环语句,因此绝大多数公司禁止使用。
但它在驱动编程时特别适合处理异常。标签: // 位置
goto 标签;
练习7:不使用循环计算前N项的斐波那切数列。
1 1 2 3 5 8 13 21 …
#include <stdio.h>int main(int argc,const char* argv[])
{// 1 0 1 1 2 3int n = 0;printf("输入n的值:");scanf("%d",&n);int f1 = 1 , f2 = 0 , t = 0;loop:t = f1 + f2;f1 = f2;f2 = t;printf("%d ",t);if(--n) goto loop;
}
该系列持续更新
希望喜欢的小伙伴可以一键三连~~