- 第3章 最简单的C程序设计——顺序程序设计
- 第4章 选择结构程序设计
- 第5章 循环结构程序设计
- 第6章 利用数组处理批量数据
- 购房从银行贷了一笔款d,准备每月还款额为p,月利率为r,计算多少月能还清。
设d为300 000元,p为6000元,r为1%。
对求得的月份取小数点后一位,对第 2位小数按四舍五入处理。
#include#include int main() { float d=300000,p=6000,r=0.01,m; m=log10(p/(p-d*r))/log10(1+r); printf("m=%6.1fn",m); return 0; }
- 请编程序将 China 译成密码,密码规律是;
用原来的字母后面第 4个字母代替原来的字母。
#includeint main() { char c1='C',c2='h',c3='i',c4='n',c5='a'; c1=c1+4; c2=c2+4; c3=c3+4; c4=c4+4; c5=c5+4; printf("password is %c%c%c%c%cn",c1,c2,c3,c4,c5) ; return 0; }
- 设圆半径r=1.5,圆柱高 h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。
用 scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后 2位数字。
#includeint main() { float h,r,l,s,sq,vq,vz; float pi=3.141526; printf("请输入圆半径r,圆柱高h:"); scanf("%f,%f",&r,&h); l=2*pi*r; s=r*r*pi; sq=4*pi*r*r; vq=3.0/4.0*pi*r*r*r; vz=pi*r*r*h; printf("圆周长为: l=%6.2fn",l); printf("圆面积为: s=%6.2fn",s); printf("圆球表面积为: sq=%6.2fn",sq); printf("圆球体积为: vq=%6.2fn",vq); printf("圆柱体积为: vz=%6.2fn",vz); }
- 编程序,用getchar函数读入两个字符给cl和c2,然后分别用putchar函数和printf 函数输出这两个字符。
#includeint main() { char c1,c2; printf("请输入两个字符c1,c2:"); c1=getchar(); c2=getchar(); printf("用putchar语句输出结果为:"); putchar(c1); putchar(c2); printf("n"); printf("用printf语句输出结果为:"); printf("%c %cn",c1,c2); return 0; }
8(1).
#includeint main() { int c1,c2; printf("请输入两个整数c1,c2:"); scanf("%d,%d",&c1,&c2); printf("按字符输出结果:n"); printf("%c,%cn",c1,c2); printf("按ASCII码输出结果为:n"); printf("%d,%dn",c1,c2); return 0; }
8(2).
#includeint main() { char c1,c2; int i1,i2; printf("请输入两个字符c1,c2:"); scanf("%c,%c",&c1,&c2); i1=c1; i2=c2; printf("按字符输出结果:n"); printf("%c,%cn",i1,i2); printf("按整数输出结果:n"); printf("%d,%dn",i1,i2); return 0; }
8(3).
#include第4章 选择结构程序设计int main() { char c1,c2; int i1,i2; printf("请输入两个字符i1,i2:"); scanf("%d,%d",&i1,&i2); c1=i1; c2=i2; printf("按字符输出结果:n"); printf("%c,%cn",c1,c2); printf("按整数输出结果:n"); printf("%d,%dn",c1,c2); return 0; }
- 有3个整数a,b,c,由键盘输入,输出其中最大的数。
#includeint main() { int a,b,c; printf("请输入3个整数:"); scanf("%d,%d,%d",&a,&b,&c); if(a 4(1).
// 使用条件表达式 #includeint main() { int a,b,c,temp,max; printf("请输入3个整数:"); scanf("%d,%d,%d,",&a,&b,&c); temp=(a>b)?a:b; max=(temp>c)?temp:c; printf("max=%dn",max); return 0; }
- 从键盘输入一个小于1000的正数,要求输出它的平方根(如平方根不是整数,则输出其整数部分)。
要求在输入数据后先对其进行检查是否为小于1000的正数。若不是,则要求重新输入。#include#include #define M 1000 int main() { int i,k; printf("请输入一个小于%d的整数i:",M); scanf("%d",&i); if(i>M) { printf("输入的数据不符合要求,请重新输入。"); scanf("%d",&i) ; } k=sqrt(i); printf("%d的平方根的整数部分是%dn",i,k); } 5(1).
// 加入while可以多次检查 #include#include #define M 1000 int main() { int i,k; printf("请输入一个小于%d的整数i:",M); scanf("%d",&i); while(i>M) { printf("输入的数据不符合要求,请重新输入一个小于%d的整数i:",M); scanf("%d",&i) ; } k=sqrt(i); printf("%d的平方根的整数部分是%dn",i,k); }
- 有一个函数∶
y=x(x<1)
y=2x-1 (1≤x<10)
y=3x-11(x≥10)
写程序,输入x的值,输出y相应的值。#includeint main() { int x,y; printf("输入x:"); scanf("%d",&x); if(x<1) { y=x; printf("x=%3d, y=x=%dn",x,y); } else if(x<10) { y=2*x-1; printf("x=%3d, y=2*x-1=%dn",x,y); } else { y=3*x-11; printf("x=%3d, y=3*x-11=%dn",x,y); } return 0; }
- 给出一百分制成绩,要求输出成绩等级’A’、‘B’、‘C’、‘D’、‘E’。
90分以上为’A’,80~89分为’B’,70~70分为’C’,60~69分为’D’,60分以下为’E’。#includeint main() { float score; char grade; printf("请输入学生成绩:"); scanf("%f",&score); while(score>100|score<0) { printf("n输入有误,请重输"); scanf("%f",&score); } switch((int)(score/10)) { case 10: case 9: grade='A';break; case 8: grade='B';break; case 7: grade='C';break; case 6: grade='D';break; case 5: case 4: case 3: case 2: case 1: case 0: grade='E'; } printf("成绩是%5.1f,相应的等级是%cn",score,grade); return 0; }
- 给一个不多于5位的正整数,要求∶
①求出它是几位数;
②分别输出每一位数字;
③按逆序输出各位数字,例如原数为321,应输出123。#include#include int main() { int num,indiv,ten,hundred,thousand,ten_thousand,place; // 分别代表个位、十位、百位、千位、万位和位数 printf("请输入一个整数(0~99999):") ; scanf("%d",&num); if(num>9999) place=5; else if(num>999) place=4; else if(num>99) place=3; else if(num>9) place=2; else place=1; printf("位数:%dn",place); printf("每位数字为:"); ten_thousand=num/10000; thousand=(int)(num-ten_thousand*10000)/1000; hundred=(int)(num-ten_thousand*10000-thousand*1000)/100; ten=(int)(num-ten_thousand*10000-thousand*1000-hundred*100)/10; indiv=(int)(num-ten_thousand*10000-thousand*1000-hundred*100-ten*10); switch(place) { case 5: printf("%d,%d,%d,%d,%d",ten_thousand,thousand,hundred,ten,indiv); printf("n反序数字为:"); printf("%d,%d,%d,%d,%d",indiv,ten,hundred,thousand,ten_thousand); break; case 4: printf("%d,%d,%d,%d",thousand,hundred,ten,indiv); printf("n反序数字为:"); printf("%d,%d,%d,%d",indiv,ten,hundred,thousand); break; case 3: printf("%d,%d,%d",hundred,ten,indiv); printf("n反序数字为:"); printf("%d,%d,%d",indiv,ten,hundred); break; case 2: printf("%d,%d",ten,indiv); printf("n反序数字为:"); printf("%d,%d",indiv,ten); break; case 1: printf("%d",indiv); printf("n反序数字为:"); printf("%d",indiv); break; } return 0; }
- 企业发放的奖金根据利润提成。
利润I低于或等于100 000元的,奖金可提成10%;
利润高于100 000元,低于200 000元(100 000 高于100 000元的部分,可提成7.5%;200 000 高于 200 000元的部分按5%提成;
400 000 600 000 I>100000时,超过1000 000元的部分按1%提成。
从键盘输入当月利润I,求应发奖金总数。
要求∶
(1)用if语句编程序。(2)用switch语句编程序。#includeint main() { int i; double bonus,bon1,bon2,bon4,bon6,bon10; bon1=100000*0.1; bon2=bon1+100000*0.075; bon4=bon2+100000*0.05; bon6=bon4+100000*0.03; bon10=bon6+400000*0.015; printf("请输入利润i:"); scanf("%d",&i); if(i<=100000) bonus=i*0.1; else if(i<=200000) bonus=bon1+(i-100000)*0.0075; else if(i<=400000) bonus=bon2+(i-200000)*0.05; else if(i<=1000000) bonus=bon4+(i-400000)*0.03; else if(i<=1000000) bonus=bon6+(i-600000)*0.015; else bonus=bon10+(i-1000000) *0.01; printf("奖金是:%10.2fn",bonus); return 0; } 10(2) 用switch语句编程序。
#includeint main() { int i; double bonus,bon1,bon2,bon4,bon6,bon10; int branch; bon1=100000*0.1; bon2=bon1+100000*0.075; bon4=bon2+200000*0.05; bon6=bon4+200000*0.03; bon10=bon6+400000*0.015; printf("请输入利润i:"); scanf("%d",&i); branch=i/100000; if(branch>10)branch=10; switch(branch) { case 0: bonus=i*0.1; break; case 1: bonus=bon1+(i-100000)*0.075; break; case 2: case 3: bonus=bon2+(i-200000)*0.05; break; case 4: case 5: bonus=bon4+(i-400000)*0.03; break; case 6: case 7: case 8: case 9: bonus=bon6+(i-600000)*0.015; break; case 10: bonus=bon10+(i-1000000) *0.01; } printf("奖金是:%10.2fn",bonus); return 0; }
- 输入 4个整数,要求按由小到大的顺序输出。
// 输入 4个整数,要求按由小到大的顺序输出。 #includeint main() { int t,a,b,c,d; printf("请输入4个数:"); scanf("%d,%d,%d,%d",&a,&b,&c,&d); printf("a=%d,b=%d,c=%d,d=%dn",a,b,c,d); if(a>b) {t=a;a=b;b=t; } if(a>c) { t=a;a=c;c=t; } if(a>d) { t=a;a=d;d=t; } if(b>c) { t=b;b=c;c=t; } if(b>d) { t=b;b=d;d=t; } if(c>d) { t=c;c=d;d=t; } printf("排序顺序如下:n"); printf("%d %d %d %d n",a,b,c,d); return 0; }
- 有4个圆塔,圆心分别为(2,2)、(一2,2)、(一2.—2)、(2,—2),圆半径为1 。
这 4个塔的高度为10m,塔以外无建筑物。今输入任一点的坐标,求该点的建筑高度(塔外的高度为零)。#include第5章 循环结构程序设计int main() { int h=10; float x1=2,y1=2,x2=-2,y2=2,x3=-2,y3=-2,x4=2,y4=-2,x,y,d1,d2,d3,d4; printf("请输入一个点(x,y):"); scanf("%f,%f",&x,&y); d1=(x-x4)*(x-x4)+(y-y4)*(y-y4); // 求该点到各中心点距离 d2=(x-x1)*(x-x1)+(y-y1)*(y-y1); d3=(x-x2)*(x-x2)+(y-y2)*(y-y2); d4=(x-x3)*(x-x3)+(y-y3)*(y-y3); if(d1>1&&d2>1&&d3>1&&d4>1)h=0; printf("该点高度为%dn",h); return 0; }
- 输入两个正整数m和n,求其最大公约数和最小公倍数。
// 输入两个正整数m和n,求其最大公约数和最小公倍数。 #includeint main() { int p,r,n,m,temp; printf("请输入两个正整数n,m:"); scanf("%d,%d",&n,&m); if(n temp=n; n=m; m=temp; } p=n*m; while(m!=0) { r=n%m; n=m; m=r; } printf("它们的最大公约数为:%dn",n); printf("它们的最小公倍数为:%dn",p/n); return 0; }
- 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。
// 输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。 #includeint main() { char c; int letters=0,space=0,digit=0,other=0; printf("请输入一行字符:n"); while((c=getchar())!='n') { if(c>='a'&&c<='z'||c>='A'&&c<='Z') letters++; else if(c==' ') space++; else if(c>='0'&&c<='9') digit++; else other++; } printf("字母数:%dn空格数:%dn数字数:%dn其他字符数:%dn",letters,space,digit,other); return 0; }
- 求S,=a+aa+aaa+…+aa…a(n个a)之值,其中a是一个数字,n表示a的位数,n由键盘输入,
例如∶2+22+222+2222+22222(此时n=5)#includeint main() { int a,n,i=1,sn=0,tn=0; printf("a,n=:"); scanf("%d,%d",&a,&n); while(i<=n) { tn=tn+a; // 赋值后的tn为i个a组成数的值 sn=sn+tn;// 赋值后的sn为多项式前i想之和 a=a*10; ++i; } printf("a+aa+aaa+...=%dn",sn); return 0; }
- 求 ∑ n = 1 20 n ! sum_{n=1}^{20} n! ∑n=120n!(即求1!+2!+3!+4!+…+20!) 。
// 求sum_{n=1}^{20} n!(即求1!+2!+3!+4!+...+20!) 。 #includeint main() { double s=0,t=1; int n; for(n=1;n<=20;n++) { t=t*n; s=s+t; } printf("1!+2!+3!+4!+...+20!=%22.15en",s); return 0; }
- 求 ∑ k = 1 100 k + ∑ k = 1 50 k 2 + ∑ k = 1 10 1 k sum_{k=1}^{100}k+ sum_{k=1}^{50}k^2+sum_{k=1}^{10}frac{1}{k} ∑k=1100k+∑k=150k2+∑k=110k1。
// 求sum_{k=1}^{100}k+ sum_{k=1}^{50}k^2+sum_{k=1}^{10}frac{1}{k}。 #includeint main() { int n1=100,n2=50,n3=10; double k,s1=0,s2=0,s3=0; for(k=1;k<=n1;k++) // 计算1~100的和 { s1=s1+k; } for(k=1;k<=n2;k++) // 计算1~50个数的平方和 { s2=s2+k*k; } for(k=1;k<=n3;k++) // 计算1~10的各倒数和 { s3=s3+1/k; } printf("sum=%15.6fn",s1+s2+s3); return 0; }
- 输出所有的"水仙花数"。所谓"水仙花数"是指一个3位数,其各位数字立方和等于该数本身。
例如,153 是一水仙花数,因为 153 = 1 3 + 5 3 + 3 3 153=1^3+5^3+3^3 153=13+53+33。#includeint main() { int i,j,k,n; printf("parcissus numbers are "); for(n=100;n<1000;n++) { i=n/100; j=n/10-i*10; k=n%10; if(n==i*i*i+j*j*j+k*k*k) printf("%d ",n); } printf("n"); return 0; }
- 一个数如果恰好等于它的因子之和,这个数就称为"完数"。
例如,6的因子为1,2,3,而6=1十2十3,因此6是"完数"。
编程序找出1000之内的所有完数,并按下面格式输出其因子∶
6 its factors are 1 2 3#includeint main() { int s,i,m; for(m=2;m<1000;m++) { s=0; for(i=1;i if((m%i)==0) s=s+i; } if(s==m) { printf("%d,its factors are ",m) ; for(i=1;i
- 有一个分数序列∶ 2 1 , 3 2 , 5 3 , 8 5 , 13 8 , 21 13 , . . . frac{2}{1},frac{3}{2},frac{5}{3},frac{8}{5},frac{13}{8},frac{21}{13},... 12,23,35,58,813,1321,...
求出这个数列的前20项之和。#includeint main() { int i,n=20; double a=2,b=1,s=0,t; for(i=1;i<=20;i++) { s=s+a/b; t=a; a=a+b; b=t; } printf("sum=%16.10fn",s); return 0; }
- 一个球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下,再反弹。
求它在第 10次落地时,共经过多少米,第10次反弹多高。#includeint main() { double sn=100,hn=sn/2; int n; for(n=2;n<=10;n++) { sn=sn+2*hn; //第n次落地时共经过的米数 hn=hn/2; //第n次反跳高度 } printf("第10次落地时共经过%f米n",sn); printf("第10次反弹%f米n",hn); return 0; }
- 猴子吃桃问题。猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第2天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,就只剩一个桃子了。求第1天共摘了多少个桃子。
#includeint main() { int day,x1,x2; day=9; x2=1; while(day>0) { x1=(x2+1)*2; // 第1天的桃子数时第2天桃子数加1后的2倍 x2=x1; day--; } printf("total=%dn",x1); return 0; }
- 用迭代法求 x = a x=sqrt a x=a 。求平方根的迭代公式为
x n + 1 = 1 2 ( x n + a x n ) x_{n+1}=frac{1}{2}(x_n+frac{a}{x_n}) xn+1=21(xn+xna)
要求前后两次求出的x的差的绝对值小于 1 0 − 5 10^{-5} 10−5。#include#include int main() { float a,x0,x1; printf("enter a positive number:"); scanf("%f",&a); x0=a/2; x1=(x0+a/x0)/2; do { x0=x1; x1=(x0+a/x0)/2; }while(fabs(x0-x1)>=1e-5); printf("The square root of %5.2f is %8.5fn",a,x1); return 0; } 14.用牛顿迭代法求下面方程在1.5附近的根∶
2 ∗ x 3 − 4 ∗ x 2 + 3 ∗ x − 6 = 0 2*x^3-4*x^2+3*x-6=0 2∗x3−4∗x2+3∗x−6=0。#include#include int main() { double x1,x0,f,f1; x1=1.5; do { x0=x1; f=((2*x0-4)*x0+3)*x0-6; f1=(6*x0-8)*x0+3; x1=x0-f/f1; }while(fabs(x1-x0)>=1e-5); printf("The root of equation is %5.2fn",x1); return 0; }
- 用二分法求下面方程在(-10,10)之间的根∶
2 ∗ x 3 − 4 ∗ x 2 + 3 ∗ x − 6 = 0 2*x^3-4*x^2+3*x-6=0 2∗x3−4∗x2+3∗x−6=0。#include#include int main() { float x0,x1,x2,fx0,fx1,fx2; do { printf("enter x1 & x2:"); scanf("%f,%f",&x1,&x2); fx1=x1*((2*x1-4)*x1+3)-6; fx2=x2*((2*x2-4)*x2+3)-6; }while(fx1*fx2>0); do { x0=(x1+x2)/2; fx0=x0*((2*x0-4)*x0+3)-6; if((fx0*fx1)<0) { x2=x0; fx2=fx0; } else { x1=x0; fx1=fx0; } }while(fabs(fx0)>=1e-5); printf("x=%6.2fn",x0); return 0; }
- 输出以下图案∶
#includeint main() { int i,j,k; for(i=0;i<=3;i++) { for(j=0;j<=2-i;j++) { printf(" "); } for(k=0;k<=2*i;k++) printf("*"); printf("n"); } for(i=0;i<=2;i++) { for(j=0;j<=i;j++) printf(" "); for(k=0;k<=4-2*i;k++) printf("*"); printf("n"); } return 0; }
- 两个乒乓球队进行比赛,各出3人。甲队为A,B,C3人,乙队为X,Y,Z3人。
已抽签决定比赛名单。
有人向队员打听比赛的名单,A说他不和X比,C说他不和X,Z比,请编程序找出3对赛手的名单。#include第6章 利用数组处理批量数据int main() { char i,j,k; // i是a的对手,j是b的对手,k是c的对手 for(i='x';i<='z';i++) { for(j='x';j<='z';j++) { if(i!=j) for(k='x';k<='z';k++) { if(i!=k&&j!=k) if(i!='x'&&k!='x'&&k!='z') { printf("A--%cnB--%cnC--%cn",i,j,k); return 0; } } } } return 0; }
- 用筛选法求 100 之内的素数。
// 用筛选法求 100 之内的素数。 #include#include int main() { int i,j,n,a[101]; for(int i=1;i<=100;i++) { a[i]=i; } a[1]=0; for(i=2;i for(j=i+1;j<=100;j++) { if(a[i]!=0&&a[j]!=0) { if(a[j]%a[i]==0) { a[j]=0; //挖掉非素数 } } } } printf("n"); for(i=2,n=0;i<=100;i++) { if(a[i]!=0) { printf("%5d",a[i]); n++; } if(n==10) { printf("n"); n=0; } } printf("n"); return 0; }
- 用选择法对 10个整数排序。
// 用选择法对 10个整数排序。 #includeint main() { int i,j,min,temp,a[11]; printf("enter data:n"); for(i=1;i<=10;i++) { printf("a[%d]=",i); scanf("%d",&a[i]); } printf("n"); printf("The orignal numbers:n"); for(i=1;i<=10;i++) { printf("%5d",a[i]); } printf("n"); for(i=1;i<=9;i++) { min=i; for(j=i+1;j<=10;j++) { if(a[min]>a[j]) { min=j; } } temp=a[i]; a[i]=a[min]; a[min]=temp; } printf("nThe sorted numbers:n"); for(i=1;i<=10;i++) { printf("%5d",a[i]); } printf("n"); return 0; }
- 求一个3×3的整型矩阵对角线元素之和。
// 求一个3×3的整型矩阵对角线元素之和。 #includeint main() { int a[3][3],sum=0; int i,j; printf("enter data:n"); for(i=0;i<3;i++) { for(j=0;j<3;j++) { scanf("%3d",&a[i][j]); } } for(i=0;i<3;i++) { sum=sum+a[i][i]; } printf("sum=%6dn",sum); return 0; }
- 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。
// 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。 #includeint main() { int a[11]={1,4,6,9,13,16,19,28,40,100}; int temp1,temp2,number,end,i,j; printf("array a:n"); for(i=0;i<10;i++) { printf("%5d",a[i]); } printf("n"); printf("insert data:"); scanf("%d",&number); end=a[9]; if(number>a[9]) { a[10]=number; } else { for(i=0;i<10;i++) { if(a[i]>number) { temp1=a[i]; a[i]=number; for(j=i+1;j<11;j++) { temp2=a[j]; a[j]=temp1; temp1=temp2; } break; } } } printf("New array a:n"); for(i=0;i<11;i++) { printf("%5d",a[i]); } printf("n"); return 0; }



