c13--数组
//
// main.c
// 进制查表法
//
// Created by xiaomage on 15/6/10.
// Copyright (c) 2015年 xiaomage. All rights reserved.
// #include <stdio.h>
void printfBinary(int value);
void printfBinary2(int value);
void printOct(int value);
void printfHex(int value); void printfHex2(int value);
void printfOct2(int value);
void printfBinary3(int value); int main(int argc, const char * argv[]) {
/*
0000000000000000000000000000
00000000000000000000000000000111
*/
int num = ;// 1010;
// printfBinary2(num);
// printOct(num);
// printfHex2(num);
// printfOct2(num);
printfBinary3(num);
return ;
} void printfBinary3(int value)
{
// 1.定义一个数组, 用于保存二进制中所有的取值
char charValues[] = {'', ''};
// 2.定义一个数组, 用于保存查询后的结果
char results[] = {''};
// 3.定义一个变量, 用于记录当前需要存储到查询结果数组的索引
int pos = ; while (value != ) {
// 1.取出1位的值
int res = value & ;
// 2.利用取出来得值到表中查询对应的结果
char c = charValues[res];
// 3.存储查询的结果
results[--pos] = c;
// 4.移除二进制被取过的1位
value = value >> ;
} // 4.打印结果
for (int i = pos; i < ; i++) {
printf("%c", results[i]);
}
printf("\n"); } void printfOct2(int value)
{
// 1.定义一个数组, 用于保存八进制中所有的取值
char charValues[] = {'', '', '', '', '', '', '', ''};
// 2.定义一个数组, 用于保存查询后的结果
char results[] = {''};
// 3.定义一个变量, 用于记录当前需要存储到查询结果数组的索引
int pos = ;
while (value != ) {
// 1.取出3位的值
int res = value & ;
// 2.利用取出来得值到表中查询对应的结果
char c = charValues[res];
// 3.存储查询的结果
results[--pos] = c;
// 4.移除二进制被取过的三位
value = value >> ;
} // 4.打印结果
for (int i = pos; i < ; i++) {
printf("%c", results[i]);
}
printf("\n"); } void printfHex2(int value)
{
// 1.定义一个数组, 用于保存十六进制中所有的取值
// 规律: 取出的4个二进制位得到的值, 正好是数组中角标对应的值
char charValues[] = {'', '', '', '', '', '', '', '', '', '', 'a', 'b', 'c', 'd', 'e', 'f'};
// '', '', '', '', '', '', '', ''
char results[] = {''};
int pos = ; while (value != ) {
// 取出4位的值
int res = value & ;
// 利用这个值作为索引去数组中查询对应的十六进制的值
char c = charValues[res];
// printf("%c", c);
// 将取出来得值放到用于存储结果数组中
results[--pos] = c; // 每取完一次就干掉它最低的4位
value = value >> ;
// printf("pos = %i\n", pos);
} for (int i = pos; i < ; i++) {
printf("%c", results[i]);
}
printf("\n");
} void printfHex(int value)
{
for (int i = ; i <= ; i++) {
int res = value & ; // 1111
// 对十六进制进行特殊处理
if (res > ) {
// 11 - 10 1 + a
char c = res - + 'a';
printf("%c", c);
}else
{
printf("%i", res);
}
value = value >> ;
}
} void printOct(int value)
{
for (int i = ; i <= ; i++) {
int res = value & ; //
printf("%i", res);
value = value >> ;
}
} void printfBinary2(int value)
{
for (int i = ; i <= ; i++) {
int res = value & ;
printf("%i", res);
value = value >> ;
}
printf("\n");
} void printfBinary(int value)
{
// int offset = sizeof(value) * 8 - 1;
int offset = (sizeof(value) << ) - ;
while (offset >= ) {
int res = (value >> offset) & ;
printf("%i", res);
offset--;
}
printf("\n");
}
//
// main.c
// 进制查表法优化
//
// Created by xiaomage on 15/6/10.
// Copyright (c) 2015年 xiaomage. All rights reserved.
// #include <stdio.h>
void total(int value, int base, int offset);
void ptintBinary(int num);
void printfOct(int num);
void printfHex(int num); int main(int argc, const char * argv[]) {
// insert code here...
// ptintBinary(10);
// printfOct(10);
printfHex();
return ;
} void printfHex(int num)
{
total(num, , );
} void printfOct(int num)
{
total(num, , );
} void ptintBinary(int num)
{
total(num, , );
} // 转换所有的进制
// value就是需要转换的数值
// base就是需要&上的数
// offset就是需要右移的位数
void total(int value, int base, int offset)
{
// 1.定义一个数组, 用于保存十六进制中所有的取值
char charValues[] = {'', '', '', '', '', '', '', '', '', '', 'a', 'b', 'c', 'd', 'e', 'f'};
// 2.定义一个数组, 用于保存查询后的结果
char results[] = {''};
// 3.定义一个变量, 用于记录当前需要存储到查询结果数组的索引
int pos = sizeof(results)/ sizeof(results[]); while (value != ) {
// 1.取出1位的值
int res = value & base;// 1 7 15
// 2.利用取出来得值到表中查询对应的结果
char c = charValues[res];
// 3.存储查询的结果
results[--pos] = c;
// 4.移除二进制被取过的1位
value = value >> offset;// 1 3 4
} // 4.打印结果
for (int i = pos; i < ; i++) {
printf("%c", results[i]);
}
printf("\n"); }
//
// main.c
// 练习4
//
// Created by xiaomage on 15/6/10.
// Copyright (c) 2015年 xiaomage. All rights reserved.
// #include <stdio.h> int main(int argc, const char * argv[]) {
// 要求从键盘输入6个0~9的数字,排序后输出
// 0~9999 // 1.定义数组保存用户输入的数据
int nums[] = {};
// 2.接收用户的数据
int value = -;
for (int i = ; i < ; i++) {
printf("请输入第%i个数据\n", i + );
scanf("%i", &value); // 2, 2, 1, 2
// 7, 3, 6, 1
// nums[value] = 1;
nums[value] = nums[value] + ;
} for (int i = ; i < ; i++) { // i == 7
// printf("nums[%i] = %i\n", i , nums[i]);
/*
if (nums[i] != 0) {
printf("%i\n", i); // 1, 2, 2, 2
}
*/
for (int j = ; j < nums[i]; j++) { // j == 1
printf("%i\n", i); // 1, 1, 2, 3, 3, 6
}
} return ;
}
//
// main.c
// 数组的注意点
//
// Created by xiaomage on 15/6/10.
// Copyright (c) 2015年 xiaomage. All rights reserved.
// #include <stdio.h> int main(int argc, const char * argv[]) {
char nums[] = {, };
// 0 , 1 , 2
char values[] = {, , }; // 注意点: 在使用数组的时候, 一定不要访问不属于字节的存储空间, 这样会导致数据混乱
// 有时候如果访问了不属于自己的存储空间, 程序会报错
// values[3] = 44;
// printf("values[3] = %i\n", values[3]);
// printf("nums[0] = %i\n", nums[0]); nums[-] = ;
printf("values[2] = %i\n", values[]);
return ;
}
//
// main.c
// day07
//
// Created by xiaomage on 15/6/10.
// Copyright (c) 2015年 xiaomage. All rights reserved.
// #include <stdio.h> int main(int argc, const char * argv[]) {
// 变量在内存中的存储
// 由于变量的内存寻址是从大到小, 所以存储数据时会从高字节开始存储
int num = ; // 0000 0000 0000 0000 0000 0000 0000 1010 // 注意: 数组的存储和变量有点不一样, 数组存储元素, 是从所占用的低字节开始存储
char charValues[] = {'l', 'u', 'c', 'k'}; printf("charValues[0] = %p\n", &charValues[]);
printf("charValues[1] = %p\n", &charValues[]);
printf("charValues[2] = %p\n", &charValues[]);
printf("charValues[3] = %p\n", &charValues[]);
/*
charValues[0] = 0x7fff5fbff7c8
charValues[1] = 0x7fff5fbff7c9
charValues[2] = 0x7fff5fbff7ca
charValues[3] = 0x7fff5fbff7cb
*/ // &charValues == &charValues[0] == charValues
printf("&charValues = %p\n", &charValues);
// 数组名,保存的是数组的首地址,是第0个元素的地址,
printf("charValues = %p\n", charValues); // 00000000 00000000 00000000 00000101
// 00000000 00000000 00000000 00000110
int nums[] = {, }; return ;
}
//
// main.c
// 数组练习1
//
// Created by xiaomage on 15/6/10.
// Copyright (c) 2015年 xiaomage. All rights reserved.
// #include <stdio.h> int main(int argc, const char * argv[]) {
// 从键盘录入当天出售BTC的价格并计算出售的BTC的总价和平均价(比如说一天出售了3个比特币) // 1.接收数据 printf("请输入第1个比特币的价格\n");
int value1 = -;
scanf("%i", &value1); printf("请输入第2个比特币的价格\n");
int value2 = -;
scanf("%i", &value2); printf("请输入第3个比特币的价格\n");
int value3 = -;
scanf("%i", &value3); // int value3 = -1; int sum = ;
int value = -;
for (int i = ; i < ; i++) {
printf("请输入第3个比特币的价格\n");
scanf("%i", &value);
sum += value;
} // 1.1定义数组保存每个比特币的价格
int values[] = {-};
// 1.2动态计算数组的元素个数
int length = sizeof(values) / sizeof(values[]);
// 1.3定义变量保存总和
int sum = ;
for (int i = ; i < length; i++) {
printf("请输入第%i个比特币的价格\n", i + );
scanf("%i", &values[i]); sum += values[i];
} // 2.计算总和
// int sum = value1 + value2 + value3;
int sum = ;
for (int i = ; i < length; i++) {
sum += values[i];
} // 3.计算平局值
int average = sum / length;
// 4.输出结果
printf("sum = %i, average = %i\n", sum, average); return ;
}
//
// main.c
// 数组和函数
//
// Created by xiaomage on 15/6/10.
// Copyright (c) 2015年 xiaomage. All rights reserved.
// #include <stdio.h> // 基本数据类型作为函数的参数是值传递
// 如果形参是基本数据类型, 在函数中修改形参的值不会影响到实参的值
void change(int value)
{
value = ;
} // 注意: 数组名作为函数的参数传递, 是传递的数组的地址
// 因为数组名就是数组的地址 &number = &number[0] == number
// 注意: 如果数组作为函数的形参, 元素的个数可以省略
// 如果形参是数组, 那么在函数中修改形参的值, 会影响到实参的值
//void change2(int values[2])
void change2(int values[])
{
values[] = ;
values[] = ;
}
int main(int argc, const char * argv[]) {
/*
int num = 10;
change(num);
printf("num = %i\n", num);
*/ int nums[] = {, }; change2(nums); // 相当于传递了数组的地址
printf("nums[1] = %i\n", nums[]); change(nums[]);
printf("nums[0] = %i\n", nums[]);
return ;
}
//
// main.c
// 数组和函数2
//
// Created by xiaomage on 15/6/10.
// Copyright (c) 2015年 xiaomage. All rights reserved.
// #include <stdio.h>
//void printArray(int values[5]);
void printArray(int values[], int length); int main(int argc, const char * argv[]) {
// 要求定义一个函数, 实现遍历数组. (只要别人传递数组给函数, 就要求输出数组中所有元素的值)
int nums[] = { , , };
printf("size = %i\n", sizeof(nums)); int length = sizeof(nums) / sizeof(nums[]); printArray(nums, length); // 数组名称保存的是数组的地址
return ;
} // 如果传递的数组的名称, 其实传递的是地址
// 如果传递的是地址, 其实传递的是指针
// 指针在64位编译环境占8个字节 // 注意: 如果数组作为形参, 那么在函数中就不能通过数组的名称计算出数组元素的个数
// 因为系统会自动将数组形参转换为指针, 指针占用8个字节
void printArray(int values[], int length)
{
printf("size = %i\n", sizeof(values));//8,指针类型 // 1.动态计算数组的元素个数,sizeof(values)获取的是字节的大小,
int length1 = sizeof(values) / sizeof(values[]);//8/4=2
// 永远只有2个
for (int i = ; i < length; i++) {
printf("values[%i] = %i\n", i,values[i]);
}
}
//
// main.c
// 数组练习2
//
// Created by xiaomage on 15/6/10.
// Copyright (c) 2015年 xiaomage. All rights reserved.
// #include <stdio.h> int arrayMax(int values[], int length);
int arrayMax2(int values[], int length); int main(int argc, const char * argv[]) {
// 设计一个函数int arrayMax(int a[], int count)找出数组元素的最大值
int nums[] = {-, -, -, -, -};
int length = sizeof(nums) / sizeof(nums[]);
int max1 = arrayMax(nums, length);
int max = arrayMax2(nums, length);
printf("max = %i\n", max); return ;
} int arrayMax2(int values[], int length)
{
// 1.定义变量, 保存数组中最大值的角标(索引)
int max = ;
// 2.遍历数组
for (int i = ; i < length; i++) {
// 3.取出数组中对应角标的元素的值进行比较
if (values[max] < values[i]) {
// 如果当前遍历到的角标对应的元素的值大于max这个角标对应元素的值
// 那么就将当前的角标最为最大值的角标
max = i;
}
}
return values[max];
} int arrayMax(int nums[], int length)
{
// 1.定义一个变量, 假设为最大值
// int max = 0; // 注意: 不能假设一个不是数组中的值最为最大
int max = nums[];
// 2.遍历数组
for (int i = ; i < length; i++) {
// 3.依次取出数组中每一个元素的值, 和假设的最大值进行比较
// 如果数组的元素大于假设的最大值, 就让当前元素的值作为最大值
if (max < nums[i]) {
max = nums[i];
}
}
return max;
}
c13--数组的更多相关文章
- PAT自测_打印沙漏、素数对猜想、数组元素循环右移、数字加倍重排、机器洗牌
-自测1. 打印沙漏() 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号 ...
- fortran常用语句--读写带注释文档、动态数组等语法
1.判断读取文档有多少行数据(文档最后的空行不计入其中): 首先在变量定义区域下方和执行语句前声明在程序中要被调用的GetFileN函数: external GetFileN 接下来在函数外部后边写上 ...
- javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈
Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...
- 探究javascript对象和数组的异同,及函数变量缓存技巧
javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...
- 编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议75~78)
建议75:集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法 ...
- 了解PHP中的Array数组和foreach
1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组 . 2.例子:一般的数组 这里,我 ...
- JavaScript权威指南 - 数组
JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...
- JavaScript常见的五种数组去重的方式
▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 先来建立一个数组 var arr = [1,2,3,3,2,'我','我',34,'我的',NaN,NaN ...
- js:给定两个数组,如何判断他们的相对应下标的元素类型是一样的
题目: 给Array对象原型上添加一个sameStructureAs方法,该方法接收一个任意类型的参数,要求返回当前数组与传入参数数组(假定是)相对应下标的元素类型是否一致. 假设已经写好了Array ...
- javascript数组查重方法总结
文章参考地址:http://blog.csdn.net/chengxuyuan20100425/article/details/8497277 题目 对下列数组去重: var arr = ['aa', ...
随机推荐
- 关于java1.8中LocalDateTime实现日期,字符串互转小坑。
今天无聊,来看了下1.8的时间类型LocalDateTime,当想把字符串转成LocalDateTime的时候报错!! java.time.format.DateTimeParseException: ...
- 项目中遇到的所有ECharts图表集合
全放在了ECharts官网示例里面以后会一直往里面添加: https://gallery.echartsjs.com/explore.html?u=bd-2133619855&type=wor ...
- echarts 圆形图、柱状图
首先引入echarts的js包 <script type="text/javascript" src="js/esl.js"></script ...
- js 或运算
表达式a && 表达式b : 计算表达式a(也可以是函数)的运算结果, 如果为 True, 执行表达式b(或函数),并返回b的结果: 如果为 False,返回a的结果: 表达式a || ...
- 如何在CorelDRAW中创建对象阴影
阴影工具可以为对象创建光线映射的阴影效果,使对象产生较强的立体感.可以为大多数对象或群组对象添加阴影,其中包括美术字.段落文本和位图.创建对象阴影可以增加视觉层次,使图形更加逼真. CorelDRAW ...
- 脚本编写 nginx 启动
#!bin/bash#功能:本脚本编写完成后,放置在/etc/init.d/目录下,就可以被 Linux 系统自动识别到该脚本.#如果本脚本命名为/etc/init.d/nginx,则 service ...
- C语言基础 (5) 常用操作符
01 课程回顾 变量的起名:字母数字下划线 不能是关键字 常量 变量提升:老的编译器这样会报错 运算符:sizeof.+.-.x … … 进制: 1111 8421 计算机几乎都是二进制系统,而且是以 ...
- Java web课程学习之Servlet
Servlet简介 (1) Servlet本质上就是一个Java类,只不过运行在Servlet容器中 (2) Servlet的功能: ① 创建并返回客户请求的动态HTML页面 ② 创建可嵌入到现有 ...
- Project Euler 18 Maximum path sum I( DP and 记忆化搜索 )
题意:求从三角形顶端出发到达底部,所能够得到的最大路径和 方法一:记忆化搜索 /************************************************************ ...
- 兼容IE的两端对齐
div+css布局实现2端对齐是我们网页排版中经常会使用到的,这篇文章将总结一下可以实现的方法: html结构 实现demo里面的div通过Css进行2端对齐. <div class=" ...