参考书籍介绍

操作系统之哲学原理()
C程序设计(谭浩强)
计算机网络(谢希仁)
微机原理(清华大学出版社)
高级数据结构

C语言基本数据类型、运算符与表达式

基本类型及其所占字节

short(短整型) :2个存储单位
int (整型) :4个存储单位
long(长整型) :4个存储单位
float(单精度型):8个存储单元
long int :4个存储单元
long long:8个存储单元
long double:8个存储单元
bool:1个存储单元
注意:

  • 1个存储单元(Byte)=8bit
  • 类型是永远不会变的,即便是强制转换和隐式转换都只是转换值,类型没变
  • size of():计算某类型所占字节个数
  • char需要特别注意
    e.g.
#include <stdio.h>
int main()
{ char a='E';char b=70;printf("a"=%c,a=%d\n",a,a);printf("b"=%c,b=%d\n",b,b);return 0;}

这个代码输出时为a=E,a=69;b=F,b=70
可知当输出为整型时也能输出,输出的为ASCLL码

进制

进制之间可用贪心算法
e.g.
(119)10进制
=>> ( 01110111 ) 2进制
=>> ( 167 ) 8进制
=>> ( 77 ) 16进制

原、反、补码

数据在内存中以二进制形式存放,数值是以补码表示的

  • 正数:源码=反码=补码
  • 负数:源码取反变为反码+1为补码
    e.g.
int i;
i=-10;

数据在内存中实际存放的情况
10 的原码 0000 0000 0000 1010
10 的反码 1111 1111 1111 0101
-10 的补码 1111 1111 1111 0110
注意,在存放整数的存储单元中,一般情况下,最左边的的一位用来表示符号,如果该位置为0表示正数,为1表示负数。

扩充空间字节

规则:

  • 表示范围由大到小需要截断:int----->char 当一个字节(8位)放不下时,出现截断,直接取(最后一个字节)最后面8位
  • 表示范围由小到大需要扩充:char----->int 2字节转化为4字节需要扩充8位。
    扩充规则:有符号(1or0)扩充符号位
    无符号(unsigned~):扩充0
    通过几个例子看一下:
    e.g.1:
# include <stdio.h>int main(){char a=25; //定义的是字符型变量char,所占一个字节char b=-25;int X=a;//定义的是整型变量char,所占四个字节int Y=b;printf("%x %x,x,y");return 0;//输出为 19 FFFFFFE7}

a=25 X输出为16进制后为19不再赘述
b=-25,b补码为 1110 0111 ----->Y补码为1111 1111 1111 1111 1111 1111 1110 0111则输出为FFFFFFE7
e.g.2:

# include <stdio.h>int main(){ char a=100;//注意输出为整型,所以占4个字节,a=0000 0000 0000 0000 0000 0000 0110 0100char b=200;//b超出了char的范围(-128-127),200-256=-44,b=1111 1111 1111 1111 1111 1111 1100 1000char c=a+b;//1 0000 0000 0000 0000 0000 0000 0010 1100printf("%d %d\n,a+b,c");//临时子空间的a+b输出时截取为:0000 0000 0000 0000 0000 0000 0010 1100结果为44,而c为300,为300-256=44unsigned char a=100;//注意为无定义的char,  a=0000 0000 0000 0000 0000 0000 0110 0100unsigned char b=200;//     此时的溢出为-44,b=0000 0000 0000 0000 0000 0000 1100 1000unsigned cahr c=a+b;//临时子空间的+b输出时截取为:0000 0000 0000 0000 0000 0001 0010 1100结果为300,而c为300,300-256=44printf("%d %d\n,a+b,c");//输出为300 44return 0;}

e.g.3:

# include <stdio.h>
int main()
{
char c = 128;//1111 1111 1000 0000
unsigned char uc = 128; //0000 0000 1000 0000
unsigned short us = 0;
us = c+uc; //1 0000 0000 0000 0000
printf("%x \n",us);//截取后输出为0
us = ( unsigned )c+uc;//考虑时可考虑临时空间c'=( unsigned )c,c'=0000 0000 1000 0000  uc=//0000 0000 1000 0000 c'+uc=0000 0001 0000 0000
printf("%x \n",us);//输出为100
us = c+(char)uc;//c:1111 1111 1000 0000  uc'=1111 1111 1000 0000,us=1 1111 1111 0000 0000
printf("%x \n",us);//截取后输出为ff00
return 0;
}

内存的存放

在C语言中,内存的存放方式为小端存放即数据的高字节保存在内存的高地址,而数据的低字节存放在内存的低字节

几种需要注意的运算符

  1. 取余、除法:
  • 取余是二运算符元运算符,参与运算的量均为整型,求余运算的结果等于两数相除后的余数。特别注意求余符号的正负取舍和被除数符号相同。e.g.-3%16=-3;16%-3=1
  • 除法运算符“/”。二元运算符。参与运算的量均为整型时,结果为整型,舍去小数。如果运算量中有一个为实型,结果为双精度实型。
    e.g…:5/2=2,1/2=0,5/2.0=2.5
  1. 自增运算符:b1=++a;b2=a++的区别。
    第一个是先将a+1再赋值给b1运算,第二个是先将a赋值给b2,再将a自加1。第一个是先将a+1再赋值给b1运算,第二个是先将a赋值给b2,再将a自加1
printf(%d,-3++)//输出为-3
  1. 逻辑或和逻辑与
    逻辑或||: a>0 || a+1 若a>0为真时不需要运算,为假时再算a+1
    逻辑与&&:a<0&&a++,a<0为假时停止运算,为真时继续计算

if语句实现结构

if(条件语句){}: 其中{}内非真即假,只要为零就是假其余都是真。

  • if(表达式) 语句

  • if(表达式) 语句 1 else语句2

  • if(表达式1) 语句 1
    else if(表达式2)语句2
    else if(表达式3)语句3
    else 语句4

  • if语句的嵌套(遵循就近原则)
    if
    if()语句1
    else 语句2
    else
    if()语句3
    else 语句4
    e.g.将a,b,c按从小到大排列

#include <stdio.h>
int main()
{ int a,b,c,tmp;
scanf("%d %d %d",&a,&b,&c);
if(a<b)
else {tmp=a;a=b;b=tmp;}
if(a<c)
else {tmp=a;a=c;c=tmp;}
if(b<c)
else {tmp=b;b=c;c=tmp;}
printf("%d,%d,%d\n",a,b,c);
return 0;
}

作业练习

1.猜数字游戏:

#include<stdio.h>
# include<stdlib.h>
# include<time.h>
int main()
{
int guess=0;//定义一个猜测值
int count=0//定义一个计数器
srand(time (NULL));//随机种子,保证每次的随机数不一样
int c=rand()%100;//定义一个随机数在0--99之间
while (1)
printf("please guess a number between 0-99:\n");
scanf("%d,&guess");
count++;//计数器
if (a > guess)//对比
{ printf("Too low!\n"); }
else if
(a < guess)//对比
{ printf("Too high!\n"); }
else
{ printf("Congratulations, you guessed it:%d times.\n",count);//输出
return 0; } }

2.判断是否为闰年

#include<stdio.h>
void main()
{
int year;//定义一个输入年份
int leap;//定义一个判断真假
printf("please input a year:");//闰年的定义是:能被4整除同时不能被100整除,或者能被400整除。
scanf("%d",&year);
if(year%4==0){if(year%100==0){if (year%400==0)leap=1;else leap=0;}else leap=1;}
else
leap=0;
if(leap)
printf("%d is a leap year ",year);
else
printf("%d is not a leap year",year);
}

3.输入年份和月份,判断这一年的这一个月有多少天?

#include<stdio.h>
void main()
{
int year;//定义一个输入年份
int leap;//定义一个判断真假
int month;//定义一个输入月份
printf("请输入年月形式为××××年××月:\n");
scanf("%d年%d月 ",&year,&month);
If month ==2//判断是否为2月if(year%4==0)//讨论为闰年还是平年{if(year%100==0){if (year%400==0)leap=1;else leap=0;}else leap=1;}else
leap=0;
if(leap)
printf("该月有29天\n");//闰年29天
else
printf("该月有28天\n");//平年28天
}
else {
switch(month )
{case1,3,5,7,8,10,12 :print("该月有31天\n");case4,6,9,11 :print("该月有30天\n");   default:print("月份输入错误");}
}

4.输入年月日,判断为这一年的第几天。

#include<stdio.h>
void main()
{
int year;//定义一个输入年份
int leap;//定义一个判断真假
int month;//定义一个输入月份
int day;//定义一个输入日
int sum;//定义一个天数的加和
printf("请输入年月形式为××××年××月××日:\n");
scanf("%d年%d月%d日 ",&year,&month,&day);switch(month)//先把月份天数算清楚{case 1:sum=0;break;case 2:sum=31;break;case 3:sum=59;break;case 4:sum=90;break;case 5:sum=120;break;case 6:sum=151;break;case 7:sum=181;break;case 8:sum=212;break;case 9:sum=243;break;case 10:sum=273;break;case 11:sum=304;break;case 12:sum=334;break;default:printf("data error");break;}sum=sum+day;//加上日的天数
if(year%4==0)//判断年为闰年的情况{if(year%100==0){if (year%400==0)leap=1;else leap=0;}else leap=1;}
else
leap=0; if(leap==1&&month>2){sum++;}printf("这是这一年的第%d天",sum);printf("\n");
}

C程序设计基础(一)相关推荐

  1. c语言程序设教材计 乌云高娃,C语言程序设计教学课件作者第3版乌云高娃演示文稿C语言程序设计教学课件作者第3版乌云高娃演示文稿演示文稿第1章C语言程序设计基础课件.ppt...

    C语言程序设计教学课件作者第3版乌云高娃演示文稿C语言程序设计教学课件作者第3版乌云高娃演示文稿演示文稿第1章C语言程序设计基础课件.ppt 主要内容 课程概述 为什么选择C语言作为入门课程? C语言 ...

  2. 在c语言中,函数中的自动变量可以赋初值,每调用一次,赋一次初值,计算机二级考试 程序设计基础试题及答案三...

    <程序设计基础>考试试卷三 1. 判断下面标识符中哪个是C语言中合法的用户定义标识符: A. a-b B. #abd C. typedef D. _max 2. -b?在内存中占个字节,& ...

  3. 周信东c语言实验二实验报告,周信东主编最新版C语言程序设计基础实验一实验报告.doc...

    周信东主编最新版C语言程序设计基础实验一实验报告.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我 ...

  4. python知道答案_Python程序设计基础知道章节测试答案

    Python程序设计基础知道章节测试答案 更多相关问题 cso15°cos30°+cos105°sin30°的值是()A.22B.32C.12D.1 When sugar ______ enough, ...

  5. 学籍管理系统 c语言流程图,程序设计基础 ——C语言第10章 综合应用案例——学生学籍管理系统...

    程序设计基础 第 10章 综合应用 案例 -学生学籍 管理系统 1 详细设计 需求分析 总体设计 第 10章 综合应用 案例 -学生学籍管理系统 编码实现 运行结果 2 设计一个利用 文件 处理方式, ...

  6. c语言程序设计编辑与调试环境实验报告,01程序设计基础实验报告_C语言程序设计基础.doc...

    01程序设计基础实验报告_C语言程序设计基础 程序设计基础 实验报告 题 目: C语言程序设计基础 院 (部): 管理工程学院 专 业: 信息管理与信息系统 班 级: 信管101 姓 名: 张三 学 ...

  7. java语言仅支持单重继承_java语言程序设计基础篇习题_复习题_第十一章

    java语言程序设计基础篇习题_复习题_第十一章 11.1 下面说法是真是假?一个子类是父类的子集. 11.2 使用什么关键字来定义一个子类 11.3 什么是单一继承?什么是多重继承?java支持多重 ...

  8. 《C语言程序设计基础》第2章作业,清华大学出版社-图书详情-《C语言程序设计基础实验与题解》...

    C语言是国内外广泛使用的一种程序设计语言,也是初学程序设计人员的首选入门程序设计语言.C语言具有表达能力强.代码质量高和可移植性好等特点,既具有高级语言的特点,又具有汇编语言的优点,越来越受到人们的欢 ...

  9. 《Windows网络与通信程序设计(第3版)》——1.4 网络应用程序设计基础

    本节书摘来自异步社区<Windows网络与通信程序设计(第3版)>一书中的第1章,第1.4节,作者: 陈香凝 , 王烨阳 , 陈婷婷 , 张铮 更多章节内容可以访问云栖社区"异步 ...

  10. 计算机科学与技术的程序设计基础,程序设计基础

    <程序设计基础>课程介绍 <程序设计基础>是计算机科学与技术专业.网络与信息安全专业.物联网工程专业的核心课程,是学科基础必修课.吉林大学计算机科学与技术学院的<程序设计 ...

最新文章

  1. HDU4009(最小树形图)
  2. java中运用抽象_如何学会java中的抽象应用
  3. web应用安全防御100技 好书再次阅读, 变的只是表象,被概念迷惑的时候还是静下心来回顾本质...
  4. 游戏服务器哪个系统困难些,游戏服务器哪个系统困难些
  5. mac homebrew
  6. 干货!Java字节码增强探秘
  7. 【ES】ES 好文档积累
  8. Google Chrome 开发进度 官方Blog
  9. 被中国人误传了数千年的七句话
  10. NHibernate1.2在VS2005里使用的基础
  11. 「黑科技」增加栈的空间
  12. jQuery简单好用的JavaScript代码库略解使用
  13. 前端静态页面——爱心捐赠网站
  14. 前端处理简单的XSS(跨站脚本攻击)防护
  15. 使用Arcmap将WGS84坐标转换成国家大地坐标系2000
  16. 雷电助手连接不到服务器,雷电模拟器无法联网怎么办 雷电模拟器网络异常的解决办法...
  17. Python|计算工资
  18. 安卓游戏时禁止状态栏下拉_Android手机屏蔽状态栏下拉
  19. Floyd算法的应用
  20. rust实现wss访问_改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件

热门文章

  1. cgcs2000大地坐标系地图_9d openlayers展示cgcs2000地图报错
  2. 阿里云服务器实例规格选择,个人和企业分别选择哪种规格合适
  3. 盛大的娱乐帝国路线图
  4. 数据结构(严蔚敏C语言版)代码实现持续更新中
  5. 随笔:读书笔记--《CEO说像企业家一样思考》拉姆·查兰
  6. 抖音 xlog 算法 bqq 字段
  7. Python学习笔记 | 练习3:货币转换
  8. 【乐逍遥网站设计】如何通过有效的网站设计提高电子商务的销售量
  9. 基于stm32cubeMX的stm32串口输出的Protues仿真
  10. 图像去雾(二)Retinex图像增强算法