c语言基础学习04_条件判断语句

============================================================================= 涉及到的知识点有:程序的三种结构、条件分支语句、循环语句、求自然数的和、 求100到999之间所有的水仙花数、在屏幕输出一个等腰三角形、循环语句案例-窗口移动 ============================================================================= 复习: (注意常量也是有类型的哦!) 例如:

  #define MAX 100 说明定义的MAX是一个有符号的int   const long a = 100u; 说明定义的a是一个无符号的long   "a"字符串常量 相当于 'a' '\0'   'a'字符常量,字符常量只能是一个ASCII字符

  int 4个BYTE、2个WORD 、1个DWORD   c语言中不能直接书写二进制,用8进制和16进制来替代(和默认的十进制)。

  int a = 100;   int b = sizeof(a); sizeof 关键字 作用是:得到某一数据类型在内存中占用的大小(内存大小没有负的),单位是:字节   sizeof 不是函数,所以不需要包含任何头文件   其实呢,sizeof返回值的类型是size_t,size_t类型在32位操作系统下是一个无符号的整数。   在32位系统下,sizeof返回值是unsigned int,用 %u;在64位系统下,unsigned long,用%lu。   例如:   在32位系统下:     int a = 100;     printf("%u\n", sizeof(a));   在64位系统下:     int a = 100;     printf("%lu\n", sizeof(a)); -----------------------------------------------------------------------------   int a; 等同于 signed int a;   unsigned int a;

  long   在32位系统下是4个BYTE,在64位系统下是多少?windows是4个字节,linux是8个字节。   200f   等同于 200.0    -----------------------------------------------------------------------------   int a = 'a'; //a = 97,是可以存放的   char a = 500; //是不可以存放的,溢出了,最大放127   '2' 和 2 的区别在哪里?   '2'是字符2dASCII   2是整数2

  "100" 和 100 区别在哪里?   '1' '0' '0' '\0'   100是一个int型整数常量 -----------------------------------------------------------------------------   int a = a; //错误的写法!

  char a = 97;   printf("%d\n", a); //输出结果是97   printf("%c\n", a); //输出结果是字符a

abc bcd(这里其实是回车+换行)

abc   bcd(只有换行,没有回车)

bcd(abc是被bcd重叠了,这叫回车)

回车键的由来: 键盘: --------------------------------------------------打印头     ------------------------     -         -     -     回车键 -     -         -     ------------------------     在打字机上按回车键,打印头就会复位

============================================================================= 程序的三种结构:   1,顺序结构   2,分支结构   3,循环结构 ============================================================================= 条件分支语句: 1、关系运算符:在c语言中0代表false,非0代表真。 关系运算符有:<(小于)、>(大于)、<=(小于等于)、>=(大于等于)、==(等于)、!=(不等于)        -----------------------------------------------------------------|-----------------------------              前四种优先级相同            大于        后两种优先级相同

  0   假   1   真   34   真   -34  真,非0就是真

  条件运算符:(条件) ? 值1:值2   当条件成立时,表达式的值为1;当条件不成立时,表达式的值为2。   很多时候用问号来替代简单的if语句。   例如:求绝对值的例子   int i = -8;   int x = (i < 0) ? -i: i; ----------------------------------------------------------------------------- 2、逻辑运算符:&&(逻辑与/and)、||(逻辑或/or)、!(逻辑非/not)        -----------------------------------------|---------------------       双目运算符(两边必须要有表达式叫双目)   单目运算符 ----------------------------------------------------------------------------- 3、1)单分支语句   if是条件分支语句:如果条件为真,则执行代码块中的代码。   if (条件)   {     代码块;   } ----------------------------------------------------------------------------- 2)双分支语句   if else是双分支语句:   if (条件)   {     代码块1;   }   else   {     代码块2;   } ----------------------------------------------------------------------------- 3)多重分支语句(多重if):else总是跟上面最近那个if配对(特别注意)   if (条件1)   {     代码块1;   }   else if (条件2)   {     代码块2;   }   else if (条件3)   {     代码块3;   }   ......   else   {     代码块3;   }

例子如下:四则运算 #include <stdio.h>

int main() {   int a;   int b;   char c;   printf("please input a:");   scanf("%d", &a);   printf("please input b:");   scanf("%d", &b);   printf("please input c:");   getchar(); //把调用scanf时候用户输入的回车键吃掉   c = getchar();   //printf("a = %d, b = %d, c = %c\n", a, b, c); //打印结果测试下   if (c == '+')   {     printf("%d\n", a + b);   }   else if (c == '-')   {     printf("%d\n", a - b);   }   else if (c == '*')   {     printf("%d\n", a * b);   }   else if (c == '/')   {     if (b != 0)       printf("%f\n", (double)a / b);     else       printf("error\n");   }   else   {     printf("input error\n");   }   return 0; } ----------------------------------------------------------------------------- 4)多重分支语句(多重选择:switch与break,default)   switch (量)   {   case 值1:     语句1;     break;   case 值2:     语句2;     break;   ......

    ......

    ......     case 值n:     语句n;     break;   default:     语句;   //当所有case都不满足时,执行default下面的语句。 }

例子如下:四则运算 #include <stdio.h>

int main() {   int a;   int b;   char c;   printf("please input a:");   scanf("%d", &a);   printf("please input b:");   scanf("%d", &b);   printf("please input c:");   getchar(); //把调用scanf时候用户输入的回车键吃掉   c = getchar();   //printf("a = %d, b = %d, c = %c\n", a, b, c); //打印结果测试下   switch (c)   {   case '+':     printf("%d\n", a + b);     break;   case '-':     printf("%d\n", a - b);     break;   case '*':     printf("%d\n", a * b);     break;   case '/':     if (b != 0)       printf("%f\n", (double)a / b);     else       printf("error\n");     break;   default:     printf("input error\n");   }   return 0; }

注意:当条件特别复杂时用if;当条件简单,但分支很多时用switch。 ----------------------------------------------------------------------------- if、switch与?(问号) 都是有条件分支语句; 无条件分支语句:goto   goto end; //无条件跳转到标号end去执行代码   ...   ...   end: //标号

但是不提倡大量使用goto,除非使用goto能大大简化代码量。

============================================================================= 循环语句:

while (条件) {   代码块; } ----------------------------------------------------------------------------- continue语句 当循环遇到continue语句时,不再执行continue下面代码,而是直接返回到循环起始语句处继续执行循环。 (即当循环遇到continue时,就直接返回到开始重新判断条件的地方去了) ----------------------------------------------------------------------------- break语句 当循环遇到break语句时,立刻终止循环,循环结束。 ----------------------------------------------------------------------------- do while

do {   语句; }while (条件); ----------------------------------------------------------------------------- while 是先判断条件,再决定是否循环 do while 先循环,然后再判断条件

while可能一次都不循环,但是do while至少能循环一次。

注意: while (a != 10);   //该句话相当于 while (a != 10) { ; } 相当于死循环,什么都没有干。 ============================================================================= 小练习:求自然数的和。 用户可以任意输入一个正整数,求从1到这个整数之间所有自然数的和。 例如:输入5 1 + 2 + 3 + 4 + 5 = 15

VS2017下的代码如下: #include <stdio.h> #pragma warning(disable:4996)

int main() {   int sum = 0; //用来保存计算自然数之和的变量   int a = 10;   scanf("%d", &a);   while (a > 0)   {     sum += a;     a--;   }   printf("%d\n", sum);   return 0; } ----------------------------------------------------------------------------- 课堂作业:求整数的位数 任意输入一个整数,假设用户输入了123,程序运行输出 百 如果用户输入了2896,程序输出 千 如果用户输入了10000,输出 万

VS2017下的代码如下: #include <stdio.h> #pragma warning(disable:4996)

int main() {   int a = 0;   scanf("%d", &a);   int sum = 0; //sum是一个计数器

  while (a > 0) //c语言中 % 是取余运算, / 是取整运算   {   sum++;   a /= 10;   }

  switch (sum)   {   case 1:     printf("个\n");     break;   case 2:     printf("十\n");     break;   case 3:     printf("百\n");     break;   }   return 0; } ----------------------------------------------------------------------------- 小练习:求100到999之间所有的水仙花数。 水仙花数是什么? 一个数的百位的立方 + 十位的立方 + 个位的立方 = 这个数本身 例如:371就是一个水仙花数 3 * 3 * 3 + 7 * 7 * 7 + 1 * 1 * 1 = 371

VS2017下的代码如下: #include <stdio.h>

int main() {   int a;   for (a = 100; a < 1000; a++)   {     int a1; //百位     int a2; //十位     int a3; //个位

    a1 = a / 100 % 10; //a/100=5;5%10=5 注意:/ 和 % 的优先级一样,则结合性从左到右     a2 = a / 10 % 10; //a/10=53;53%10=3     a3 = a / 1 % 10; //a/1=537;537%10=7

    if ((a1 * a1 * a1 + a2 * a2 * a2 + a3 * a3 * a3) == a)       printf("%d\n", a);   }   return 0; } ----------------------------------------------------------------------------- 九九乘法表

VS2017下的代码如下: #include <stdio.h> int main() {   int a;   int b;   for (a = 1; a < 10; a++) //外循环,控制行,即外循环决定有多少行   {   for (b = 1; b <= a; b++) //内循环,控制列,即内循环决定每一行有几个列,外循环每循环一次,内循环循环4次   {     printf("%d\t", a * b);   }   printf("\n");   }   return 0; } ----------------------------------------------------------------------------- 作业:在屏幕输出一个等腰三角形 -------*------- ------***------ -----*****----- ----*******---- ---*********--- --***********-- -*************- *************** 不能用printf一行一行打印输出等腰三角形 printf("     *\n"); printf("    ***\n"); printf("   *****\n");

分析: 每一行的*和行号的关系是:行号 * 2 - 1 每一行的*和减号的关系是:行号 - 1;行号 - 2;行号 - 3;......;行号 - 行号

VS2017下的代码如下: #include <stdio.h> #pragma warning(disable:4996)

int main() {   int a;   int b;   int num = 0;   scanf("%d", &num);   for (a = 1; a <= num; a++) //外循环,控制行,即外循环决定有多少行   {     for (b = 0; b < num - a; b++)     {     printf("-");     }     for (b = 0; b < a * 2 - 1; b++) //内循环,控制列,即内循环决定每一行有几个,外循环每循环一次,内循环循环num次     {       printf("*");     }     for (b = 0; b < num - a; b++)     {       printf("-");     }     printf("\n");   }   return 0; } ============================================================================= 循环语句案例-窗口移动

VS2017下的代码如下:

#include <stdio.h>

#include <Windows.h> //使用窗口移动,需要利用API函数,则需要包含一个头文件

int main() {   int x = 100;   int y = 100;   int status = 0;     //0代表从左往右跑,1代表从右往左跑。   int status1 = 0;   //0代表从上往下跑,1代表从下往上跑。   int status2 = 1;   //0代表x轴不动,1代表y轴不动

  while (1)   {     SetWindowPos((HWND)0x00830968, NULL, x, y, 300, 200, 0); //这个函数可改变一个窗口的位置和大小   if (status == 0 && status2 == 1)     x += 10;

  if (x >= 1000)   {     status1 = 0;     status2 = 0;   }   if (status1 == 0 && status2 == 0)     y += 10;

  if (y >= 800)   {     status = 1;     status2 = 1;   }   if (status == 1 && status2 == 1)     x -= 10;

  if (x <= 100)   {     status1 = 1;     status2 = 0;   }   if (status1 == 1 && status2 == 0)     y -= 10;   if (y <= 100)   {     status = 0;     status2 = 1;   }   //if (status == 0 && status2 == 1)   //x += 10;   Sleep(20); //Sleep函数的功能是程序休眠,参数单位是毫秒,1000ms代表1秒 }   /*   该函数的参数解释如下:   第一个参数:是窗口的句柄。句柄:是windows的一个概念,即所有的窗口都有一个唯一的编号,这个编号叫句柄。(注意句柄是16进制的)   如何得到某一个窗口的句柄呢?在vs2017的/工具选项/Spy++(间谍的意思)/查找窗口/查找程序工具/拖动到对应的窗口   第二个参数:默认写NULL。   第三个参数:是窗口位置的x坐标。   第四个参数:是窗口位置的y坐标。   第五个参数:是窗口宽度。   第六个参数:是窗口高度。   第七个参数:默认写0。

  (0,0)左上角   ------------------------------x轴   |   |   |   |y轴

  */   return 0; }

或者代码这样: #include <Windows.h>

int main() {   int x = -10, y = 0;   int status = 0; //0代表从左往右,1代表从上往下,2代表从右往左,3代表从下往上

  while (1)   {     if (x == 0 && y == 10)       status = 0;     if (x == 1000 && y == 10)       status = 1;     if (x == 1000 && y == 600)       status = 2;     if (x == 0 && y == 600)       status = 3;

    if (status == 0)       x += 10;     if (status == 1)       y += 10;     if (status == 2)       x -= 10;     if (status == 3)       y -= 10;     SetWindowPos((HWND)0x0016006C, NULL, x, y, 200, 300, 0);     Sleep(20);   }   return 0; }

=============================================================================

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏康怀帅的专栏

Redis string 类型

可以是字符串、整数或浮点,统称为元素。对字符串操作,对整数类型加减。 追加 set key value append key 1 get key 赋值 se...

3066
来自专栏ShaoYL

OC语言Block 续

1389
来自专栏超然的博客

ECMAScript 6 笔记(六)

  在let和const之间,建议优先使用const,尤其是在全局环境,不应该设置变量,只应设置常量。

641
来自专栏个人随笔

ADO.NET查询和操作数据库

stringbuilder 类 stringbuilder类:用来定义可变字符串 stringbulider Append(string value)   在结...

3415
来自专栏闵开慧

java概念1

public static void main(String[] args) {//其中[]也可以写在args后面,args也可以随便写成其他字母,例如asd...

35611
来自专栏desperate633

LeetCode 7. Reverse Integer分析代码

812
来自专栏Golang语言社区

Golang指针与nil浅析

曾经听说过一句话,编程的本质就是指针和递归。那会刚开始编码,只是这两个的概念有个感性粗浅的认识。最早接触指针,莫过于C语言了,能否理解用好指针也成为一个合格C语...

2936
来自专栏数据结构与算法

病毒

【问题描述】   有一天,小y突然发现自己的计算机感染了一种病毒!还好,小y发现这种病毒很弱,只是会把文档中的所有字母替换成其它字母,但并不改变顺序,也不会增加...

5367
来自专栏编程微刊

JS数组去重的6种算法实现以上就是为大家提供的6种JS数组去重的算法实现,希望对大家的学习有所帮助。

2042
来自专栏绿巨人专栏

[Java] 设计模式: Code Shape - 管理你的代码结构

4336

扫码关注云+社区

领取腾讯云代金券