c語言程序設計課后習題答案
課后作業是為鞏固學習效果而安排的作業,是課堂教學過程中的非常重要的組成部分,是鞏固新授知識,形成技能技巧,培養良好的思維品質,發展學生智力的重要途徑,是課堂教學過程中不可跨越的一環。今天學習啦小編分享了c語言程序設計課后習題答案,一起來學習。
c語言程序設計課后習題答案
例1、求100到999之間的所有水仙花數。
#include
void main(void)
{
int n,b,s,g;
for(n=100;n<=999;n++){
b = n/100;
s = (n-b*100)/10;
g = (n%100)%10;
if( b*b*b+s*s*s+g*g*g == n)printf("%d\n",n);
}
}
例2、求兩個整數的最大公約數和最小公倍數
gcd(x,y) = gcd(x, x% y )
lcm(x,y) =(x×y)/gcd(x,y)
#include
void main(void)
{
int x,y,r,n,gcd,lcm;
scanf("%d%d",&x,&y);
n = x*y;
r=x%y;
gcd=y;
while(r!=0)
{
x=y;
y=r;
r=x%y;
gcd=y;
}
lcm = n/gcd;
printf("gcd=%d lcm=%d\n",gcd,lcm);
}
例3、將一張面值是100元的錢等值轉換為5元、1元和0.5元的零鈔,要求每種零鈔至少一張,求所有的兌換方式。
#include
void main(void)
{
int i,j,k;
for(i=1;i<=20;i++){
for(j=1;j<=100;j++){
for(k=1;k<=200;k++){
if( i*5+j+0.5*k == 100 )
printf("%d %d %d\n",i,j,k);
}
}
}
}
例4、求愛因斯坦數學問題:有一條長臺階,若每步跨2階,則最后剩余1階,若每步跨3階,則最后剩2階,若每步跨5階,則最后剩4階,若每步跨6階,則最后剩5階,若每步跨7階,則最后正好一階不剩。求臺階長度。
#include
void main(void)
{
int n;
n=7;
while(1){
if( (n%2==1) && (n%3==2) &&
(n%5==4) && (n%6==5) )break;
n=n+7;
}
printf("%d\n",n);
}
例5、驗證歌德巴赫猜想(任意一個大于6的偶數都可以分解為兩個素數之和),驗證范圍是6~2000的偶數。
#include
#include
void main(void){
int n,i,k1,k2;
int isPrimeFlag1,isPrimeFlag2;
for(n=6;n<=100;n+=2){
for(k1=3;k1
isPrimeFlag1=1; //假設是素數
for(i=3;i<=sqrt(k1);i+=2){
if(k1%i==0){isPrimeFlag1=0;break;}
}
if( isPrimeFlag1==0 )continue;
k2=n-k1;
isPrimeFlag2=1; //假設k2是素數
for(i=3;i<=sqrt(k2);i+=2){
if(k2%i==0){isPrimeFlag2=0;break;}
}
if(isPrimeFlag1 && isPrimeFlag2 ){
printf("%d=%d+%d\n",n,k1,k2);
break;
}
}
}
}
例6、已知一正整數遞增等差數列,前5項的和是25,前5項的積是945,根據上述條件,輸出該數列的前10項。
#include
void main(void)
{
int a,d,i,s,r,x;
for(a=1;a<5;a++){
for(d=1;d<5;d++){
s=0; r=1;
for(i=0;i<5;i++){
x=a+d*i; s=s+x; r=r*x;
}
if(s==25 && r==945 )goto loop_exit;
}
}
loop_exit:
for(i=0;i<19;i++){
x=a+d*i; printf("%d\n",x);
}
}
例7、A、B、C、D和E合伙捕魚,到第二天凌晨時都疲憊不堪,于是各自找地方休息。日上三竿,A第一個醒來,他將魚分為五份,把多余的一條扔掉,拿走自己的一份。B第二個醒來,也將魚分為五份,把多余的一條扔掉,拿走自己的一份。C、D、E依次醒來,也按同樣的方法分魚。求他們合伙至少捕了多少魚。
#include
void main(void)
{
int zs,n,i,flag;
zs=6;
while(1){
flag=1;n=zs;
for(i=0;i<5;i++){
if( n%5 !=1 ){flag=0;break;}
n=n-(n-1)/5;
}
if(flag==1)break;
n = ++zs;
}
printf("%d\n",zs);
}
例8、一輛卡車違反交通規則,撞人逃跑。現場有三個目擊證人,但沒有記住車號,只記下一些車號的特征。甲說:牌照的前兩位數字相同;乙說:牌照的后兩位數字是相同的;丙說:四位的車號剛好是一個整數的平方。根據上述線索求車號。
#include
#include
void main(void)
{
int n,x,k1,k2,k3,k4;
for(n=1000;n<=9999;n++){
x=(int)sqrt(n);
if(x*x != n)continue;
k1 = n/1000;
k2 = (n-k1*1000)/100;
k3 = (n-k1*1000-k2*100)/10;
k4 = (n-k1*1000-k2*100-k3*10);
if(k1==k2 && k3==k4 )printf("%d\n",n);
}
}
例9、某數組有20個元素,編程序將該數組中的所有元素逆序存儲并輸出。即用第一元素和最后一個元素對調,第二和最后一個對調。
#include
#include
void main(void)
{
int a[20],i,j,t;
for(i=0;i<20;i++)a[i]=i+1;
for(i=0,j=19;i
t=a[i];a[i]=a[j];a[j]=t;
}
for(i=0;i<20;i++)printf("%d\n",a[i]);
}
例10、編程序,輸入一個十進制數,將其轉換為二進制后存儲到一個字符數組中。
#include
#include
void main(void){
int x,r,i=0,j;
char a[100]={0},t;
scanf("%d",&x);
while(1){
r=x%2; a[i++]=48+r; x=x/2;
if(x==0)break;
}
for(i=0,j=strlen(a)-1;i
t=a[i];a[i]=a[j];a[j]=t;
}
printf("%s\n",a);
}
例11、編程序求二維數組中最小元素所在的行和列。
#include
#include
#include
void main(void)
{
int a[4][5],i,j,max,row,col;
srand( (unsigned)time( NULL ) );
for(i=0;i<4;i++ )
for(j=0;j<5;j++)a[i][j]=rand();
max=a[0][0];row=0;col=0;
for(i=0;i<4;i++){
for(j=0;j<5;j++){
if(max>a[i][j]){max=a[i][j];row=i;col=j;}
}
}
printf("i=%d j=%d\,",i,j);
}
例12、編程產生3×4的矩陣A,并輸出他經過行列互換后的矩陣B。
#include
#include
#include
void main(void)
{
int a[3][4],b[4][3],i,j;
srand( (unsigned)time( NULL ) );
for(i=0;i<3;i++ )
for(j=0;j<4;j++)a[i][j]=rand();
for(i=0;i<3;i++){
for(j=0;j<4;j++){
b[j][i]=a[i][j];
}
}
for(i=0;i<3;i++){
printf("\n");
for(j=0;j<4;j++){
printf("%6d",a[i][j]);
}
}
printf("\n");
for(i=0;i<4;i++){
printf("\n");
for(j=0;j<3;j++)printf("%6d",b[i][j]);
}
}
例13、不使用字符串比較函數strcmp,實現兩個字符串的比較。
#include
#include
void main(){
char s1[300], s2[300];
int result, i=0;
scanf("%s%s",s1, s2 );
while( s1[i] && s2[i] && s1[i] == s2[i] ) i++;
result = s1[i]-s2[i];
if ( result == 0 ) printf(" s1等于s2 ");
else if( result > 0 ) printf(" s1大于s2 ");
else printf(" s1小于s2 ");
}
例14、判斷字符串s1中是否包含字符串s2。
#include
#include
void main(void){
char s1[100],s2[100];
int i,j,len,flag;
gets(s1);gets(s2);
len = strlen(s2);
for(i=0;i<=strlen(s1)-len;i++){
flag=1;
for(j=0;j
if( s1[i+j]!=s2[j] ){flag=0;break;}
}
}
if(flag==1)printf("包含!\n");
else printf("不包含!\n");
}
以上是學習啦小編整理了c語言程序設計課后習題答案,有幫助到你嗎?