基础程序题(练习)

下面是我学习程序练习过的基础程序题(仅供参考)

1、题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?


1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。

2.代码如下(示例):

main()
{
int i,j,k;
printf("\n");
for(i=1;i<5;i++)    /*以下为三重循环*/
 for(j=1;j<5;j++)
  for (k=1;k<5;k++)
   {
    if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/
    printf("%d,%d,%d\n",i,j,k);
   }
}

#这里结果我就不给了,哈哈哈!

2.题目:输入某年某月某日,判断这一天是这一年的第几天?

1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
2.代码如下(示例):

main()
{
	int day,month,year,sum,leap;
	printf("\nplease input year,month,day\n");
	scanf("%d,%d,%d",&year,&month,&day);
	switch(month)/*先计算某月以前月份的总天数*/
{
	 case 1:sum=0;break;
	 case 2:sum=31;break;
	 case 3:sum=59;break;
	 case 4:sum=90;break;
	 case 5:sum=120;break;
	 case 6:sum=151;break;
	 case 7:sum=181;break;
	 case 8:sum=212;break;
	 case 9:sum=243;break;
	 case 10:sum=273;break;
	 case 11:sum=304;break;
	 case 12:sum=334;break;
	 default:printf("data error");
	 break;
}
	sum=sum+day;  /*再加上某天的天数*/
	 if(year%400==0||(year%4==0&&year%100!=0))/*判断是不是闰年*/
	  leap=1;
	 else
	  leap=0;
	if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
	sum++;
	printf("It is the %dth day.",sum);
}


3.题目:输出9*9口诀。

1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。

2.代码如下(示例):

main()
{
 int i,j,result;
 printf("\n");
 for (i=1;i<10;i++)
  { for(j=1;j<10;j++)
    {
     result=i*j;
     printf("%d*%d=%-3d",i,j,++ result);/*-3d表示左对齐,占3位*/
    }
   printf("\n");/*每一行后换行*/
  }
}


4.题目:判断101-200之间有多少个素数,并输出所有素数。

1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。

2.代码如下(示例):

main()
{
 int m,i,k,h=0,leap=1;
 printf("\n");
 for(m=101;m<=200;m++)
  { k=sqrt(m+1);
   for(i=2;i<=k;i++)
     if(m%i==0)
      {leap=0;break;}
   if(leap) {printf("%-4d",m);h++;
        if(h%10==0)
        printf("\n");
        }
   leap=1;
  }
 printf("\nThe total is %d",h);
}

5.题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

1.程序分析:利用辗除法。

2.代码如下(示例):

main()
{
 int a,b,num1,num2,temp;
 printf("please input two numbers:\n");
 scanf("%d,%d",&num1,&num2);
 if(num1  { temp=num1;
  num1=num2; 
  num2=temp;
 }
a=num1;b=num2;
while(b!=0)/*利用辗除法,直到b为0为止*/
 {
  temp=a%b;
  a=b;
  b=temp;
 }
printf("gongyueshu:%d\n",a);
printf("gongbeishu:%d\n",num1*num2/a);
}


6.题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

1.程序分析:见下面注释

2.代码如下(示例):

main()
{
float sn=100.0,hn=sn/2;
int n;
for(n=2;n<=10;n++)
 {
  sn=sn+2*hn;/*第n次落地时共经过的米数*/
  hn=hn/2; /*第n次反跳高度*/
 }
printf("the total of road is %f\n",sn);
printf("the tenth is %f meter\n",hn);
}


7.题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

1.程序分析:采取逆向思维的方法,从后往前推断。

2.代码如下(示例):

main()
{
int day,x1,x2;
day=9;
x2=1;
while(day>0)
 {x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2倍*/
 x2=x1;
 day--;
 }
printf("the total is %d\n",x1);
}



8.题目:题目:求一个3*3矩阵对角线元素之和

1.程序分析:利用双重for循环控制输入二维数组,再将a[i][i]累加后输出。

2.代码如下(示例):

main()
{
	float a[3][3],sum=0;
	int i,j;
 printf("please input rectangle element:\n");
	for(i=0;i<3;i++)
	 for(j=0;j<3;j++)
	 scanf("%f",&a[i][j]);
	for(i=0;i<3;i++)
	 sum=sum+a[i][i];
 printf("duijiaoxian he is %6.2f",sum);
}


始终相信一分耕耘一份收获,加油!

  • 19
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南余.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值