//
// 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--数组的更多相关文章

  1. PAT自测_打印沙漏、素数对猜想、数组元素循环右移、数字加倍重排、机器洗牌

    -自测1. 打印沙漏() 本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个“*”,要求按下列格式打印 ***** *** * *** ***** 所谓“沙漏形状”,是指每行输出奇数个符号 ...

  2. fortran常用语句--读写带注释文档、动态数组等语法

    1.判断读取文档有多少行数据(文档最后的空行不计入其中): 首先在变量定义区域下方和执行语句前声明在程序中要被调用的GetFileN函数: external GetFileN 接下来在函数外部后边写上 ...

  3. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  4. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  5. 编写高质量代码:改善Java程序的151个建议(第5章:数组和集合___建议75~78)

    建议75:集合中的元素必须做到compareTo和equals同步 实现了Comparable接口的元素就可以排序,compareTo方法是Comparable接口要求必须实现的,它与equals方法 ...

  6. 了解PHP中的Array数组和foreach

    1. 了解数组 PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.详细的解释可参见:PHP.net中的Array数组    . 2.例子:一般的数组 这里,我 ...

  7. JavaScript权威指南 - 数组

    JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...

  8. JavaScript常见的五种数组去重的方式

    ▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 先来建立一个数组 var arr = [1,2,3,3,2,'我','我',34,'我的',NaN,NaN ...

  9. js:给定两个数组,如何判断他们的相对应下标的元素类型是一样的

    题目: 给Array对象原型上添加一个sameStructureAs方法,该方法接收一个任意类型的参数,要求返回当前数组与传入参数数组(假定是)相对应下标的元素类型是否一致. 假设已经写好了Array ...

  10. javascript数组查重方法总结

    文章参考地址:http://blog.csdn.net/chengxuyuan20100425/article/details/8497277 题目 对下列数组去重: var arr = ['aa', ...

随机推荐

  1. tp框架---表单验证

    自动验证是ThinkPHP模型层提供的一种数据验证方法,可以在使用create创建数据对象的时候自动进行数据验证.分为静态验证和动态验证. 关于基础知识,请查看手册“自动验证”一章. 一.静态验证 ( ...

  2. POJ 3258 (NOIP2015 D2T1跳石头)

    河中跳房子 总时间限制: 1000ms 内存限制: 65536kB 描述 每年奶牛们都要举办各种特殊版本的跳房子比赛,包括在河里从一个岩石跳到另一个岩石.这项激动人心的活动在一条长长的笔直河道中进行, ...

  3. A - Antipalindrome

    Problem description A string is a palindrome if it reads the same from the left to the right and fro ...

  4. Java 系列之spring学习--依赖注入(二)

    一.依赖注入的三种方式 接口注入,set注入,构造函数注入 二.构造函数注入 2.1.测试类 package test; public class test01 { public String msg ...

  5. It Started With A Kiss

  6. [原创]Java常见笔试题知识点汇总

    前天数梦工厂来学校招聘,笔试题比较有特点,全是Java题,基本就是Java的一些特点.凭记忆按照题目找到一些必备知识点 (1). try {}里有一个return语句,那么紧跟在这个try后的fina ...

  7. Win10 UWP Tile Generator

    图标生成器 https://marketplace.visualstudio.com/items?itemName=shenchauhan.UWPTileGenerator 备份地址: http:// ...

  8. 工厂模式-CaffeNet训练

    参考链接:http://blog.csdn.net/lingerlanlan/article/details/32329761 RNN神经网络:http://nbviewer.ipython.org/ ...

  9. PCL:解决PCL和OpenCV冲突的方法

    不是PCL的问题,而是OpenCV的问题. (1):先包含PCL库,再包含OpenCV库: (2):把里面的UCHAR冲突全部换掉!  如果你有闲情逸致,用正则表达式 慢慢替换去吧! (3):或者把F ...

  10. spring注解略解

    @Scope("prototype") 如果ACTION中不@Scope("prototype"),有可能报找不到XXXACTION的错误!写上这个就表示每次请 ...