C语言_中国石油大学(华东)c语言上机题
Hello world.
让我们用C语言向世界问好。
最早的程序基本是这个样子的:
程序一:
#include <>
void main()
{
printf("Hello world.\n");
}
程序二:
#include <>
int main()
{
printf("Hello world.\n");
return 0;
}
上面的程序你任意模仿一个,看看是否可以通过?如果你能通过这个简单的程序,那就让我们继续完成后面的习题吧。
输入:无
输出:Hello world.
#include<>
int main()
{
printf("Hello world.\n");
}
Welcome to Beijing.
让我们来练习如何显示多行文字。
输入:无
输出:就是下面的那段文字。
#include<>
void main()
{printf("Welcome\n");
printf("to\n");
printf("Beijing.\n");
}
练习最简单的printf和scanf
printf函数和scanf函数是C语言中最常用的函数之一,下面让我们练习一下吧。
输入:整型变量x的值。
输出:输出整型变量x对应的十进制、八进制和十六进制形式。
认真观察-1的八进制和十六进制输出,请想想是为什么。
#include <>
int main()
{int x;
scanf("%d",&x);
printf("x=%d,",x);
printf("x=%o,",x);
printf("x=%x\n",x);
return 0;
}
练习两个整数之间的运算
背景:基本练习。
输入:接受两个整数,每个整数之间使用空格分隔。例如输入格式为:123 444
输出:分别输出进行+、-、*、/、*之后的运行结果。#include<>
int main()
{int x,y;
scanf("%d%d",&x,&y);
printf("%d+%d=%d\n",x,y,x+y);
printf("%d-%d=%d\n",x,y,x-y);
printf("%d*%d=%d\n",x,y,x*y);
printf("%d/%d=%d\n",x,y,x/y);
printf("%d%%%d=%d\n",x,y,x%y);
return 0;
}
学习打印你的第一个图形
背景:我们已经学习了printf函数,这里给出了一个小程序,它运行的结果是输出一个由星号(*)组成的4*4的正方形。
程序如下:
#include <>
int main()
{
printf("****\n");
printf("****\n");
printf("****\n");
printf("****\n");
return 0;
}
要求:按照上面的程序范例,编写一个小程序,要求输出的是 4 行由*号组成的等腰三角形。
输入:无。
输出:指定图形。
#include <>
int main()
{
printf(" *\n");
printf(" ***\n");
printf(" *****\n");
printf("*******\n");
return 0;
}
整型数的表示范围
编写一个循环程序,输入N 值,输出N 的阶乘。关于循环程序怎么编写,可以参考教材第3章P66页的例题和第5章P82的例题的内容。注意整型数的表示范围,如果当输入的N 比较大时,例如N 等于20 时,输出怎么是负数了?自己想明白吧!#include<>
void main()
{int N,i;
int sum=1;
N>=2;
scanf("%d",&N);
if(N<=16)
{for (i=1;i<=N;i++)
sum=sum*i;
printf("%d\n",sum);
}
if(N>=17)
printf("N is too big!\n");
}
求正弦函数值
已知求正弦sin(x) 的近似值的多项式公式为:
sin(x) = x - x3/3! + x5/5! - x7/7!+ …… + (-1)n x2n+1/(2n+1)! + …
编写程序,要求输入x (单位是弧度)和ε,按上述公式计算sin(x) 的近似值,要求计算的误差小于给定的ε。
此题当然要用到循环语句,到第5章去找个猫来照着画吧,循环的终止条件就是本次计算出来的正弦函数值和上次计算的值的差小于给定的ε。求两个值的差时,要求出其绝对值,使用库函数fabs(),头文件在里。
友情提示:给定的误差值ε越小,计算的精度越高,但是要注意喽,给的精度太高,你的程序会成为死循环。如果出现死循环的情况,可以用
#include <>
#include <>
int main()
{ float x,eps,s,y=0,y0,t;
int n,j;
scanf("%f%f",&x,&eps);
n=t=j=1;
s=x;
do
{ y0=y;
if (n%2==0) y=y-s/t;
else y=y+s/t;
s*=x*x;
t*=(j+1)*(j+2);
j+=2;
n++;
} while(fabs(y0-y)>eps);
printf("%f\n",sin(x));
system("PAUSE");
return 0;
}
判断输入的字符的类型
我们将字符分为五类:大写字母、小写字母、数字、控制字符、其他字符。
编写程序,从键盘输入一个字符,输出字符所属的类型:大写字母时输出capital letters,小写字母时输出small letters,数字是输出figures,其他字符时输出others。
#include<>
void main()
{
char c;
c = getchar ( );
if (c < 0x20)
printf ("The character is a control character\n");
else if (c >= '0' && c <= '9')
printf ("figures\n");
else if (c >= 'A' && c <= 'Z')
printf ("capital letters\n");
else if (c >= 'a' && c <= 'z')
printf ("small letters\n");
else
printf ("others\n");
}
找零钱
假定有5 角、1 角、5 分、2 分和1 分共 5 种硬币,在给顾客找硬币时,一般都会尽可能地选用硬币个数最小的方法。例如,当要给某顾客找7 角 2 分钱时,会给他一个 5 角, 2 个 1 角和 1 个 2 分的硬币。试编写一个程序,输入的是要找给顾客的零钱(以分为单位),输出的是应该找回的各种硬币数目,并保证找回的硬币数最少。
#include <>
int main()
{
int x1,x2,x3,x4,x5;
int x;
scanf("%d",&x);
x1=x/50;
x2=x%50/10;
x3=x%50%10/5;
x4=x%50%10%5/2;
x5=x%50%10%5%2/1;
printf("%d\n",x1);
printf("%d\n",x2);
printf("%d\n",x3);
printf("%d\n",x4);
printf("%d\n",x5);
return 0;
}
计算时钟的夹角
背景:钟面上的时针和分针之间的夹角总是在0 度~ 359 度之间。举例来说,在十二点的时候两针之间的夹角为0 度,而在六点的时候夹角为180 度,在三点的时候为90 度。本题要解决的是计算0:00 到12:00之间任意一个时间的夹角。
输入:每组测试数据包含两个数字:第一个数字代表小时( 大于等于0 小于12) ,第二个数字代表
分( 在区间[0, 59] 上) 。
输出:对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。
友情提示:以表中心到12点的连线为基准,分针每走1分钟是6度,时针与基准的夹角每个小时也是30度,从整点开始,每过1分钟时针再增加度。
提示:时钟夹角计算公式||,h为时针,m为分针。求浮点型绝对值的函数为fabs,需要包含头文件
#include ""
#include ""
int main()
{
int h,m;
double angle;
scanf("%d%d",&h,&m);
angle=fabs*m-30*h);
if(angle>180)
angle=360-angle;
printf("At %d:%02d the angle is %.1f degrees.\n",h,m,angle);
}
照猫画猫:计算圆柱的侧面积及体积
如果已知圆柱的底面半径r ,以及高h ,则可计算出圆柱的侧面积s=2πrh ,体积v=πr 2 h 。其中π=
输入第一行输入圆柱的底面半径r
第二行输入圆柱的高h
输出s=< 圆柱的侧面积>,v=< 圆柱的体积>
要求 1. 所有变量都定义为双精度类型
2. 结果精确到小数点后两位
#include ""
#define n
int main()
{
float r,h,s,v;
printf;
scanf("%f%f",&r,&h);
s=2*n*r*h;
v=n*r*r*h;
printf("s=%,v=%\n",s,v);
}
分离整数
任意从键盘上输入一个三位正整数,要求正确地分离出它的个位、十位和百位,并分别在屏幕上输出。
比如输入的三位正整数
#include ""
int main()
{
int x,hundreds,tens,units;
printf;
scanf("%d",&x);
hundreds=x/100;
tens=x%100/10;
units=x%100%10;
printf("units=%d,tens=%d,hundreds=%d\n",unit s,tens,hundreds);
}
鸡兔同笼
已知笼中有头h个,有脚f条,问笼中鸡兔各有多少只?
输入:头和脚的数目
输出:兔子和鸡的数目(输出语句为:printf("rabbit=%d,chicken=%d",rabbit,chicken);)Sample
输入:10 20
输出:rabbit=0,chicken=10
#include ""
int main()
{
int chicken,rabbit,f,h;
scanf("%d%d",&h,&f);
rabbit=(f-2*h)/2;
chicken=(4*h-f)/2;
printf("rabbit=%d,chicken=%d\n",rabbit,chicken );
}
温度转换
背景:经常出国旅行的驴友都知道,需要时时了解当地的气温状况,但不少国家采用了不同的温度计量单位:有些使用华氏温度标准(F),有些使用摄氏温度(C)。现在,请你根据温度转换公式设计一个温度转换程序,可以进行温度转换。如果输入摄氏温度,显示转换的华氏温度;如果输入华氏温度,显示转换的摄氏温度。
温度转换的公式为:F=(C×9/5)+32 ;C=(F-32)×5/9 ;式中F--华氏温度,C--摄氏温度。
输入:第一个数据(1 或 2 )确定转换的类型:华氏转摄氏(1);摄氏转华氏(2);
第二个数据是相应需要转换的温度值。
输出:相应的转换后的温度值(保留小数点后 2 位)。
#include <>
void main()
{
int lx;
double f,c;
scanf("%d",&lx);
if(lx==1){
scanf("%lf",&f);
c=(f-32)*5/9;
printf("The Centigrade is %.2f\n",c);
}
else{
scanf("%lf",&c);
f=(c*9/5)+32;
printf("The Fahrenheit is %.2f\n",f);
}
}
分段函数
有一分段函数,y=f(x)。当x小于6时,y=x-12;当x大于等于6且小于15时,y=3x-1;当x大于等于15时,y=5x+9.从键盘上输入一个整数x,输出对应的y值。
#include <>
void main()
{
int x,y;
scanf("%d",&x);
if(x<6)
y=x-12;
else if(x<15)
y=3*x-1;
else
y=5*x+9;
printf("%d\n",y);
return 0;
}
整数位数判断
输入一个不多于5位的正整数,要求: (1)求它是几位数;(2)逆序打印出各位数字。
#include <>
#include <>
#define SIZE 5
int
main(void)
{
int
bit_count;等腰三角形:isoceles triangle.
不构成三角形:non-triangle.
一般三角形:triangle.
#include<>
void main()
{
float a,b,c;
scanf("%f%f%f",&a,&b,&c);
if(a+b printf("non-triangle.\n"); else if(a==b&&b==c) printf("equilateral triangle.\n"); else if(a==b||b==c||a==c) printf("isoceles triangle.\n"); else printf("triangle.\n"); } 字符加密输出 从键盘上输入一个字符,进行加密以后再输出在屏幕上。加密规律是:输入小写英文字母时,输入a 输出Z、输入b输出Y、输入c输出X、...、输入z输出A。输入大写英文字母时,将该字母ASCII码值再加上该值的1/2后输出所对应的字符,例如数字A 的ASCII码值是65,加上其值的1/2后是98(小数四舍五入),则输出字符‘b’。输入数字时,将该数字原ASCII码值再加上该值十进制的十位上的数后输出,例如数字9的ASCII码值是57,加上十位上的数5后是62,则输出字符‘>’。输入其他字符时原样输出。友情提示:整数之间运算的结果要取整,例如5/2的结果是2,而对小数四舍五入的结果就是了。所以输入大写英文字母时的输出要仔细考虑。#include <> int main() { char ch; int a; ch=getchar(); if(ch>=97&&ch<=122) {ch=187-ch;putchar(ch);} else if(ch>=65&&ch<=90) {a=ch%2; if (a==1) (char)a=(ch+1)/2+ch; else (char)a=ch/2+ch; putchar(a);} else if(ch>=48&&ch<=57) {ch=ch/10+ch; putchar(ch);} else putchar(ch); printf("\n"); } 判断某年某月的天数 一年有365天,有的月份有31天,有的有30天,2月份闰年的时候是29天,非闰年的时候是28天。现在要求从键盘上输入一个年份和月份,输出其对应的天数。 #include <> main() { int year,month,days; scanf("%d %d", &year,&month); switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: days=31;break; case 4: case 6: case 9: case 11:days=30;break; case 2:if((year % 4 ==0) && (year % 100 !=0) ||(year % 400==0)) days=29; else days=28; } printf("%d\n",days); } 花多少钱买衣服 周末商场促销呢,某品牌服装既可以买套装,也可以买单件。若买的不少于50套,每套80元;不足50套的每套90元,只买上衣每件60元,只买裤子每条45元。编写程序,输入计划购买的上衣数量 a 和裤子的数量 b ,计算并输出应该付的款m 。 #include<> void main() { int a,b,y; scanf("%d%d",&a,&b); if(b<=a&&b<50) y=90*b+(a-b)*60; if(b<=a&&b>=50) y=80*b+(a-b)*60; if(a y=90*a+(b-a)*45; if(a=50) y=80*a+(b-a)*45; printf("%d\n",y); } 到邮局去寄包裹 你去邮局给朋友寄礼物。发现邮局对邮寄包裹的费用是这样规定的:如果包裹长宽高任意一个尺寸超过1米,或重量超过30千克,不予邮寄;对可以邮寄的包裹每件收手续费元,不同重量的邮资按下表计算:重量(千克) 收费标准(元) 小于10 0. 80 大于等于10但不超过20 0. 75 大于等于20但不超过30 0. 70 编写程序,输入包裹的长、宽、高尺寸和重量,输出所需的邮资(输出结果中包含两位小数即可),超出尺寸或重量的输出"Error”. #include<> void main() { float a,b,c,m,y; scanf("%f,%f,%f,%f",&a,&b,&c,&m); if(a>1||b>1||c>1||m>30) printf("Error\n"); else { if(m<10) y=*m+; else if(m<20) y=*m+; else y=*m+; printf("%.2f\n",y); } } 输出星期几的英文表示 输入用数字(1--7)表示的星期几,输出星期几的英文表示,输入的数字有误,输出单词"Error(回车)"。#include<> void main() { int a; scanf("%d",&a); switch((int)(a)) { case 1:printf("Monday\n");break; case 2:printf("Tuesday\n");break; case 3:printf("Wednesday\n");break; case 4:printf("Thursday\n");break; case 5:printf("Friday\n");break; case 6:printf("Saturday\n");break; case 7:printf("Sunday\n");break; default:printf("Error\n"); } } 输出一行星号 编写程序在一行中输出N 个星号。 输入:N值 输出:一行中N个星号 #include <> int main() { int n,i; scanf("%d",&n); for(i=0;i putchar('\n'); return 0; } 打印平行四边形 输入图形的高n 和首字符 c ,输出如下例(n=5 ,c='A' )所示的图形. ABCDE BCDEF CDEFG DEFGH EFGHI 输入:整数n例如 5 和某个字符例如 A 输出:高为5和首字符A 的平行四边形 #include<> void main() { int n,m,i,d; char p,t; scanf("%d,%c",&n,&p); for(m=0;m { for(i=0;i { printf(" "); } for(d=0;d { t=p+d+m; printf("%c",t); } for(i=0;i { printf(" "); } printf("\n"); } } 空心的倒三角型 背景:请根据要求打印可空心倒三角形。 输入:输入三角形的高度(h >0)。 输出:打印相应的空心倒三角形。图样参见测试用例。 #include <> #include <> int main() {int h,i,j,k,m,n; scanf("%d",&h); if((h>1)&&(h%2!=0)) { for(i=1; i<=(2*h-1); i++) { printf("*"); } printf("\n"); for(j=1; j<=(h-2); j++) { for(k=1; k<=j; k++) { printf(" "); } printf("*"); for(m=1; m<=(2*h-3-2*j); m++) { printf(" "); } printf("*"); printf("\n"); } for(n=1;n<=(h-1);n++) { printf(" "); } printf("*\n"); } else printf("Invalid input\n"); return 0; } 选做打印实心正方形 题中你已经打印了一行*号,这次在屏幕上输出一个由星号组成的n 行n 列的正方形。 程序输入n 值,输出如下例(n=4 )所示的高和上底均为n 的正方形: **** **** **** **** #include <> #include <> int main() { int a=1,n,b; scanf("%d",&n); while(a<=n) { b=1; do { printf("*"); b++; } while(b<=n); printf("\n"); a++; } return 0; } 选做空心字符菱形 输入:菱型起始字母和菱形的高度。 输出:参看测试用例,打印空心的由字符组成的菱形。 #include <> #include <> int main() { char ch; int n,a=1,b,c; scanf("%c %d",&ch,&n); while(a<=n) { b=1; while(b<=n-a) { printf(" "); b++; } printf("%c",ch); c=1; if(a>=2) { while(c<=2*a-3) { printf(" "); c++; } printf("%c",ch); } ch=ch+1; printf("\n"); a++; } a=1; ch=ch-2; while(a<=n-1) { b=1; while(b<=a) { printf(" "); b++; } printf("%c",ch); c=1; if(a<=n-2) { while(c<=2*n-2*a-3) { printf(" "); c++; } printf("%c",ch); } ch=ch-1; printf("\n"); a++; } return 0; } 选做输出一个字母K吧! 输入一个整数n,输出图形K。如n=4时,输出如下图形。 * * * * * * * * * * * * * #include <> #include <> int main() { int n,i=1,j; scanf("%d",&n); while(i<=n-1) { j=1; printf("*"); while(j<=n-i) { printf(" "); j++; } printf("*\n"); i++; } printf("*\n"); i=1; while(i<=n-1) { j=1; printf("*"); while(j<=i) { printf(" "); j++; } printf("*\n"); i++; } return 0; } 选做输出X图形 输入n 值,输出下例(n=3 )所示的图形:* * * * * * * * * 输入:整数n(例如3) 输出:如上图所示X 形图形 #include <> #include <> int main() { int n,i=1,j,k; scanf("%d",&n); while(i<=n-1) { j=1; while(j<=i-1) { printf(" "); j++; } printf("*"); k=1; while(k<=2*n-2*i-1) { printf(" "); k++; } printf("*"); j=1; while(j<=i-1) { printf(" "); j++; } printf("\n"); i++; } i=1; while(i<=n-1) { printf(" "); i++; } printf("*"); i=1; while(i<=n-1) { printf(" "); i++; } printf("\n"); i=1; while(i<=n-1) { j=1; while(j<=n-i-1) { printf(" "); j++; } printf("*"); k=1; while(k<=2*i-1) { printf(" "); k++; } printf("*"); j=1; while(j<=n-i-1) { printf(" "); j++; } printf("\n"); i++; } return 0; } 选做输出图形 编程,输入n 值,输出下例(n=5 )所示的高为n 的图形: #include <> #include <> int main() { int n,i=1,j,k,l; scanf("%d",&n); while(i<=n-1) { j=1; while(j<=i) { printf("*"); j++; } k=1; while(k<=2*n-2*i-1) { printf(" "); k++; } l=1; while(l<=i) { printf("*"); l++; } printf("\n"); i++; } i=1; while(i<=2*n-1) { printf("*"); i++; } printf("\n"); return 0; } 选做画个空心的梯形吧 编程,输入n ,输出如下例(n=5 )所示的高和上底均为n 的等腰空心梯形。 #include <> #include <> int main() { int n,i=1,j,k; scanf("%d",&n); while(i<=n) { j=1; while(j<=n-i) { printf(" "); j++; } printf("*"); if(i==1) { for(k=1; k<=n-2; k++) printf("*"); } else if(i==n) { for(k=1; k<=3*n-4; k++) printf("*"); } else { for(k=1; k<=n+2*i-4; k++) printf(" "); } printf("*"); j=1; while(j<=n-i) { printf(" "); j++; } printf("\n"); i++; } return 0; } 选做输出菱形图案 输入n ,输出如下例(n=3 )所示的菱形:* *** ***** *** * #include <> #include <> int main() { int n,i,j,k; scanf("%d",&n); for(i=1; i<=n; i++) { for(j=1; j<=n-i; j++) { printf(" "); } for(k=1; k<=2*i-1; k++) { printf("*"); } printf("\n"); } for(i=1; i<=n-1; i++) { for(j=1; j<=i; j++) { printf(" "); } for(k=1; k<=2*n-2*i-1; k++) { printf("*"); } printf("\n"); } return 0; } 最大公约数 输入两个正整数m和n,求它们的最大公约数和最小公倍数 比如,输入m和n的值分别为14和21,则最大公约数为7,最小公倍数为42。 #include<> void main() { int m,n,i,j; scanf("%d%d",&m,&n); for(i=m;i>=1;i--) { if (n%i==0&&m%i==0) {printf("the greatest common divisor is %d\n",i); break; } } for (j=m;;j++) { if (j%m==0&&j%n==0) {printf("the least common multiple is %d\n",j); break; } } } 水仙花数 输出所有的水仙花数。所谓的水仙花数是指一个3位数,其各位数字立方和等于该数本身。例如153 是一水仙花数,因为153=13+53+33 输出语句:printf("%d\n",n); #include <> void main() { int n, i, j, k; for(n=100; n<=999; n=n+1) { i = n/100; n",n,c); return 0; } 看看是谁做的好事 某四位同学中有一个做了好事, 不留名, 表扬信来了,校长问是谁做的好事. 以下四个人中有三个人说的是真话. A 说: 不是我 B 说: 是C C 说: 是D D 说: 他说的不对! 编写程序:输出是谁做的好事,只输出对应的大写字母,输出格式printf("%c\n",ch);。 #include <> #include <> int main() { char ch; for(ch='A'; ch<='D'; ch++) { if(ch=='A'&&ch=='C'&&ch=='D'&&ch!='D') printf("%c\n",ch); if(ch!='A'&&ch!='C'&&ch=='D'&&ch!='D') printf("%c\n",ch); if(ch!='A'&&ch=='C'&&ch!='D'&&ch!='D') printf("%c\n",ch); if(ch!='A'&&ch=='C'&&ch=='D'&&ch=='D') printf("%c\n",ch); } } 贪吃的猴子 有一只猴子,第一天摘了若干个桃子,当即吃了一半,但还觉得不过瘾,就又多吃了一个。第2天早上又将剩下的桃子吃掉一半,还是觉得不过瘾,就又多吃了两个。以后每天早上都吃了前一天剩下的一半加天数个(例如,第5天吃了前一天剩下的一半加5个)。到第n天早上再想吃的时候,就只剩下一个桃子了。 输入:天数n 输出:第一天的桃子个数,输出语句为printf("The monkey got %d peachs in first day.\n",sum); Smaple: Input: 5 Output The monkey got 114 peachs in first day. #include <> #include <> int main() { int n,i; long int m=1; scanf("%d",&n); for(i=1; i<=n-1; i++) { m=(n-i+m)*2; } printf("The monkey got %d peachs in first day.\n",m); return 0; } 百马百担 有100匹马,驮100担货,其中大马驮3担,中马驮2担,两匹小马驮1担 输入:无 输出:大、中、小马的个数,用逗号分隔。例如:2,30,68 说明:大、中、小马都必须有,结果中要列出所有的组合可能每个结果占一行因为有多个结果,结果的排序按照大马的个数从少到多 #include <> void main() {int x,y,z; for(x=1;x<33;x++) for(y=1;y<50;y++) {z=(100-3*x-2*y)*2; if(x+y+z==100) printf("%d,%d,%d\n",x,y,z); } } 四大湖问题 我国有4大淡水湖。 A说:洞庭湖最大,洪泽最小。鄱阳湖第三。 B说:洪泽湖最大,洞庭湖最小,鄱阳湖第二。太湖第三。 C说:洪泽湖最小,洞庭湖第三。 D说:鄱阳湖最大,太湖最小,洪泽湖第二,洞庭湖第三。 4个人每人仅答对了一个,请你编程给出4个湖从大到小的顺序。 #include <> #include <> int main() { int a,b,c,d; for(a=1; a<=4; a++) for(b=1; b<=4; b++) { if(b==a) continue; for(c=1; c<=4; c++) { if(c==a||c==b) continue; for(d=1; d<=4; d++) { if(d==a||d==b||d==c) continue; if((b==1||d==4||a==3)==1&&(d==1||b==4||a==2||c ==3)==1&&(d==4||b==3)==1&&(a==1||c==4||d==2| |b==3)==1) { if(a==1) printf("鄱阳湖\n"); if(a==2) printf("鄱阳湖\n"); if(a==3) printf("鄱阳湖\n"); if(a==4) printf("鄱阳湖\n"); if(b==1) printf("洞庭湖\n"); if(b==2) printf("洞庭湖\n"); if(b==3) printf("洞庭湖\n"); if(b==4) printf("洞庭湖\n"); if(c==1) printf("太湖\n"); if(c==2) printf("太湖\n"); if(c==3) printf("太湖\n"); if(c==4) printf("太湖\n"); if(d==1) printf("洪泽湖\n"); if(d==2) printf("洪泽湖\n"); if(d==3) printf("洪泽湖\n"); if(d==4) printf("洪泽湖\n"); break; } } break; } break; } return 0; } 选做黑色星期五 在西方,星期五和数字13 都代表着坏运气,两个不幸的个体最后结合成超级不幸的一天。所以,不管哪个月的13日又恰逢星期五就叫“黑色星期五”。输入某年年号和该年的元旦是星期几(1-7),输出该年所有的“黑色星期五”的日期(年/月/日)。 输入:4位年号和该年元旦是星期几 输出:所有的“黑色星期五”的日期(年/月/日)#include <> #include <> int main() { int y,m,d,x; scanf("%d %d",&y,&x); for(m=1; m<=12; m++) { if(m==1||m==3||m==5||m==7||m==8||m==10||m ==12) { for(d=1; d<=31; d++) { if(d==13&&x==5) printf("%d/%d/%d\n",y,m,d); x++; if(x==8) x=1; } } if(m==4||m==6||m==9||m==11) { for(d=1; d<=30; d++) { if(d==13&&x==5) printf("%d/%d/%d\n",y,m,d); x++; if(x==8) x=1; } } if(((y%4==0&&y%100!=0)||y%400==0)&&m==2) { for(d=1; d<=29; d++) { if(d==13&&x==5) printf("%d/%d/%d\n",y,m,d); x++; if(x==8) x=1; } } if(y%4!=0&&m==2) { for(d=1; d<=28; d++) { if(d==13&&x==5) printf("%d/%d/%d\n",y,m,d); x++; if(x==8) x=1; } } } return 0; } 选做抓疑犯 某地刑侦大队对涉及六个嫌疑人的一桩疑案进行分析: (1) A 、 B 至少有一人作案; (2)A 、E 、 F 三人中至少有两人参与作案;(3)A 、 D 不可能是同案犯; (4)B 、C 或同时作案,或与本案无关; (5) C 、 D 中有且仅有一人作案; (6)如果 D 没有参与作案,则 E 也不可能参与作案。 试编一程序,将作案人找出来。 输出格式为(以下结果不是最终答案): A:不是罪犯 B:是罪犯 C:是罪犯 D:不是罪犯 E:不是罪犯 F:是罪犯 #include <> #include <> int main() { int A,B,C,D,E,F; for(A=0; A<=1; A++) for(B=0; B<=1; B++) for(C=0; C<=1; C++) for(D=0; D<=1; D++) for(E=0; E<=1; E++) for(F=0; F<=1; F++) if(A+B>=1&&A+E+F>=2&&A+D==1&&(B+C==0||B+C= =2)&&C+D==1&&(D+E==0||D+E==2)) { if(A==1) printf("A:是罪犯\n"); if(A==0) printf("A:不是罪犯\n"); if(B==1) printf("B:是罪犯\n"); if(B==0) printf("B:不是罪犯\n"); if(C==1) printf("C:是罪犯\n"); if(C==0) printf("C:不是罪犯\n"); if(D==1) printf("D:是罪犯\n"); if(D==0) printf("D:不是罪犯\n"); if(E==1) printf("E:是罪犯\n"); if(E==0) printf("E:不是罪犯\n"); if(F==1) printf("F:是罪犯\n"); if(F==0) printf("F:不是罪犯\n"); } return 0; } 选做零钱换整钱 小明去银行存钱,拿了一堆硬币。已知1 角的硬币厚度为, 5 角的硬币厚, 1 元的硬币为。小明将 1 角的硬币放成一摞,将 5 角的硬币硬币放成一摞,将 1 元的硬币放成一摞,发现 3 摞硬币一样高。银行正好把这些硬币换成若干张面值为10 元的纸币。问小明至少带了多少钱的硬币(元为单位),每种面值的硬币有多少个? 输入:无 输出:1 角的数量,5 角的数量,1元的数量,总金额。(例如:20,30,40,50) 说明: 在结果中只输出各个对应的数字即可 #include <> #include <> int main() { int a,b,c,d; for(a=1; a<=100; a++) for(b=1; b<=100; b++) for(c=1; c<=100; c++) if(20*a==15*b&&20*a==18*c) { d=(a*10+b*5+c)%100; if(d!=0) break; d=(a*10+b*5+c)/10; printf("%d,%d,%d,%d\n",c,b,a,d); } return 0; } 选做马戏团观众人数 一个马戏团表演,n 个座位全满,全部门票收入是120 元,现在知道,男人每人5 元,女人每人2 元,小孩每人 1 角。编程,输入总人数n ,输出满足要求的男人、女人和小孩人数的全部方案。若n 人无法满足条件,则输出“No output\n”。 输入:人数n 输出:男人、女人和小孩人数 #include <> #include <> int main() { int n,a,b,c; scanf("%d",&n); for(a=0; a<=24; a++) for(b=0; b<=(120-5*a)/2; b++) for(c=0; c<=(120-5*a-2*b)*10; c++) if(5*a+2*b+c/10==120&&a+b+c==n) printf("%d %d %d\n",a,b,c); return 0; } 选做爱因斯坦的数学题 爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最后剩一阶;若每步跨3阶,则最后剩2阶;若每步跨5阶,则最后剩4阶;若每步跨7阶,最后才正好一阶不剩。请问,这条阶梯共有多少阶? 输出语句格式为:printf("Stairs number = %d\n",number); #include <> #include <> int main() { int number; for(number=1; number<=1000; number++) if(number%2==1&&number%3==2&&number%5==4 &&number%7==0) { printf("Stairs number = %d\n",number); break; } return 0; } 选做抓交通肇事犯 一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车号,只记下车号的一些特征。甲说:牌照的前两位数字是相同的;乙说:牌照的后两位数字是相同的,但与前两位不同;丙是位数学家,他说:四位的车号刚好是一个整数的平方,请根据以上线索求出车号。 #include <> #include <> int main() { int a,b,c,n; for(a=0; a<=9; a++) for(b=0; b<=9; b++) if(a!=b) { n=1100*a+11*b; for(c=30; c<1000; c++) if(n==c*c) printf("The license plate is:%d\n",n); } return 0; } 求和 输入整数m 和正整数n ,按下列公式计算s :s=m-(m+1)+m+2-(m+3)+ ……+(-1)n(m+n) 。 输入:m 和n 输出:s #include <> int main() { int i,sign=1,m,n,s=0,t; scanf("%d%d",&m,&n); for (i=0;i<=n;i++) { t=sign*(m+i); sign=-sign; s=s+t; } printf("s=%d\n",s); } 计算SUM的值 已知公式:SUM = 1 + 1/2 + 1/3 + 1/4 + ... + 1/n 输入:n 输出:表达式sum 的值。结果保留 6 位小数 #include <> int main() { int i,n; float s = , t; scanf("%d", &n); for (i=1;i<=n;i++) { t=i; s+=t; } printf("sum=%.6f\n",s); return 0; } 迭代法 用迭代法求.求平方根的迭代公式为: 要求前后两次求出的x的差的绝对值小于10-5。#include<> #include<> int main() { double x1,x2,a; scanf("%lf",&a); { x2=; do { x1=x2; x2=*(x1+a/x1); } while(fabs(x2-x1)>=1e-5); printf("The square root of %.2f is %.5f\n",a,x2); } return 0; } 分数序列 有一个分数序列:...............,输入整数n,求出其前n项的和。 输出语句格式为:printf("sum=%\n",s); #include<> int main() { int a,b,c,n,i; double s; scanf("%d",&n); a=2,b=1,s=0; for (i=1;i<=n;i ++) { s+=*a/b); c=b; b=a; a=a+c; } printf("sum=%\n",s); return 0; } 求e的值 编写程序,从键盘输入整数n , 求 e 的值. e=1+1/1!+1/2!+1/3!+..+1/n! 注意:用double 型数据计算输出语句:printf("e=%lf\n",e); #include <> int main() { double e=,f=; int n,i; scanf("%d",&n); for(i=1;i<=n;i++) { f=f/i; e=e+f; } printf("e=%lf\n",e); } 编程计算 编写程序,输入n的值,求:1-1/2+1/3-1/4+1/5-1/6+1/7-...+1/n (保留四位小数) #include <> int main() { int i, sign = 1, n; float s = , t; scanf("%d", &n); for (i = 1; i <= n; i ++) { t = / (sign * i); sign = -sign; s += t; } printf("sum=%.4f\n", s); return 0; } cos(x)-x=0 利用以下所示的简单迭代方法求方程:cos(x)-x=0的一个实根。 Xn+1=cos(Xn) 迭代步骤如下: (1)取X1初值为; (2)X0=X1,把X1的值赋给X0; (3)X1=cos(X0),求出一个新的X1; (4)若X0-X1的绝对值小于,执行步骤(5),否则执行步骤(2); (5)所求X1就是方程cos(X)-X=0的一个实根,输出X0,输出语句为printf("x=%f",x);。 #include<> #include<> int main() { double x1,x2; scanf("%d\n",&x1); x2=cos(x1); while(fabs(x2-x1)> { x1=x2; x2=cos(x1); } printf("x=%f\n",x2); } 选做SIX+SIX+SIX=NINE+NINE 计算出自然数SIX和NINE(它们满足的条件是SIX+SIX+SIX=NINE+NINE)的个数cnt。其中的S,I,X,N,E各代表一个十进制数字。输出语句:printf("cnt=%d\n",cnt); #include <> #include <> int main() { int S,I,X,N,E,cnt=0; for(S=1; S<=9; S++) for(I=0; I<=9; I++) for(X=0; X<=9; X++) for(N=1; N<=9; N++) for(E=0; E<=9; E++) if(3*(100*S+10*I+X)==2*(1010*N+100*I+E)) cnt++; printf("cnt=%d\n",cnt); return 0; } 选做C减式 编程,求解下列算式中各字母所代表的数字并输出。 PEAR -ARA ─────── PEA #include <> #include <> int main() { int p,e,a,r,n,c,b; for(n=1000;n<=9999;n++) { p=n/1000; e=n/100%10; a=n/10%10; r=n%10; c=101*a+10*r; b=100*p+10*e+a; if(n-c==b) break; } printf("pear=%d\n",n); return 0; } 选做求A的值 求满足A*B=N,使A+B最小,且A,B(A<=B)为正整数的A的值。 输入:正整数N 输出:满足条件的A #include <> #include <> #include <> int main() { int n, a, b, i, j; scanf ("%d", &n); a = sqrt (n); b = sqrt (n); for (i = a; i >= 0; i--) { for (j = b; j <= n; j++) { if ( (n == i * j) && (n % i == 0) && (n % j == 0) && (i + j >= 2 * a)) break; } if ( (n == i * j) && (n % i == 0) && (n % j == 0) && (i + j >= 2 * a)) break; } printf ("%d\n", i); return 0; } 选做求一个三位数,其值等于其各位阶乘之和 编写程序,求某三位数,该数值的大小正好是组成这个数的三个位上的数字阶乘之和。 输出格式:printf("%d\n",num); #include<> int main() {int a,b,c,i,j,k,s1,s2,s3; for(a=1;a<=9;a++) for(b=1;b<=9;b++) for(c=1;c<=9;c++) {s1=1;s2=1;s3=1; for(i=1;i<=a;i++) s1*=i; for(j=1;j<=b;j++) s2*=j; for(k=1;k<=c;k++) s3*=k; if(100*a+10*b+c==s1+s2+s3) printf("%d\n",s1+s2+s3);} } 选做谁的饭量大 3个人比饭量大小,每人说了2句话。 A说:B比我吃得多,C和我吃得一样多。 B说:A比我吃得多,A也比C吃得多。 C说:我比B吃得多,B比A吃得多。 事实上饭量越小的人讲对的话越多。请编写程序按A、B、C的顺序输出3个人的饭量排名(排名越大,饭量越大)。 #include<> void main() { int A,A1=0, B,B1=0, C,C1=0; for(A=0; A<3;A++) for(B=0; B<3;B++) for(C=0; C<3;C++) { A1 += B-A>0?1:0; A1+=(C==A?1:0); B1 += A-B>0?1:0; B1+=A-C>0?1:0; C1 += C-B>0?1:0; C1+=B-A>0?1:0; if((A-C)*(C1-A1)>0||(A-C==0&&C1-A1==0)) if((B-C)*(C1-B1)>0||(B-C==0&&C1-B1==0)) if((B-A)*(A1-B1)>0||(B-A==0&&A1-B1==0)) { printf("A:%d\n",A+1); printf("B:%d\n",B+1); printf("C:%d\n",C+1); } A1=0; B1=0; C1=0; } } 选做跳水排名 五位跳水选手将参加10m高台跳水,有好事者让5人据实力预测比赛结果。 A选手说:B第二,我第三。 B选手说:我第二,E第四。 C选手说:我第一,D第二。 D选手说:C最后,我第三。 E选手说:我第四,A第一。 决赛成绩公布之后,每位选手的预测都只说对一半,请编程输出比赛的实际名次。 #include<> void main() { int a,b,c,d,e; for(a=1;a<=5;a++) for(b=1;b<=5;b++) for(c=1;c<=5;c++) for(d=1;d<=5;d++) for(e=1;e<=5;e++) if((b==2)+(a==3)==1&&(b==2)+(e==4)==1&&(c==1)+(d ==2)==1&&(c==5)+(d==3)==1&&(e==4)+(a==1)==1&& a!=b&&a!=c&&a!=d&&a!=e&&b!=c&&b!=d&&b!=e& &c!=d&&c!=e) lf\nThe tenth is:%.3lf\n",s,h); } 选做ABC各教哪门课 A、B、C是小学老师,各教2门课,互不重复。共有如下6门课:语文、算术、政治、地理、音乐和美术。已知: (1)政治老师和算术老师是邻居。 (2)地理老师比语文老师年龄大。 (3)B最年轻。 (4)A经常对地理老师和算术老师讲他看过的文学作品。 (5)B经常和音乐老师、语文老师一起游泳。 请编程输出A、B、C各教哪两门课。 #include<> int main() { int w,s,z,d,y,m; d\n",q,p);q++,k++;}; } if(k==0) printf("No output\n"); } 选做分数的四则运算 在小学时我们就学习了分数的四则运算,即对两个分数进行加、减、乘、除等运算,现在我们尝试下用C语言来实现。 输入:分数1 操作符分数2 输出:计算结果 要求:计算结果使用分数表示,并且为最简化。例如结果为2/6,则被简化为1/3 #include<> #include<> main() { int a,b,c,d,i,x,y; char op; scanf("%d/%d%c%d/%d",&b,&a,&op,&d,&c); if(a==0||c==0) exit(0); if(op=='+'){y=b*c+d*a;x=a*c;} if(op=='-'){y=b*c-d*a,x=a*c;} if(op=='*'){y=b*d;x=a*c;} if(op=='/'){y=b*c;x=a*d;} if(y==0&&x!=0) { printf("%d/%d%c%d/%d=0\n",b,a,op,d,c); } else if(x==0) exit(0); if(x>y) i=y; while(i>1) { if(x%i==0&&y%i==0){x=x/i;y=y/i;continue;} i--; } if(x/i==1) printf("%d/%d%c%d/%d=%d\n",b,a,op,d,c,y); else printf("%d/%d%c%d/%d=%d/%d\n",b,a,op,d,c,y,x); } 谁能出线 背景:电视台举办“超级学生”才艺大赛,由于报名人数狂多,所以要先进行分组预赛。按规定,每10名学生为一个预赛小组,评委打出分数(0~100分),各小组第一名可以进入下一轮;如果有多名学生得分相同都是第一名,则可同时进入下一轮。输入:按顺序给出一个小组10个人的最后得分(int)。 输出:能够出线的学生序号(0~9)。 #include <> #define N 10 int main() { int a[N]; int i,max; for(i=0;i<=9;i++) { scanf("%d",&a[i]); } max=a[0]; for(i=0;i<=9;i++) {