c语言练习题.docx
《c语言练习题.docx》由会员分享,可在线阅读,更多相关《c语言练习题.docx(45页珍藏版)》请在冰豆网上搜索。
c语言练习题
1停车场收费问题
一个停车场的标准收费是3小时之内收5元,超过3小时,每增加1小时加收2元;如果时间不是整数,按比例收取,例如:
如果输入为3.6小时,则费用为5+(3.6-3)*2=6.2元。
最高收费为40元。
假设任何车辆的停车时间都不超过24小时。
编写程序,计算每辆车的停车费。
(注意输出结果小数点后保留两位)
输入
#include
intmain()
{
doublem,x;
printf("输入停车时间x:
");
scanf("%lf",&x);
if(x<=24)
{
if(x<3.0)
{m=5.0;
printf("%lf\n",m);}
elseif(x>3.0)
{m=5.0+2.0*(x-3.0);
if(m<=40)
printf("%lf\n",m);}
}
else
printf("输出停车费用40元\n");
return0;
2.#include
intmain()
{doublex,m;
printf("输入停车时间(x):
");
scanf("%lf",&x);
if(x<=24)
{
if(x<=3.0)
printf("停车费用5元\n");
if(x>3)
m=5.0+2.0*(x-3.0);
if(m<=40)
printf("%6.2f\n",m);}
else
printf("停车费用40元\n");
}
}
2计算细菌数量
一种细菌的繁殖速度是每天成倍增长。
例如:
第一天有10个,第二天就变成20个,第三天变成40个,第四天变成80个,……。
现在给出第一天的日期和细菌数目,要你写程序求出到某一天的时候,细菌的数目。
3计算邮资计算邮资:
用户输入:
邮件的重量,以及是否加快
计算规则:
重量在1克以内(包括1克),基本费0.8元。
超过1克的部分,按照0.5元/克的比例加收超重费。
如果用户选择加快,多收2元。
#include
usingnamespacestd;
intmain()
{doublex,sum;
charexp;
while(cin>>x>>exp)
{
if(x<=1&&exp=='n')
sum=0.8;
if(x<=1&&exp=='y')
sum=2.8;
if(x>1&&exp=='n')
sum=0.8+(x-1)*0.5;
if(x>1&&exp=='y')
sum=0.8+(x-1)*0.5+2;
cout<}
return0;
}
#include
usingnamespacestd;
intmain()
{
intx,y;//变量定义,此处假设需要定义两个变量,均定义为整型
while(cin>>x>>y)
{
你对一组输入的一次处理过程代码
}
return0;
}
C:
#include
usingnamespacestd;
intmain()
{
intx,y;//变量定义,此处假设需要定义两个变量,均定义为整型
while(scanf(%x%y",&x,&y)!
=EOF)
{
你对一组输入的一次处理过程代码
}
return0;
}
注意:
考虑以下几点,然后直接套用模版就行了:
i)变量定义。
ii)有几个变量需要输入,在while中cin相应的变量。
iii)开始考虑主程序代码,在“{}”中写一次处理过程的代码即可。
4学分绩点计算
北京大学对本科生的成绩施行平均学分绩点制(GPA)。
既将学生的实际考分根据不同的学科的不同学分按一定的公式进行计算。
公式如下:
实际成绩绩点
90——1004.0
85——893.7
82——843.3
78——813.0
75——772.7
72——742.3
68——712.0
64——671.5
60——631.0
60以下0
1.一门课程的学分绩点=该课绩点*该课学分
2.总评绩点=所有学科绩点之和/所有课程学分之和
现要求你编写程序求出某人A的总评绩点(GPA)
。
#include
intmain()
{
intstr1[10],str2[10],n,i;//定义两个数组分别表示每门课的学分,所得绩点
doubleh,GPA,sum=0,s=0;//定义双精度变量h表示学分,GPA总评绩点,sum表示所有学科绩点之和,s表示所有课程学分之和。
scanf("%d",&n);
for(i=0;i{
scanf("%d",&str1[i]);
s=s+str1[i];
}
for(i=0;i{
scanf("%d",&str2[i]);
if(str2[i]<=100&&str2[i]>=90)
h=4.0;
elseif(str2[i]<=89&&str2[i]>=85)
h=3.7;
elseif(str2[i]<=84&&str2[i]>=82)
h=3.3;
elseif(str2[i]<=81&&str2[i]>=78)
h=3.0;
elseif(str2[i]<=77&&str2[i]>=75)
h=2.7;
elseif(str2[i]<=74&&str2[i]>=72)
h=2.3;
elseif(str2[i]<=71&&str2[i]>=68)
h=2.0;
elseif(str2[i]<=67&&str2[i]>=64)
h=1.5;
elseif(str2[i]<=63&&str2[i]>=60)
h=1.0;
else
h=0;
sum=sum+h*str1[i];
GPA=sum/s;
}
printf("%.2f\n",GPA);
return0;
}
5一个笼子里面关了鸡和兔子(鸡有2只脚,兔子有4只脚,没有例外)。
已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物
#include
intmain()
{
inta,min,max,s;
scanf("%d",&s);
while(s>=1)
{
scanf("%d",&a);
if(a%2==1)
{
min=0;
max=0;
}
else
if(a%4==0)
{
min=a/4;
max=a/2;
}
else
{
min=(a-2)/4+1;
max=a/2;
}
printf("%d%d\n",min,max);
s--;
}
return0;
}
5
通过指针变量访问整型变量
#include
intmain()
{
inta=100,b=10;//定义整型变量a,b并初始化
int*pointer_1,*pointer_2;//定义指向整型数据的指针变量pointer_1,pointer_2;
pointer_1=&a;//把变量a的地址赋给指针变量pointer_1
pointer_2=&b;//把变量b的地址赋给指针变量pointer_2
printf("a=%d,b=%d\n",a,b);//输出变量a和b的值
printf("*pointer_1=%d,*pointer_2=%d\n",*pointer_1,*pointer_2);//输出变量a和b的值
return0;
}
6输入a和b两个整数,按先大后小的顺序输出a和b
#include
intmain()
{
int*pointer_1,*pointer_2,*pointer_3,a,b;//*pointer_1,*pointer_2的类型是指向整型的指针变量
printf("pleaseentertwointegernumbers:
");
scanf("%d,%d",&a,&b);//输入两个整数
pointer_1=&a;//使p1指向变量a
pointer_2=&b;//使p2指向变量b
if(a
{pointer_3=pointer_1;//将p1,p2的值互换
pointer_1=pointer_2;
pointer_2=pointer_3;
}
printf("a=%d,b=%d\n",a,b);//输出a,b
printf("max=%d,min=%d\n",*pointer_1,*pointer_2);//输出p1,p2所指向变量的值
return0;
}
7,函数嵌套调用
输入3个整数,要求由大到小输出,用函数调用。
#include
intmain()
{
voidexchange(int*q1,int*q2,int*q3);
inta,b,c,*p1,*p2,*p3;
printf("pleaseenterthreenumbers:
");
scanf("%d,%d,%d",&a,&b,&c);
p1=&a;
p2=&b;
p3=&c;
exchange(p1,p2,p3);
printf("theolderis\n:
");
return0;
}
voidexchange(int*q1,int*q2,int*q3)
{
voidswap(int*pt1,int*pt2);
if(*q1<*q2)swap(q1,q2);
if(*q1<*q3)swap(q1,q3);
if(*q2<*q3)swap(q2,q3);
}
voidswap(int*pt1,int*pt2)
{inttemp;
temp=*pt1;
*pt1=*pt2;
*pt2=temp;
}
8,改写大小写,要求从键盘输入大写字母,从显示器上输出小写字母
#include
intmain()
{
charc1,c2;
c1=getchar();
c2=c1+32;
putchar(c2);
putchar('\n');
return0;
}
9输入三个数,a,b,c要求按由小到大顺序输出。
#include
intmain()
{
floata,b,c,t;
printf("pleaseenterthreenumbers:
");
scanf("%f,%f,%f",&a,&b,&c);
if(a
{t=a;按由小到大必须是‘a>b’形式交换位置使小的在前,若按由大到小则是‘a
a=b;
b=t;
}
if(a{t=a;
a=c;
c=t;
}
if(b{t=b;
b=c;
c=t;
}
printf("%5.2f,%5.2f,%5.2f",a,b,c);
return
10给定一个正整数k(1即m=1+2*2*2+…+k*k*k。
输入
13#include
intmain()
{
intk,m=0,i=1;
scanf("%d",&k);
if(1{
while(i<=k)
{
m=m+i*i*i;
i+=1;
}
printf("%d",m);
}
else
printf("error");
return0;
}
用一个字符串表示一段基因,例如:
“CTATGGGTTT”。
两段基因的相似度定义为它们所包含的最大公共子串的长度。
例如:
“CCTTGG”和“TGGGC”的最大公共子串为“TGG”,它的长度为3,则我们称“CCTTGG”和“TGGGC”的相似度为3。
现给定两段基因,要求计算它们的相似度。
1
11晶晶的朋友贝贝约晶晶下周一起去看展览,但晶晶每周的1、3、5有课必须上课,请帮晶晶判断她能否接受贝贝的邀请,如果能输出OK;如果不能则输出NO
#include
#include
voidmain()
{
intw,c,y,m,d;//c世纪y年w星期d日m月;
scanf("%d%d%d",&y,&m,&d);
c=y/100;y=y-c*100;//分离世纪与年;
if(m==1)
{
m=13;
if(y==00)
{
y=99;
c--;
}
y--;
}
if(m==2)
{
m=14;
if(y==0)
{
y=99;
c--;
}
y--;
}
w=y+y/4+c/4-2*c+26*(m+1)/10+d-1;//蔡勒公式
switch(w%7)
{
case1:
case3:
case5:
printf("NO\n");break;
case2:
case4:
case6:
case0:
printf("YES\n");break;
}
}
12求一个长度不大于100的字符串的长度,要求不使用strlen方法,并且使用到字符指针。
原文地址:
1023--求字符串长度作者:
小礼子地盘
求一个长度不大于100的字符串的长度,要求不使用strlen方法,通过自定义的#include
intmain()
{
intlength(char*p);
intlen;
charstr[100];
gets(str);
len=length(str);
printf("%d\n",len);
return0;
}
intlength(char*p)
{
intn;
n=0;
while(*p!
='\0')
{
n++;
p++;
}
return(n);
}函数实现字符串长度的计算。
函数定义为:
intGetStrLen(char*pStr)
Input
一行字符串,使用(gets(str)方法读取此行字符串)。
Output
输出只有一行,只包含一个整数,表示字符串的长度。
具体程序:
#include
main(){chara[101];
intsum=0,i;gets(a);
for(i=0;a[i]!
='';i++)
sum++;
printf("%dn",sum);
}
描述
求前n(1+2!
+3!
+...+n!
)。
#include
intmain()
{
inti,n,r,temp;
scanf("%d",&n);
r=0;
temp=1;
for(i=1;i<=n;i++)
{
temp=temp*i;
r+=temp;
}
printf("%d\n",r);
return0;
}
有一个分数序列2/1,3/2,5/3,8/5,13/8,21/13,....求这个分数序列的前n项之和
题目:
有一分数序列:
2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
#include
main()
{inti,x,y,a;
floatsum=0;
x=2;
y=1;
for(i=1;i<20;i++)
{
sum+=(float)(x)/y;
//printf("%d/%d\n",x,y);
a=x;
x=x+y;
y=a;
}
printf("%7.5f\n",sum);
}
12在北大校园里,没有自行车,上课办事会很不方便.但实际上,并非去办任何事情都是骑车快,因为骑车总要找车、开锁、停车、锁车等,这要耽误一些时间.假设找到自行车,开锁并车上自行车的时间为27秒;停车锁车的时间为23秒;步行每秒行走1.2米,骑车每秒行走3.0米.请判断走不同的距离去办事,是骑车快还是走路快.
#include
intmain()
{
intn,i,s;
doublet1,t2;
scanf("%d",&n);
while(n>=1)
{
scanf("%d",&s);
t1=s/1.2;
t2=s/3.0+50;
if(t1>t2)
printf("Bike\n");
if(t1printf("Walk\n");
if(t1==t2)
printf("All\n");
n--;
}
return0;
}
#include
voidmain()
{intk,j;
floata[1]={0},t1[10],t2[10];
scanf("%d",&k);for(j=1;j<=k;j++)
{scanf("%f",&a[0]);
t1[j]=50+a[0]/3;
t2[j]=a[0]/1.2;}
for(j=1;j<=k;j++)
{if(t1[j]printf("Bike\n");
elseif(t2[j]printf("Walk\n");
elseprintf("All\n");
}
}
13一张CT扫描的灰度图像可以用一个N*N(0我们假设给定的图像中有且只有一个肿瘤。
在图上监测肿瘤的方法如下:
如果某个点对应的灰度值小于等于50,则这个点在肿瘤上,否则不在肿瘤上。
我们把在肿瘤上的点的数目加起来,就得到了肿瘤在图上的面积。
任何在肿瘤上的点,如果它是图像的边界或者它的上下左右四个相邻点中至少有一个是非肿瘤上的点,则该点称为肿瘤的边界点。
肿瘤的边界点的个数称为肿瘤的周长。
现在给定一个图像,要求计算其中的肿瘤的面积和周长
#include
intmain()
{
inta[100][100],i,j,n,mj=0,zc=0;
scanf("%d",&n);
for(i=0;i<=n-1;i=i+1)
for(j=0;j<=n-1;j=j+1)
scanf("%d",&a[i][j]);
for(i=0;i<=n-1;i=i+1)
{
for(j=0;j<=n-1;j=j+1)
{
if(a[i][j]<=50)
mj=mj+1;
if((i==0||j==0||i==n-1||j==n-1)&&a[i][j]<=50)
zc=zc+1;
else
{
if(((a[i][j+1]>50)||(a[i][j-1]>50)||(a[i+1][j]>50)||(a[i-1][j]>50))&&(a[i][j]<=50))
zc=zc+1;
}
}
}
printf("%d%d\n",mj,zc);
return0;
}
14给定一个正整数k(1即m=1+2*2*2+…+k*k*k。
#include
intmain()
{
inti,k,sum=0;
scanf("%d",&k);
for(i=1;i<=k;i++)
sum=sum+i*i*i;
printf("%d\n",sum);
return0;
}
求前n(1+2!
+3!
+...+n!
)。
输入
#include
intmain()
{
intn,i,t,r;
r=0;t=1;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
t=t*i;
r=r+t;
}
printf("%d\n",r);
return0;
}
15有一个分数序列2/1,3/2,5/3,8/5,13/8,21/13,....求这个分数序列的前n项之和。
#include
intmain()
{
inti,n;
doublesum=0,a=1,b=2,t;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
sum=sum+b/a;
t=b;
b=a+b;
a=t;
}
printf("%.4lf\n",sum);
return0;
}
16一个数如果恰好等于它的因子之和,这个数就成为“完数”。
例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。
编程序打印出1000之内(包括1000)所有的完数,并按如下格式输出其所有因子:
#include
intmain()
{
inti,j,sum=0;
for(i=1;i<=1000;i++)
{
for(j=1;j<=i/2;j++)
if(i%j==0)
sum=sum+j;
if(sum==i)
{
printf("%ditsfactorsare",i);
{
for(j=1;j
if(i%j==0)
printf("%d,",j);
if(i%(i/2)==0)
printf("%d",i/2);
printf("\n");
}
}
sum=0;
}
return0;
}
17将一个数组中的值按逆序重新存放。
例如,原来的顺序为8,6,5,4,1。
要求改为1,4,5,6,8。
#include
intmain()
{
inta[100],i,b[100],k;
scanf("