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;
}
=============================================================================
c语言基础学习04的更多相关文章
- D02-R语言基础学习
R语言基础学习——D02 20190423内容纲要: 1.前言 2.向量操作 (1)常规操作 (2)不定长向量计算 (3)序列 (4)向量的删除与保留 3.列表详解 (1)列表的索引 (2)列表得元素 ...
- D01-R语言基础学习
R语言基础学习——D01 20190410内容纲要: 1.R的下载与安装 2.R包的安装与使用方法 (1)查看已安装的包 (2)查看是否安装过包 (3)安装包 (4)更新包 3.结果的重用 4.R处理 ...
- D03——C语言基础学习PYTHON
C语言基础学习PYTHON——基础学习D03 20180804内容纲要: 1 函数的基本概念 2 函数的参数 3 函数的全局变量与局部变量 4 函数的返回值 5 递归函数 6 高阶函数 7 匿名函数 ...
- D03-R语言基础学习
R语言基础学习——D03 20190423内容纲要: 1.导入数据 (1)从键盘输入 (2)从文本文件导入 (3)从excel文件导入 2.用户自定义函数 3.R访问MySQL数据库 (1)安装R ...
- Golang 汇编asm语言基础学习
Golang 汇编asm语言基础学习 一.CPU 基础知识 cpu 内部结构 cpu 内部主要是由寄存器.控制器.运算器和时钟四个部分组成. 寄存器:用来暂时存放指令.数据等对象.它是一个更快的内存. ...
- go语言基础学习
go基础学习,面向对象-方法在Go语言中,可以给任意自定义类型(包括内置类型,但不包括指针类型)添加相应的方法 使用= 和:=的区别: // = 使用必须使用先var声明例如: var a a=100 ...
- C# 语言基础学习路线图
一直以来,对于很多知识点都是存于收藏夹中,随着时间地变更,收藏夹中链接也起来越多,从未进行整理,也很零散,所以想对曾经遇到并使用过的一些知识形成文档,作为个人知识库的一部分. 就从C# 语言基础开始, ...
- C语言范例学习04
第三章 算法 前言:许多人对算法的看法是截然不同的,我之前提到过了.不过,我要说的还是那句话:算法体现编程思想,编程思想指引算法. 同时,有许多人认为简单算法都太简单了,应当去学习一些更为实用的复杂算 ...
- C语言基础学习基本数据类型-变量的命名
变量的命名 变量命名规则是为了增强代码的可读性和容易维护性.以下为C语言必须遵守的变量命名规则: 1. 变量名只能是字母(A-Z,a-z),数字(0-9)或者下划线(_)组成. 2. 变量名第一个字母 ...
随机推荐
- CET-4- translation1
questions 2017/10/17 多年来,家长和老手都曾得到过这样一种信息(message):尽量利用任何机会表扬孩子,对他们所干的任何事情都要说好.据说这样做有助于提高孩子的自尊.但是近来许 ...
- Git常用命令清单笔记
git github 小弟调调 2015年01月12日发布 赞 | 6收藏 | 45 5k 次浏览 这里是我的笔记,记录一些git常用和一些记不住的命令,这个笔记原本是基于 颜海镜的文章增加 ...
- nginx在 window下 自动退出 php-cgi
win32+nginx+php自动挂掉php-cgi.exe RunHiddenConsole E:/wnmp/php5/php-cgi.exe -b 127.0.0.1:9000 -c &qu ...
- nginx搭建rtmp协议流媒体服务器总结
最近在 ubuntu12.04+wdlinux(centos)上搭建了一个rtmp服务器,感觉还挺麻烦的,所以记录下. 大部分都是参考网络上的资料. 前提: 在linux下某个目录中新建一个nginx ...
- package-cleanup
package-cleanup 是一个python开发的命令程序,用来清除本机已安装的.重复的 或孤立的软件包. desktop版的CentOS镜像包含这个工具,而Minimal版的CentOS镜像不 ...
- 2、公司部门的组成 - CEO之公司管理经验谈
今天讲讲公司部门的组成.公司部门一般是根据公司业务来进行划分的,IT企业和其它企业的部门划分有一定的区别.企业部门的划分还是比较重要的,部门主要明确各部门所具有的自己的职责.这里对IT企业的部门做了一 ...
- .net core .net standard .net framework
由于对微软的技术比较感兴趣,所以最近就在研究用Visual Studio Code开发一个Asp.net core项目并且准备从后端开始干起. 一开始用dotnet new console创建了一个控 ...
- 【转】 CSS十问——好奇心+刨根问底=CSSer
最近有时间,想把酝酿的几篇博客都写出来,今天前端小学生带着10个问题,跟大家分享一下学习CSS的一些体会,我觉得想学好CSS,必须保持一颗好奇心和刨根问底的劲头,而不是复制粘贴,得过且过.本人能力有限 ...
- JavaScript Dom入门
好像代码太杂了,博客园里跑不起来,单独复制到html中本地测试都是没有问题的. JavaScript JavaScript 是属于 web 的语言,它适用于 PC.笔记本电脑.平板电脑和移动电话. J ...
- Spark 学习笔记大纲
Spark 内核 第28课:Spark天堂之门解密 (点击进入博客)从 SparkContext 创建3大核心对象开始到注册给 Master 这个过程中的源码鉴赏 第29课:Master HA彻底解密 ...