16位加法器和字符数组调试时的一些问题
2017-11-06 11:24
330 查看
要求:通过连接16个1位加法器而形成1个16位的加法器,我们会要求用户输入两个16进制数来验证加法器的功能。
1,我以前的答案:
思想:把输入的字符型的数组转化为整数型的数组,然后对这两个个整数型的数组进行if判定,如果相加结果为0,1,2,3会怎样。
2,标准答案:
思想:把输入的字符型数组不转化成整数型数组,用数字逻辑的方法进行运算而不是我的那个if判断,注意其子函数里面调用子函数的方法和子函数调用子函数是指针的妙用。
3,关于调试时数组的显示。
a,首先,这子函数中调用数组的方式和它调试时的显示
执行后,
总结:数组调试时的显示方式是:地址+数组储存的内容。
b,在子函数内部数组的调用和使用方式。
执行前:
执行后:
总结:关于数组的这个调用方式也是正确的:
1,我以前的答案:
#include<stdio.h> void readinput(char str_1[], char str_2[], int num_1[], int num_2[]); void operation(int num_1[],int num_2[],int outpr[]); void main(void) { char str_1[17]; char str_2[17]; int num_1[16]; int num_2[16]; int outpr[16]; gets_s(str_1); gets_s(str_2); readinput(str_1,str_2,num_1,num_2); operation(num_1, num_2,outpr); for (int i = 0; i <= 15; i++) { printf("%d",outpr[i]); } } void readinput(char str_1[], char str_2[], int num_1[], int num_2[]) { for (int i = 15; i >= 0; i--) { num_1[i] = str_1[i] - '0'; num_2[i] = str_2[i] - '0'; } } void operation(int num_1[],int num_2[],int outpr[]) { int carry = 0, standard,real_num; for (int i = 15; i >= 0; i--) { real_num = num_1[i] + num_2[i] + carry; if (real_num == 0 || real_num == 1) { standard = real_num; outpr[i] = standard; carry = 0; } else if (real_num == 2) { standard = 0; outpr[i] = standard; carry = 1; } else { standard = 1; outpr[i] = standard; carry = 1; } } }
思想:把输入的字符型的数组转化为整数型的数组,然后对这两个个整数型的数组进行if判定,如果相加结果为0,1,2,3会怎样。
2,标准答案:
#include<stdio.h> void adder1bit(char x, char y, char carryIn, char *sum, char *carryOut); void adder16bit(char x[], char y[], char answer[]); void readinput(char in[]); void main() { int i; char dummy; char inputX[16]; char inputY[16]; char answer[17]; printf("Enter 2 16-bit binary numbers:\n"); readinput(inputX); scanf("%c", &dummy); readinput(inputY); adder16bit(inputX,inputY,answer); printf("The sum is:"); for (i = 16; i >= 0; i--) { printf("%d",answer[i]); } printf("\n"); } void readinput(char in[]) { int i; char bit; for (i = 15; i >= 0; i--) { scanf("%c",&bit); in[i] = bit - '0'; } } void adder16bit(char x[], char y[], char answer[]) { int i; char cin, cout, sum; cin = 0; for (i = 0; i < 16; i++) { //这里将子函数内的局部参数也取出指针赋到子函数里面。 adder1bit(x[i], y[i], cin, &sum, &cout); cin = cout; answer[i] = sum; } answer[16] = cout; } void adder1bit(char x, char y, char carryIn, char *sum, char *carryOut) { *sum = (x ^ y) ^ carryIn; *carryOut = x & y | carryIn & (x ^ y); }
思想:把输入的字符型数组不转化成整数型数组,用数字逻辑的方法进行运算而不是我的那个if判断,注意其子函数里面调用子函数的方法和子函数调用子函数是指针的妙用。
3,关于调试时数组的显示。
a,首先,这子函数中调用数组的方式和它调试时的显示
执行后,
总结:数组调试时的显示方式是:地址+数组储存的内容。
b,在子函数内部数组的调用和使用方式。
执行前:
执行后:
总结:关于数组的这个调用方式也是正确的:
相关文章推荐
- 使用qsort对二维字符数组排序疑难问题调试及解决过程
- 与内存对齐,字符数组求sizeof相关的一些问题
- 在字符数组中容易忽视的一些小的问题
- 关于字符串与字符数组的一些小问题
- otl中遇到的一些字符数组长度问题
- 从一个字符数组中读出相应的整数、实数(有点问题,待调试,求大神帮忙)
- split()方法的一些问题(转义字符、截取数组长度)
- linux环境下无阻塞键盘输入以及MAP容器中value为数组的一些问题
- 数组参数传递中的一些问题?
- 转载-PHP foreach数组循环的一些问题
- 浅谈js中字符和数组一些基本算法题
- 字符数组的输出问题
- C++ 在函数中声明string和字符数组的一些特性
- cout<<字符数组 getline(流,string,delimit character) 遇到的问题
- 关于动态存储分配函数的调用,在已经过排序的数组中查找及删除内容的操作,余数的分析,删除字符数组中的空格,对链表的逆置,在源字符串中查找子字符串的个数,函数指针以及函数的调用,循环赋值带来的问题以及插入
- 字符数组初始化需要注意的问题
- 终于搞清楚了C#二进制的一些关键操作了,解决了微软面试题,求数组中两两之差绝对值最小的值O(N)最少内存限制的问题!
- 关于数组和指针的一些基本问题
- 对字符数组,字符指针,字符串常量以及其sizeof的一些总结
- 关于长字符数组strcpy到短字符数组发生的问题