C语言例题第三章.docx
《C语言例题第三章.docx》由会员分享,可在线阅读,更多相关《C语言例题第三章.docx(29页珍藏版)》请在冰豆网上搜索。
C语言例题第三章
第三章
【例3-3】输出单个字符。
#include
main()
{chara='B',b='O',c='Y';
putchar(a);putchar(b);putchar(c);putchar('\n');
}
【例3-4】用printf函数输出数据。
main()
{inta=25;
floatb=123.4567898;
doublec=34567890.1234567;
chard='k';
printf("a=%d,%5d,%o,%x,%u\n",a,a,a,a,a);
printf("b=%f,%lf,%10.4f,%5.4f,%e,%10.2e\n",b,b,b,b,b,b);
printf("c=%f,%e,%g\n",c,c,c);
printf("d=%c,%8c,%i\n",d,d,d);
printf("string=%s,%8s,%8.3s,%-8.3s\n","china","china","china","china");
}
程序执行结果为:
a=25,25,31,19,25
b=123.456787,123.456787.123.4568,123.4568,1.23457e+02,1.2e+02
c=34567890.123457,3.45679e+07,3.45679e+07
d=k,k,107
string=china,china,chi,chi
【例3-6】用scanf函数输入数据。
main()
{inta,b,c;
printf("inputa,b,c\n");
scanf("%d%d%d",&a,&b,&c);
printf("a=%d,b=%d,c=%d\n",a,b,c);
}
程序执行结果为:
inputa,b,c↙
123
a=1,b=2,c=3
运行时可按以下任何一种方式输入变量a、b、c的值。
①123↙(以一个空格分隔)
②1↙(以回车符分隔)
2↙
3↙
③1↙
23↙(以一个空格分隔)
④12↙(以tab键分隔)
3↙
⑤123↙(以多个空格分隔)
【例3-7】计算任意两整数的和、差、积、商。
#include"stdio.h"
main()
{inta,b,c,d,e,f;
printf("pleaseinputtwointegeraandb:
\n");
scanf("%d%d",&a,&b);
c=a+b;d=a-b;
e=a*b;f=a/b;
printf("%d+%d=%d%d-%d=%d\n",a,b,c,a,b,d);
printf("%d*%d=%d%d/%d=%d\n",a,b,e,a,b,f);
}
程序执行结果为:
:
pleaseinputtwointegeraandb:
1510
15+10=2515-10=5
15*10=15015/10=1
【例3-8】计算圆柱的体积。
定义实型变量radius,high,vol分别表示圆柱的底面半径、高和体积。
#definePI3.1415926
main()
{floatradius,high,vol;
printf("Pleaseinputradius&high:
");
scanf("%f%f",&radius,&high);/*从键盘输入两个实数赋给变量radius,high*/
vol=PI*radius*radius*high;
printf("radius=%7.2f,high=%7.2f,vol=%7.2f\n",radius,high,vol);
}
程序执行结果为:
:
Pleaseinputradius&high:
25
radius=2.00,high=5.00,vol=62.83
【例3-9】计算一元二次方程ax2+bx+c=0的根。
(假设b2-4ac>0)
#include"math.h"/*为使用求平方根函数sqrt(),必须包含math.h头文件*/
main()
{floata,b,c,disc,x1,x2;
printf("inputa,b,c:
");
scanf("%f,%f,%f",&a,&b,&c);/*输入方程的三个系数的值*/
disc=b*b-4*a*c;/*求判别式的值赋给disc*/
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf("\nx1=%6.2fx2=%6.2f\n",x1,x2);
}
程序执行结果为:
inputa,b,c:
1,3,2
x1=-1.00x2=-2.00
【例3-10】按不同格式输出整型与长整型。
main()
{intnum1=123;
longnum2=123456;
/*用3种不同格式,输出int型数据num1的值*/
printf("num1=%d,num1=%5d,num1=%-5d,num1=%2d\n",num1,num1,num1,num1);
/*用3种不同格式,输出long型数据num2的值*/
printf("num2=%ld,num2=%8ld,num2=%5ld\n",num2,num2,num2);
}
程序执行结果为:
:
num1=123,num1=123,num1=123,num1=123
num2=123456,num2=123456,num2=123456
【例3-11】输入一个三位正整数,以倒序形式输出它的各位数。
(例如:
输入123,则输出321)
main()
{intx,a,b,c;
printf("pleaseinputx:
");
scanf("%d",&x);/*输入一个三位正整数*/
c=x%10;/*获得个位数字*/
b=x/10%10;/*获得十位数字*/
a=x/100;/*获得百位数字*/
printf("\nx=%d,daoshu=%d\n",x,100*c+10*b+a);
}
程序执行结果为:
:
pleaseinputx:
345
x=345,daoshu=543
【例3-12】输入两个整数,比较它们的大小,并将其中的大数输出。
main()
{inta,b,max;
printf("\ninputtwonumbers:
");
scanf("%d%d",&a,&b);
max=a;
if(max
printf("max=%d\n",max);
}
程序执行结果为:
:
inputtwonumbers:
510
max=10
【例3-13】从键盘输入学生的考试成绩,利用计算机将学生的成绩划分等级并输出。
学生的成绩可分为5个等级,这5个等级是:
90~100分为A级,80~89分为B级,70~79分为级,60~69分为D级,0~59分为E级。
学生的考试成绩为0~99分。
main()
{intscore;
printf("pleaseinputascore:
\n");
scanf("%d",&score);
if((score<0)||(score>100))printf("dataerror!
\n");
elseif(score>=90)printf("thegradeisA.\n");
elseif(score>=80)printf("thegradeisB.\n");
elseif(score>=70)printf("thegradeisC.\n");
elseif(score>=60)printf("thegradeisD.\n");
elseprintf("thegradeisE.\n");
}
程序执行结果为:
pleaseinputascore:
95
A
【例3-14】比较两个数的大小关系。
main()
{
inta,b;
printf("pleaseinputa,b:
\n");
scanf("%d%d",&a,&b);
if(a!
=b)
if(a>b)printf("%d>%d\n",a,b);
elseprintf("%d<%d\n",a,b);
elseprintf("%d=%d\n",a,b);
}
程序执行结果为:
pleaseinputA,B:
①35②64③55
3<56>45=5
【例3-15】利用switch语句重新完成例3-13编程任务。
main()
{intscore;
printf("inputascore(0~100):
");
scanf("%d",&score);
score=score/10;;/*将成绩整除10,转化成switch语句中的case标号*/
switch(score)
{case10:
case9:
printf("grade=A\n");/*标号10和9,都执行本行的语句*/
case8:
printf("grade=B\n");
case7:
printf("grade=C\n");
case6:
printf("grade=D\n");
case5:
case4:
case3:
case2:
case1:
case0:
printf("grade=E\n");/*标号5~0,都执行本行的语句*/
default:
printf("Thescoreisoutofrange!
\n");/*成绩超出范围时,提示出错*/
}
}
程序执行结果为:
inputascore(0~100):
95
grade=A
grade=B
grade=C
grade=D
grade=E
Thescoreisoutofrange!
main()
{intscore;
printf("inputascore(0~100):
");
scanf("%d",&score);
score=score/10;/*将成绩整除10,转化成switch语句中的case标号*/
switch(score)
{case10:
case9:
printf("grade=A\n");break;/*标号10和9,都执行本行的2条语句*/
case8:
printf("grade=B\n");break;
case7:
printf("grade=C\n");break;
case6:
printf("grade=D\n");break;
case5:
case4:
case3:
case2:
case1:
case0:
printf("grade=E\n");break;/*标号5~0,都执行本行的2条语句*/
default:
printf("Thescoreisoutofrange!
\n");/*成绩超出范围时,提示出错*/
}
}
【例3-16】计算器程序。
用户输入运算数和四则运算符,输出计算结果。
main()
{floata,b,s;
charc;
printf("inputexpressiona+(-,*,/)b:
\n");
scanf("%f%c%f",&a,&c,&b);
switch(c)
{case'+':
printf("%f\n",a+b);break;
case'-':
printf("%f\n",a-b);break;
case'*':
printf("%f\n",a*b);break;
case'/':
printf("%f\n",a/b);break;
default:
printf("inputerror\n");
}
}
程序执行结果为:
inputexpressiona+(-,*,/)b:
15+10
25
【例3-17】输入三个整数x,y,z,请把这三个数由小到大输出。
main()
{intx,y,z,temp;
scanf("%d%d%d",&x,&y,&z);
if(x>y)
{temp=x;x=y;y=temp;}/*交换x,y的值*/
if(x>z)
{temp=z;z=x;x=temp;}/*交换x,z的值*/
if(y>z)
{temp=y;y=z;z=temp;}/*交换z,y的值*/
printf("smalltobig:
%d%d%d\n",x,y,z);
}
程序执行结果为:
1001288
smalltobig:
1288100
【例3-18】输入并判断和显示任意一年是否为闰年。
main()
{intyear;
printf("pleaseinputayear:
\n");
scanf("%d",&year);
if(year%4==0&&year%100!
=0||year%400==0)
printf("theyear%disleapyear.\n",year);
else
printf("theyear%disnotleapyear.\n",year);
}
程序执行结果为:
pleaseinputayear:
2000
theyear%disleapyear.
【例3-19】编写一个计算售票收款数目的小程序。
具体要求为:
每张票零售价格为25元,团体票价为20元,一次购票数目超过30张(包含30)时按团体票出售。
对输入的购票数目计算并输出相应的购票款的数额。
main()
{intnumber;
floattotal;
printf("pleaseinputthenumberofticketsyouwanttobuy:
\n");
scanf("%d",&number);
if((number<0)||(number>3000))
printf("dataerror!
\n");
else
if(number>=30)
{total=20.0*number;
printf("youmustpay%.2fyuan.\n",total);}
else
{total=25.0*number;
printf("youmustpay%.2fyuan.\n",total);}
}
程序执行结果为:
①35
youmustpay700.00yuan
②15
youmustpay375.00yuan
【例3-20】编写一个已知利润计算薪水的程序。
标准如下:
(profit表示利润,薪水的单位是元)
profit≤1000基础薪水为500
1000<profit≤2000另按利润的10%提
2000<profit≤5000另按利润的15%提
5000<profit≤10000另按利润的20%提
10000<profit另按利润的25%提
程序如下:
main()
{longprofit;
intgrade;
floatsalary=500;
printf("Inputprofit:
");
scanf("%ld",&profit);
grade=(profit-1)/1000;/*将利润-1、再整除1000,转化成switch语句中的case标号*/
switch(grade)
{case0:
break;/*profit≤1000*/
case1:
salary+=profit*0.1;break;/*1000<profit≤2000*/
case2:
case3:
case4:
salary+=profit*0.15;break;/*2000<profit≤5000*/
case5:
case6:
case7:
case8:
case9:
salary+=profit*0.2;break;/*5000<profit≤10000*/
default:
salary+=profit*0.25;/*10000<profit*/
}
printf("salary=%.2f\n",salary);
}
程序执行结果为:
①Inputprofit:
800
salary=500.00
②Inputprofit:
2500
salary=875.00
③Inputprofit:
6000
salary=1700.00
【例3-21】计算1+2+3+…100的和。
main()
{inti=1,sum=0;/*初始化循环控制变量i和累计器sum*/
while(i<=100)
{sum+=i;/*实现累加*/
i++;/*循环控制变量i增1*/
}
printf("sum=%d\n",sum);
}
程序执行结果为:
sum=5050
例如:
利用do-while语句计算1+2+3+…100的和。
main()
{inti=1,sum=0;/*初始化循环控制变量i和累计器sum*/
do
{sum+=i;/*实现累加*/
i++;/*循环控制变量i增1*/
}while(i<=100);/*循环继续条件:
i<=100*/
printf("sum=%d\n",sum);
}
【例3-22】求1、1、2、3、5、8、13、...Fibonacci数列的前20个数。
#include"stdio.h"
main()
{longf1=1,f2=1,fn;/*定义并初始化数列的前2个数*/
inti,n;
printf("\n%20ld%20ld",f1,f2);/*输出前2个Fibonacci数*/
for(i=3;i<=20;i++)
{fn=f1+f2;/*计算下1个Fibonacci数*/
f1=f2;f2=fn;
printf("%20ld",fn);
}
}
程序执行结果为:
1123
581321
345589144
233377610987
1597258441816765
也可以在循环体内每次产生两个Fibonacci数,程序修改如下:
main()
{longintf1=1,f2=1;/*定义并初始化数列的前2个数*/
inti=1;/*定义并初始化循环控制变量i*/
for(;i<=10;i++)/*每组2个数,20组40个数*/
{printf("%15ld%15ld",f1,f2);/*输出当前的2个数*/
if(i%2==0)printf("\n");/*输出2次(4个数)后换行*/
f1=f1+f2;f2=f2+f1;/*计算2个新数*/
}
}
【例3-23】break语句的应用。
main()
{intsum,i;
for(i=1,sum=0;;i++)/*省略了表达式2*/
{sum=sum+i;
if(i==100)break;/*利用if语句判断循环是否结束*/
}
printf("sum=%d\n",sum);
}
程序执行结果为:
sum=5050
【例3-24】输出100以内所有8的倍数,要求输出时每5个数占一行。
main()
{intn,i=0;
for(n=8;n<=100;n++)
{if(n%8!
=0)continue;
printf("%10d",n);
i++;
if(i%5==0)printf("\n");
}
printf("\n");
}
程序执行结果为:
816243240
4856647280
8896
【例3-25】图形的输出。
main()
{inti,j,k;
for(i=1;i<=5;i++)
{for(j=1;j<=20-i;j++)
printf("");
for(k=1;k<=2*i-1;k++)
printf("*");
printf("\n");
}
}
【例3-26】编程计算n!
。
main()
{inti,n;
longfact=1;/*将累乘器fact初始化为1*/
printf("inputn:
");
scanf("%d",&n);
for(i=1;i<=n;i++)fact*=i;/*实现累乘*/
printf("%d!
=%ld\n",n,fact);
}
程序执行结果为:
inputn:
5
5!
=120
【例3-27】从键盘输入两个整数,计算并输出这两个整数的最大公约数和最小公倍数。
main()
{intm,n,p,temp;
printf("pleaseinputtwointegers:
\n");
scanf("%d%d",&m,&n);
p=m*n;/*先计算变量m与n的乘积*/
while(n)/*当n不为0时进行循环*/
{temp=m%n;/*把m与n的余数存入变量temp中*/
m=n;/*把n值作为m的新值*/
n=temp;/*把原m与n的余数作为n的新值*/
}
printf("gy=%dgb=%d\n",m,p/m);
}
程序执行结果为:
pleaseinputtwointegers:
1220
gy=4gb=60
本例利用辗转相除法先求出最大公约数,然后再求出最小公倍数。
【例3-28】输入一个正整数,计算并输出这个正整数的各位数字之和。
#include"stdio.h"
main()
{longnumber;
intsum=0;
printf("pleaseinputanumber:
");
scanf("%ld",&number);
if(number>0)
{do
{sum+=number%10;/*利用取余%运算可得到number的个位数*/
number/=10;}/*利用除法/运算可将number的个位数去掉*/
while(number>0);
printf("thesumis%d\n",sum);
}
else
printf("dataerror!
");
}
程序执行结果为:
①pleaseinputanumber:
1