C与数据

11种数据类型

  • 整型类:int,short(短整型),long(长整型),unsigned(无符号),char(字符整型)
  • 浮点类:float(单精度),double(双精度)
  • C90新增:signed(有符号),void(空)
  • C99新增:_Boo*l(布尔指),_Complex*(复数),_Imaginary(虚数)

存储单元

  • 位:最小的存储单元,存储0或1
  • 字节:常用存储单位,几乎所有机器有1字节等于8位,即1字节可以表示0-255之间的整数
  • 字:自然存储单位:8位的微型计算机一字为8位,16,32位的为即一字为16位或32位

基本整型类型

  1. int型:储存要占1个机器字长,16位机器,范围-32768 ~ 32767目前大多数机器32位,即占4个字节,存储数字范围为:-2147483648 ~ 2147483647
  2. short型:存储小于等于int,-32768 ~ 32767
  3. long型:储存大于等于int,-2147483648 ~ 2147483647
  4. long long型:存储至少64位,即8个字节
  5. unsigned型:无符号,只能存储正整数,能存储比signed更大的整数
  6. 目前普遍设置:long long 64位8字节,long 32位4字节,short 16位2字节,int 16/32位 2/4字节
  7. 常量:超出int范围,视为long,超出long范围,视为unsigned long,继续long long, unsigned long long
  8. 用H/h作为short,用L/l作为long, 用LL/ll作为long long,用U/u作为unsigned,例如343H,3234L,35455LL,435345U,534546467ULL
  9. char型:一个字节,-128 ~ 127,ASCII编码0~127,存储绰绰有余,C语言将字符常量视为int型非char型,是否有符号看编译器
  10. 整型可以表示10,8,16进制,如32,032,0x32/0X32

基本浮点类型

  • float:至少6位有效数字,取值至少10的-37到+37次方。通常浮点占32位,8位指数的值和符号,剩下的24位非指数的值和符号。
    浮点最大:999999961690316250000000000000000000.000000
    超过:1.#INF00
  • double,至少13位有效数字。通常64位,剩下的32位给非指数部分。
  • long double 更高的精确要求,至少比double精确

复数和虚数类型

  • 复数:float_Complex,double_Complex,long double_Complex
  • 虚数:float_Imaginary,double_Imaginary,long double_Imaginary

类型大小

sizeof()函数
sizeof(int),sizeof(char)等等……

问题

整型,浮点的上溢出,下溢出?

字符串与格式化输出输入

字符串 string

  1. 字符串数组(变量)来存储,char name[40];
  2. 输入scanf(“%s”,name) name是数组首地址
  3. 输出printf(“%s”,name)
  4. 数组大小sizeof(name) => 40,可以写成 sizeof name
  5. 字符串长度 strlen(name) =>字符实际长度
  6. 空字符结尾(\n)

预处理 define

  • 格式 #define NAME ‘shaosuo’
  • 注意是简单的替换,没有其他操作

限定符 const

  • 明示常量:limits.h float.h
  • imits/h:包含INT_MAXINT_MIN 等预处理常量数值h
  • float.h:包含FLT_MAXFLT_MIN..

输出函数 printf()

转换格式

  • %a/A 浮点,16进制,p计数
  • %g/G 自动选择%f,%e
  • %i 有符号10进制整数
  • %u 无符号10进制整数
  • %% 打印百分号
  • %p 指针
  • %o 无符号8进制
  • %x 无符号16进制

转换修饰符

  • 标记:-(左对齐),+(添加符号),空格(空格覆盖正号),#(防止0被删除),0(0填充符号位)
  • 宽度:数字(最小字段宽度)(用于字段对齐,右对齐)
  • 精度:.数字
  • 类型:h(short),hh(char),j,l,ll,L(long double),t,z

返回值

#include <stdio.h>
int main(){int a = 0, b =0;int pn1 = printf("ok!\n");            // pn1 = 4int pn2 = printf("ok!,%d,%d\n",a, b); // pn2 = 8int sn1 = scanf("%d", &a, &b);        // sn1 = 1int sn2 = scanf("%d%d", &a, &b);      // sn2 = 2printf("pn1=%d, sn1=%d, pn2=%d, sn2=%d\n", pn1, sn1, pn2, sn2);return 0;
}
  • printf()返回正确按照格式变量个数,即打印字符的数
  • scanf()返回正确按照指定格式接收的变量个数

运算符表达式和语句

基本运算符

  • 算数:(),+(取正),-(取负),+,-,*,/,%(取模),=(赋值)
  • sizeof:如果对象是类型,必须加括号,是变量可以不加,返回字节大小
  • %取模运算符:如13%5=3,只能用于整数,不能用于浮点数
  • 递增(减)运算符++(–):前缀与后缀区别,i++ => 先使用 i,再递增,++ i => 先递增 i,再使用

类型自动转换

  • 普遍:较小类型转换为较大类型
  • 运算时:两个值被分别两种;类型的更高级别
  • 高低:long double,double,float,unsigned long long,long long,unsigned long, long,unsigned int,int(int和long大小可能相同
  • 参数传递时,char,short转换成int,float转化成double
  • 赋值语句可能导致类型的升级和降级

类型强制转化

  • 格式:(double)a = (double)1 + (double) 1;
  • 显示使用类型转化比较好,避免不必要的错误

控制语句

循环

  • 关系运算符,表达式:<,<=,==,>=,>,!=
  • 真假:非0 即为真
  • 注意:= 赋值,== 比较
  • 优先级关系:x > y + 2 => x = ( y + 2 )
  • while语句:非计数循环
#include <stdio.h>
int main(){char a[27] = "abcdefghijklmnopqrstuvwxyz";int i = 0;while( i++ < 26){printf("%c\n", a[i-1]); //前面+1 ,-1即为真实元素}return 0;
}
  • for语句:计数循环
  • 逗号运算符:结果为右边的值
  • 入口,出口条件:while,do while
  • 嵌套循环
#include <stdio.h>
int main(){char lets[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";int i, j;for (i = 0; i < 6; i++){for (j = 0; j <= i; j++){printf("%c", lets[i*(i+1)/2+j]);}printf("\n");}return 0;
}
  • 示例:倒序打印(test47.c)
#include <stdio.h>
#include <string.h>
#define MAX_LEN 255
int main(){char a[MAX_LEN];scanf("%s", a);int len = strlen(a);while(len-- > 0){printf("%c", a[len]);}return 0;
}
  • 示例:冒泡排序(test43.c)
void bb(int a[]){
int  i, j;
for (i = 0; i < LEN -1; ++i){for (j = 0; j < LEN - i - 1; ++j){if(a[j] < a[j+1]){swap(&a[j], &a[j+1]);}}}
}

分支与跳转

  • 选择语句 if……:执行或者跳过这条语句
  • 双选语句 if ……else:在两条语句中进行选择
if(n == 0)s = 1;
elses = -1;
  • 字符输入输出函数:getchar(),putchar(),它们是#include中的预处理,不是真正的函数
ch = getchar();   //scanf("%c", &ch);
putchar(ch);    //printf("%c", ch);
  • ctype.h系列的字符函数:使用时别忘记头文件
函数名 作用
isalnum() 字母或数组
isalpha() 字母
isblank() 空白符
isdigit() 数字
islower() 小写字母
isupper() 大写字母
isxdigit() 16进制字母
tolower() 返回小写字母
toupper() 返回大写字母

- 多重选择if …… (else if) …… else:在多条语句中选择,完全等价与if else多重嵌套模式

if (score <= 60)score = 6;
else if(score <= 70 )score = 7;
else if(score <= 80)score = 8;
elsescore = 10;
  • 逻辑运算符:&&(与), ||(或),!(非)
  • 替代iso664.h:and,or,not
  • 优先级:!与递增运算符一样,&&大于||
  • 条件运算符: ?:
max = a > b ? a : b;
  • 配对:else 与最近的 if 配对
  • 循环辅助continue:程序循环到一部分,可以跳过剩余部分,进行下一轮循环
  • 循环辅助break:程序循环到一部,直接跳出该层循环,进入下一阶段
  • 多重选择switch ……break:可用来替代ifelse,使用break跳出,不往下继续执行
switch (整型表达式)
{case 常量1:语句case 常量2:语句default:语句
}
  • 多重case标签
  • 跳转语句goto:避免使用goto
  • 注意:“==” 不要写成“=”,不要忘记打印结果
#include <stdio.h>
int main(){char ch, pre;int n = 0;while( (ch = getchar()) != '#' ){if(pre == 'e' && ch == 'i') //切记n++;pre = ch;   }printf("%d\n", n); //切记return 0;
}
  • 综合训练:注意,getchar连续输入要去掉\n,菜单要过滤字符,退出写在循环条件中
#include <stdio.h>
int main(){char choice;float fweight = 0, sweight = 0, tweight = 0;float fcharge = 0, scharge = 0, tcharge = 0;float weight, price, charge, orderCharge, orderWeight, account, extCharge, pay;printf("enter a, b, c chooce your goods, q is quit:\n");while ( (choice = getchar()) != 'q' ){if('\n' == choice)continue;if( choice == 'a' || choice == 'b' || choice == 'c' ){switch (choice){case 'a':price = 2.05;printf("please enter want to buy yangli weight:\n");scanf("%f", &weight); ;fweight += weight;fcharge += fweight * price;printf("%.2f\n", fweight);break;case 'b':price = 1.15; printf("please enter want to buy taincai weight:\n");scanf("%f", &weight); sweight += weight;scharge += sweight * price;printf("%.2f\n", sweight);break;case 'c':price = 1.09;printf("please enter want to buy hulubo weight:\n");scanf("%f", &weight); tweight += weight;tcharge += tweight * price;printf("%.2f\n", tweight);break;default: ;}}else{printf("pleae enter 'a', 'b', 'c' !\n");}printf("enter a, b, c chooce your goods, q is quit:\n");}orderWeight = fweight + sweight + tweight; orderCharge = fcharge + scharge + tcharge;account = orderCharge > 100 ? orderCharge * 0.05 : 0;if( orderWeight <= 5 )extCharge = 6.5;else if( orderWeight <= 20)extCharge = 14;elseextCharge = 14 + (orderWeight-14) * 0.5;pay = orderCharge + extCharge - account;printf("*******************   order    ******************\n");printf("*name-------price------weight-------charge*\n");printf("*yang-------$2.05--------%9.2f---------$%9.2f*\n", fweight, fcharge);printf("*tian-------$1.15--------%9.2f---------$%9.2f*\n", sweight, scharge);printf("*hulobo-----$1.09--------%9.2f---------$%9.2f*\n", tweight, tcharge);printf("totalWeight:%.2f, orderCharge:$%.2f", orderWeight, orderCharge);printf("account:$%.2f, extCharge:$%.2f, pay:$%.2f\n", account, extCharge, pay);printf("*************************************************\n");return 0;
}

友好的交互

  • 缓冲区:字符被收集存储的临时存储区(是否有无缓冲输入取决于系统)正常的都是有缓冲输入

  • 结束键盘输入:文件,流,键盘输入

#include <stdio.h>
int main(){char ch;while( (ch =getchar()) != '#'){putchar(ch);}
}

使用的#字符可能会被我们用到,使用#退出并不一定起作用
c语言把输入输出设备,视为文件,stdin流表示键盘输入,stdout流表示显示输出
使用文件的形式来结束键盘的输入
- 文件结尾:Ctrl+Z(曾经操作系统),存储文件大小信息,EOF(C语言)

#define EOF -1 //stdio.h定义的
while( (ch =getchar()) != EOF)
    • getchar()返回int,可能会报信息,但不影响putchar()输出字符
    • 正确的使用是找到操作系统,文件终止符识别方案,大多数是Ctrl+D,有些是Ctrl+Z
    • EOF不要加字符的‘’
  • 重定向和文件:把stdin流重新赋给文件,主要问题与操作系统有关
testFileIO < words            // UNIX与DOS 输入重定向
testFileIO > mywords          //输出重定向 DOS Ctrl+Z结束,UNIX Ctrl+D结束
testFileIO < words > mywords  //组合重定向

不能读多个文件,也不能写多个文件,空格不是必须的,写入的会把之前的覆盖掉
- 友好的用户界面
丢弃换行符

while (getchar() != '\n')continue;
  • 混合字符数字输入:
    1.验证输入正确性2.丢弃换行符
if(2 != scanf("%d%d", &a, &b))break;
  • 输入验证:
    事先预测可能输入,检测和处理
while( scanf("%ld", &n) == 1 && n > 0 ) //验证正整数
  • 模块化编程:用单独的函数,验证输入和管理显示

C语言基础入门一(自学笔记)相关推荐

  1. R语言基础入门(学习笔记通俗易懂版)

    文章目录 R语言预备知识 获取工作目录 设置工作目录 注释 变量名的命名 赋值 变量的显示 查看与清除变量 函数帮助文档查询 函数 安装R包 文件的读取 文件的输出 软件的退出与保存 R语言语法 向量 ...

  2. C语言基础入门学习--学习笔记

    C语言标准 1983年美国国家标准局(ANSI),开始制定C语言标准的工作 1989年该标准正式公布,一般称为ANSI C(C89或C90) 1999年ANSI/ISO联合委员会进行修改,增加了一些功 ...

  3. 视频教程-2020新版C语言程序设计零基础入门小白自学编程-C/C++

    2020新版C语言程序设计零基础入门小白自学编程 7年的开发架构经验,曾就职于国内一线互联网公司,开发工程师,现在是某创业公司技术负责人, 擅长语言有node/java/python,专注于服务端研发 ...

  4. C语言基础入门学习笔记

    前言 我是一个初中生,过完暑假就是一个高一的学生了.在这个暑假里,我学习了韦东山老师和唐佐林老师的课程,所以我写下这个笔记来记录自己的成长历程. C语言基础入门学习笔记 格式 #include < ...

  5. 【学习笔记】山东大学生物信息学——Perl 语言基础入门+高级

    文章目录 8.3 Perl 语言基础入门 8.3.1 第一个 Perl 8.3.2 Perl 的基本规则 8.3.3 字符串常用函数 8.3.4 数组常用函数 8.4 Perl 语言基础高级 8.4. ...

  6. R语言基础入门(全)

    R 是门语言,也是个环境.个人认为R有点像matlab. R自带多种统计学及数字分析功能.R的功能也可以通过安装包(Packages,用户撰写的功能)增强,个人感觉这个就是插件.因为S的血缘,R比其他 ...

  7. AI Studio 飞桨 零基础入门深度学习笔记4-飞桨开源深度学习平台介绍

    AI Studio 飞桨 零基础入门深度学习笔记4-飞桨开源深度学习平台介绍 深度学习框架 深度学习框架优势 深度学习框架设计思路 飞桨开源深度学习平台 飞桨开源深度学习平台全景 框架和全流程工具 模 ...

  8. AI Studio 飞桨 零基础入门深度学习笔记6.3-手写数字识别之数据处理

    AI Studio 飞桨 零基础入门深度学习笔记6.3-手写数字识别之数据处理) 概述 前提条件 读入数据并划分数据集 扩展阅读:为什么学术界的模型总在不断精进呢? 训练样本乱序.生成批次数据 校验数 ...

  9. AI Studio 飞桨 零基础入门深度学习笔记1-深度学习的定义

    AI Studio 飞桨 零基础入门深度学习-笔记 人工智能.机器学习.深度学习的关系 机器学习 机器学习的实现 机器学习的方法论 案例:牛顿第二定律 确定模型参数 模型结构介绍 深度学习 神经网络的 ...

  10. c语言用if语句abc输出最大值,C语言基础入门选择结构-if语句(78页)-原创力文档...

    C语言基础入门选择结构-if语句_电脑基础知识_IT/计算机_专业资料.第9单元选择结构-if语句<程序设计基础>北京八维研修学院第1节选择结构导入?... <程序设计基础> ...

最新文章

  1. 插入排序,希尔排序,堆排序
  2. 802.3和以太网帧结构-路由交换原理1-【HCNA笔记】
  3. dart string 转 bool_Dart语法篇之集合操作符函数与源码分析(三)
  4. iPhone 12性能首曝:6GB内存、A14“挤牙膏”
  5. node.js超过php,在nodejs中如何解决超出最大的调用栈错误
  6. stolz定理考研能用吗_这些高数定理,2021二战考研租房的你千万别记混
  7. 基于MFC的简易TCP/IP调试助手开发
  8. python调用java之Jpype异常机制
  9. VUE生成二维码或条形码
  10. 牛客假日团队赛6 F. Mud Puddles
  11. 【Rustdesk】最友好的开源远程桌面软件——Rustdesk 实现 Windows、Linux、MacOS 之间远程连接桌面
  12. 微信摇一摇linux,关于微信摇一摇iBeacon配置流程
  13. 《人工智能原理》读书笔记:第1章 绪论
  14. 23种设计模式之单例模式、工厂模式、原型模式、建造者模式
  15. ZGC收集器(学习笔记)
  16. Nosql数据库有哪些,分别适用什么场景
  17. Chrome模拟微信、QQ内置浏览器
  18. 一些概念名称的来历札记
  19. ffffffffffffff
  20. Python语言基础学习

热门文章

  1. 如何利用手机的OCR文字识别功能制作扫描件?
  2. IDEA Maven 使用教程
  3. 大数据物流项目:概述及Docker入门(一)
  4. 数据归一化mapminmax
  5. UR3机器人运动学分析之正运动学分析
  6. php barcode设置黑条宽度,JsBarcode常用参数设置
  7. 2019数据安装勾选_Origin2019下载和安装教程
  8. CVPR 2021 | 基于模型的图像风格迁移
  9. 回归分析的基本步骤与自相关性
  10. openCV视频教程