- 更多练习关注公众号回复"C语言练习题"及可获得链接
求两个非负整数的最大公约数和最小公倍数。
#include <stdio.h>
main(){
int m,n,r,p,gcd,lcm;
scanf("%d%d",&m,&n);
if(m<n){
p=m;
m=n;
n=p;
}
p=m*n;
r=m%n;
/***********SPACE***********/
while(r!=0){
m=n;
n=r;
r=m%n;
}
/***********SPACE***********/
gcd=n;
lcm=p/gcd;/*两数乘积,除以最大公约数得到最小公倍数*/
/***********SPACE***********/
printf("gcd=%d,lcm=%d
", gcd,lcm);
}
- 辗转相除法:辗转相除法是求两个自然数(8 12)的最大公约数的一种方法,也叫欧几里德算法。
- 伪代码如下:
number=max%min//4=12%8
while(number!=0){
max=min//8
min=number//4
number=max%min//0=8%4
}
最大公约数gcd = min
最小公倍数lcm = 输入的两个数的乘积/最大公约数
计算三角形面积
- 功能:输入三角形的三边a,b,c,判断a,b,c能否构成三角形,若能,计算面积。
#include<stdio.h>
/***********SPACE***********/
#include<【math.h】>
void main(){
/***********SPACE***********/
float a,b,c,area;
double s;
printf("Please enter three sides of a triangle:
");
scanf("%f,%f,%f",&a,&b,&c);
/***********SPACE***********/
s=(a+b+c)/2.0;
/***********SPACE***********/
area=sqrt(s*(s-a)*(s-b)*(s-c));
/***********SPACE***********/
if(a+b<c||b+c<a||a+c<b)
printf("They can't form a triangle.
");
else
printf("The area of the triangle is:%f
",area);
}
求1!+3!+5!+……+n!的和。
#include <stdio.h>
main()
{
long int f,s;
int i,j,n;
/***********SPACE***********/
s=0;//刚开始时和为0
scanf("%d",&n);
/***********SPACE***********/
for(i=1;i<=n; i+=2)//因为数值是1,3,5变化,所以步长为2.下面求阶乘用j++,因此用i+=2,不用i=i+2
{
f=1;//阶乘从1开始乘
for(j=2; j<=i;j++)//求i的阶乘
/***********SPACE***********/
f=f*j;//格式与下面相同
s=s+f;//将阶乘相加
}
printf("n=%d,s=%ld
",n,s);
}
求100以内个位数为6且能够被3整除的所有数
#include<stdio.h>
void main(){
int i,j;
/***********SPACE***********/
for(i=0;i<10;i++){
j=i*10+6;//变量*常量+常量
if(j%3!=0)//注意此时的continue语句,所以不能写j%3==0,而应该写j%3!=0
continue;
printf("%d ",j);
}
}
输出由字符w构造成的形如W的图形
/*-------------------------------------------------------
w ww w
w w w w
w w w w
w w w w
ww ww
-------------------------------------------------------*/
#include <stdio.h>
/***********SPACE***********/
void 【draw】(int n)
{
int i,j,k,r,m;
/***********SPACE***********/
for(i=1; i<=n;i++)//输出5行
{
for(j=1;j<=2;j++)//输出2个vv
{
for(r=1;r<i;r++)//输出第一个w前的空格
printf(" ");
printf("w");//输出第一个w
/***********SPACE***********/
for(k=1;k<=2*n-2*i;k++)//输出第一个w后面的空格。空格的数量根据行数的增加而减少。因为每行的空格数量相差2个,所以要2*i;i=1时,2*i=2;但第一行空格数是8,因为10-2*i=8,但又会随着输出的行数变化所以要用k<=2*n-2*i.
printf(" ");
printf("w");//输出第二个w
for(m=1;m<i;m++)
printf(" ");//输出第二个后面的空格
}
/***********SPACE***********/
printf(“
”);//输出第2个w及空格后换行
}
}
#include <conio.h>
main()
{
int n;
printf("input a number:");
/***********SPACE***********/
scanf(“%d”,&n);//输入w输出的行数
draw(n);
}
等差数列
/*------------------------------------------------------
题目:某等差数列的第一项a=2,公差d=3。
下面程序的功能是将前n(1≤n≤10)项和S,输出所有项的S和能被4整除者。请填空。
-------------------------------------------------------*/
#include <stdio.h>
void main()
{
int a,d,sum,n,i;
/***********SPACE***********/
a=2; d=3;i=1;sum=0;
scanf("%d",&n);
do{
sum+=a;
i++;
/***********SPACE***********/
a+=d;//每个元素的公差为d
/***********SPACE***********/
if(s%4==0)//输出前i项的和能被4整除的数
printf("%d
",sum);
}while(i<=n);
}
说明:fun函数的功能是计算s=1+1/2!+1/3!+……+1/n!,请填写程序所缺内容。
#include "stdio.h"
double fun(int n)
{
double s=0.0,fac=1.0;
int i;
for(i=1; i<=n; i++)
{
/***********SPACE***********/
fac=fac * 1.0/i;//求单个项,注意要用1.0/i,不能用1/i(只能取整)
/***********SPACE***********/
s=s+fac;//把每个单独的项相加
}
return s;
}
void main()
{
double fun(int n);
double s;
int t;
scanf("%d",&t);
s=fun(t);
printf("s=%f
",s);
}
水仙花数
- 说明:下面程序的功能是打印出所有的“水仙花数”,请填写程序所缺内容。
- 注:水仙花数是指一个三位数的各位数字的立方和是这个数本身。
#include"stdio.h"
void f( int n)
{
int i,j,k;
i=n/100;//取出百位
/***********SPACE***********/
j=n/10%10;//取出十位
k=n%10;//取出个位
/***********SPACE***********/
if(i*i*i + j*j*j + k*k*k == n){//各个数的立方和=这个数
printf("%5d
",n);
}
}
void main()
{
void f(int n);
int i;
for(i=100;i<1000;i++)
f(i);
}
题目:下列程序从键盘输入所需数据,求出z的值并输出,要求输出结果保留2位小数。
#include <stdio.h>
/***********SPACE***********/
#include"math.h"
main(){
int x;
double y,z;
/***********SPACE***********/
scanf("【%d%f】",&x,&y);//double用%f输出。注意:不要写成%d %f
z=2*x*sqrt(y);
/***********SPACE***********/
printf("z=【%.2f】",z);//double用%.2f输出2位小数。注意:不要写成%0.2f
}
放鞭炮
- 题目:甲乙丙丁4人同时开始放鞭炮,甲每隔t1 s放一次,乙每隔t2 s放一次,丙每隔t3 s放一次,丁每隔t4 s放一次,每人各放n次。函数fun的功能是根据形参炸响,只算一次响声,第一次响声是在第0s。
- 例如:若t1=7,t2=5,t3=6,t4=4,n=10,则总共可听到28次鞭炮声。
#include <stdio.h>
/***********SPACE***********/
#define OK(s, t, n) ((s%t==0) && (s/t<n))//如果s能被次数t整除 && (时间/次数)<10次
int fun(int t1, int t2, int t3, int t4, int n){
int count, s , maxt=t1;
if (maxt < t2) maxt = t2;
if (maxt < t3) maxt = t3;
if (maxt < t4) maxt = t4;
count=1;/* 给count赋初值 */
/***********SPACE***********/
for(s=1; s< maxt*(n-1); s++){//s变化的时间
if(OK(s, t1, n) || OK(s, t2, n)|| OK(s, t3, n) || OK(s, t4, n))
count++;
}
/***********SPACE***********/
return count;//返回听到的次数
}
main(){
int t1=7, t2=5, t3=6, t4=4, n=10, r;
r = fun(t1, t2, t3, t4, n);//每个人最多鞭炮的次数为n
printf("The sound:%d
", r);
}
乒乓球抽签比赛
- 功能:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。
#include <stdio.h>
main()
{
char i,j,k;
for(i='x';i<='z';i++)
for(j='x';j<='z';j++)
{
/***********SPACE***********/
if(i!=j)//i和j不是同一个人
/***********SPACE***********/
for(k='x';k<='z';k++)
{
/***********SPACE***********/
if(i!=k && j!=k)//i和j都不是第三个人k
{
/***********SPACE***********/
if(i!='x' && k!='x' && k!='z')//a(i)说他不和x比,c(k)说他不和x,z比
printf("order is a--%c b--%c c--%c
",i,j,k);
}
}
}
}
打印菱形
/*-------------------------------------------------------
*
***
*****
*******
*****
***
*
-------------------------------------------------------*/
#include <stdio.h>
main()
{
int i,j,k;
/***********SPACE***********/
for(i=0;i<4;i++){//输出上面四行的正三角形
for(j=0;j<=4-i;j++)//输出星号前面换空格,空格数的变化为3,2,1,0
printf(" ");
/***********SPACE***********/
for(k=1;k<=2*i+1;k++)//输出星号,星号数的变化为1,3,5,7。星号的个数=2*行数+1,行数开始为0
printf("*");
printf("
");
}
/***********SPACE***********/
for(j=0;j<3;j++){//输出下面三行的倒三角形
for(k=0;k<j+3;k++)
printf(" ");
for(k=0;k<5-2*j;k++)
printf("*");
printf("
");
}
}
年月日
- 输入某年某月某日,判断这一天是这一年的第几天?
#include <stdio.h>
main()
{
int day,month,year,sum,leap;
printf("
please input year,month,day
");
scanf("%d,%d,%d",&year,&month,&day);
switch(month)
{
case 1:sum=0;break;//1月31天
case 2:sum=31;break;//2月28天,共59天
case 3:sum=59;break;//3月31天,共90天
/***********SPACE***********/
case 4:sum=90;break;//注意是sum=90,而不是90
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("data error");break;
}
/***********SPACE***********/
sum=sum+day;//月份所得的天数+天数
/***********SPACE***********/
if(year%4==0 && year%100!=0 || year%400==0)//如果是闰年leap=1
leap=1;
else
leap=0;
/***********SPACE***********/
if(leap==1 && month>2)//如果是2月12日不用加闰年29天,只能过了2月才能有闰年的问题
sum++;
printf("it is the %dth day.",sum);
}
功能:输入三个整数x,y,z,请把这三个数由小到大输出。
#include <stdio.h>
main()
{
int x,y,z,t;
scanf("%d%d%d",&x,&y,&z);
/***********SPACE***********/
if (x>y){
t=x;//先把x给另一个存储器t
x=y;//x表示最小的值
y=t;
}
/***********SPACE***********/
if(x>z){
t=x;
x=z;
z=t;
}
/***********SPACE***********/
if(y>z){
t=y;
y=z;
z=t;//z表示最大的值
}
printf("small to big: %d %d %d
",x,y,z);
}
功能:从键盘上输入两个复数的实部与虚部,求出并输出它们的和、差、积、商。
#include<stdio.h>
void main()
{
float a,b,c,d,e,f;
printf("输入第一个复数的实部与虚部:");
scanf("%f, %f",&a,&b);
printf("输入第二个复数的实部与虚部:");
scanf("%f, %f",&c,&d);
/***********SPACE***********/
e=a+c;
f=b+d;
printf("相加后复数:实部:%f,虚部:%f
",e,f);
e=a*c - b*d;
/***********SPACE***********/
f= a*d + b*c;
printf("相乘后复数:实部:%f,虚部:%f
",e,f);
e=(a*c+b*d) / (c*c+d*d);
/***********SPACE***********/
f=(b*c-a*d) / (c*c+d*d);
printf("相除后复数:实部:%f,虚部:%f
",e,f);
}
i2=-1
a+bi c+di
a+bi+c+di=a+c+bi+di=a+c+(b+d)i
a-bi c-di
a+bi+c+di=a+c+bi+di=a+c+(b+d)i
(a+bi)*(c+di)
=ac+adi+bci-bd
=ac-bd+(ad+bc)i
(x+y) * (x-y)=x2-y2
(a+bi)/(c+di)
=((a+bi) * (c-di)) / ((c+di) * (c-di))分式上下都乘(c-di)
=((a+bi) * (c-di)) / (c2+d2)
=(ac-adi+bci+bd) / (c2+d2)
=(ac+bd) / (c2+d2) + (bc-ad)i / (c2+d2)
功能:输入两个整数,求他们的按位与。
#include<stdio.h>
void main()
{
int x,y,z=0,a,b,k=1;
scanf("%d,%d",&x,&y);
while(x>0&&y>0)
{
a=x%2;
/***********SPACE***********/
x=x/2;//使x的值变小
b=y%2;
y=y/2;//使y的值变小
/***********SPACE***********/
z=a*b*k + z;
k=k*2;//按位权展开求和
}
/***********SPACE***********/
printf("z=%d
",z);//z表示与运算后的结果
}
计算长方体的体积及三个面的面积。
#include <stdio.h>
int s1,s2,s3;
int vs(int a,int b,int c){
int v;
/***********SPACE***********/
v=a*b*c;//长方体的体积=长*宽*高
s1=a*b;//求单个长方体的面积
/***********SPACE***********/
s2=b*c;
s3=a*c;
return v;
}
main(){
int v,l,w,h;
printf("
input length,width and height: ");
/***********SPACE***********/
scanf("%d%d%d",&l,&w,&h);
/***********SPACE***********/
v=vs(l,w,h);
printf("v=%d s1=%d s2=%d s3=%d
",v,s1,s2,s3);
}
百马百担问题
- 有100匹马,驮100担货,大马驮(hb)3担,中马(hm)驮2担,两匹小马(hl)驮1担,求大、中、小马各多少匹?
#include <stdio.h>
main()
{
int hb,hm,hl,n=0;//hb匹数
/***********SPACE***********/
for(hb=0;hb<=100;hb+=3)
/***********SPACE***********/
for(hm=0;hm<=100-hb;hm+=2)
{
/***********SPACE***********/
hl=100-hb-hm;//小马驮的数量=100-大马驮的数量-中马驮的数量
/***********SPACE***********/
if(hb/3 + hm/2 + 2*h1==100)
{
n++;
printf("hb=%d,hm=%d,hl=%d
",hb/3,hm/2,2*hl);
}
}
printf("n=%d
",n);
}
百鸡问题
- 100元买100只鸡,公鸡一只5元钱,母鸡一只3元钱,小鸡一元钱三只,求100元钱能买公鸡、母鸡、小鸡各多少只?
#include <stdio.h>
main()
{
int cocks,hens,chicks;//鸡数
cocks=0;
while(cocks<=19)
{
/***********SPACE***********/
hens=0;//当cocks=0时计算需要多少只hens
/***********SPACE***********/
while(hens<=33)//100/3
{
chicks=100-cocks-hens;
if(5*cocks + 3*hens + chicks/3==100)
printf("%d,%d,%d
",cocks,hens,chicks);
/***********SPACE***********/
hens++;//要跳出循环所以hens++
}
/***********SPACE***********/
cocks++;
}
}
功能:输入一个学生的生日(年:y0、月:m0、日:d0),并输入当前日期(年:y1、月:m1、日:d1)。求出该学生的年龄(实足年龄)。
#include <stdio.h>
main(){
int age,y0,y1,m0,m1,d0,d1;
printf("输入生日日期(年,月,日)");
/***********SPACE***********/
scanf("%d,%d,%d",&y0,&m0,&d0);
printf("输入当前日期(年,月,日)");
scanf("%d,%d,%d",&y1,&m1,&d1);
age=y1-y0;
/***********SPACE***********/
if(m0>m1)age--;
/***********SPACE***********/
if((m0==m1) && (d0>d1))
age--;
printf("age=%3d",age);
}
- 2000.10.20和2020.12.20有19岁
- 2000.12.20和2000.12.20有19岁
- 2020.12.20和2020.10.10有20岁
- 2020.12.20和2020.12.10有20岁
计算一元二次方程的根
#include <stdio.h>
/***********SPACE***********/
#include <math.h>
main()
{
double x1,x2,imagpart;
float a,b,c,disc,realpart;
scanf("%f%f%f",&a,&b,&c);
printf("the equation");
/***********SPACE***********/
if(fabs(a) <= 1e-6)
printf("is not quadratic
");//不是二次函数
else
disc=b*b-4*a*c;
if(fabs(disc) <= 1e-6)//有两个相同的根
printf("has two equal roots:%-8.4f
",-b/(2*a));
/***********SPACE***********/
else if(fabs(disc) > 0){//有两个不同的根
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
printf("has distinct real roots:%8.4f and %.4f
",x1,x2);
}else{//有两个虚根
realpart=-b/(2*a);
imagpart=sqrt(-disc)/(2*a);
printf("has complex roots:
");
printf("%8.4f=%.4fi
",realpart,imagpart);
printf("%8.4f-%.4fi
",realpart,imagpart);
}
}
解一元二次方程
- disc=b2-4ac.
- disc>0有两个不同的根
- disc=0有两个相同的根
- disc<0没有根
#include"stdio.h"
#include"math.h"
main(){
float a,b,c;
float disc, x, y;
scanf("%f%f%f",&a,&b,&c);
disc = b*b-4*a*c;
if(disc > 0){
x = (-b+sqrt(disc)) / (2*a);
y = (-b-sqrt(disc)) / (2*a);
}else if(disc == 0){
y = x = (-b+sqrt(disc)) / (2*a);
}else{
printf("error");
}
printf("%f %f",x,y);
}
圆周率PI
- 功能:用下面的公式求pi的近似值。直到最后一项的绝对值小于
指定的数(参数num)为止。 - pi/4=1-1/3+1/5-1/7+......
- 例如:程序支行后,输入0.0001,则程序输出3.1414
#include<stdio.h>
/***********SPACE***********/
float fun(【num】){
int n=1,sign=1;
float sum=0.0,t=1.0;
/***********SPACE***********/
while(t【>=】num){//注意符号
sum+=sign*t;
/***********SPACE***********/
sign=【-sign】;
n+=2;
/***********SPACE***********/
【t=1.0/n】;//注意:要用1.0/n,不能用1/n
}
/***********SPACE***********/
return 【4*sum】;
}
main(){
float num=0.0001;
printf("pi=%.4f
",fun(num));
}
#include <stdio.h>
#include <math.h>
main(){
int s,n;
/***********SPACE***********/
double pi,t;
t=1;pi=0;n=1;s=1;
/***********SPACE***********/
while(fabs(t)>=2e-6)//注意是fabs(t)不是t
{
pi+=t;
n+=2;
s=-s;
t=s/n;
}
/***********SPACE***********/
pi*=4;
printf("pi=%.6f
",pi);
}
人口普查
- 功能:1982年我国第三次人口普查,结果全国人口为10.3亿,假如人口增长率为5%。编写一个程序求在公元多少年总人口翻了一番。
#include<stdio.h>
void main(){
double p1=10.3,p2,r=0.05;
int n=1;
/***********SPACE***********/
p2=p1*(1+r);//注意:不能直接+r
/***********SPACE***********/
while(p2<=2*p1)//翻了一番表示是原来的2倍
{
n++;
/***********SPACE***********/
p2=p2*(1+r);
}
/***********SPACE***********/
n=1982+p2;//p2是经过的年数,问的是在哪一年达到要求,所以要+1982
printf("%d年人口总数翻了一番,即为%g亿人
",n,p2);
}
- 数学公式:10.3×(1+0.05)p2
- 请支持正版,文章都是免费。防侵权,原作者博客MrFlySand
企业奖金
- 功能:企业发放的奖金根据利润提成。利润(i)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润i,求应发放奖金总数?
#include <stdio.h>
main()
{
long int i;
double bonus1,bonus2,bonus4,bonus6,bonus10,bonus;
scanf("%ld",&i);
bonus1=100000*0.1;bonus2=bonus1+100000*0.75;
bonus4=bonus2+200000*0.5;
bonus6=bonus4+200000*0.3;
bonus10=bonus6+400000*0.15;
if(i<=100000)
bonus=i*0.1;
/***********SPACE***********/
else if(i<=200000)//注意:不能填i>100000 $$ i<=200000,因为在前面小于100000的已经判断过了
bonus=bonus1+(i-100000)*0.075;
/***********SPACE***********/
else if(i<=400000)
bonus=bonus2+(i-200000)*0.05;
/***********SPACE***********/
else if(i<=600000)
bonus=bonus4+(i-400000)*0.03;
else if(i<=1000000)
bonus=bonus6+(i-600000)*0.015;
else
bonus=bonus10+(i-1000000)*0.01;
/***********SPACE***********/
printf("%s
", );("bonus=%d",bonus);
}
功能:已知X、Y、Z分别表示0~9中不同的数字,编程求出使算式
XXXX+YYYY+ZZZZ=YXXXZ成立时X、Y、Z的值,并要求打印该
算式。
#include <stdio.h>
#include <stdlib.h>
main()
{
int x,y,z;
/***********SPACE***********/
for(x=0;x<10;x++)
for(y=0;y<10;y++)
{
if(y==x)//x和y不能相等
continue;
for(z=0;z<10;z++)
{
/***********SPACE***********/
if(z==x || z==y) //z和x不能相等,z和y不能相等
continue;
/***********SPACE***********/
if(1111*(x+y+z)== 10000*y + 1110*x + z)
{
printf("x=%d,y=%d,z=%d
",x,y,z);
/***********SPACE***********/
printf("%d+%d+%d=%d
",1111*x,1111*y,1111*z,10000*y + 1110*x + z);
exit(0);
}
}
}
}
?2 * 7?=3848 输出问号的值
功能:算式:?2 * 7?=3848中缺少一个十位数和一个个位数。编程求出使该算式成立时的这两个数,并输出正确的算式。
#include <stdio.h>
#include <stdlib.h>
main()
{
int x,y;
/***********SPACE***********/
for(x=1;x<10;x++)//十位上的数是1~9
/***********SPACE***********/
for(y=0;y<10;y++)//个位上的数是0~9
/***********SPACE***********/
if((10*x+2) * (70+y)==3848){//注意:+2
/***********SPACE***********/
printf("%d*%d=3848
",x,y);
exit(0);
}
}
功能:一个40磅重的板碎成4块,每块正好是一个整数磅,且用这4块当砝码能称出1~40磅的整数重量的物体。编程求这4块的各自重量。
#include <stdio.h>
#include <stdlib.h>
main()
{
int i,j,k,l,p,t1,t2,t3,t4;
for(i=1;i<38;i++)
/***********SPACE***********/
for(【j=i】;j<38-i;j++)
/***********SPACE***********/
for(k=j;k<【38-i-j;k++)
{
l=40-i-j-k;
for(p=1;p<40;p++)
{
for(t1=-1;t1<2;t1++)
for(t2=-1;t2<2;t2++)
for(t3=-1;t3<2;t3++)
for(t4=-1;t4<2;t4++)
/***********SPACE***********/
if(【】==p) goto next;
break;
/***********SPACE***********/
next:if(p==【39】){
printf("%d,%d,%d,%d
",i,j,k,l);
exit(0);
}
}
}
printf("error.");
}
- 有一个天平,左边可以放物品和砝码,右边只能放砝码
- 当左边放砝码时为-1,当右边放砝码时+1
功能:编程求任意给两个日期(Y0年M0月DO日和Y1年M1月D1日)相差的天数。
#include <stdio.h>
#include <stdlib.h>
int f(int y){
return(y%4==0&&y%100!=0||y%400==0); /*闰年1,平年0*/
}
int mday(int y,int m){
return(31-((m==4)+(m==6)+(m==9)+(m==11))-(3-f(y))*(m==2));/*这个月有几天*/
}
int yday(int y,int m,int d) {/*这一年过了多少天*/
return(d+31*((m>1)+(m>3)+(m>5)+(m>7)+(m>8)+(m>10))+30*((m>4)+(m>6)+(m>9)+(m>11))+(28+f(y))*(m>2));
}
int yend(int y,int m,int d){/*这一年剩下多少天*/
return(365+f(y)-yday(y,m,d));
}
main(){
int y1,m1,d1;//过去的日期
int y2,m2,d2;//现在的日期
int n,i;
printf("y1,m1,d1=");
scanf("%d,%d,%d",&y1,&m1,&d1);//输入第一个的日期
/***********SPACE***********/
if(m1<1 || m1>12 || d1<1 || d1>mday(y1,m1)) //不在规定日期范围内
exit(0);
printf("y2,m2,d2=");
scanf("%d,%d,%d",&y2,&m2,&d2);//输入第二个的日期
/***********SPACE***********/
if(m1<1 || m1>12 || d1<1 || d1>mday(y2,m2)) //不在规定日期范围内
exit(0);
if(y1>y2 || y1==y2 && m1>m2 || y1==y2 && m1==m2 && d1>d2){
//y1如果大于y2,则用y1表示过去的时间
n=y1;y1=y2;y2=n;
n=m1;m1=m2;m2=n;
n=d1;d1=d2;d2=n;
}else{
/***********SPACE***********/
n=yend(y1,m1,d1)/*计算以前剩下的天数*/ + yday(y2,m2,d2);/*计算现在过了多少天*/
/***********SPACE***********/
for(i=y1+1;i<y2;i++)//计算相差多少年
n+=365+f(i);
}
printf("%d.%d.%d--->%d.%d.%d:n=%d
",y1,m1,d1,y2,m2,d2,n);//n是相差的天数
}
功能:三角形的面积为:area=sqrt(s*(s-a)*(s-b)*(s-c)).
其中,s=(a+b+c)/2
,a、b、c为三角形三条边的长。定义两个带参数的宏,一个用来求s,另一个用来求area。编写程序,在程序中用带参数的宏求面积area。
#include <stdio.h>
#include "math.h"
/***********SPACE***********/
#define S(x,y,z) (x+y+z)/2
#define AREA(s,x,y,z) sqrt(s*(s-x)*(s-y)*(s-z))
main()
{
double area;
float a,b,c,s;
printf("a,b,c=");
/***********SPACE***********/
scanf("%f,%f,%f",&a,&b,&c);
if(a+b>c && b+c>a && c+a>b)
{
/***********SPACE***********/
s=S(a,b,c);//注意:调用自定义函数
/***********SPACE***********/
area=AREA(s,a,b,c);
printf("area=%f
",area);
}
}
二分法求方程的根
- 功能:用二分法求方程2X3+4X2+3X-6=0在(-10,10)之间的根,其中 X^n代表X的n次方。
#include <stdio.h>
# include <math.h>
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;
/***********SPACE***********/
}while(fx1*fx2 > 0);
do{
x0=(x1+x2)/2;
fx0=x0*((2*x0-4)*x0+3)-6;
/***********SPACE***********/
if(fx0*fx1 < 0){
x2=x0;
fx2=fx0;
}else{
x1=x0;
fx1=fx0;
}
}while(fabs(fx0) >= 1e-5);
printf("x=%6.2f
",x0);
}
功能:不用第三个变量,实现两个数(5,8)的对调操作。
#include <stdio.h>
main()
{
int a,b;
scanf("%d %d",&a,&b);
printf("a=%d,b=%d
",a,b);
/***********SPACE***********/
a= a+b ;//13=5+8
/***********SPACE***********/
b= a-b ;//5=13-8
/***********SPACE***********/
a= a-b ;//8=13-8
printf("a=%d,b=%d
",a,b);
}
功能:编写程序,输出 1000 以内的所有完数及其因子。
- 说明:所谓完数是指一个整数的值等于它的因子之和。
- 例如“ 6 的因子是 1 、 2 、 3 ,而 6=1+2+3 ,故 6 是一个完数。
#include <stdio.h>
main()
{
int i,j,m,s,k,a[100] ;
for(i=1 ; i<=1000 ; i++ )
{
m=i ; s=0 ; k=0 ;
for(j=1 ; j<m ; j++)
/***********SPACE***********/
if(m%j==0){//j是m(完数)的因子
s=s+j ;//完数m的和
/***********SPACE***********/
a[k++]=j ;//将因子放入数组中
}
if(s!=0 && s==m)
{
/***********SPACE***********/
for(j=0 ;j<k ;j++)//k代表最大的数组下标
printf("%4d",a[j]);
printf(" =%4d
",i);//因子之和
}
}
}
亲密数
- 功能:如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子 ( 包括1,不包括B本身 ) 之和等于A,则将整数A和B称为亲密数。求 3000 以内的全部亲密数。
#include <stdio.h>
#include <stdio.h>
main() {
int a, i, b, n ;
printf("Friendly-numbers pair samller than 3000:
") ;
for(a=1 ; a<3000 ; a++)
{
for(b=0,i=1 ; i<=a/2 ; i++ )
/***********SPACE***********/
if(!(a%i)){//将a的所有因子相加给b
b=b+i;
}
for(n=0,i=1 ; i<=b/2 ; i++)
/***********SPACE***********/
if(!(b%i)){//将b的所有因子相加给n
n=n+i ;
}
/***********SPACE***********/
if(b==n && a<b)//
printf("%4d~%4d
",a,b) ;
}
}
功能:一个自然数被 8 除余 1 ,所得的商被 8 除也余 1 ,再将第二次的商被8 除后余7 ,最后得到一个商为a。又知这个自然数被17除余4,所得的商被17除余15,最后得到一个商是a的2倍。编写程序求这个自然数。
#include <stdio.h>
main( ) {
int i,n,a ;
i=0 ;
while(1){
if(i%8==1) {//被 8 除余 1
n=i/8 ;
if(n%8==1){//被 8 除余 1
n=n/8 ;
/***********SPACE***********/
if(n%8==7) //被8 除后余7
a=a/8 ;
}
}
if(i%17==4) {//被17除余4
n=i/17 ;
if(n%17==15)//被17除余15
n=n/17 ;
}
if(2*a==n) {
printf("result=%d
",i) ;
/***********SPACE***********/
break ;//输出后跳出循环
}
/***********SPACE***********/
i++;//使i的值递增
}
}
功能:识别输入的字符串,每个单词输出一行
#include <stdio.h>
#include <string.h>
void main()
{
int c;
int inspace;
/***********SPACE***********/
inspace=0;
while((c = getchar()) != '
'){
if(c == ' ' || c == ' ' || c == '
'){
/***********SPACE***********/
if(inspace==0){
inspace = 1;
putchar('
');
}
}else{
inspace = 0;
/***********SPACE***********/
putchar(c);
}
}
}
题目:下面程序的功能是用递归法求n!。
#include <stdio.h>
void main()
{
/***********SPACE***********/
long fac();
int n;
long y;
printf("input an integer number:");
scanf("%d",&n);
/***********SPACE***********/
y=fac(n);
printf("%d!=%ld
",n,y);
}
long fac(int n)
{
long f;
if(n<0)
printf("n<0,data error!");
else if(n==0,n==1)
f=1;
else
/***********SPACE***********/
f=fac(n-1)*n;//注意:是fac(n-1),不是fac(n--)
return(f);
}
功能:下面程序是计算 sum=1+(1+1/2)+(1+1/2+1/3)+...(1+1/2+...1/n)的值
- 例如:当n=3,sum=4.3333333
-------------------------------------------------------*/
#include <stdio.h>
double f(int n)
{
int i;
double s;
s=0;
for(i=1;i<=n;i++)
/***********SPACE***********/
s =s + 1.0/i;
return s;
}
main()
{
int i,m=3;
double sum=0;
for(i=1;i<=m;i++)
/***********SPACE***********/
sum=sum + f(i);
/***********SPACE***********/
printf("%f
",sum);//注意:要用%f,不能用%lf
}
变号操作
- 功能:调用函数fun计算m=1-2+3-4+……+9-10,并输出结果。
#include <stdio.h>
int fun( int n)
{
int m=0,f=1,i;
/***********SPACE***********/
for(i=1;i<=n;i++)
{
m+=i*f;
/***********SPACE***********/
f=-f;//变号操作
}
/***********SPACE***********/
return m;
}
main()
{
printf("m=%d
", fun(10));
}
统计数字字符的个数
- 给定程序中,程序的功能是:从键盘输入的字符中统计数字字符的个数,用换行符结束循环。请填空。
- 例如:输入:CADX2012JSJ0623
- 输出:8
#include<stdio.h>
void main()
{
int n=0,c;
c=getchar();
/***********SPACE***********/
while(c!='
')
{
/***********SPACE***********/
if(c>='0' && c<='9')
n++;
c=getchar();
}
printf("%d",n);
}
解一元二次方程
- 请补充main函数,该函数的功能是求方程
ax*x+bx+c=0
的两个实数根。方程的系数a、b、c从键盘输入,如果判别式(disc=b*b-4ac)
小于0,则要求重新输入a、b、c的值。 - 例如:当a=1,b=2,c=1时,方程的两个根分别是x1=-1.00,
x2=-1.00。
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
void main(){
float a,b,c, disc,x1,x2;
do{
printf("Input a,b,c:");
scanf("%f,%f,%f",&a,&b,&c);
disc=b*b-4*a*c;
if(disc<0)
printf("disc=%f
Input again!
",disc);
}while(disc>=0);
printf("*******the result*******
");
/***********SPACE***********/
x1=(-b+sqrt(disc)/(2*a);//注意:填写sqrt(disc)
/***********SPACE***********/
x2=(-b-sqrt(b*b*-4*a*c))/(2*a);
printf("
x1=%6.2f
x2=%6.2f
",x1,x2);
}
斐波那契数列
- 斐波那契数列的前几项是:1,1,2,3,5,8,13,21...。编程输出该数列,直到某项的值大于1000为止,每行输出10个。请将源程序
#include <stdio.h>
main(){
int a=1,b=1,c,i;
printf(%-6d%-6d",a,b);
for(i=3;;i++){
c=a+b;
/***********SPACE***********/
if(c>1000) break;
/***********SPACE***********/
a=b;
/***********SPACE***********/
b=c;
/***********SPACE***********/
printf("%d",c);
if(i%10==0)
/***********SPACE***********/
printf("
");
}
}
功能:求满足1+2+3+...n<500中最大的N,并求其和。
#include <stdio.h>
void main()
{
/***********SPACE***********/
int n=0;sum;
/***********SPACE***********/
while(sum<500】)
{
/***********SPACE***********/
n++;//n++要放在sum+=n前面
/***********SPACE***********/
sum+=n;
}
/***********SPACE***********/
printf("n=:%d
",【n】);
printf("1+2+3+...+%d<500
",sum);
}
四则运算
- 功能:编写程序,输入两个整数,和+、-、*、/之中的任意一个运算符,输出计算结果。
#include<stdio.h>
void main(){
/***********SPACE***********/
【int】 a,b;
char c;
printf("请输入一个运算符:
");
/***********SPACE***********/
scanf("【%c】",&c);
printf("请输入两个整数:
");
/***********SPACE***********/
scanf("%d,%d",【&a,&b】)
/***********SPACE***********/
【switch】(c)
{
case '+':printf("%f
",a+b);break;
case '-':printf("%f
",a-b);break;
case '*':printf("%f
",a*b);break;
case '/':printf("%f
",a/b);break;
/***********SPACE***********/
【default】:printf("错误");
}
}
解一元二次方程
- 编程序,求方程
ax*x+bx+c=0
的解;输入a,b,c的值
#include<stdio.h>
#include<math.h>
void main()
{
float a,b,c,t;
double x1,x2;
printf("请由高次到低次顺序输入系数:
");
/***********SPACE***********/
scanf("【%f%f%f】",&a,&b,&c);//注意:输入格式不要有空格
/***********SPACE***********/
t=【b*b-4*a*c】;
/***********SPACE***********/
if(【t<0】)
printf("方程无实根
");
/***********SPACE***********/
if(【t=0】){
x1=-(b/2/a);
printf("方程有两个相等实根,x1=x2=%5.2f
",x1);
}
/***********SPACE***********/
if(【t>0】){
x1=-(b+sqrt(t))/2/a;
x2=-(b-sqrt(t))/2/a;
printf("方程有两个不等实根,x1=%5.2f,x2=%5.2f
",x1,x2);
}
}
取出各个位求和
- 功能:从键盘输入一个整数,计算其各位数字之和。比如输入整数31421,则输出11
#include<stdio.h>
main(){
int i,sum=0,a;
/***********SPACE***********/
scanf("%d",【&i】);//注意:用&i,不用&a
/***********SPACE***********/
while(【i>0】)
/***********SPACE***********/
a=【i%10】;
sum=sum+a;
/***********SPACE***********/
i=【i/10】;
/***********SPACE***********/
【printf】("%d
",sum);
}
小球落地
- 小球从100米高处落下,每次跳原来一半高,请问第10次落地时经过的距离,及第10次弹跳的高度。
#include<stdio.h>
main()
{
/***********SPACE***********/
【float】 s=100.0,h=100.0;
/***********SPACE***********/
【int i】;
/***********SPACE***********/
for(i=2;i<=10;i++){
h=h/2;
/***********SPACE***********/
s=s+2*h;
}
/***********SPACE***********/
printf("%.2f,%.2f",【s,h/2】);//最后一次落下要/2
}
次数 落下的高度 弹起的高度(h) 总和s
1 100 0 100
2 50 50 200
3 25 25 250
4(假设是最后一次) 12.5 262.5
红球白球黑球
- 功能:从三个红球、五个白球、六个黑球中任意取出八个球,且
其中必须有白球,输出所有可能的方案。请填空
#include<stdio.h>
main(){
/***********SPACE***********/
【int】 i,j,k;
for(i=0;i<=3;i++)
/***********SPACE***********/
for(【j=1】;j<=5;j++)//注意:至少有一个白球
{
/***********SPACE***********/
k=【8-i-j】;
/***********SPACE***********/
if(【k>=0 && k<=6】)//注意:黑球的个数是0-6个
/***********SPACE***********/
【printf】("%3d %3d %3d
",i,j,k);
}
}
人民币转换
- 题目:下面程序的功能是完成用一元人民币换成一分、两分、五分
的所有兑换方案。请填空。
#include<stdio.h>
/***********SPACE***********/
【main()】//注意:不要填math.h
{
/***********SPACE***********/
int i,j,k,l=【0】;
for(i=0;i<=20;)
for(j=0;j<=50;j++){
/***********SPACE***********/
k=【100-5*i-2*j】;
/***********SPACE***********/
if(【k>=0】){
printf("%2d %2d %2d ",i,j,k);
/***********SPACE***********/
【l++】
if(l%5==0)
printf("
");
}
}
}
求累加
- 求3+9+27+81+243+...这样的数之和,若累加数大于5000时,则结束累加。
#include <【math.h】>
#include <stdio.h>
/***********SPACE***********/
#【define】 N 3
main(){
int s,i;
s=0;
i=1;
/***********SPACE***********/
while( 【s<=5000】 ){
s=s+【pow(N,i)】;//注意:不能填pow(3,i)
i++;
}
/***********SPACE***********/
【printf】("%d
",s);
}
求分数数列
- 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13……。求出这个数列的前20项之和。要求:按四舍五入的方式精确到小数点后第二位。将下列程序补充完整
#include <stdio.h>
main(){
int n;
/***********SPACE***********/
【float】 a=2.0,b=1.0,t,s=0;
/***********SPACE***********/
for(n=1;【n<=20】;n++)
/***********SPACE***********/
{s=s+【a/b】;
/***********SPACE***********/
t=a;【a=a+b】;b=t;
}
/***********SPACE***********/
printf("%【.2】
",s);//注意:保留2位小数
}
输出n个素数
- 题目:以下程序输入n和n个大于1的正整数,输出其中素数。
- 如输入:5 19 93 11 37 15 则输出:19 11 37
- 例示说明:先输入n为5,再输入5个正整数,输出5个整数中的素数
#include <stdio.h>
void main()
{
int n, a, i, j, ct;
/***********SPACE***********/
scanf( "%d",【&n】);
/***********SPACE***********/
for ( i=0;i【<】n; i++ ){//输出n个素数
/***********SPACE***********/
【ct=0】;
scanf( "%d", &a );
for( j=2; j<a; j++ ){//判断a是否为素数
/***********SPACE***********/
if (【a%j==0】)//如果j是a的因子,则ct不等于0
ct++;
}
/***********SPACE***********/
if (ct【==】0)
printf( "%d ", a );//a是素数
}
printf( "
" );
}
分数数列的前20项和
- 题目:一个数列是:3/5,5/7,7/9,9/11,...求这个数列前20项的和。
#include<stdio.h>
main(){
int i;
/***********SPACE***********/
【float】 a=3.0,b=5.0,s=0.0;
/***********SPACE***********/
for(i=0;【i<20】;i++){
/***********SPACE***********/
s=【s+a/b】;
/***********SPACE***********/
a=【a+2】;//注意:最好不要填a=b
/***********SPACE***********/
b=【b+2】;
}
printf("s=%7.2f
",s);
}
字母转换
- 题目:题目:面程序的功能是将大写字母变成小写字母后的第三个字母。其中X变成a,Y变成b,Z变成c.请填空。
#include<stdio.h>
main()
{
char c;
/***********SPACE***********/
【printf】("请输入任意一字母:");
/***********SPACE***********/
scanf("%c",【&c】);
/***********SPACE***********/
while(【c!='
'】){
/***********SPACE***********/
//先将大写字母转成小写字母+32,变成小写字母后的第三个字母+3,一共+35
if(c>='A'&&c<=【'W'】)
c=c+35;
else if(c>='X'&&c<='Z')//如果是Z变成小写字母z(+32),变成c(-26+3=-23),32-23=9
/***********SPACE***********/
【c=c+9】;
}
printf("%c",c);
}
}
两个数由小到大排序输出
- 题目:下面程序的功能是将从键盘输入的两个数由小到大排序输出。当输入两个相等数时结束循环。
#include<stdio.h>
main(){
/***********SPACE***********/
【float】 a,b;
/***********SPACE***********/
scanf("%f%f",【&a,&b】);
/***********SPACE***********/
while(【a!=b】){
/***********SPACE***********/
if(【a<b】){
a=a+b;
/***********SPACE***********/
【a=a-b】;
a=a-b;
}
printf("%d,%d
",a,b);
scanf("%d%d",&a,&b);
}
}
总结
- 前言:文章是根据学校题库(湖北职考)和自己学习整理的知识点,如果出现错误的知识点请及时和博主MrFlySand联系或学习。
- 希望你学习的不是知识和代码,而是编程和培养解决事情的能力。如果你只为了学而学,没有自己的独立分析和见解,只是照猫画虎,意义不大。
【】
内是要填写的内容,要运行时要删除【】
- 本文章主要试用于考试的一些浅规则,实际开发有些地方不必如此。
- 用
double
定义,用%f
输出,不能用%lf
,如:代码。如果代码中有对应的,则用对应的输出格式 - 有宏定义一定要用宏定义,如:代码
- 如果有浮点数用
float
,不用double
,如:代码 - 保留2位小数用
%.2f
,保留3位小数用%.3f
- 运算关系式与最近定义的字母有关,如:代码
- 注意:书写时不能写成≥,而是>=