(4). 取出内存中的 指数E(三种情况):E全为1
指数E 是通过 真实值+中间值 算出来的,如果E全是1,(32位系统)说明E的真实值是 128,指数是128说明这个值是非常大的。
这时,如果 有效数字M全为0,表示 ±无穷大(正负取决于符号位s)
(七). 解释浮点数存储的例子:
#include <stdio.h> int main() { int n = 9;//4字节 float* pFloat = (float*)&n; //把 n 的地址强制转换为 float类型 赋给指针变量 pFloat printf("n的值为:%d\n", n); //使用 %d 打印 n printf("*pFloat的值为:%f\n", *pFloat); //使用 %f 打印 地址中的内容 *pFloat = 9.0; //使用指针变量把 9.0 赋给 n的空间 printf("num的值为:%d\n", n); //使用 %d 打印 赋值后的 n printf("*pFloat的值为:%f\n", *pFloat); //使用 %f 打印 赋值后的 地址中的内容 return 0; }
(1). 整型存储,以 整型取出 和 浮点数取出:
(2). 浮点型存储,以 整型取出 和 浮点数取出:
练习:
1. 有序序列判断:
(1). 方法一 -- 先输入数据再判断:
//描述 //输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序)。 //输入描述: //第一行输入一个整数N(3≤N≤50)。 //第二行输入N个整数,用空格分隔N个整数。 #include <stdio.h> int main() { int n = 0;//数组长度 //输入n: scanf("%d", &n); int arr[50] = { 0 }; //输入数组数据: int i = 0; for (i = 0; i < n; i++) { scanf("%d", &arr[i]); } //判断是否有序:升序 降序, //有序的情况下 都是大于号 或 都是小于号 int flag1 = 0; //表示升序,满足升序关系 --> flag1=1 int flag2 = 0; //表示降序,满足降序关系 --> flag2=1 //判断过程中, //如果 flag1一直为1,flag2一直为0,说明是升序, //如果 flag2一直为1,flag1一直为0,说明是降序 //等于的话,flag1和flag2都是0 //相邻两个数进行比较,n个数,比较n-1对 for (i = 0; i < n-1; i++) { if(arr[i] < arr[i+1]) //前一个数 小于 后一个数 { flag1 = 1; } else if (arr[i] > arr[i+1]) //前一个数 大于 后一个数 { flag2 = 1; } } //判断完后,看 flag1 和 flag2 的情况来判断有无序 if (flag1 + flag2 == 2)//说明既有大于又有小于 { printf("unsorted\n"); } else //==1的话 说明有序,==0的话,说明都相当,也是有序 { printf("sorted\n"); } return 0; }
(2). 方法二 -- 边输入边判断(输入两个数后就可以判断一次大小了):
//描述 //输入一个整数序列,判断是否是有序序列,有序,指序列中的整数从小到大排序或者从大到小排序(相同元素也视为有序)。 //输入描述: //第一行输入一个整数N(3≤N≤50)。 //第二行输入N个整数,用空格分隔N个整数。 #include <stdio.h> int main() { int n = 0;//数组长度 //输入n: scanf("%d", &n); int arr[50] = { 0 }; //判断是否有序:升序 降序, //有序的情况下 都是大于号 或 都是小于号 int flag1 = 0; //表示升序,满足升序关系 --> flag1=1 int flag2 = 0; //表示降序,满足降序关系 --> flag2=1 //判断过程中, //如果 flag1一直为1,flag2一直为0,说明是升序, //如果 flag2一直为1,flag1一直为0,说明是降序 //等于的话,flag1和flag2都是0 //输入数组数据 并 进行判断: int i = 0; for (i = 0; i < n; i++) { scanf("%d", &arr[i]); //输入进来后就可以判断了 if (i >= 1)//i大于1说明输入了 arr[0] 和 arr[1] { if (arr[i] < arr[i - 1]) //一个数 小于 前一个数 { flag1 = 1; } else if (arr[i] > arr[i + 1]) //一个数 大于 前一个数 { flag2 = 1; } } } //判断完后,看 flag1 和 flag2 的情况来判断有无序 if (flag1 + flag2 == 2)//说明既有大于又有小于 { printf("unsorted\n"); } else //==1的话 说明有序,==0的话,说明都相当,也是有序 { printf("sorted\n"); } return 0; }
2. 获得月份天数(多组输入)
(1). 方法一 -- 使用switch语句进行日期分类:
(代码:)
//描述 //KiKi想获得某年某月有多少天,请帮他编程实现。输入年份和月份,计算这一年这个月有多少天。 //输入描述: //多组输入,一行有两个整数,分别表示年份和月份,用空格分隔。 //输出描述: //针对每组输入,输出为一行,一个整数,表示这一年这个月有多少天。 #include <stdio.h> //平年: // 1 2 3 4 5 6 7 8 9 10 11 12 // 31 28 31 30 31 30 31 31 30 31 30 31 // //闰年: // 1 2 3 4 5 6 7 8 9 10 11 12 // -- 29 -- -- -- -- -- -- -- -- -- -- // 1 3 5 7 8 10 12 -- 31天 // 4 6 9 11 -- 30天 // 2月 特殊 int get_days_of_month(int y, int m) { int d = 0; //该年该月天数 switch (m) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: { d = 31; break; // 1 3 5 7 8 10 12 -- 31天 } case 4: case 6: case 9: case 11: { d = 30; break; // 4 6 9 11 -- 30天 } case 2://二月特殊,进行判断 { d = 28; //平年 if ((y%4==0 && y%100!=0) || (y%400==0)) { d += 1; //闰年:29天 } } } return d;//返回天数 } int main() { int y = 0;//年 int m = 0;//月 //多组输入: while (scanf("%d %d", &y, &m) == 2) { int d = get_days_of_month(y, m); //写个函数计算该年该月的日期, //参数为 y 和 m //返回值为 对于日期 printf("%d\n", d); } return 0; }
(自定义函数部分:)
(主函数部分:)