c语言作业整理

一:求最小公倍数和最大公约数

方法1

#include <stdio.h>
int main()
{
    int a,b,c,m,n;
 printf("please input two number\n");
 scanf("%d%d",&a,&b);
   m=a; n=b;
 while (b!=0)
 {
      c=a%b;
   a=b;b=c;
 
 
 
 }
 printf("the common divisor is %d\n",a);
 printf(" the common  multiple is %d\n",m*n/a);//固定算法求最小公倍数

  

}

方法:a=15;b=12 c=3

       15%12=3

       a=12 b=3

       12%3=0;

      c=0所以b等于0,a为最大公约数

方法2:
#include <stdio.h>
int main()
{
  int num1,num2,min,max,i;
  scanf("%d%d",&num1,&num2);
  min=(num1 >num2) ? num2 : num1;
  for(i=min;i>0;i--)
  {
   if(num1 % i ==0 && num2 % i ==0)
    {
    
       printf("divisor is %d\n",i);
       break;
    }
  
   
  }
 max=(num1 > num2) ? num1:num2;
 for(i=max ; i<=num1 * num2; i++)
 {
   if(i %num1 ==0 && i % num2 ==0)
   {
     printf("multiple is %d\n",i);
     break;
   
   }
 }


}
解释:取2个数最小的,i=min,i--从大到小依次与2个数取余,若符合2个余数为0则这个数为最大公数;

          取 2个数最大的,i=max,因为2个数最大公倍数为2个数积,而且最小公倍数一定大于等于max,所以以max为基础依次加              1,直到i可以同时被2个数取余输出最小公倍数。

二:

题目:找出100到300之间不能被3整除的数,5个一排输出
#include <stdio.h>
int main()
{
  int i,count=0;
 for(i=200;i<=300;i++)
 {
   if((i%3) != 0)
   {
    count++;
     printf("%d ",i);
   
   }
   if(count == 5)
   {
     printf("\n");
     count=0;
   }
 注意给count写初值:局部变量没有初值会被赋予随机值。全局变量会等于0;
 }
   

}
 

三:题目:输入一个整数a,再输入两个整数p(p<32),v(0|1),将该整数a的p位设置为v,输出修改后的该整数的二进制表示.

#include <stdio.h>
int main()
{
  int num,p,v,i;
  printf("please input\n");
  scanf("%d%d%d",&num,&p,&v);
  if(p>=32 || v>1||v<0 )//判定反条件
  {
    printf("input error\n");
    return -1;//return会结束本次程序
  }
if(v==1)
{
  num=num |(1<<(p-1));//因为是第几位所以减一

}
else if(v==0)
{

 num= num & ~(1<< (p-1));1与0=0,移位1取反

}
for(i=0;i<32;i++)
{

 printf("%d",(num & 0x80000000)>>31);//int类型32位1000 0000 0000 。。。与将最高位移位31位到最低位输出
 num= num << 1;输出次高位
 
}
printf("\n");

return 0;

 

猜你喜欢

转载自blog.csdn.net/hujiaqi2018/article/details/81173505