




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言编程练习题C语言编程练习题C语言编程练习题C语言编程练习题编制仅供参考审核批准生效日期地址:电话:传真:邮编:本练习假设:整数int为4字节,运行环境为VC一、整数位数有关的问题1、输入一个整数,判断它是几位数#include<>voidmain(){ inta,n=0; scanf("%d",&a);答案在后面思路:如何数出位数 while答案在后面思路:如何数出位数 { a/=10; n++; } printf("%d\n",n);}扩展:编制一个函数,参数为整数,返回该整数的位数。答案在后面intdigits(inta)答案在后面{ intn=0; while(a>0) { a/=10; n++; } returnn;}2、编制一函数,得到一个整数的某一位的数字。intdigit(inta,intn)/*返回:整数a的倒数第n位数,n从1开始*/{答案在后面思路:如何将倒数第n位用一个表达式取出不能!转变成怎样后就能 while(答案在后面思路:如何将倒数第n位用一个表达式取出不能!转变成怎样后就能 { a/=10; n--; } returna%10;}测试函数的例子:#include<>intdigit(inta,intn);voidmain(){ inta,n,d; scanf("%d%d",&a,&n); d=digit(a,n); printf("%d\n",d);}二、关于整数的几个题目1、输入两个正整数m和n,求其最大公约数和最小公倍数。算法分析:采用辗转相除法,先求出最大公约数d,然后求最小公倍数c=m*n/d。辗转相除法:余数=大数%小数,然后将小数和余数再作辗转相除。#include<>voidmain(){ intm,n,a,b,d,c; scanf("%d,%d",&m,&n); if(m>n){a=m;b=n;}/*保证a>b*/ else{a=n;b=m;} while((d=a%b)>0)/*每次循环都测试余数是否为0*/ { a=b;b=d; } d=b;/*得到最大公约数*/ c=m*n/d;/*得到最小公倍数*/ printf("最大公约数是%d\n最小公倍数是%d\n",d,c);}拓展:编出求最大公约数的函数。intmcd(inta,intb){ intd,t; if(a<b){t=a;a=b;b=t;}/*保证a>b*/ while((d=a%b)>0)/*每次循环都测试余数是否为0*/ { a=b;b=d; } returnb;/*得到最大公约数*/}测试上述函数:#include<>intmcd(inta,intb);voidmain(){ intm,n,d,c; scanf("%d,%d",&m,&n); d=mcd(m,n); c=m*n/d; printf("最大公约数是%d\n最小公倍数是%d\n",d,c);}2、求出所有的水仙花数。水仙花数是一个三位数,其各位数字的立方和等于该数。例如153=1^3+5^3+3^3。#include<>voidmain(){ ints,a,b,c; for(s=100;s<=999;s++) { a=s%10;b=s/10%10;c=s/100;/*分解出每一位*/ if(a*a*a+b*b*b+c*c*c==s) printf("%d\n",s); }}按位循环:#include<>voidmain(){ ints,a,b,c; for(a=0;a<=9;a++) for(b=0;b<=9;b++) for(c=1;c<=9;c++) { s=c*100+b*10+a; if(a*a*a+b*b*b+c*c*c==s) printf("%d\n",s); }}类似地:可以求出100以内的勾股数,如3^2+4^2=5^2。三、关于数组的几个题目求2100的精确值。参考:#include<>voidmain(){ doubles=; inti; for(i=1;i<=100;i++) s*=2; printf("%f\n",s);}运行结果:后面十多位全是0,因此是近似值。如何求精确值呢(关键是如何保存每一位)#include<>voidmain(){答案在后面 ints[100]={1};/*初始化第一位为0,其它每一位为0*/答案在后面 inti,j,m=0;/*m指示最高位为s[m]*/ for(i=1;i<=100;i++) { for(j=0;j<=m;j++) s[j]*=2; for(j=0;j<=m;j++)/*检查进位*/ if(s[j]>9) /*第j位需要进位*/ { s[j+1]+=s[j]/10; s[j]%=10; if(j+1>m)m=j+1;/*最高位进位*/ } } printf("2^100="); for(j=m;j>=0;j--) printf("%d",s[j]); printf("\n");}运行结果:2^100=22940扩展问题:如何求出100!的精确值缺陷:如果乘以一个很大的数如20亿,会使高一位与进位相加后溢出。四、大数运算用整数数组存放每一位,最高位用-1存储,如12存为:a[0]=2,a[1]=1,a[2]=-1。1、输入和存储大数。编制一函数,将合法数字组成的字符串表示的大数按位拆分存储到整数数组中,最高位前存储-1。/*转换大数:将字符串c中的数字保存到整数数组a中,a最高位添加-1标志*/voidLargeSet(char*c,int*a){ char*p; for(p=c;*p!='\0';p++);/*找到末尾作为最低位*/ p--; for(;p>=c;p--,a++) *a=*p-'0'; *a=-1;}2、输出和获得数字串。编制一函数,将大数转换成字符串。/*转换大数:将大数a转换成字符串存入字符数组c中*/voidLargeGet(char*c,int*a){ int*p; for(p=a;*p>=0;p++); p--; for(;p>=a;c++,p--) *c=*p+'0'; *c='\0';}3、大数相加。编制一函数,实现两个大数相加。voidLargeAdd(int*a,int*b,int*s)/*大数相加:s=a+b*/{ intka=0,kb=0; for(*s=0;ka==0||kb==0;s++) { if(*a<0)ka=1; if(*b<0)kb=1; if(ka==0){*s+=*a;a++;} if(kb==0){*s+=*b;b++;} if(*s>9){*(s+1)=1;*s%=10;} else*(s+1)=0; } if(*s>0)*(s+1)=-1; elseif(*(s-1)>0)*s=-1; else*(s-1)=-1;}验证上面的函数:#include<>voidLargeSet(char*a,int*s);voidLargeGet(char*a,int*s);voidLargeAdd(int*a,int*b,int*s);voidmain(){ inta[100],b[100],s[100]; charc[100]; scanf("%s",c); LargeSet(c,a); scanf("
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年装配式建筑部品部件标准化设计在装配式建筑中的装配式建筑应用前景报告
- 电商社群营销试题及答案
- 新能源汽车电池技术的前沿探索试题及答案
- 物理多维思考题及答案2025年
- 新能源汽车技术的专利分析试题及答案
- 幼儿园简单推理的数学试题及答案
- 安全工程师知识更新与学习试题及答案
- 幼儿园数字体验学习试题及答案
- 学会透视2025年注册土木工程师考试的试题及答案
- 山东高考纯文试题及答案
- 大病历模板-住院病历
- GB/T 602-2002化学试剂杂质测定用标准溶液的制备
- GB/T 18657.1-2002远动设备及系统第5部分:传输规约第1篇:传输帧格式
- GB/T 15608-2006中国颜色体系
- GB/T 14315-2008电力电缆导体用压接型铜、铝接线端子和连接管
- 中考语文二轮专题复习:散文和小说阅读
- 《民法》全册精讲课件
- 【人卫九版内分泌科】第十一章-甲状腺功能减退症课件
- 护理人员业务技术档案 模板
- 金融监管学-金融监管学课件
- 语文一年级上册:拼音9《y-w》ppt教学课件
评论
0/150
提交评论