文档库 最新最全的文档下载
当前位置:文档库 › c语言习题答案

c语言习题答案

1.1 Hello World
让我们用C语言向世界问好。
最早的程序基本是这个样子的:
程序一:
#include
void main()
{
printf("Hello world.\n");
}
程序二:
#include
int main()
{
printf("Hello world.\n");
return 0;
}
上面的程序你任意模仿一个,看看是否可以通过?如果你能通过这个简单的程序,那就让我们继续完成后面的习题吧。
输入:无
输出:Hello world.
#include
void main()
{
printf("Hello world.\n");
}
1.2 Welcome to Beijing.
让我们来练习如何显示多行文字。
输入:无
输出:就是下面的那段文字。
#include
int main()
{
printf("Welcome\nto\nBeijing.\n");
return 0;
}
1.3 练习最简单的printf和scanf
printf函数和scanf函数是C语言中最常用的函数之一,下面让我们练习一下吧。 有困难的同学,可以先练习教材上的程序,体会一下。
输入:
整型变量x的值。
输出:
输出整型变量x对应的十进制、八进制和十六进制形式。
认真观察-1的八进制和十六进制输出,请想想是为什么。
#include
void main()
{
int x;
scanf("%d",&x);
printf("x=%d,x=%o,x=%x\n",x,x,x);
}
1.4 练习两个整数之间的运算
背景:
基本练习。
输入:
接受两个整数,每个整数之间使用空格分隔。例如输入格式为:123 444
输出:
分别输出进行+、-、*、/、*之后的运行结果。
#include
main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d+%d=%d\n",a,b,a+b);
printf("%d-%d=%d\n",a,b,a-b);
printf("%d*%d=%d\n",a,b,a*b);
printf("%d/%d=%d\n",a,b,a/b);
printf("%d%%%d=%d\n",a,b,a%b);
}
1.5 学习打印你的第一个图形
背景:
我们已经学习了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;
}
2.1 整型数的表示范围
编写一个循环程序,输入 N 值,输出 N 的阶乘。关于循环程序怎么编写,可以参考教材第3章P66页的例题4.2和第5章P82的例题5.1的内容。注意整型数的表示范围,如果当输入的 N 比较大时,例如 N 等于 20 时,输出怎么是负数了?自己想明白吧!
#include
void main()
{
int N,sum=1;


scanf("%d",&N);
while(N>1)
{sum=N*sum;
N--;
}
printf("%d\n",sum);
}
2.2 求正弦函数值
已知求正弦 sin(x) 的近似值的多项式公式为:
sin(x) = x - x3/3! + x5/5! - x7/7!+ …… + (-1)n x2n+1/(2n+1)! + …
编写程序,要求输入 x (单位是弧度)和ε,按上述公式计算 sin(x) 的近似值,要求计算的误差小于给定的ε。
此题当然要用到循环语句,到第5章去找个猫来照着画吧,循环的终止条件就是本次计算出来的正弦函数值和sin(x)的差小于给定的ε。求两个值的差时,要求出其绝对值,使用库函数fabs(),头文件在math.h里。
友情提示:给定的误差值ε越小,计算的精度越高,但是要注意喽,给的精度太高,你的程序会成为死循环。如果出现死循环的情况,可以用+键退出程序。
# include
# include
int Factorial(int n);
main()
{
double x, y, m;
int i;
double sum1;
scanf("%lf%lf", &x, &y);
sum1 = x;
for (i = 1; fabs(sum1 - sin(x)) >= y; i++)
{
m = pow(x, (2 * i + 1)) * pow(-1, i) / Factorial(2 * i + 1);
sum1 += m;
}

printf("%lf\n", sum1);
}
int Factorial(int n)
{
int a, sum2;
sum2 = 1;
for (a = 1; a <= n; a++)
{
sum2 *= a;
}
return sum2;
}
2.3 判断输入的字符的类型
我们将字符分为五类:大写字母、小写字母、数字、控制字符、其他字符。
编写程序,从键盘输入一个字符,输出字符所属的类型:大写字母时输出capital letters, 小写字母时输出small letters,数字是输出figures,其他字符时输出 others。
#include
int main()
{
char x;
x=getchar();
if (x>='A' && x<='Z') printf("capital letters\n");
else if (x>='a' && x<='z') printf("small letters\n");
else if (x>='0' && x<='9') printf("figures\n");
else printf("others\n");
return 0;
}
3.1 分离整数
任意从键盘上输入一个三位正整数,要求正确地分离出它的个位、十位和百位,并分别在屏幕上输出。
比如输入的三位正整数
#include
main()
{
int num,hundreds,tens,units;
scanf("%d",&num);
hundreds=num/100;
tens=num/10-hundreds*10;
units=num%10;
printf("units=%d,tens=%d,hundreds=%d\n",units,tens,hundreds);
}
3.2 找零钱
假定有 5 角、 1 角、 5 分、 2 分和 1 分共 5 种硬币,在 给顾客找硬币时,一般都会尽可能地选用硬币个数最小的方法。 例如,当要给某顾客找 7 角 2 分钱时,会给他一个 5 角, 2 个 1 角 和 1 个 2 分的硬币。试编写一个程序,输入的是要找给顾客的零 钱(以分为单

位),输出的是应该找回的各种硬币数目,并保 证找回的硬币数最少。
#include
void main(){
int n;
scanf("%d",&n);
int five_cent = 0;//5角
five_cent = n/50;
n -= five_cent * 50;
int one_cent = 0;//1角
one_cent = n/10;
n -= one_cent * 10;
int five_penny = 0;//5分
five_penny = n/5;
n -= five_penny * 5;
int two_penny = 0;//2分
two_penny = n/2;
n -= two_penny * 2;
int one_penny = 0;//1分
one_penny = n;
printf("%d\n",five_cent);
printf("%d\n",one_cent);
printf("%d\n",five_penny);
printf("%d\n",two_penny);
printf("%d\n",one_penny);
}
3.3 照猫画猫:计算圆柱的侧面积及体积
如果已知圆柱的底面半径 r ,以及高 h ,则可计算出圆柱的侧面积 s=2πrh ,体积 v=π r 2 h 。其中 π=3.1415926
输入
第一行输入圆柱的底面半径 r
第二行输入圆柱的高 h
输出
s=< 圆柱的侧面积 >,v=< 圆柱的体积 >
要求
1. 所有变量都定义为双精度类型
2. 结果精确到小数点后两位

#include
main()
{
double r,h,s,v,p=3.1415926;
scanf("%lf\n %lf",&r,&h);
s=2*p*r*h;
v=p*r*r*h;
printf("s=%-.2f,v=%-.2f\n",s,v);
}
3.4 鸡兔同笼
已知笼中有头h个,有脚f条,问笼中鸡兔各有多少只?
输入:头和脚的数目
输出:兔子和鸡的数目(输出语句为:printf("rabbit=%d,chicken=%d",rabbit,chicken);)
Sample
输入:10 20
输出:
rabbit=0,chicken=10
#include
int main(void)
{
int h,f,chicken,rabbit;
scanf("%d%d",&h,&f);
chicken=(4*h-f)/2;
rabbit=(f-2*h)/2;
printf("rabbit=%d,chicken=%d\n",rabbit,chicken);
return 0;
}
4.1 温度转换
背景:
经常出国旅行的驴友都知道,需要时时了解当地的气温状况,但不少国家采用了不同的温度计量单位:有些使用华氏温度标准(F),有些使用摄氏温度(C)。现在,请你根据温度转换公式设计一个温度转换程序,可以进行温度转换。如果输入摄氏温度,显示转换的华氏温度;如果输入华氏温度,显示转换的摄氏温度。
温度转换的公式为:F=(C×9/5)+32 ;C=(F-32)×5/9 ;式中F--华氏温度,C--摄氏温度。
输入:
第一个数据(1 或 2 )确定转换的类型:华氏转摄氏(1);摄氏转华氏(2);
第二个数据是相应需要转换的温度值。
输出:
相应的转换后的温度值(保留小数点后 2 位)。

#include
void main()
{
int a;
float f,c,d;
scanf("%d%f",&a,&d);
if(a==1){
c=(d-32)*5/9.;
printf("The Centigrade is %.2f\n",c);
}
else{
f=(d*9/5.)+32;
printf("The Fahrenheit is %.2f\n",f);
}

}

4.2 分

段函数
有一分段函数,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;
printf("%d\n",y);

}
else if(x<15)
{
y=3*x-1;
printf("%d\n",y);

}
else
{ y=5*x+9;
printf("%d\n",y);
}
}
4.3 整数位数判断
输入一个不多于5位的正整数,要求: (1)求它是几位数;(2)逆序打印出各位数字。
#include
void main()
{
int b=0,c[5],i;
long a;
scanf("%ld",&a);
if(a<=0||a>99999)
printf("Invalid input");
else
{
if(a>=1&&a<10)
b=1;
if(a>=10&&a<100)
b=2;
if(a>=100&&a<1000)
b=3;
if(a>=1000&&a<10000)
b=4;
if(a>=10000&&a<100000)
b=5;
printf("%d\n",b);
}
for(i=0;i{c[i]=a%10;
a=a/10;}
for(i=0;iprintf("%d",c[i]);
printf("\n");
}
4.4 四位数拆分
输入一个四位数,判断千位、百位、十位和个位数字之和是否为偶数,如果是,输出Yes,如果不是,输出No;如果不是四位数,输出Invalid data。
# include
int main(void)
{int num,a,b,c,d,sum;
scanf("%d",&num);
if(num>=1000 && num<=9999)
{
{a=num/1000;
b=(num-a*1000)/100;
c=(num-a*1000-b*100)/10;
d=num-a*1000-b*100-c*10;
sum=a+b+c+d;}
if(sum%2==0)
printf("Yes\n");
else
printf("No\n");
}
else printf("Invalid data\n");
return 0;
}
4.5 磨磨你的砍柴刀:判断三角形的形状
要求:
输入三角型的三条边,判断三角形的形状。假设输入的三边边长均>0。

输入:
三角型的3条边的长度(int型)。

输出:
等边三角形:equilateral triangle.
等腰三角形:isoceles triangle.
不构成三角形:non-triangle.
一般三角形:triangle.

#include
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if ((a+b<=c)||(b+c<=a)||(a+c<=b))
printf("non-triangle.\n");
else if ((a!=b)&&(a!=c)&&(b!=c))
printf("triangle.\n");
else if ((a==b)&&(a==c))
printf("equilateral\n");
else printf("isoceles triangle.\n");
return 0;
}
4.6 字符加密输出
从键盘上输入一个字符,进行加密以后再输出在屏幕上。加密规律是:输入小写英文字母时,输入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,而5.0/2.0对小数四舍五入的结果就是3.0了。所以输入大写英文字母时的输出要仔细考虑。
#include
main()
{
char ch[10];
int i=0,n;
gets(ch);
while(ch[i])
{
if(ch[i]>='a'&&ch[i]<='z')
printf("%c\n",ch[i]-(7+2*(ch[i]-'a')));
else if(ch[i]>='A'&&ch[i]<='Z')
printf("%c\n",ch[i]+ch[i]/2);
else if(ch[i]>='0'&&ch[i]<='9')
{
n=(int)ch[i];
printf("%c\n",ch[i]+(n/10)%10);
}
else
printf("%c\n",ch[i]);
i++;
}
}
4.7 判断某年某月的天数
一年有365天,有的月份有31天,有的有30天,2月份闰年的时候是29天,非闰年的时候是28天。现在要求从键盘上输入一个年份和月份,输出其对应的天数。
#include
int isLeap(int y)
{
return (y%4==0&&y%100!=0)||(y%400==0);
}
int days(int y,int m)
{
switch(m)
{case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;break;
case 4:
case 6:
case 9:
case 11:
return 30;break;
case 2:
if(isLeap(y))
{
return 29;
break;
}
else
{
return 28;
break;}
default:return 0;break;
}
}
void main()
{ int year,month;
scanf("%d",&year);
scanf("%d",&month);
printf("%d\n",days(year,month));
}
#include
int isLeap(int y)
{
return (y%4==0&&y%100!=0)||(y%400==0);
}
int days(int y,int m)
{
switch(m)
{case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;break;
case 4:
case 6:
case 9:
case 11:
return 30;break;
case 2:
if(isLeap(y))
{
return 29;
break;
}
else
{
return 28;
break;}
default:return 0;break;
}
}
void main()
{ int year,month;
scanf("%d",&year);
scanf("%d",&month);
printf("%d\n",days(year,month));
}
4.8到邮局去寄包裹
你去邮局给朋友寄礼物。发现邮局对邮寄包裹的费用是这样规定的:如果包裹长宽高任意一个尺寸超过1米,或重量超过30千克,不予邮寄;对可以邮寄的包裹每件收手续费 0.2 元,不同重量的邮资按下表计算: 重量(千克)
收费标准(元)

小于10 0 . 80

大于等于10但不超过20 0 . 75

大于20但不超过30 0 . 70


编写程序,输入包裹的长、宽、高尺寸和重量,输出所需的邮资(输出结果中包含两位小数即

可),超出尺寸或重量的输出 "Error” .
#include
void main()
{
float a,b,c,w,m;
scanf("%f,%f,%f,%f",&a,&b,&c,&w);
if(a>0&&a<=1&&b>0&&b<=1&&c>0&&c<=1&&w>0&&w<=30)
{if(w>0&&w<10) m=0.2+0.8*w;
else if(w>=10&&w<=20) m=0.2+0.75*w;
else m=0.2+0.70*w;
printf("%.2f\n",m);
}
else printf("Error\n");
}

4.9输出星期几的英文表示
输入用数字(1--7)表示的星期几,输出星期几的英文表示,输入的数字有误,输出单词"Error(回车)"。
提醒:周一到周日必须都判断,单词拼法Sunday Saturday Friday Thursday Wednesday Tuesday Monday,另外还要对不合法的数据进行判断。
#include"stdio.h"
main()
{
int a;
scanf("%d",&a);
switch(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");break;

}
}

4.10判断输入的字符的类型
我们将字符分为五类:大写字母、小写字母、数字、控制字符、其他字符。
编写程序,从键盘输入一个字符,输出字符所属的类型:大写字母时输出capital letters, 小写字母时输出small letters,数字是输出figures,其他字符时输出 others。

#include
main()
{
char x;
scanf("%c",&x);
if(x>='A'&&x<='Z')
printf("capital letters\n");
else
if(x>='a'&&x<='z')
printf("small letters\n");
else
if(x>='0'&&x<='9')
printf("figures\n");
else
printf("others\n");

}

4.11花多少钱买衣服
周末商场促销呢,某品牌服装既可以买套装,也可以买单件。若买的不少于50套,每套80元;不足50套的每套90元,只买上衣每件60元,只买裤子每条45元。编写程序,输入计划购买的上衣数量 a 和裤子的数量 b ,计算并输出应该付的款 m 。
#include
main()
{
int a,b,m;
scanf("%d%d",&a,&b);
if(a>b)
{
if(b>=50)
{
m=b*80+(a-b)*60;
printf("%d\n",m);
}
else
{
m=b*90+(a-b)*60;
printf("%d\n",m);
}
}
else
{
if(a>=50)
{
m=a*80+(b-a)*45;
printf("%d\n",m);
}
else
{
printf("%d\n",a*90+(b-a)*45);
}
}
}

5.1 输出一行星号
在程序中只允许在一个语句中使用printf函数,在printf函数中只允许输出一个星号,编写程序在一行中输出 N 个星号。
输入: N值
输出: 一行中N个星号
#include
void main()
{
int i,N;
scanf("%d",&N);
for(i=0;iprintf("*");
}
printf("\n");
}
5.2 打印平行四边形
输入图形的高 n

和首字符 c ,输出如下例( n=5 ,c='A' )所示的图形 .
ABCDE

BCDEF

CDEFG

DEFGH

EFGHI

输入:

整数n例如 5 和某个字符例如 A

输出:

高为5和首字符A 的平行四边形

#include
void main()
{
int i,n,j;
char c,a;
scanf("%d %c",&n,&c);
for(i=1;i<=n;i++)
{
for(j=1;j<=i-1;j++)
printf(" ");
a=c+i-1;
for(j=1;j<=n;j++)
{
printf("%c",a);
a=a+1;
}
for(j=n-i;j>=1;j--)
printf(" ");
printf("\n");
}
}
5.3 打印实心正方形
5.1题中你已经打印了一行*号,这次在屏幕上输出一个由星号组成的 n 行 n 列的正方形。

程序输入 n 值,输出如下例( n=4 )所示的高和上底均为 n 的正方形:

****
****
****
****
#include
int main()
{
int n,i,j;
scanf("%d",&n);
for (i=1;i<=n;i++)
{ for (j=1;j<=n;j++) printf("*");
printf("\n");
}
return 0;
}
#include
int main()
{
int n,i,j;
scanf("%d",&n);
for (i=1;i<=n;i++)
{ for (j=1;j<=n;j++) printf("*");
printf("\n");
}
return 0;
}
5.4 空心的倒三角型
背景:
请根据要求打印可空心倒三角形。

输入:
输入三角形的高度(h >0)。

输出:
打印相应的空心倒三角形。图样参见测试用例。

#include
void main()
{
int h,i,j,k;
scanf("%d",&h);
if(h>1)
{ for(j=1;j<=(h*2-1);j++) printf("*");
printf("\n");
for(i=2;i<=h;i++)
if(i==h)
{
for(j=1;jprintf("*\n");
}
else
{
for(k=1;kprintf("*");
for(k=1;k<=2*h-1-2*i;k++) printf(" ");
printf("*\n");
}
}
else printf("Invalid input\n");
}
#include
void main()
{
int h,i,j,k;
scanf("%d",&h);
if(h>1)
{ for(j=1;j<=(h*2-1);j++) printf("*");
printf("\n");
for(i=2;i<=h;i++)
if(i==h)
{
for(j=1;jprintf("*\n");
}
else
{
for(k=1;kprintf("*");
for(k=1;k<=2*h-1-2*i;k++) printf(" ");
printf("*\n");
}
}
else printf("Invalid input\n");
}
5.5 空心字符菱形
输入:
菱型起始字母和菱形的高度。
输出:
参看测试用例,打印空心的由字符组成的菱形。
#include
void main( )
{
int n,i,j,k;
char ch;
scanf("%c %d",&ch,&n);
for (i=0;i{
for (j=n-1;j>i;j--)
printf(" ");
printf("%c",ch+i);
for (k=n;kif

(k==n+2*i-1)
printf("%c",ch+i);
else printf(" ");
printf("\n");
}
for (i=n;i>1;i--)
{
for (j=n+2;j>i+1;j--)
printf(" ");
printf("%c",ch+i-2);
for (k=n;kif(k==n+2*i-5)
printf("%c",ch+i-2);
else printf(" ");
printf("\n");
}
}
5.6 输出一个字母K吧!
输入一个整数n,输出图形K。如n=4时,输出如下图形。

* *

* *

* *

*

* *

* *

#include "stdio.h"
void main()
{
int n,x,j;
scanf("%d",&n);
for(x=0;x{
printf("*");
for(j=0;jprintf(" ");
printf("*\n");
}for(x=0;x{
printf("*");
for(j=0;jprintf(" ");
if(x) printf("*");
printf("\n");}
}
5.7 输出X图形
输入 n 值,输出下例( n=3 )所示的图形:
* *

* *

*

* *

* *

输入:

整数n(例如3)

输出:

如上图所示X 形图形

#include
int main()
{
int i,j,n;
scanf("%d",&n);
for(i=1;i<=2*n-1;i++)
{
for(j=1;j<=2*n-1;j++)
if(j==i||j==2*n-i) printf("*");
else printf(" ");
printf("\n");
}
}

5.8 找出最大素数
素数是指一个只能被1和它本身整除的数,在数论中占有重要的研究地位,在当代密码学中也被广泛应用。

输入:

取值范围

输出:

该范围内的最大素数

#include
int ss[12345679];
int main()
{
int i,j,n;
for(i=2;i*i<12345679;i++)
if(ss[i]==0)
for(j=i*i;j<12345679;j+=i)
if(ss[j]==0) ss[j]=1;
while(scanf("%d",&n)!=EOF)
{
while(n) if(!ss[n--]) break;
printf("%d\n",n+1);
}
return 0;
}

5.9 求亲密数
若正整数A的全部约数(包括1,不包括A本身)之和等于B ; 且整数B的全部约数(包括1,不包括B本身)之和等于A,则 A 、 B 为亲密数。编程,输入正整数A,输出亲密数 A , B(A<=B) ,若不存在亲密数,则输出 No output 。

例如:220和284就是一对亲密数。220的约数是:1、2、4、5、10、11、20、22、44、55、110,约数之和是284;284的约数是:1、2、4、71、142,约数之和是220。
#include
int main( )
{
int a, b = 0, i, t = 0;
scanf("%d", &a);
for ( i = 1; i <= a / 2; i++ )
{
if ( a % i == 0 )
b += i;}
for ( i = 1; i <= b / 2; i++ )
{
if ( b % i == 0 )
t += i;
}
if ( t != a || a > b )
printf("No output\n");
else printf("%d-%d\n", a, b);
return 0;}
5.11 最大公约数
输入两个正整数m和n,求它们的最大公约数和最小公倍数

比如,输入m和n的值分别

为14和21,则最大公约数为7,最小公倍数为42。

#include
main()
{
int a,b,m,n,temp;
scanf("%d",&m);
scanf("%d",&n);
if(m{temp=m;
m=n;
n=temp;
}
a=m;b=n;
while(b!=0)
{temp=a%b;
a=b;
b=temp;
}
printf("the greatest common divisor is %d\n",a);
printf("the least common multiple is %d\n",n*(m/a));

}
5.12 完数
一个数如果恰好等于它的因子之和,这个数就称为完数。例如,6的因子为1,2,3,且6=1+2+3,因此6是完数,从键盘上输入一个正整数,判断其是否为完数。如果是,则按照如下格式输出。比如,输入6,则输出Yes,its factors are 1 2 3;如果输入8,则输出No

#include
void main(){
int m,i,w=0,j=0;
int s[1000];
scanf("%d",&m);
for(i=1;iif (!(m%i)) {w+=i;s[j++] = i;}}
if(m==w){
printf("Yes,its factors are ");
for(i=0;iprintf("\n");
}
else {printf("No\n");}
}
5.13 回文数
输入一个数,判断是否为回文数,如果是,输出Yes,否则输出No

#include
int main()
{char s[256];
int i,j=0;
scanf("%s",s);
while(s[j++]);
for(i=0,j-=2;i<=j;i++,j--)
if(s[i]!=s[j]) break;
if(i>j) puts("Yes");
else puts("No");
return 0;}
5.14 看看是谁做的好事
某四位同学中有一个做了好事 , 不留名 , 表扬信来了,校长问是谁做的好事 .

A 说 : 不是我

B 说 : 是 C

C 说 : 是 D

D 说 : 他说的不对 !

编写程序:输出是谁做的好事,只输出对应的大写字母,输出格式printf("%c\n",ch); 。

#include
int main()
{
int i,j,A=0,B=0,C=0,D=0;
for(i=0;i<4;i++)
{for(j=0;j<4;j++)
if(j==i)
switch(j)
{
case 0:A=1;B=0;C=0;D=0;break;
case 1:A=0;B=1;C=0;D=0;break;
case 2:A=0;B=0;C=1;D=0;break;
case 3:A=0;B=0;C=0;D=1;break;
default:break;
}
if(B+C+D==1&&B+C==1&&C+D==1&&A+B+C==1)
printf("%c\n",i+'A');
}
return 0;
}
5.15 抓疑犯
某地刑侦大队对涉及六个嫌疑人的一桩疑案进行分析:

(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 <

stdio.h>
int main()
{getchar();
int a,b,c,d,e,f;
for(a=1;a>=0;a--)
{for(b=1;b>=0;b--)
{for(c=1;c>=0;c--)
{for(d=1;d>=0;d--)
{for(e=1;e>=0;e--)
{for(f=1;f>=0;f--)
{if((a==0&&b==0||a==1&&b==0||a==0&&b==1)&&(a==0&&e==0||a==0&&f==0||e==0&&f==0)&&(a==0&&d==1||a==1&&d==0||a==1&&d==0)&&(b==0&&c==0||b==1&&c==1)&&(c==0&&d==1||c==1&&d==0)&&(d==1&&e==1||d==0&&e==1||d==0&&e==0))
{if(a==0) printf("A:是罪犯\n");else printf("A:不是罪犯\n");
if(b==0) printf("B:是罪犯\n");else printf("B:不是罪犯\n");
if(c==0) printf("C:是罪犯\n");else printf("C:不是罪犯\n");
if(d==0) printf("D:是罪犯\n");else printf("D:不是罪犯\n");
if(e==0) printf("E:是罪犯\n");else printf("E:不是罪犯\n");
if(f==0) printf("F:是罪犯\n");else printf("F:不是罪犯\n");
}}}}}}}
return 0;}
5.16 黑色星期五
在西方,星期五和数字 13 都代表着坏运气,两个不幸的个体最后结合成超级不幸的一天。所以,不管哪个月的13日又恰逢星期五就叫 “ 黑色星期五 ” 。输入某年年号和该年的元旦是星期几( 1-7),输出该年所有的 “ 黑色星期五 ” 的日期(年 /月/日) 。
输入: 4位年号和该年元旦是星期几
输出: 所有的 “黑色星期五”的日期(年/月/日)
#include
#include
#include
int main()
{int year,i,j=0;
int a[13]={0,12,43,71,102,132,163,193,224,255,285,316,346};
int b[13]={0,12,43,72,103,133,164,194,225,256,286,317,347};
int black[10];
for(i=1;i<12;i++)
{scanf("%d",&year);
if(year % 4 != 0 || (year % 100 == 0 && year % 400 != 0 ))
{
for(i=1;i<12;i++)
{if((365*year+year/4-year/100+year/400+a[i])%7==5)
black[j++]=i;
}
}
else
{
for(i=1;i<12;i++)
{
if((365*year+year/4-year/100+year/400+b[i])%7==5)
black[j++]=i;}
}
}
if(j==0)
{
printf("Doesn't exist.\n");
}
else
{for(i=0;iprintf("%d/%d/13\n",year,black[i]);
}
system("PAUSE");
return 0;}
5.17 贪吃的猴子
有一只猴子,第一天摘了若干个桃子 ,当即吃了一半,但还觉得不过瘾 ,就又多吃了一个。第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
int m

ain()
{
int i,n,s=1;
scanf("%d",&n);
for(i=n;i>1;i--)
s=(s+(i-1))*2;
if(s>1)printf("The monkey got %d peachs in first day.\n",s);
if(s==1)printf("The monkey got %d peach in first day.\n",s);
return 0;}
5.18 求和
输入整数 m 和正整数 n ,按下列公式计算 s :

s=m-(m+1)+m+2-(m+3)+ …… +(-1)n(m+n) 。

输入: m 和 n
输出: s
#include
int main()
{ int m,n,s,i;
scanf("%d %d",&m,&n);
s=m;i=1;
do
{
if (i%2==0) s=s+(m+i);
else s=s-(m+i);
i++;} while(i<=n);
printf("s=%d\n",s);
return 0;
}
5.19 计算SUM的值
已知公式:SUM = 1 + 1/2 + 1/3 + 1/4 + ... + 1/n

输入:

n

输出:

表达式 sum 的值。结果保留 6 位小数

#include
int main()
{
float sum=0.0,t;
int i,n;
scanf("%d",&n);
if(n>=1)
{
for(i=1;i<=n;i++)
{t=1.0/i;sum=sum+t;}
printf("sum=%f\n",sum);
}
else
printf("enter n error!\n");
}
5.20 求A的值
求满足A*B=N,使A+B最小,且A,B(A
输入:正整数N

输出:满足条件的A

#include
int zhi(int);
void main()
{int n;
scanf("%d",&n);
printf("%d\n",zhi(n));
}
int zhi(int n)
{int a,b;
for(b=1;b<=n;b++){
for(a=1;a<=b;a++)
if(a * b==n)
return a;}}
5.21 编程计算
编写程序,输入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 = 0.0, t;
scanf("%d", &n);
for (i = 1; i <= n; i ++)
{ t = 1.0 / (sign * i); sign = -sign; s += t; }
printf("sum=%.4f\n", s);
return 0;
}

6.1 谁能出线
背景:

电视台举办“超级学生”才艺大赛,由于报名人数狂多,所以要先进行分组预赛。按规定,每10名学生为一个预赛小组,评委打出分数(0~100分),各小组第一名可以进入下一轮;如果有多名学生得分相同都是第一名,则可同时进入下一轮。

输入:
按顺序给出一个小组10个人的最后得分(int)。

输出:
能够出线的学生序号(0~9)。

#include
void main()
{
int a[10],i,j,max=0;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
if(a[i]>max)
max=a[i];
}
for(j=0;j<10;j++)
if(a[j]==max)
printf("%d\n",j);
}


程序定义了 4× 4 的二维数组,请编写程序,给二维数组赋值,并使数组下半三角元素中的值乘以n 。

例如:

数组中的值为



假设n为10,则输出结果如下:(输出的数按照4位宽度来输出,即%4d)

#includ

e
void main()
{int i,j,n;
int a[4][4];
for(i=0;i<4;i++)
{for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
}
scanf("%d",&n);
for(i=0;i<4;i++)
{for(j=0;j<=i;j++)
a[i][j]=a[i][j]*n;}
for(i=0;i<4;i++)
{for(j=0;j<4;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}


6.3 在屏幕上显示杨辉三角形
杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列。


其实,中国古代数学家在数学的许多重要领域中处于遥遥领先的地位。中国古代数学史曾经有自己光辉灿烂的篇章,而贾宪三角的发现就是十分精彩的一页。

杨辉三角有如下性质:

1、每行数字左右对称,由1开始逐渐变大,然后变小,回到1。
2、第n行的数字个数为n个。
3、每个数字等于上一行的左右两个数字之和。

编写程序,输入正数n, 将所有数据存储到二维数组中,并在屏幕上显示对应的杨辉三角形(注意数据之间的空格)。例如:n=5 图形如下:

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

#include "stdio.h"
void main()
{
int i,j,n;
int a[10][10];
scanf("%d",&n);


for(i=0;i<=n;i++)
{
for(j=0;j<=i;j++)
{
if(i==j||j==0)
a[i][j]=1;
else
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}

for(i=0;i<=n;i++)
{
for(j=0;j<=i;j++)
{
printf("%3d",a[i][j]);
}
printf("\n");
}
}



6.4 存储并输出一个矩阵
编程,输入 n ,存储并输出如下例( n=5 )所示的 图形。

1 2 3 4 5

1 1 2 3 4

1 1 1 2 3

1 1 1 1 2

1 1 1 1 1

#include
void main()
{
int n,i,j;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(j<=i)
printf(" 1");
else
printf(" %d",j-i+1);
}
printf("\n");
}
}



6.5 巧分橘子
一家农户以果园为生,一天,父亲拿出一堆橘子,共2520个,准备分给他的6个儿子。父亲按事先写在一张纸上的数字把这堆橘子分完,每个人分到的橘子的个数都不相同。然后他说:“老大,把你分到的橘子分1/8给老二,老二拿到后,连同原来的橘子分1/7给老三,老三拿到后,连同原来的橘子分1/6给老四,以此类推,最后老六拿到后,连同原来的橘子分1/3给老大,这样,你们每个人分到的橘子就一样多了。”问兄弟6人原先各分到多少只橘子。

请将兄弟6人的橘子数存储到一维数组中,并按照

下列各式输出:

x[1]=240
x[2]=460
x[3]=434
x[4]=441
x[5]=455
x[6]=490

void main()
{
int a[6]={240,460,434,441,455,490};
int i;
for(i=0;i<6;i++)
printf("x[%d]=%d\n",i+1,a[i]);
}



6.6 求二维数组周边元素之和
编写一个程序,求出4×5的二维数组周边元素之和。

输入:二维数组元素

输出:周边元素之和

如:

输入:

1 3 5 7 9

2 9 9 9 4

6 9 9 9 8

1 3 5 7 0


输出:61

#include
void main()
{
int a[4][5],i,j,t=0;
for(i=0;i<4;i++)
for(j=0;j<5;j++)
{
scanf("%d",&a[i][j]);
}
for(i=0;i<4;i++)
for(j=0;j<5;j++)
{
if(i==3||j==4||i==0||j==0)
t=t+a[i][j];
}
printf("%d\n",t);
}



6.7 统计素数的个数
求出 2 到 m 之间 ( 含 m,m<=1000) 所有素数并放在数组 a 中。

输入:正整数m

输出:从小到大的所有素数,及个数(素数输出的时候用%4d来控制)

如:

输入:10

输出:2 3 5 7

4


#include
void main()
{
int n,i,j,k=0,leap=1;

scanf("%d",&n);
for(i=2;i<=n;i++)
{ for(j=1;j<=i;j++)
{ if((j!=1)&(j!=i)&(i%j==0))
{leap=0;break;}
else
leap=1;
}
if(leap)
{
k++;
printf("%4d",i);
}
}
printf("\n");
printf("%d\n",k);
}





相关文档