对应教材为谭浩强《C语言程序设计》,清览云题库又给出了其四、五章的课外习题
#include
#include
//比大小
//有3个整数a,b,c,由键盘输入,输出其中最大的数(使用if-else语句)
#include "stdio.h"
int main(){
int a,b,c,temp,max;
scanf("%d %d %d",&a,&b,&c);
temp=(a>b)?a:b;
max=(temp>c)?temp:c;
printf("%d",max);
return 0;
}
#include
#include
//求平方根
//从键盘输入一个小于1000的正数
//要求输出它的平方根(如果平方根不是整数则输出其整数部分)
int main(){
int i,k;
scanf("%d",&i);
k=sqrt(i);
printf("%d",k);
return 0;
}
#include
#include
//函数求解
//编写一个C程序,输入x的值,输出y相应的值
int main(){
int x,y;
scanf("%d",&x);
y=0;
if(x>0)
y=1;
else if(x <0)
y=-1;
printf("y=%d",y);
return 0;
}
#include
#include
//计算成绩分数所在等级
//给出一百分制成绩,要求输出成绩等级’A’、’B’、’C’、’D’、’E’
//90分以上为‘A’,80~89为‘B’,70~79为‘C’,60~69为‘D’, 60分以下为‘E’
int main(){
float score;
char grade;
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("%c ",grade);
return 0;
}
#include
#include
//按序输出数字
//输入4个整数,要求按由小到大的顺序输出
int main(){
int t,a,b,c,d;
scanf("%d %d %d %d",&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("%d %d %d %d",a,b,c,d);
return 0;
}
#include
#include
//输入任意点坐标,求该点的建筑高度
//有4个圆塔,圆心分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为1,这四个塔的高度为10米
//塔以外无建筑物。输入任意点坐标,求该点的建筑高度(塔外高度为0)
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;
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("%d",h);
return 0;
}
#include
#include
//求方程实根
//编写程序,从键盘输入一个二元一次方程ax2+bx+c=0的三个参数a、b、c(均为整数)
//求此方程的实根。如果方程有实根,则输出实根(精确到小数点后2位,较大实根在前)
//如果没有实根,则输出没有实根的信息
int main(){
int a,b,c;
double p,x1,x2;
scanf("%d %d %d",&a,&b,&c);
p=1.0*b*b-4.0*a*c;
if(p>=0){
x1=(-b+sqrt(p))/2/a;
x2=(-b-sqrt(p))/2/a;
printf("实根为%.2lf,%.2lf",x1,x2);
}
else
printf("无实根!");
}
#include
#include
//按序输出数字
//输入三个整数a,b,c,从小到大排列依次存入a,b,c中并输出
int main(){
int a,b,c,t;
scanf("%d %d %d",&a,&b,&c);
if(a>b){
t=a;
a=b;
b=t;
}
if(b>c){
t=b;
b=c;
c=t;
}
if(a>b){
t=a;
a=b;
b=t;
}
printf("%d %d %d",a,b,c);
}
#include
#include
//计算反应在当前温度T下是否能够自发进行
//一个反应的吉布斯自由能变能够告诉我们该反应在当前温度T下是否能够自发进行。其计算公式为:
int main(){
double g,h,t,s;
scanf("%lf %lf %lf",&h,&t,&s);
g=h-t*s;
if(g<0)
printf("Yes");
else
printf("No");
}
#include
#include
//计算输入序列是否递减
//编写一个程序,从键盘依次读入5个实数,如果整个输入序列不递减,则输出YES,否则输出NO
//(所谓输入序列不递减,指对于序列中连续的两个数n1和n2,满足n1<=n2)
int main(){
double n1,n2,n3,n4,n5;
scanf("%lf %lf %lf %lf %lf",&n1,&n2,&n3,&n4,&n5);
if(n1<=n2||n2<=n3||n3<=n4||n4<=n5)
printf("Yes");
else
printf("No");
}
#include
#include
//输出ISBN中所包含的出版地区的信息
//每本书的封底都有一串号码,比如978-7-111-34081-2,它叫做"国际标准书号"(International Standard Book Number,缩写为ISBN)。它是全世界图书的编码,用来唯一代表一本书。目前ISBN是13位。从组成上看,13位的ISBN可以分为5个区:
//第一区 EAN-UCC前缀 、第二区 组区号、第三区 出版者号、第四区 出版序号、第五区 校验码。
//其中第二区 组区号从第4位数字开始。这部分表明这本书是哪个国家或地区出版的。0或1表示英语国家,2表示法语国家,3表示德语国家,4表示日本,5表示俄语国家,6表示伊朗,7表示中国大陆,89表示韩国,957和986表示台湾,962和988表示香港,99936表示不丹。
//输入一个13位ISBN。输入格式:978-7-111-34081-2
//输入之后,输出ISBN中所包含的出版地区的信息。
//比如:组区号为7,则输出” China”。
//这里我们最低要求识别的地区包括:
//0 English Region
//1 English Region
//2 French Region
//4 Japan
//7 China
//89 South Korea
//957 Taiwan
//986 Taiwan
//962 Hong Kong
//988 Hong Kong
int main(){
int i1,i2,i3,i4,i5;
scanf("%d-%d-%d-%d-%d",&i1,&i2,&i3,&i4,&i5);
switch(i2){
case 0:printf("English Region");break;
case 1:printf("English Region");break;
case 2:printf("French Region");break;
case 4:printf("Japan");break;
case 7:printf("China");break;
case 89:printf("South Korea");break;
case 957:printf("Taiwan");break;
case 986:printf("Taiwan");break;
case 962:printf("Hong Kong");break;
case 988:printf("Hong Kong");break;
}
}
//按代数值由小到大的顺序输出两个数
//输入两个实数,按代数值由小到大的顺序输出这两个数(保留两位小数)
#include
#include
//按代数值由小到大的顺序输出两个数
//输入两个实数,按代数值由小到大的顺序输出这两个数(保留两位小数)
int main(){
float a,b,t;
scanf("%f %f",&a,&b);
if(a>b) {
t=a;
a=b;
b=t;
}
printf("%.2f %.2f",a,b);
return 0;
}
#include
#include
//将大写字母转换为小写字母
//输入一个字符,判别它是否为大写字母,如果是,转换成小写字母,如果不是,不转换
int main(){
char ch;
scanf("%c",&ch);
ch=(ch>='A' && ch <='Z') ? (ch+32) : ch;
printf("%c",ch);
return 0;
}
#include
#include
//数字操作
//输入一个不多于5位的正整数,要求:
//求出它是几位数
//分别输出每一位数字
//按逆序输出各位数字,例如原数为321,应输出123
int main(){
int num,indiv,ten,hundred,thousand,ten_thousand,place;
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("位数:%d\n",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\n",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\n",indiv,ten,hundred,thousand);
break;
case 3:
printf("%d,%d,%d",hundred,ten,indiv);
printf("\n反序数字为:");
printf("%d%d%d\n",indiv,ten,hundred);
break;
case 2:
printf("%d,%d",ten,indiv);
printf("\n反序数字为:");
printf("%d%d\n",indiv,ten);
break;
case 1:
printf("%d",indiv);
printf("\n反序数字为:");
printf("%d",indiv);
break;
}
return 0;
}
#include
#include
//求应发奖金总数
//企业发放的奖金根据利润提成
//利润I低于或等于100000元的,奖金可提成10%;利润高与100000元,低于200000元(100000≤I ≤200000)时,低于100000元的部分按10%提成
//高于100000的部分,可提成7.5%;200000< I ≤400000时,低于200000元的部分仍按上述办法提成(下同)
//高于200000元的部分按5%提成;400000< I ≤600000元时,高于400000元的部分按3%提成;600000< I ≤1000000时,高于600000元的部分按1.5%提成
//I>1000000时,超过1000000元的部分按1%提成。从键盘输入当月利润I,求应发奖金总数,保留两位小数
//用if语句编写程序
int main(){
int i;
double bonus,bon1,bon2,bon4,bon6,bon10;
bon1=100000*0.1;
bon2=bon1+100000*0.075;
bon4=bon2+200000*0.05;
bon6=bon4+200000*0.03;
bon10=bon6+400000*0.015;
scanf("%d",&i);
if (i <=100000)
bonus=i*0.1;
else if (i <=200000)
bonus=bon1+(i-100000)*0.075;
else if (i <=400000)
bonus=bon2+(i-200000)*0.05;
else if (i <=600000)
bonus=bon4+(i-400000)*0.03;
else if (i <=1000000)
bonus=bon6+(i-600000)*0.015;
else
bonus=bon10+(i-1000000)*0.01;
printf("%.2f",bonus);
return 0;
}
#include
#include
//求小明同学在时间t1,t2内运动的距离
//大学里上午上课时间是八点钟。小明同学7点30分在食堂吃完饭后,以100m/min的速度步行去教室
//但是走了10分钟后小明一看手表发现手表上已经7点55分了(其实是手表坏了),小明感到很着急马上开始跑步,小明跑步的速度是150m/min
//小明跑了10分钟后,听到手机在响,原来这是他设置的闹钟,现在才7点50!而距离教室也只有500m的距离了,所以小明又放慢脚步,以50m/min的速度刚好在8点到达教室,开始上课
//现在输入时间点t1、t2(t1、t2在7:30到8:00之间且t1
int main(){
int t1,t2,s;
scanf("%*c%*c%d %*c%*c%d",&t1,&t2);
if(t2==0) t2=60;
if(t2 <=40)
s=(t2-t1)*100;
else if(t2 <=50){
if (t1 <=40)
s=(40-t1)*100+(t2-40)*150;
else
s=(t2-t1)*150;
}
else if(t2 <=60){
if (t1 <=40)
s=(40-t1)*100+1500+(t2-50)*50;
else if(t1 <=50)
s=(50-t1)*150+(t2-50)*50;
else
s=(t2-t1)*50;
}
printf("%d米",s);
}
#include
#include
//计算星座
//
//编写程序输入月份和日期,给出对应的星座。下面是星座计算表。
//3.21-4.20 白羊 4.21-5.20 金牛 5.21-6.20 双子
//6.21-7.22 巨蟹 7.23-8.22 狮子 8.23-9.22 处女
//9.23-10.22 天秤 10.23-11.22 天蝎 11.23-12.22 人马
//12.23-1.20 摩羯 1.21-2.20 宝瓶 2.21-3.20 双鱼
int main(){
int m=0,d=0,t=0;
printf("计算星座,输入月份和日期\n");
scanf("%d%d",&m,&d); //输入月份和日期
printf("%d月%日的对应星座为",m,d);
exchange(m,d);
return 0;
}
void exchange(int m,int d){
int t=0;
t=m<7?21:23; //7月前为21,7月后为23
if(d>=t) m++; // 在一个月的t号之后月份加一
switch(m){
case 2:printf("水瓶");break;
case 3:printf("双鱼");break;
case 4:printf("白羊");break;
case 5:printf("金牛");break;
case 6:printf("双子");break;
case 7:printf("巨蟹");break;
case 8:printf("狮子");break;
case 9:printf("处女");break;
case 10:printf("天秤");break;
case 11:printf("天蝎");break;
case 12:printf("人马");break;
default:printf("摩羯"); //13月,与1月相同处理
}
return 0;
}
#include
int main(){
int i,j;
for(i=1;i<=9;i++){
for(j=1;j<=i;j++)
printf("%d*%d=%d ",i,j,i*j);
printf("\n");
}
return 0;
}
#include
#include
//近似值
//编写程序利用公式计算下面公式的近似值,直到括号中最后一项的绝对值小于10-6次方为止
int main(){
int s=1;
double pi=0,n=1,t=1;
while (fabs(t)>1e-6)
pi=pi+t, n=n+2, s=-s, t=s/n;
pi=pi*4;
printf("%lf\n",pi);
return 0;
}
#include
//找出100-200之间的不能被3整除的数
int main(){
int i;
for(i=100;i<=200;i++){
if(i%3!=0){
printf("%d ",i);
}
}
return 0;
}
#include
#include
//求100-200之间的全部素数
int main(){
int n,k,i,m=0;
for(n=101;n<=200;n=n+2){
k=sqrt(n);
for(i=2;i<=k;i++)
if(n%i==0) break;
if(i>=k+1){
printf("%d ",n);
m=m+1;
}
if(m%10==0) printf("\n");
}
printf("\n");
return 0;
}
#include
#include
//韩信点兵
//韩信有一队兵,他想知道有多少人,便让士兵排队报数:
//按从1至5报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5;
//按从1至7报数,最末一个士兵报的数为4;最后再按从1至11报数,最末一个士兵报的数为10
//编程求韩信至少有多少兵?
int main() {
int i;
for(i=1;; i++) {
if(i%5==1&&i%6==5&&i%7==4&&i%11==10) {
printf("%d",i);
break;
}
}
}
#include
#include
#include
//素数计算
//编写程序计算某区间内素数的个数cnt,并按所求素数的值从大到小的顺序,
//再计算其间隔减、加之和,即第1个素数-第2个素数+第3个素数-第4个素数+第5个素数……的值sum
int main(){
int s=0,cnt=0,f=1,i,j,a,b;
scanf("%d %d",&a,&b);
for(i=b;i>=a;i--){
for(j=2;j<=sqrt(i);j++)
if(i%j==0) break;
if(j>sqrt(i)){
cnt++;
s=s+f*i;
f=-f;
}
}
printf("%d %d",cnt,s);
return 0;
}
#include
#include
//求两数的最大公约数和最小公倍数
//输入两个正整数m和n,求其最大公约数和最小公倍数
int main(){
int p,r,n,m,temp;
scanf("%d %d",&n,&m);
if (n<m) {
temp=n;
n=m;
m=temp;
}
p=n*m;
while(m!=0) {
r=n%m;
n=m;
m=r;
}
printf("最大公约数:%d\n",n);
printf("最小公倍数:%d",p/n);
return 0;
}
#include
#include
//计算球在第10次落地时,共经过多少米,第10次反弹多高
//一个球从100m高度自由落下,每次落地后反跳回原高度的一半,再落下,再反弹
//求它在第10次落地时,共经过多少米,第10次反弹多高
int main(){
double sn=100,hn=sn/2;
int n;
for (n=2; n <=10; n++) {
sn=sn+2*hn;
hn=hn/2;
}
printf("第10次落地时共经过%.6lf米\n",sn);
printf("第10次反弹%.6lf米\n",hn);
return 0;
}
#include
#include
//计算选秀选手的最后得分
//在选秀节目中有10个评委为参赛选手打分,分数为1到100分,选手最后的得分为去掉一个最高分和去掉一个最低分后其余8个分数的平均分
//编写程序,输入10个分数,输出选手的最后得分
int main(){
int i=1,x,min=100,max=0,s=0;
while(i<=10){
scanf("%d",&x);
min=x<min?x:min;
max=x>max?x:max;
s=s+x;
i++;
}
printf("%.2lf",(s-min-max)/8.0);
}
#include
#include
//趣味数学题
//马克思手稿中有一道趣味数学题:有30个人,其中有男人、女人和小孩,在一家饭馆里吃饭共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令
//问男人、女人和小孩各有几人?输出所有的可能结果
int main(){
int man,woman;
for(man=1; man <=17; man++)
for(woman=1; woman <=25; woman++) {
if(50 == man*3 + woman*2 +(30-man-woman) )
printf("man:%d,woman:%d,child:%d\n",man,woman,30-man-woman);
}
}
#include
#include
int main(){
int y,m,d,days=0;
scanf("%d/%d/%d",&y,&m,&d);
days=365*(y-2000);//计算整年的天数
int i=0;
for (i=2000;i <y;i++) //修正闰年的366天
if((i%400==0)||((i%100!=0)&&(i%4==0)))
days++;
for (i=1;i <m;i++){ //计算整月的天数
switch (i){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days=days+31;break;
case 4:
case 6:
case 9:
case 11:
days=days+30;break;
case 2:
days=days+28;
if((y%400==0)||((y%100!=0)&&(y%4==0))) days++;
break;
}
}
days=days+d; //计算当月已经过去的天数
if (days%5==1||days%5==2||days%5==3)
printf("fishing\n");
else
printf("sleeping\n");
return 0;
}
#include
#include
//捕鱼
//A、B、C、D、E五个人在某天夜里合伙去捕鱼,到第二天凌晨时都疲惫不堪,于是各自找地方睡觉
//到了早上,A第一个醒来,他将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份
//B第二个醒来,也将鱼分为五份,把多余的一条鱼扔掉,拿走自己的一份
//C、D、E依次醒来,也按同样的方法拿走鱼。编写程序求他们合伙至少捕了多少条鱼?
int main(){
int s1,s2,s3,s4,s5;
for (s5=16;;s5=s5+5){
int cnt=0;
s4=(s5-1)*4/5;
if ((s4-1)%5==0) {
s3=(s4-1)*4/5;
cnt++;
}
else continue;
if ((s3-1)%5==0){
s2=(s3-1)*4/5;
cnt++;
} else continue;
if ((s2-1)%5==0) {
s1=(s2-1)*4/5;
cnt++;
}
else continue;
if ((s1-1)%5==0) {
cnt++;
}
else continue;
if (cnt==4) {
printf("%d\n",s5);
break;
}
}
return 0;
}
#include
#include
//两面族
//两面族是荒岛上的一个新民族,他们的特点是说话真一句假一句且真假交替
//如果第一句为真,则第二句是假的;如果第一句为假的,则第二句就是真的,但是第一句是真是假没有规律。迷语博士遇到三个人,知道他们分别来自三个不同的民族:诚实族、说谎族和两面族
//三人并肩站在博士前面,博士问左边的人:“中间的人是什么族的?”,左边的人回答:“诚实族的”。博士问中间的人:“你是什么族的?”,中间的人回答:“两面族的”。博士问右边的人:“中间的人究竟是什么族的?”,右边的人回答:“说谎族的”
//编写程序判断这三个人是哪个民族的?
int main(){
int s1,s2,s3,flag=0;//0-诚实族、1-说谎族和2-两面族
for (s1=0;s1<=2;s1++){
for (s2=0;s2 <=2;s2++){
for (s3=0;s3 <=2;s3++){
int ss1=s1,ss2=s2,ss3=s3;
if (ss1==0) ss2=0;
if ((ss1==1)&&(ss2==0)) ss3=1;
if (ss3==0) ss2=1;
if(ss1!=ss2&&ss2!=ss3&&ss1!=ss3){
printf("%d %d %d",ss1,ss2,ss3);
flag=1;
break;
}
}
if (flag==1) break;
}
if (flag==1) break;
}
return 0;
}
#include
#include
//SIN函数曲线
//编写程序在屏幕上打印如下的SIN函数曲线
int main(){
printf("**********************************************************\n");
int i=0;
for (i=0;i <=330;i=i+15){
double t=sin(2*3.1415926*i/360);
printf("sin(%3d)=%+.4lf",i,t);
if (t>0){
for (i=0;i <24;i++)
printf(" ");
printf("*");
for (i=0;i <t*16;i++)
printf(" ");
printf("*");
}
if (t <0){
for (i=0;i <24+t*16;i++)
printf(" ");
printf("*");
for (i=0;i <-t*16-2;i++)
printf(" ");
printf("*");
}
if (t==0) {
for (i=0;i <24;i++)
printf(" ");
printf("*");
}
printf("\n");
}
return 0;
}