#include <stdio.h> int main() { int a,b,c,d,e; c语言scanf什么意思("%d/%d",&d,&e); b=d; c=e; while

不使用“+”号实现加法操作?
&p&我在网上看到了几种不使用加号实现加法操作的函数,但是两种的输出有一些差异,想问一下是为什么。&br&1.&/p&&br&&div class=&highlight&&&pre&&code class=&language-text&&#include&stdio.h&
int add(int a,int b)
if(a!=0 && b!=0)
return printf(&%*s%*s&,a,& &,b,& &);
else return a==0?b:a;
int main()
int A = 0,B = 0;
printf(&Enter the two numbers to add\n&);
scanf(&%d %d&,&A,&B);
printf(&Required sum is %d&,add(A,B));
&/code&&/pre&&/div&&p&&br&结果是这样的:&br&&/p&&img src=&/990bdca5352e_b.jpg& data-rawheight=&442& data-rawwidth=&677& class=&origin_image zh-lightbox-thumb& width=&677& data-original=&/990bdca5352e_r.jpg&&2.&br&&div class=&highlight&&&pre&&code class=&language-text&&#include&stdio.h&
int add(int a,int b)
if(a!=0 && b!=0)
return printf(&%*c%*c&,a,'\r',b,'\r');
else return a==0?b:a;
int main()
int A = 0,B = 0;
printf(&Enter the two numbers to add\n&);
scanf(&%d %d&,&A,&B);
printf(&Required sum is %d&,add(A,B));
&/code&&/pre&&/div&&br&结果是这样的:&br&&img src=&/8cdeeedc130fdf3345d92_b.jpg& data-rawheight=&442& data-rawwidth=&677& class=&origin_image zh-lightbox-thumb& width=&677& data-original=&/8cdeeedc130fdf3345d92_r.jpg&&可以看到这两段程序只是在add函数的return返回值上有差异,那么为什么最后输出Required时一个在前面空了两格一个没有呢?
我在网上看到了几种不使用加号实现加法操作的函数,但是两种的输出有一些差异,想问一下是为什么。1.#include&stdio.h&
int add(int a,int b)
if(a!=0 && b!=0)
return printf("%*s%*s",a," ",b," ");
else return a==0?b:a;
int main()
int A = 0,B = 0;
printf("Enter the two numbers to add\n");
scanf("%d %d",&A,&B);
printf("Required sum is %d",add(A,B));
结果是这样的:…
按投票排序
这不简单。。。#include &iostream&
using namespace std;
int add(int a, int b)
MOV EAX, a
MOV ECX, b
ADD EAX, ECX
int main()
cout && add(100, 20) && endl;
我觉得这道题目可以拿来面试的时候用,先让我来个正解。如果只是单纯的不要加号,我看了题主题目中的代码其实是简单计数,并且是通过内存计数,如果21亿+21亿... 真得需要一个64位的程序才行。话说这道题有点意思,抖机灵的a-(-b)就没必要讨论了,可以用布尔代数来解决这个问题。(这个解法有实际意义,这阐述了处理器怎么处理加法这个问题)#include &stdio.h&
int add(int a, int b)
int c = a & b, r = a ^
return c == 0 ? r : add(r, c && 1);
int main(int argn, char *argv[])
printf("sum = %d\n", add(-1));
对于补码,不限符号,不限位数。--- 附一下原理给忘记的同学们 ---这个就是基本的加法器(ALU)工作行为。如果是单比特的a + b,那么结果应该是两位,姑且算是:x1, x0。x1 = a &x0 = a ^看看下面的计算表格就知道了:因为考虑结果会产生进位,所以计算完以后需要记得再加一下进位。因为考虑结果会产生进位,所以计算完以后需要记得再加一下进位。
首先回答问题两个实用性不大知识点:printf()返回值是其输出字符的个数printf()中,格式化字符串%*s,其中*对应的数字表示总宽度,其实与%5s没什么区别,不过5是写死的,*是后边的参数提供的//猜一猜%*.*s表示什么%*c与%*s同理于是,这个程序,就是输出a+b个字符(这里是空格还是制表符什么的,反正总宽度固定为a个和b个了),然后数一数输出字符的个数,返回。于是,您可以试试是个什么样壮观的场面。题外话:这种没什么实用性的知识,知道了没什么坏处,但是这种怪异的使用方式,本身就偏离了编程的本质。这样的程序,谁写出来,编译器就应该蓝屏,格式化他电脑,除非他保证不再写这样的破程序。请题主好好写程序,远离这些歪门邪道。
#define HALF_ADDER_S(_N,_M) ((_N)^(_M))
#define HALF_ADDER_C(_N,_M) ((_N)&(_M))
#define FULL_ADDER_S(_A,_B,_C) (HALF_ADDER_S(HALF_ADDER_S(_A,_B),_C))
#define FULL_ADDER_C(_A,_B,_C) (HALF_ADDER_S(HALF_ADDER_C(HALF_ADDER_S(_A,_B),_C),HALF_ADDER_C(_A,_B)))
#define __ADDER_1_S(_A,_B,_C) FULL_ADDER_S(_A,_B,_C)
#define __ADDER_1_C(_A,_B,_C) FULL_ADDER_C(_A,_B,_C)
#define __ADDER_2_S(_A,_B,_C) (__ADDER_1_S(_A&1,_B&1,_C)| \
__ADDER_1_S((_A)&&1,(_B)&&1,__ADDER_1_C(_A&1,_B&1,_C))&&1)
#define __ADDER_2_C(_A,_B,_C) __ADDER_1_C((_A)&&1,(_B)&&1,__ADDER_1_C(_A&1,_B&1,_C))
#define __ADDER_4_S(_A,_B,_C) (__ADDER_2_S(_A&3,_B&3,_C)| \
__ADDER_2_S((_A)&&2,(_B)&&2,__ADDER_2_C(_A&3,_B&3,_C))&&2)
#define __ADDER_4_C(_A,_B,_C) __ADDER_2_C((_A)&&2,(_B)&&2,__ADDER_2_C(_A&3,_B&3,_C))
#define __ADDER_8_S(_A,_B,_C) (__ADDER_4_S(_A&15,_B&15,_C)| \
__ADDER_4_S((_A)&&4,(_B)&&4,__ADDER_4_C(_A&15,_B&15,_C))&&4)
#define __ADDER_8_C(_A,_B,_C) __ADDER_4_C((_A)&&4,(_B)&&4,__ADDER_4_C(_A&15,_B&15,_C))
#define __ADDER_16_S(_A,_B,_C) (__ADDER_8_S(_A&255,_B&255,_C)| \
__ADDER_8_S((_A)&&8,(_B)&&8,__ADDER_8_C(_A&255,_B&255,_C))&&8)
#define __ADDER_16_C(_A,_B,_C) __ADDER_8_C((_A)&&8,(_B)&&8,__ADDER_8_C(_A&255,_B&255,_C))
#define __ADDER_32_S(_A,_B,_C) (__ADDER_16_S(_A&65535,_B&65535,_C)| \
__ADDER_16_S((_A)&&16,(_B)&&16,__ADDER_16_C(_A&65535,_B&65535,_C))&&16)
#define __ADDER_32_C(_A,_B,_C) __ADDER_16_C((_A)&&16,(_B)&&16,__ADDER_16_C(_A&65535,_B&65535,_C))
#define ADD(_A,_B) __ADDER_32_S(_A,_B,0)
不用+号很简单,这里只用了^ & | && &&位运算实现32位加法.int add(int a, int b)
return ADD(a, b);
//add(1,2)
//result: 3
ln( e^a * e^b )不过没法进行精确的整数相加
飘过开个脑洞,C有位运算不是么,直接按位操作写个加法器?直接抖个3位加法器的verilog,答非所问好像,趁着没人飘走。
你的题目是不用+实现加法操作,其实呢,答案很简单int
addWithoutPlusSign(int a, int b) {
return a - (-b);
至于你的内容呢,是属于功力不够又要钻牛角尖你看。。。我的输出咋都有空格呢?而且空得还比你多?。。。所以这应该是编译器或者操作系统的bug,你不要关心了另外能吐槽你是看到哪个傻逼在网上乱写这种程序出来害人的么。。。。
一个不“抖机灵”,又简单易理解的版本:1.先实现整数加一操作:inc(x) { return ~((~x)-1); }
2.再实现整数加非负整数操作,即对a执行b次加一操作,要求b非负:uadd(a, b) {
while (cnt != b) {
cnt = inc(cnt);
a = inc(a);
3.最后实现整数加整数操作:add(a, b) {
if (a & 0 && b & 0) return -uadd(-a, -b);
if (b & 0) return uadd(b, a);
return uadd(a, b);
具体实现如下:#include&stdio.h&
unsigned int inc(unsigned int x) { return ~((~x)-1); }
unsigned int uadd(unsigned int a, unsigned int b)
unsigned int cnt = 0;
while (cnt != b) {
cnt = inc(cnt);
a = inc(a);
int add(int a, int b)
if (a & 0 && b & 0) return -uadd(-a, -b);
if (b & 0) return uadd(b, a);
return uadd(a, b);
int main()
printf("%d %d %d %d\n",
add(13, 183),
add(-13, 183),
add(13, -183),
add(-13, -183));
说的a-(-b)是抖机灵,然后自己继续抖机灵计算机组织结构课作业。没想到还能拿到知乎骗赞Complement把整数变成二进制表示TrueValue把二进制表示转化成10进制表示Addition把二进制表示相加,通过数次调用CLAAdderCLAAdder是先行进位加法器,把固定位数的二进制表示相加。FullAdder是带有进位的加法表//所有的char c都是进位 取0或1,length就是位数喽。具体的参数配置记不清了,返回的String不是只整数的二进制表示。
public static void main(String[] args) {
int a = 2589;
int b = 2;
System.out.println(IntTrueValue(Addition(
Complement(Integer.toString(a), 32),
Complement(Integer.toString(b), 32), '0', 32)));
public static String Complement(String number, int length) {
String result = Integer.toBinaryString(Integer.parseInt(number));
char a[] = new char[length];
char b[] = result.toCharArray();
if (Integer.parseInt(number) &= 0) {
for (int i = 0; i & i++) {
a[i] = '0';
for (int i = 0; i & i++) {
a[i] = '1';
for (int i = 0; i & i++) {
a[i] = b[b.length - length + i];
} catch (Exception e) {
result = "";
for (int i = 0; i & a. i++) {
result = result + a[i];
private static String IntTrueValue(String operand) {
int decimalNum = 0;
char[] binary = operand.toCharArray();
if (binary[0] == '0') {
for (int i = 0; i & binary. i++) {
if (binary[i] == '1') {
decimalNum = (int) (decimalNum + Math.pow(2, binary.length
- i - 1));
decimalNum = (int) -Math.pow(2, binary.length - 1);
for (int i = 1; i & binary. i++) {
if (binary[i] == '1') {
decimalNum = (int) (decimalNum + Math.pow(2, binary.length
- i - 1));
return String.valueOf(decimalNum);
public static String Addition(String operand1, String operand2, char c,
int length) {
char[] e = operand1.toCharArray();
char[] f = operand2.toCharArray();
char[] d = new char[length];
char[] a = new char[length];
char[] b = new char[length];
int g = length - e.
int h = length - f.
for (int i = 0; i & i++) {
if (i & g) {
a[i] = e[0];
a[i] = e[i - g];
if (i & h) {
b[i] = f[0];
b[i] = f[i - h];
boolean x =
if (a[0] == b[0]) {
char z = '0';
for (int i = 0; i & length / 8 + 1; i++) {
String a1 = "";
String b1 = "";
for (int j = 0; j & 8; j++) {
a1 = a1 + a[a.length - 8 * (i + 1) + j];
} catch (Exception n) {
a1 = a1 + a[0];
b1 = b1 + b[b.length - 8 * (1 + i) + j];
} catch (Exception n) {
b1 = b1 + b[0];
String temp = CLAAdder(a1, b1, y, 8);
y = temp.charAt(8);
for (int j = 0; j & 8; j++) {
d[d.length - 8 * (i + 1) + j] = temp.charAt(j);
} catch (Exception n) {
if ((d[0] != a[0] && x)) {
String result = "";
for (int i = 0; i & d. i++) {
result = result + d[i];
public static String CLAAdder(String operand1, String operand2, char c,
int length) {
char[] e = operand1.toCharArray();
char[] f = operand2.toCharArray();
char[] d = new char[length];
char[] a = new char[length];
char[] b = new char[length];
int g = length - e.
int h = length - f.
for (int i = 0; i & i++) {
if (i & g) {
a[i] = e[0];
a[i] = e[i - g];
if (i & h) {
b[i] = f[0];
b[i] = f[i - h];
for (int i = length - 1; i &= 0; i--) {
String temp = FullAdder(a[i], b[i], c);
c = temp.charAt(0);
d[i] = temp.charAt(1);
String result = "";
for (int i = 0; i & d. i++) {
result = result + d[i];
result = result +
public static String FullAdder(char x, char y, char c) {
if (x == '0') {
if (y == '0') {
if (c == '0') {
return "00";
return "01";
if (c == '0') {
return "01";
return "10";
if (y == '0') {
if (c == '0') {
return "01";
return "10";
if (c == '0') {
return "10";
return "11";
(define zero
(lambda (f)
(lambda (x) x)))
(define succ
(lambda (n)
(lambda (f)
(lambda (x)
(f ((n f) x))))))
(define add
(lambda (n1 n2)
((n1 succ) n2)))
已有帐号?
无法登录?
社交帐号登录C语言作业答案_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C语言作业答案
上传于||文档简介
&&C​语​言​上​机​代​码
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
下载文档到电脑,查找使用更方便
还剩18页未读,继续阅读
你可能喜欢c语言练习,请解答!_百度知道
c语言练习,请解答!
c=-3 .hiphotos,*(a+1)); if(a&void main() { int n= -5 ,a);*’; i++,sum=0;}printf( &quot,x),*p2.读程序写出程序执行结果#include &lt,sum);10.读程序写出程序执行结果#include &lt;p1=&3;%3d& while(++n)printf(&quot.读程序写出程序执行结果#include & }&2, x1;%d&quot.h&gt,*a,%d\n&quot; p1=p1+1;&void main(){ int a=12;}&.h&gt, n+=2 ,*p=x ,*p=;void swap(int b[]){ int *p,*p1;if(a&gt,a[1]);while(*p){ if(i%2==0) *p=&#39.读程序写出程序执行结果#include &d)x=2;}&;%d\n&stdio;else x=0;void main(){ char x[]=&7,k=3;x1=x,c=5;5;&a+=i://f;5;, --n)) ;p++.读程序写出程序执行结果#include &lt.jpg" esrc="b) if(b&a=S(k+m);x/=10.h&gt.h&0) c=0,a=0;sum+=r.h&gt, (++n ,b=3;while(x&gt. int i=0;else if(a&lt.p++;p2=&amp,c), b=5,%d\n&b[1];}&}&20 ){ for(.读程序写出程序执行结果#include &lt,d=4;;.读程序写出程序执行结果#include &lt,a);*’;d) x=1; int i=0,x1;} puts(x); i+=11;printf(“%d\n”.com/zhidao/wh%3D450%2C600/sign=de9c6e634836acaf59b59ef849e9a126/fec08fa444e3efd5aee3d6d55fbda19;9;<img class="ikqb_img" src="#define S(x) x*xvoid main(){ }&0){ r=x%10;void main(){ int n=2;printf(&void main(){ int a=1;p=p1.baidu
#include & scanf(& printf(&quot,j、
for(j=1,s);
&#47,y、-210;.h&=i、75;
for(i=1.h&);
y=x*x.h&;stdio、#include &stdio.0/i++) {
a=a*i;&#92;10) y=x/int main(){; if(x&gt、
for(k=1; &j++)
printf(&=1) y=3*x-1;a 是分母 for(i=1,&x)、-3
}}编程2;k&lt,94;5;}编程3;=5、
42、#include &
printf(&=5-i;%lf&
t=-t;i&=3,9
5;int main(){%lf&int main(){ double s=0;j&lt、328; }
printf(&quot,k;n&quot、*2*4*6*8*7,t=1;a,y)、26587
s=s+t*1.0;/ else
if(x&);k++)
printf(&quot,a=1; %lf&)1
其他类似问题
为您推荐:
您可能关注的推广
c语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁以下试题来自:
单项选择题请读程序:
#include<stdio.h>
{float b,c;
scanf("%2d%3t%4f",&a,&b,&c);
printf("\na=%d,b=%f,c=%f\n",a,b,c);
若运行时从键盘上输入(图片),则上面程序的输出结果是______。A.a=98,b=765,c=4321B.a=10,b=432,c=8765C.a=98,b=765.000000,c=D.a=98,b=765.0,c=4321.0
为您推荐的考试题库
你可能感兴趣的试题
1A.x=4,y=4,a=1B.x=5,y=5,a=1C.x=5,y=4,a=3D.x=5,y=4,a=12A.a
dD.abcdef3A.-1B.0C.1D.不确定的值4A.k=11,k=12,k=11B.k=11,k=13,k=13C.k=11,k=013,k=0xbD.k=11,k=13,k=B5A.C语言比其他语言高级B.C语言可以不用编译就能被计算机识别执行C.C语言以接近英语国家的自然语言和数学语言作为语言的表达形式D.C语言出现的最晚,具有其他语言的―切优点
热门相关试卷
最新相关试卷刚学C语言 请问哪里出错了? #include &stdio.h& int main () {int a,b,c,d;_百度知道
刚学C语言 请问哪里出错了? #include &stdio.h& int main () {int a,b,c,d;
printf订触斥吠俪杜筹森船缉(&输入长方形的长和宽&#92;n&);scanf(&%d,%d&,&a,&b);c=(a+b)*2;d=a*b;printf(&周长:%d&#92;n面积:%d&#92;n&,&c,&d);return 0;}
提问者采纳
printf(&周长:%d&#92;n面积:%d&#92;n&,&c,&d订触斥吠俪杜筹森船缉);
printf(&周长:%d&#92;n面积:%d&#92;n&,c,d)在scanf中才用&c,&d
提问者评价
其他类似问题
为您推荐:
其他2条回答
#include &stdio.h& in订触斥吠俪杜筹森船缉t main () { int a,b,c,d; printf(&输入长方形的长和宽&#92;n&); scanf(&%d,%d&,&a,&b); c=(a+b)*2; d=a*b; printf(&周长:%d&#92;n面积:%d&#92;n&,c,d); return 0;}printf中c和d前面的&去掉
printf中c和d前面的&去掉
您可能关注的推广
include的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁}

我要回帖

更多关于 c语言scanf什么意思 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信