c语言典型问题处理方法小结Word格式.docx
- 文档编号:19812047
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:24
- 大小:22.76KB
c语言典型问题处理方法小结Word格式.docx
《c语言典型问题处理方法小结Word格式.docx》由会员分享,可在线阅读,更多相关《c语言典型问题处理方法小结Word格式.docx(24页珍藏版)》请在冰豆网上搜索。
=1000;
a++)
s=0;
for(i=1;
if(a%i==0)
s+=i;
if(s>
=a)
if(s==a)
%d\t"
a);
注意S=0所放的位置
4、分解质因数
将一个整数写成几个质因数的连乘积,如:
输入36,则程序输出36=2*2*3*3。
解一、
看似简单,但要自己完整地写出来还真不容易!
!
竟然还动用了goto语句,正好可以熟悉一下goto语句的用法!
main()
{
inta,z,i;
clrscr();
scanf("
&
a);
判断下一个数开始有要重新从2
开始了。
所以用loop语句回到for语句,这是for语句仍从2初始化。
从2开始的原则不变,变的是a的值。
loop:
for(z=2;
z<
z++)
判断是否为质数
=z;
if(z%i==0)
判断是否为a的质因数
if(z==i)
if(a%z==0)
k++;
if(k==1)
%d=%d"
a1,z);
用计数器来解决每行输入不同的问题。
*%d"
z);
a/=z;
gotoloop;
}_
解二:
{intn,k=2,isfirst=1;
Inputn="
n);
while(k<
=n)
if(n%k==0)
{if(isfirst){printf("
n,k);
isfirst=0;
elseprintf("
k);
n/=k;
elsek++;
\n"
}
5、从键盘输入两个整数,输出这两个整数的商的小数点后所有1000位整数
主要体会除法运算中小数形成的原因
解决这类题目从本质出发
t*10/b);
a=t*10;
6、编程计算并输出两个带分数的差。
带分数就是由一个整数和一个真分数合成的数,两个带分数(整数、分子、分母均大于0)从键盘输入,且带分数1大于带分数2,输入格式为:
整数1[分子1/分母1],整数2[分子2/分母2]。
差要求化简,整个输出样式为(如差为整数,则无分数部分,如差的整数为0,则无整数部分):
整数1[分子1/分母1]-整数2[分子2/分母2]=整数[分子/分母]
例如:
输入:
12[6/35],8[3/5]
输出:
12[6/35]-8[3/5]=3[4/7]
又如:
6[2/3],4[12/18]
输出:
6[2/3]-4[12/18]=2
9[7/8],9[3/8]
9[7/8]-9[3/8]=[1/2]
intz1,fz1,fm1,fz1x,z2,fz2,fm2,fz2x,z,fz,fm,fzx,i;
%d[%d/%d],%d[%d/%d]"
z1,&
fz1,&
fm1,&
z2,&
fz2,&
fm2);
fz1x=z1*fm1+fz1;
fz2x=z2*fm2+fz2;
fm=fm1*fm2;
fz=fz1x*fm2-fz2x*fm1;
for(i=fm;
=2;
if(fm%i==0&
fz%i==0)
fz/=i;
fm/=i;
z=fz/fm;
fzx=fz%fm;
if(fzx==0)
%d[%d/%d]-%d[%d/%d]=%d\n"
z1,fz1,fm1,z2,fz2,fm2,z);
elseif(z==0)
%d[%d/%d]-%d[%d/%d]=[%d/%d]\n"
z1,fz1,fm1,z2,fz2,fm2,fzx,fm);
%d[%d/%d]-%d[%d/%d]=%d[%d/%d]\n"
z1,fz1,fm1,z2,fz2,fm2,z,fzx,fm);
(2)近似问题
1、书P122习题4-6
注意千万不要忘记添加
#include“math.h”
#include"
math.h"
floatx,j=1,k,s,so;
intn;
%f"
x);
s=x;
so=x+1;
for(n=1;
fabs(s-so)>
1e-6;
n++)
for(k=1;
k<
=n;
k++)
j*=k;
so=s;
if(n%2!
s-=x*x*x/((2*n-1)*j);
s+=x*x*x/((2*n-1)*j);
%f\n"
s);
2、解方程问题:
编程用二分法求解方程x3+4x2-10=0的解。
可以省略此句
floatx,x1=1,x2=4,f1=-1,f;
/*f1=x1*x1*x1+4*x1*x1-10;
*/
while(fabs(x2-x1)>
1e-6)
x=(x1+x2)/2;
f=x*x*x+4*x*x-10;
可以用/*if(f*f1<
0)*/替代
if(f>
0)
x2=x;
x1=x;
x);
(3)枚举法
(4)数列问题
二、数组问题
(1)排序问题
1、从小到大排序
inta[10],i,j,t;
for(i=0;
10;
a[i]);
for(j=0;
j<
10-i;
j++)
if(a[j]>
a[j+1])
t=a[j+1];
a[j+1]=a[j];
a[j]=t;
%d"
a[i]);
注意排序问题:
1、须迅速,熟练,无差错
经常插入在程序中间
2、现使用最大数下沉冒泡法
还可以使用最小数上浮冒泡法
3、j控制前面一个数和后面一个数一一比较。
由于是最大数下沉,i+1后j仍要从0开始。
4、i控制这样的操作一共要做多少次
5、注意ij的控制次数
2、从大到小排序
现使用最大数上浮冒泡法
还可使用最小数下沉冒泡法
for(j=9;
j>
=i;
j--)
a[j-1])
t=a[j-1];
a[j-1]=a[j];
(2)二维数组
三、字符或字符串输入输出问题
(1)字符打印
1、打印*
此类题的溯源为书P1224.11
(1),其他题都是它的拓展
for(i=1;
i++)一共要输出的行数
{
for(j=1;
j++)每行要打印的*数
*"
*
**
***
****
解题要点:
此类题关键在于找到每行要打印的个数和行数的关系。
此题j==i
j==n-i+1
b、
for(j=1;
=n-i;
j++)控制空格数
"
for(k=1;
k++)每行要打印的*数
c、
*
**
***
在出现空格的时候,在找到每行要打印的‘*’个数和行数的关系后,还应找到空格和行数的关系,分不同的参数进行循环。
此题k==ij==n-i
j==i-1
k==n-i+1
d、
for(j=1;
=2*i-1;
e、
*****
*******
=n-1;
=2*(n-1-i)+1;
i++)
2、打印9*9乘法表
注意寻找行与列的规律。
i*j
i代表列
j代表行
for(i=1;
=9;
%-3d"
i*j);
注意输出格式的控制
3、九九乘法表
123456789
24681012141618
369121518212427
…
…
91827364554637281
4、杨晖三角形
1
11
121
1331
14641
15101051
1615201561
(2)字符串打印问题
=7;
a[i][1]=1;
a[i][i]=1;
for(i=3;
for(j=2;
=i-1;
a[i][j]=a[i-1][j-1]+a[i-1][j];
gets(a);
puts(a);
=5;
t=a[5];
for(j=5;
0;
j--)
a[j]=a[j-1];
a[0]=t;
for(k=0;
%c"
a[k]);
1、
ABCDEZ
ZABCDE
EZABCD
DEZABC
CDEZAB
BCDEZA
注意交换过程和把所有的数后移一位的方法
注意点:
1、inti,不要误打成chari
2、a[i]!
=’\0’不要误打成i!
=’\0’
3、逻辑与&
4、单引号内表示字符
5、不加单引号的字符型数据为其ASCII码
2、输入一字符串小写换大写
chara[81];
inti;
gets(a);
a[i]!
='
\0'
;
if(a[i]>
a'
a[i]<
z'
)
a[i]-=32;
puts(a);
3、逆序输出
gets(a);
c=strlen(a);
c/2;
t=a[i];
a[i]=a[c-1-i];
a[c-1-i]=t;
注意此问题的思想方法:
要求一组数的逆序实质就是将其对称换位
for(inti=n;
=0;
i--)蓝色部分可以简写为绿色部分
cout<
<
a[i-1];
4、如输入:
ab1@3,;
z
ab1
1、‘==’
2、while语句的使用处体会
3、全面考虑问题
@3,;
while(a[0]=='
'
a[i]=a[i+1];
if(a[i]=='
a[i+1]!
)
elseif(a[i]=='
a[i+1]=='
for(k=i;
a[k]!
a[k+1]=a[k+2];
i--;
5、输入3个字符串,按从小到大排序输出这3个字符串。
使用一个两维数组贮存多个字符串
chara[81][81];
注意:
如何使用一个两维数组贮存多个字符串
inti,j;
3;
gets(a[i]);
puts(a[i]);
1、scanf("
%d%s"
n,str)其中%s为字符串格式
2、逐个给字符串赋值的方法见书140页。
不可for(i=0;
=’\0’;
3、str[i]=str[i]-'
A'
+10;
4、pow函数
5、任何进制转为十进制的方法
6、输入一个整数n和一个字符串str,计算并输出n进制数str的值。
如输入:
716
则输出:
13(16)7=(13)10
如输入:
163A
58(3A)16=(58)10
stdio.h"
charstr[81];
intn,i,s=0,t;
n,str);
str[i]!
if(str[i]<
Z'
str[i]>
str[i]=str[i]-'
0'
t=strlen(str);
s+=str[t-i-1]*pow(n,i);
编写程序,将一个十进制正整数转换成十六进制数。
注意类比
#include<
stdio.h>
chara[20];
intx,i=0,j;
while(x)
if(x%16>
=10&
x%16<
=15)
a[i]=x%16-10+'
a[i]=x%16+'
x=x/16;
i++;
for(j=i-1;
a[j]);
_
7、输入一个字符串,将其中的缩写形式展开,并输出展开后的该字符串。
所谓展开缩写形式就是将其中由大小写字母或数字构成的形如"
a-f"
、"
U-Z"
3-8"
的形式展开成为"
abcdef"
、"
UVWXYZ"
345678"
,若出现"
f-a"
A-7"
9-5"
等形式则不予理睬。
qwe246e-hA-d$-%4-7A-Dz-xp-R4-0
qwr246efghA-d$-%4567ABCDz-xp-R4-0
chara[81];
inti,c,s,k,t;
gets(a);
if(a[i]=='
-'
)if(a[i-1]<
a[i+1]&
(a[i-1]>
a[i+1]<
||a[i-1]>
9'
))
1、必须在结尾处加上结束标记,才能实现puts语句。
2、加上结束标记后for(i=0;
i++)语句才能实现。
3、逻辑&
与逻辑||的优先级。
4、s=strlen(a)摆放的位置。
s=strlen(a);
c=a[i+1]-a[i-1];
t=i+c-2;
for(k=s-1;
k>
i;
k--)
a[k+c-2]=a[k];
a[s-1+c-2+1]='
for(;
=t;
a[i]=a[i-1]+1;
补充:
循环:
求:
a+aa+aaa+…..的值
#include<
iostream.h>
voidmain()
inta,n,i=1,sn=0,tn=0;
cout<
"
inputaandn"
endl;
cin>
>
a>
n;
while(i<
tn=tn+a;
sn+=tn;
a*=10;
i++;
theansweris"
sn<
两个乒乓球队进行比赛,各出3人。
甲队为A,B,C;
已对是X,Y,Z;
已经抽签决定比赛名单。
有人向队员大厅比赛的名单。
A说他不和X比,C说他不和X,Z比。
请编程序找出3对赛手的名单。
chari,j,k;
for(i='
X'
for(j='
if(i!
=j)
for(k='
if(i!
=k&
j!
=k)
if(i!
k!
cout<
A--"
B--"
C--"
枚举
口袋中有红,黄,蓝,白,黑5种颜色的球若干。
每次从口袋中任意取出3歌,问得到3种不同颜色球的可能取法,输出每种排列的情况。
iomanip.h>
//在C语言中不用加这句
{enumcolor{red,yellow,blue,white,black};
colorpri;
inti,j,k,n=0,loop;
for(i=red;
=black;
for(j=red;
{
for(k=red;
if((k!
=i)&
(k!
=j))
{
n++;
cout<
setw(3)<
//setw是输出格式的限定
for(loop=1;
loop<
=3;
loop++)
{
switch(loop)
{
case1:
pri=color(i);
break;
case2:
pri=color(j);
case3:
pri=color(k);
default:
}
switch(pri)
casered:
setw(8)<
red"
caseyellow:
yellow"
caseblue:
blue"
casewhite:
white"
caseblack:
black"
default:
}
}
cout<
}
cout<
total:
n<
数组:
不用strcat函数,编写程序,将两个字符串串接起来。
iostream>
usingnamespacestd;
inti=0;
chara[20],b[10];
gets(b);
if(a[i]=='
)break;
for(intj=0;
{a[i]=b[j];
if(b[j]=='
e
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 典型 问题 处理 方法 小结
![提示](https://static.bdocx.com/images/bang_tan.gif)