1、四则运算
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <time.h> #define eps 1e-6 int main() { srand(time(NULL)); int a,b; char op[5] = "+-*/"; int index; /* 计算 */ printf("除法精确到小数点后2位,四舍五入! "); while(1) { //随机操作数 a = rand()%101; b = rand()%100+1; printf("请选择(输入数字):1.加法 2.减法 3.乘法 4.除法 5.随机 6.退出 " ); // 1.随机、退出、+-*/ scanf("%d",&index); if(5==index) index = rand()%4; else if(6==index) exit(0); else index--; // 2.题目、答案输入 printf("%d%c%d=",a,op[index],b); double answer, result; scanf("%lf",&answer); // 3.判题 switch(op[index]){ case '+': result = a+b; break; case '-': result = a-b; break; case '*': result = a*b; break; case '/': if(b==0)printf("除数不可以为零 ");//b已经处理过了 else { int r = ((double)a/b+0.005)*100;//4舍5入保留2位 result = (double)r/100; } break; } if(fabs(result - answer)<=eps) printf("对 "); else printf("错 "); printf("正确答案:%.2f ", result); } return 0; }
2、10进制转16进制并输出
/* 10进制转为16进制,限定8位16进制 */ #include <stdio.h> int main() { long long x = 0xffffffff; /* long long 类型 */ const char* hexChar = "0123456789ABCDEF"; char out[] = "00000000"; /* 8位字符 */ int index = 7; /* 最高位 */ while(x) { out[index--] = hexChar[x%16]; x /=16; } printf("%s ",out); return 0; }
3、小端,栈区,基本数据类型变量内存分配,联合体及联合体的内存分配,内存对齐
/* 结构体成员为基本数据类型,按声明次序,从低地址向高地址分配内存, union共用一个存储单元*/ #include <stdio.h> int main() { int x = 0x5ff; char y; /* 在栈区,基本数据类型变量 x,y 从高地址向低地址分配内存, 小端,变量的地址始于低地址, 若x的地址为0022ff38,y的地址就是0022ff37 x内存空间为0022ff38~0022ff3c */ printf("&x = %p,&y = %p ",&x,&y); char *p = (char*)&x; printf("%x ",*(++p)); /* x地址上移一个字节, 打印5 */ union { int i[2]; /* 数组元素从低地址向高地址分配内存 */ double d; char c[9]; }r, *s = &r; printf("%d ", sizeof(r)); //8*2=16个字节 内存对齐 printf("%p,%p ",&r.i[0],&r.i[1]);/* 从低地址向高地址 */ printf("%p,%p ", &r.d,&r.c[0]); /* 联合体成员地址相同 */ s->i[0] = 0x39; /* 十进制57 */ s->i[1] = 0x38; /* s->i[0] 与 s->c[0] 共用内存 */ printf("%c ",s->c[0]); /* 字符'9'的ascii码值57 */ return 0; }