数组的应用深入
来源:互联网 发布:初中编程学哪个 编辑:程序博客网 时间:2024/05/16 23:45
数组2
* 练习 *
求签:
网络求签,要求用户输入5个两位数,保存到数组中
如果某一个数中同时包含8和4 那么这个数无效
如果5个数中只要出现一个含有4的数,那么属于下下签
如果5个数中没有4,也没有8那么属于中等签
如果5个数中没有4 但是有8 那么属于上上签.
请用户输入5个数,判断是哪一种签
#include <stdio.h>int main(int argc, const char * argv[]){ int nums[5]; //1.定义数组 int len = sizeof(nums)/sizeof(int); for (int i = 0; i < len; i++) { printf("请输入第%d个数:\n", i+1); scanf("%d", &nums[i]); // .2.请用户输入 } //3.判断 // 如果某一个数中同时包含8和4 那么这个数无效 //一个旗帜变量,目的 标识这个循环到底是不是正常结束的 //nums[i] int flag = 0; int flag8 = 111; for (int i = 0; i < len; i++) { if (nums[i] == 48 || nums[i] == 84) { //这个数无效 //无效:不参与下下签或者什么签的判断 continue;//下一个数 } //如果这个数num[i],个位或者十位包含4那么就是下下签 int ge = nums[i] % 10; int shi = nums[i] / 10; if (ge == 4 || shi == 4) { //下下签 flag = 1; break; } if (ge == 8 || shi == 8) { //有一个是8 flag8 = 888; // break;// //这里不能break 为什么?因为下一个数还不没判断 } } //程序执行到这,可能是出现了4结束的 也可能是循环正常结束的 if (flag == 1) { printf("你个屌丝 还想娶媳妇\n"); } if (flag == 0) { //证明没有4 //两种情况 //1.有8 if (flag8 == 888) { //有8 printf("您的如意郎君即将到来\n"); }else{ //没有 printf("你只能靠自己找,注册世界佳缘把\n"); } //2.没8 } /* num 个位 = num % 10; 十位 = num / 10; num == 84 || num == 48 */ // 如果5个数中只要出现一个含有4的数,那么属于下下签 // 如果5个数中没有4,也没有8那么属于中等签 // 如果5个数中没有4 但是有8 那么属于上上签. // 4.得出结论
参数的值传递
什么值传递
- 参数的类型是 int float double char 等基本数据类型的时候
- 调用者传入一个实参, 然后在函数中改变这个参数的值,那么调用者中的实参不会改变
数组的元素 能不能当这一函数的参数?
- 可以数组的元素的本质就是一个普通变量
void test(int num); int nums[] = {10,20,304}; test(nums[1]);//调用函数 // 数组的匀速作为函数的参数和 普通变量没有任何区别
- 数组的可不可以作为函数的参数
- 可以
- 数组名代表数组的地址,数字党参数时传递的是数组名,即数组的地址
在函数内部无法使用 sizeof计算参数数组的长度
所以只能在调用者在调用的时候 传递一个数组的长度
* 什么时候叫做值传递什么时候叫做地址传递
* 值传递:就是参数类型是普通变量时
* 地址传递 : 参数的类型是数组时
* 值传递和地址传递的区别
* 值传递不会改变原有变量的值
* 地址传递会改变原有变量的值
总结: 1. 当数组作为函数的参数的时候,在函数内部如何获取数组的长度? 不可以!!!!!! 只要数组作为函数的参数,那么这个函数必须加一个参数 就是数组的长度!!!!! 2. 当数组作为函数的参数的时候,是地址传递 在函数内部修改数组 会对原来的数组产生影响
- * 冒泡排序*
int arr[] = {12,3,234,45,6,3567,6,73,45,46,2};int len = sizeof(arr) / sizeof(arr[0]);for(int i = 0; i < len-1; i++){ for(int j = 0; j < len -1 -i; j++) { if(arr[j] > arr[j+1]) { int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } }}
二维数组
- 二维数组是什么
- 二维数组可以看成一维数组,这个一维数组中每一个元素都是一个数组
- 看成一个几行几列的表格
- 格式:
* 数据类型 数组名称[行数][列数]; 专业术语
- 元素
- 下标: 每一个元素都有两个下标 行和列
- 长度 : 是指数组中元素的个数
* 如何向二维数组中存储数据*
- printf(“%d”,二维数组名[行][列]);
- 行下标和列下标都不能越界
- * 遍历二维数组的元素*
int nums[3][4]; 可以看成3行4列的表格 /* 10 20 30 40 50 60 70 80 90 90 89 80 */ for (int i = 0; i < 行数; i++) { for (int j = 0; j < 列数; j++) { //nums[i][j]; } printf("\n") }
二维数组中元素的默认值问题
- 在声明二维数组的时候 必须要指定行数和列数
- 并且这个行数和列数 可以是常量。变量。表达式。
- 一定不能是小数和负数
- 如果二维数组没有初始化 那么就是垃圾值
二维数组的初始化
- 静态初始化
- 全部赋值:
int nums[3][4] = {{1,2,3,4},{5,6,6,8},{4,5,6,7}}; int nums[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12}; 2>部分赋值 int nums[3][4] = {{1,2},{3,4},{5,6,7}}; /* 1 2 0 0 3 4 0 0 5 6 7 0 */ int nums[3][4] = {1,2,3,4,5,6,7}; /* 1 2 3 4 5 6 7 0 0 0 0 0 */ // 行可以省略 列不能省略 int nums[][4] = {1,2,3,4,5,6,7,8,9,10}; /* 1 2 3 4 5 6 7 8 9 10 0 0 */ 3>奇葩的方式 int nums[3][4] = {[0]= {1,2,3,4},[2]= {6,7,8,9}}; int nums[3][4] = {[0][1] = 10}; /* 1 2 3 4 0 0 0 0 6 7 8 9 */
只要静态初始化,没有初始化的部分默认为 0
0 0
- 数组的应用深入
- 数组的深入学习
- 数组-数组的应用
- 数组越界的深入思考
- 指针数组的深入探讨
- 数组变量的深入理解
- 深入理解数组的运算
- Shiro的应用深入学习
- Array数组的应用
- 控件数组的应用
- 数组的下标应用
- 字符串数组的应用
- 数组的简单应用
- PHP数组的应用
- 二维数组的应用
- 数组的应用
- 结构数组的应用
- java数组的应用
- 总结——在CCS5.5.0中如何将代码烧写到DSP28335的Flash中
- Java 集合框架源码分析(四)——LinkedHashMap
- HTML引用资源相对路径
- poj 3185 高斯消元 枚举变元
- jsp中el表达式无效的解决办法
- 数组的应用深入
- POJ 1655 Balancing Act(简单树型dp)
- POJ2728 Desert King 最优比例生成树
- 指针的简单应用
- android2.6.1——知晓当前活动
- 指针的深入
- 结构体初识
- Java JDBC 之 PreparedStatement
- C#中的异常捕获机制(try catch finally)