复习

1.隐式转换

Double a

Int b = 1

A = b //编译器自动转换把b转换为double类型后 再给a赋值(隐式转换)

2.强制类型转换 (变量)类型名

Int a = 1

// a只有在此语句执行时,才强制转换为double类型 其他地址还是int类型

Printf(“%lf\n”,(double)a)

转换原则:占用内存字节数小(值域小)的类型,向占用内存字节数多(值域大)的类型转换,以保证精度不降低。

3.浮点型和整型打印的问题

a)       不要直接通过%d 打印一个浮点型类型,得不到想要的结果,要想得到结果,强制类型转换

Double a = 11.11

Printf(“%d\n”,(int)a)

b)       不要通过%f或%lf 打印一个整型变量 得不到想要的结果 要想得到结果强制类型转换

Int a = 10

Printf(“%lf\n”,(double)a)

二、运算符和表达式

1.相除得到小数问题

a)两个整数相除,只是取整数,不会带小数

int a = 1/2 // a=0

要想得到小数的结果,分子分母至少有一个是小数

Double a

A = 1.0/2 //a = 0.5

A = 1/(double)2

2.前置++、后置++区别

3、条件真假问题

a)0就是假

b)非0就是真,通常以1表示

4、逻辑|| &&

5、运算符优先级

Int c = 0

// &&优先级比 = 高

三、程序流程结构

C语言支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构

03 一维数组的使用

#include <stdio.h>

#define SIZE 10

int main(int argc, char *argv[])

{

//int a; //定义一个普通变量

//1、

//1、同一个{}内部,数组名不能和其他变量和数组名同名

int a[10]; //err

//2、定义数组时,n 最好是常量

int n = 10;

int b[n]; // 有些编译器会报错 如visual studio中就报错了

//3、 使用数组时 下标可以是变量 可以是常量 也可以是表达式

int c[SIZE];

c[0] = 1; //通过常量操作

int i = 1;

c[i] = 2; //通过变量

c[i+1] = 3; //通过表达式

// 4、使用数组,最好别越界

int d[10];

// 下表只有0 ~ 9, d[10] 就是越界 有时候越界了 编译器不会马上出错

d[10] = 11;

return 0;

}

int main01(int argc, char *argv[])

{

int a = 0;

int b = 1;

int c = 2;

int d = 3;

int e = 4;

//1、定义一个数组,数组内部有10个int类型的元素(变量)

//2、定义数组和定义变量区别,名字后面加[],[]里面写元素个数

//3、数组在内存中是连续存储的

//4、通过下标访问数组元素,下表从0开始

//5、有多少个[]就是多少维 这里是一维数组

int array[10];

array[0] = 0;

array[1] = 1;

array[2] = 2;

return 0;

}

结论:

1、  编译器不是我们想象中那么智能 有些错误不能立马呈现

错误:

1、  编译错误(语法出错)

2、  运行时错误(运行时异常),最头疼 有些错误不能立马呈现

04一维数组元素的使用

04

05 不初始化的局部数组为随机数

{}内部的变量或数组,不初始化,它的值为随机数

07 答疑

gcc hello.c –o

gcc –o hello hello.c –std=c99 (这两种写法都行

-std=c99 制定了c语言标准

允许for( 循环中声明变量

例如for(int i =0

08 数组名

结果:

09 求三个数最值

int a = 10;

int b = 20;

int c = 30;

int max;

求最大值

10 求数组的最值

11 数组的翻转

1234567

a[0 与 a[6

a[1 与 a[5

a[2 与 a[4

i<j

i=0 j=6

i++ j—

while(i<j)

a[i和a[j 交换

i++ j—

十二、冒泡排序

冒泡法:

从第一个元素开始,两两相比,把元素往上冒,第一次排序后最大的已经到了最后面

for(I = 0 ;i<n-1;i++)

{

for(j=i;j<n-1;j++)

{  if(a[j]>a[j+1]){

tmp = a[j

a[j = a[i

a[I = tmp

}

}

}

C语言:

int main1()

{

// 冒泡法:把最大的冒出去

int a[] = {1, 24, -3, 145, 42, 5, 18};

int n = sizeof(a) / sizeof(a[0]);

int tmp;

for (int i = 0; i < n - 1; i++)

{

for (int j = i; j < n - 1; j++)

{

if (a[j] > a[j + 1])

{

tmp = a[j];

a[j] = a[j + 1];

a[j + 1] = tmp;

}

}

}

for (int i = 0; i < n; i++)

{

printf("%d,", a[i]);

}

}

// *冒泡法变种:把最小的留在下面

int a[] = {1, 24, -3, 145, 42, 5, 18};

int n = sizeof(a) / sizeof(a[0]);

int tmp;

for (int i = 0; i < n - 1; i++)

{

for (int j = i + 1; j < n; j++)

{

if (a[j] < a[i])

{

tmp = a[j];

a[j] = a[i];

a[i] = tmp;

}

}

}

for (int i = 0; i < n; i++)

{

printf("%d,", a[i]);

}

}

十四、二维数组定义使用

#include <stdio.h>

int main(int argc, char *argv[])

{

//1、有多少[] 就有多少维

//2、内存中没有多维,都只有一维,多维数组是特殊的一维数组

//3、定义了一个一维数组a[3],这个一维数组有3个元素,每个元素int[4]

//4、a[0],a[1],a[2]就是第0、1、2个元素的数组名

//5、二维数组,用户可以理解为m行n列,没有a[3][4]此元素(越界)

int a[3][4];

int i = 0;

int j = 0;

int num = 0;

for(i=0;i<3;i++){

for(j=0;j<4;j++){

a[i][j] = num;

num++;

}

}

a[0][0] = 0;

a[0][1] = 1;

return 0;

}

十五 二维数组初始化

#include <stdio.h>

int main(int argc, char *argv[])

{

// 看方便,写不方面

int a[3][4]{

{0,1,2,3},

{4,5,6,7},

{8,9,10,11}

};

int a1[3][4] ={ 0,1,2,3,4,5,6,7,8,9,10,11 };

// 如果定义时 同时初始化 第1个[]可以不写内容

int a1[3][4] ={ 0,1,2,3,4,5,6,7,8,9,10,11 };

// 如果第一个[]不写,必须初始化

// int a3[][4]; //err

int a3[3][4] = {0,1,2,3}; //没有初始化的元素赋值为0

int a4[3][4] = {0}; //所有元素初始化为0

return 0;

}

十六 二维数组名

#include <stdio.h>

int main(int argc, char *argv[])

{

int a[5][10];

//1、数组名是常量,不能修改

//a=10; //err

//2、sizeof(数组名),测数组的总大小

printf("sizeof(a)=%lu\n", sizeof(a))

//3、sizeof(a[0]) 测的是第0个元素的大小: int [10] = 4*10 = 40

printf("sizeof(a) = %lu\n", sizeof(a))

//4、sizeof(a[0][0])测的是第0行第0列元素的大小,int = 4

printf("sizeof(a[0][0])=%lu\n", sizeof(a[0][0]);

//5、求行数:总大小/每个元素的大小

int n = sizeof(a) / sizeof(a[0])

printf("n=%d\n", n);

//6、求列数

n = sizeof(a[0])/sizeof(int)

printf("n1=%d\n",n)

//7、行*列

n = sizeof(a)/sizeof(a[0]) * sizeof (a[0])/sizeof(int)

}

十七、二维数组的练习

十八、多维数组

十九、字符数组和字符串的关系

C语言中没有字符串,是用一维数组来模拟字符串的

#include <stdio.h>

int main(int argc, char *argv[])

{

//1、 C语言没有字符串类型,用字符数组模拟

char a[10];

//2、字符串一定是字符数组,字符数组就不一定是字符串

//3、如果字符数组以字符'\0'('\0等价于数字0')结尾,那么这

//个字符数组就是字符串

//

char b = {'a','b','c'}; //字符数组

char c[10] = {'a','b','c','\0'}; //字符串

char c[10] = {'a','b','c',0}; //字符串

return 0;

}

20、字符数组初始化

#include <stdio.h>

int main(int argc, char const *argv[])

{

char a1[] = { 'a', 'b', 'c' }; //字符数组

// %s代表是字符串

printf("a1=%s\n", a1);

// %s会从起始地址开始打印 直到遇到结束符\0

// 所以这种情况是有可能出现乱码报错的

char a2[] = { 'a', 'b', 'c', 0 }; // 字符串

printf("a2=%s\n", a2);

char a3[] = { 'a', 'b', 'c', '\0' }; // 字符串

printf("a3=%s\n", a3);

char a4[] = { 'a', '\0', 's', 2 };

printf("a4=%s\n", a4);

return 0;

}

char a6[10] = {‘a’,’b’,’c’} //前三个字符赋值为a,b,c 后面自动为0 所以打印出来也是1bc

// 1、常用的初始化,使用字符串初始化,在字符串结尾自动加数字0

// 2、这个结束符,用户看不到(隐藏),但是是存在的

char a7[10] =  “abc”

char a8[] = “abc”

printf(“sizeof(a8)=%lu”,sizeof(a8); //4 // 字符串自动隐藏一个结束符

char a9[] = “\0abc”

printf(“a9 = %s\n”,a9) //打印出来是空的

//\0后面最好别跟数字,有可能组成一个转义字符

char a10[] = “\012abc”

printf(“a10 = %s\n”,a10);

查看一下\012对应的ASCII

man ascii

八进制012 对应的是’\n’

‘\012’就是’\n’

21课堂答疑

22.字符串的输入输出

#include <stdio.h>

int main (int argc,char *argv[])

{

char str[100];

printf(“请输入字符串:”);

scanf(“%s”,str);   // str本身就是地址 不用&取地址

printf(“star = %s\n”,str)

return 0

}

23 随机数的产生

// 先设定一个种子才能产生随机数

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

int main(int argc, char *argv[])

{

// 随机数的产生

// 先设置种子,种子设置一次即可

// 如果srand()参数一样,随机数就一样

// srand(100);

// time(NULL)功能获取系统当前时间,由于时间会变,srand()也会改变

srand((unsigned int)time(NULL));

int i = 0;

int num;

for(i=0;i<10;i++)

{

num=rand(); // rand(产生随机数

printf("num=%d\n",num);

}

return 0;

}

C语言基础 (6) 类型转换,数组与随机数的更多相关文章

  1. JavaScript 引入方式 语言规范 语言基础 数据类型 常用方法 数组 if_else 比较运算符 for while 函数 函数的全局变量和局部变量 {Javascript学习}

    Javascript学习 JavaScript概述 ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript ...

  2. C语言基础 - 实现动态数组并增加内存管理

    用C语言实现一个动态数组,并对外暴露出对数组的增.删.改.查函数 (可以存储任意类型的元素并实现内存管理) 这里我的编译器就是xcode 分析: 模拟存放 一个 People类 有2个属性 字符串类型 ...

  3. C语言基础知识【数组】

    2017年7月11日17:34:05C 数组1.C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合.数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量.数组的声明并不 ...

  4. [java学习笔记]java语言基础概述之数组的定义&常见操作(遍历、排序、查找)&二维数组

    1.数组基础 1.什么是数组:           同一类型数据的集合,就是一个容器. 2.数组的好处:           可以自动为数组中的元素从零开始编号,方便操作这些数据. 3.格式:  (一 ...

  5. Java语言基础(方法与数组)_DAY05

    1:函数(掌握)   (1)定义在类中,有特定功能的一段小程序,可以独立运行.    (2)函数的格式:       修饰符 返回值类型 函数名(形参类型 形式参数1,形参类型 形式参数2...)   ...

  6. Go语言基础四:数组和指针

    GO语言中数组和指针 数组 Go语言提供了数组类型的数据结构. 数组是同一数据类型元素的集合.这里的数据类型可以是整型.字符串等任意原始的数据类型.数组中不允许混合不同类型的元素.(当然,如果是int ...

  7. 黑马程序员——C语言基础 char字符 数组

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)char类型 1)存储细节 ASCII单字节表(双字节GBK\GB2 ...

  8. C语言基础--二维数组

    二维数组概念: 数组中的每一个元素又是一个数组, 那么这个数组就称之为二维数组,二维数组是特殊的一维数组. 二维数组格式: 元素类型 数组名称[一维数组的个数][每个一维数组的元素个数]; 元素类型 ...

  9. C语言基础:二维数组 分类: iOS学习 c语言基础 2015-06-10 21:42 16人阅读 评论(0) 收藏

    二维数组和一位数组类似. 定义: 数据类型 数组名[行][列]={{ },{ }....}; 定义时,一维(行)的长度可以省略,但是二维(列)的长度不可以省略.但是访问时,一定使用双下标. 二维数组的 ...

随机推荐

  1. 07springMVC视图解析器

    u  概述 u  常见视图解析器 u  UrlBasedViewResolver u  InternalResourceViewResolver u  视图解析器链 u  说明 1      概述 在 ...

  2. 用saltapi远程操作tomcat启停时,输出日志乱码再解决

    以前解决过一次,是定义LC_ALL为指定编码.但这种思路不完全,因为机器各各不同,系统编码本身不一致(标准化之路漫长啊) 故而在其它一些系统的部署时,用上一次的方案,反而会有错误产生. 于是,按洪军找 ...

  3. ExtJs之ExtJs.Model验证

    没有搞好,但知道意思和配置,并且好像4和3的没有兼容性语法,所以网上找了新语法才出来了点东东. <!DOCTYPE html> <html> <head> < ...

  4. 【ACM】hdu_1092_A+BIV_201307261630

    A+B for Input-Output Practice (IV)Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/3276 ...

  5. 洛谷 P1535 游荡的奶牛

    P1535 游荡的奶牛 题目描述 Searching for the very best grass, the cows are travelling about the pasture which ...

  6. cogs 983. [NOIP2003] 数字游戏

    983. [NOIP2003] 数字游戏 ★☆   输入文件:numgame.in   输出文件:numgame.out   简单对比时间限制:1 s   内存限制:128 MB 题目描述 丁丁最近沉 ...

  7. 为什么用clojure作为storm 的主要开发语言

    Why you choose Clojure as the development language of Storm? Could you talk about your long practica ...

  8. hdu 4586 Play the Dice (概率+等比数列)

    Play the Dice Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) To ...

  9. linux 文件操作系统调用

    crate:创建文件 open:打开文件 read:读取文件 write:写文件 lseek :设置文件偏移量 access:推断文件 close:关闭文件的读写操作

  10. Zookeeper体系结构

    上面我们已经讨论了zookeeper在应用程序中的一些操作,以下我们须要理解一下服务端的工作的原理.client是怎样通过一个client的类库与服务端进行通信的,然后服务端又是怎样回应client的 ...