整数乘除法练习器c语言程序

C语言中的整数除法和求余运算_honvan_新浪博客
C语言中的整数除法和求余运算
当对两个整数操作数应用“除法”运算符时,会出现有趣的情况。如果书写一个如下所示的表达式:
按照C语言的规则,该运算产生的结果必然为整数,因为它的两个操作数都是int类型。C语言在计算这个表达式时,用4除9,丢弃余数。因此,结果就是2,而不是2.25。
如果要得到9除以4在数学计算中的正确值,至少要求有一个操作数为浮点类型数值。例如,以下三个表达式:
9.0&/&4.0&
的结果都是2.25。只有当两个操作数均为int类型时,小数部分才被丢弃。丢弃小数部分的操作称为截取。
C语言中还有一个以百分号“%”表示的算术运算符,用于求余。%运算符返回的是第一个操作数除以第二个操作数的余数,它用在两个操作数都是整数类型的情况下。例如:
的值为1,因为9除以4商是2,余数是1。下边是%运算符的其他一些示例:
0&%4 = 0&&19&%4 = 3
1&%4 = 1&&20&%4 = 0
4&%4 = 0&&2001&%4 = 1&
“/”和“%”在编程应用中有广泛的作用。例如,%运算符用于测试一个数能否被另一个数整除。例如,为了测试整数n能否被3整除,可以检查表达式n%3的值是否为0。
但是,当“/”和“%”的操作数中有一个为负数或者两个都是负数时,使用它们必须十分小心,结果会因机器而异。在大部分机器中,截取将是朝着0的方向进行的,但是在ANSI标准中并没有进行规定。通常,编程经验告诉我们,对负值避免使用这两个运算符。
博客等级:
博客积分:0
博客访问:6,995
关注人气:0
荣誉徽章:他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)c语言程序基础练习题500道(附答案)_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
c语言程序基础练习题500道(附答案)
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩80页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢用C语言怎样实现计算器加减乘除功能?_百度知道
用C语言怎样实现计算器加减乘除功能?
我有更好的答案
#include&stdio.h&void&main(){&&&float&a,b;&&&char&&d;&&&printf(&请输入两个数a,b:&);&&&scanf(&%f,%f&&a,&b);&&&printf(&请输入运算符号d&);&&&scanf(&%c&,d);&&&switch(d)&&&{&&&&case'+':printf(&%f\n&,a+b);&&&&case'-':printf(&%f\n&,a-b);&&&&case'*':printf(&%f\n&,a*b);&&&&case'/':printf(&%f\n&,a/b);&&&&default:printf(&计算出错\n&);&&&&}}
采纳率:68%
printf(&);
printf(&第一个整数:&); scanf(&:
printf(&溢出\y);
case '
printf(&n&);
printf(&%d/%d-%d=%d\n&quot,y;,x,y,x%y);n&;/'n&);
} scanf(&quot,x+y);
case 'n&;
break,%%),x,x,x;,&y); printf(&运算符 (+;n&;%',&x); printf(&第二个整数:&); scanf(&quot,x*y);
case '%d&-&#39,y,—;输入错误!\%d=%d\ case '*',*; getchar(); op=getchar(); switch(op) { case '+';:
printf(&溢出&#92:&n&);
printf(&%d%%%d=%d\n&quot,/:
printf(&%d*%d=%d&#92:
printf(&%d+%d=%d\,x,y,x-y),x&#47#include&stdio.h&%d\n&quot,y;void main(){ int x,y; char op
本回答被提问者和网友采纳
j=0;||sign[i]==&#39,number[i+1];&nbsp.h& #include &string& & && &&{j++; &) return a-b; && if(c=='&int number[10]={0}; & int& &&&&&&&&& } && &cout&&number[i]&) return a/b; &&&&nbsp.堆栈#include &-'&& &} && & &for(i=0;i& &&& && &for(i=0;i&&&/'string&j,k=0; if(c=='& &char sign[10]; &+' &&& &&&number[i];number[j]=number[j]*10+str[i]-48; &2;k,m;j++;} & &cout&&sign[i]&& &&& &void main() { && for(m=i;m&&i&k;i++) { && }&&nbsp,sign[i]); & &*'& if(sign[i]=='i++) && & {sign[m]=sign[m+1]; count(int a,int b,char c) && { &) {number[i]=count(number[i],number[i+1],sign[i]); cout&&number[i]; &} & #include && &&& int strlong=strlen(str);number[m+1]=number[m+2];& && &k++; &sign[k]=str[i];& &&&&& && && &&& &&/'& && && if(c=='+') return a+b;union &i++) && && k--;i--;} &} &for (i=0;&i++) { if(sign[i]=='k;&||sign[i]=='m&k-i;m++) & &&& &i--;-'{& &&&str[i]&='9') && & & for(m=i; else &&&k-i;&lt我学c++时写的#include& &cout&& & &for( i=0;if(str[i]&='0'&& &&& //cout& & cout&& &for(i=0;i&&i++) && & &char str[100]; &iostream&&
//自定义类型 用于存储 两种数据类型 class& newType { public: && false 为 c && && &//true 为f& &cin&list&&i&3;i++) {cout&&number[i]; } cout&j&&k; &m++) & {sign[m]=sign[m+1];number[m+1]=number[m+2];} & k--;&& &{ && & && & && &} }; &//将字符串转换为 数字数组和字符数组& (通用提取字符串中数字) bool couvert(string str,vector&float&& &numbers,vector&char& &chars,vector&newType& &all)//这里要使用引用 { &&& int len=str.length(); && &bool flag= && &int pos=0; &&& &for(int i=0;i&i++) && &{ && &&& &if(str[i]&='0'&&str[i]&='9'||str[i]=='.') && &&& &{ &&& &&& &&& &if (flag) && &&& &&& &{ && &&& &&& &&& &string substr=str.substr(i,len) ; && &&& &&& &&& &float f=atof(substr.data()); && &&& &&& &&& &numbers.push_back(f); && &&& &&& &&& &//添加f到all向量中 && &&& &&& &&& &newT && &&& &&& &&& &n.data.f=f; && &&& &&& &&& &n.flag= && &&& &&& &&& &all.push_back(n); && &&& &&& &&& & && &&& &&& &} && &&& &&& &flag= && &&& &} && &&& &else && &&& &{ && &&& &&& &//chars.push_back(str[i]); && &&& &&& &chars.push_back(str[i]); && &&& &&& &newT && &&& &&& &n.data.c=str[i]; && &&& &&& &n.flag= && &&& &&& &all.push_back(n); && &&& &&& &flag= &&& &&& &} && &}//for && & } &//计算没有括号的表达式 bool& calculate(vector&float& numbers, && &&&&&&&&&&&& vector&char&&& chars,float &value) { && &//计算四者表达式& 无括号类型& 1+2*3+4 && &int ii=0; &&& //先计算乘除 && &while(ii&chars.size()) && &&& &//注意while(ii&(chars.size()-2)) 和while(ii&chars.size()-2) 区别 && &{ && &&& &switch(chars[ii]) && &&& &{ && &&& &case '*': && &&& &&& &numbers[ii]=numbers[ii]*numbers[ii+1]; && &&& &&& &numbers.erase(numbers.begin()+ii+1);& //移除number[ii]后面的数 && &&& &&& &chars.erase(chars.begin()+ii);&&&&&&& //移除chars[ii] && &&& &&& &ii--; && &&& &&& & && &&& &case '/': && &&& &&& &numbers[ii]=numbers[ii]/numbers[ii+1]; && &&& &&& &numbers.erase(numbers.begin()+ii+1); && &&& &&& &chars.erase(chars.begin()+ii); && &&& &&& &ii--; && &&& &&& & && &&& &} && &&& &ii++; && &} &&& &//只剩下加减&& 计算加减 && &ii=0; && &while(ii&chars.size()) && &&& &//注意while(ii&(chars.size()-2)) 和while(ii&chars.size()-2) 区别 && &{ && &&& &switch(chars[ii]) && &&& &{ && &&& &case '+': && &&& &//&& &cout&&&+::&&&numbers[ii]&&chars[ii]&&numbers[ii+1]&& && &&& &&& &numbers[ii]=numbers[ii]+numbers[ii+1]; && &&& &&& &numbers.erase(numbers.begin()+ii+1);& //移除number[ii]后面的数 && &&& &&& &chars.erase(chars.begin()+ii);&&&&&&& //移除chars[ii] && &&& &&& & && &&& &case '-': && &&& &//&& &cout&&&-::&&&numbers[ii]&&chars[ii]&&numbers[ii+1]&& && &&& &&& &numbers[ii]=numbers[ii]-numbers[ii+1]; && &&& &&& &numbers.erase(numbers.begin()+ii+1); && &&& &&& &chars.erase(chars.begin()+ii); && &&& &&& & && &&& &} && &&& &// ii++;&& & && &} &&& &&& &value=numbers[0];//得到值 && & } &//计算带括号的表达式 &int calculate1(&& &vector&newType& all,float &value) {& &&& &int pos=0; && &vector&float& && &vector&char&&& && &float va=0; && for(int i=0;i&all.size();i++) & { &&& if (all[i].flag)//判断是数字还是字符 &&& { && &&& &cout&&&数字&&&i&&&:&&&all[i].data.f&& &&& } && &else && &{ &&&&&&& cout&&&字符&&&i&&&:&&&all[i].data.c&& &&&&&& if (all[i].data.c==')') //如果是右括号& 将之前的()之间的括号内容 &&&&&& {&&&&&&&&&&&&&&&&&&&&&& //用calculate计算 并替换 && &&& &&& &&&&&&&&& for (int j=pos+1;j&i;j++) //参数转换 &&&&&&&& {&& &&& &&& &&& & if (all[j].flag) && &&& &&& & { && &&& &&& &&& & numbers.push_back(all[j].data.f); && &&& &&& & } else{ && &&& &&& &&& & chars.push_back(all[j].data.c); && &&& &&& & } &&&&&&&& } &&& &&& &&& calculate(numbers,chars,va); && &&& &&& numbers.clear(); && &&& &&& chars.clear(); &&& &&& &&& newT && &&& &&& ne.data.f= &&& &&& &&& all.erase(all.begin()+pos,all.begin()+i+1); && &&& &&& all.insert(all.begin()+pos,ne); &&& &&& &&& i=pos+1; &&&&&&& } && &&& else if (all[i].data.c=='(') &&&&&& { &&&&&&&& pos=i;//记录此时左括号的位置 &&&&&& } && &}//else & }//for & for(int kk=0;kk&all.size();kk++) & { && && if (all[kk].flag) && && { && &&& && numbers.push_back(all[kk].data.f); && && } else{ && &&& && chars.push_back(all[kk].data.c); && &&& &&& & } & } && for( i=0;i&all.size();i++) & { &&& && if (all[i].flag) && && { &&& &&& && cout&&all[i].data.f&&& &; && && } else && && { && &&& && cout&&all[i].data.c&&& &; && && } && && &&& &} & calculate(numbers,chars,value); &return 1; } &&&void main() {&& &&& &// &&& string str=&10+(2*3+8)+(10*2)&; && &vector&float&& && &vector&char& && &vector&newType& && &couvert(str, numbers, chars,all); &&& for(int i=0;i&all.size();i++) && &{ &&& &&& &if (all[i].flag) && &&& &{ &&& &&& &&& &cout&&all[i].data.f&&& &; && &&& &} else && &&& &{ && &&& &&& &cout&&all[i].data.c&&& &; && &&& &} && & &&& &} && &float value,value1; //&& &calculate(numbers,chars,value); && &calculate1(all,value1); && &cout&&value1; &&& &&}&&& 这是我翻家底找到的 .;&&} } for( i=0;i&& #include&cstdlib&&&//#include &string& & &#include&vector& #include&&k;&) && && if(c=='*') return a*b; {number[i]=count(number[i]
我有个VC++的 任意进制转换----栈的链接存储/* 栈的链接存储----任意进制转换*/#include &iostream.h&#include &stdlib.h&typedef int ElemTstruct SNode { ElemT SNode*};void InitStack(SNode*& HS){ HS = NULL;}// 压栈 插入元素void Push(SNode*& HS, const ElemType& item) { SNode* newptr = new SN
/* 获取动态结点*/ newptr-&data =
/*给新分配的结点赋值*/ newptr-&next = HS;
/* 向栈顶压入新结点*/ HS =}//从栈中删除一个元素并返回该元素ElemType Pop(SNode*& HS) { if(HS==NULL)
cerr&&&无法从空栈中删除元素,退出运行 !&&&
exit(1); } SNode* p = HS; HS = HS-& ElemType temp = p-&
}//读取栈顶元素ElemType Peek(SNode* HS){ if(HS==NULL)
cerr&&&无法从空链栈中读取元素,退出运行 !&&&
exit(1); } return HS-&}bool EmptyStack(SNode* HS){ return HS == NULL;}void ClearStack(SNode*& HS){ SNode *mp, * mp = HS; while(mp!=NULL) {
mp = } HS = NULL;}void Transform(long number, int r){ SNode *a; InitStack(a); while(number!=0) {
int k = number%r;
Push(a,k);
number/r; } while(!EmptyStack(a)) {
if(r!=16) cout&&Pop(a);
int x = Pop(a);
case 10: cout&&'A';
case 11: cout&&'B';
case 12: cout&&'C';
case 13: cout&&'D';
case 14: cout&&'E';
case 15: cout&&'F';
} } cout&&}void main() {
cout&&&请输入一个长整数(最长十位有效数字): &;
cin&&n; cout&&&长整数 &&&n&&& 的十六进制数为:
&; Transform(n,16);
cout&&&长整数 &&&n&&& 的十进制数为:
&; Transform(n,10);
cout&&&长整数 &&&n&&& 的八进制数为:
&; Transform(n,8);
cout&&&长整数 &&&n&&& 的六进制数为:
&; Transform(n,6);
cout&&&长整数 &&&n&&& 的四进制数为:
&; Transform(n,4);
cout&&&长整数 &&&n&&& 的二进制数为:
&; Transform(n,2); }
其他1条回答
为您推荐:
其他类似问题
c语言的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

 

随机推荐