首页 > 编程语言 > 详细

初涉 C 语言——(1)

时间:2015-09-25 14:34:25      阅读:223      评论:0      收藏:0      [点我收藏+]

1.volatile类型修饰符,可以让变量被不同的线程访问和修改,也可以防止变量被编译器优化,而const用来限定一个变量不允许被改变,但下面的程序运行结果为20。

#include<stdio.h>
int main()
{
    volatile const int num = 10;
    int *p = (int *) & num;
    *p = 20;
    printf("%d\n",num);
    return 0;
}

2.返回一个数的二进制表达中1的个数。

#include<stdio.h>
int main()
{
    unsigned int i;
    scanf("%d",&i);
    printf("%d的二进制表达中有 %d 个1",i,count_one_bits(i));
    return 0;
}
int  count_one_bits(unsigned int m)
{
    int n,count;    // 返回 1的位数
    n = m;
    count = 0;
    while(n % 2 == 0)
        n = n / 2;
    while(n % 2 == 1)
    {
        count++;
        do
        {
            if (n != 0)
                n = n / 2;
            else
                break;
        }
        while(n % 2 == 0);
     }
     return count;
}

这是我自己写的,最容易想到的办法就是不断地除2模2取余,下面是老师给的方法(省略部分语句)

...
i = 32;
while(i--)
{
    if(num & 1 == 1)
        count++;
    num = num>>1;
}

这种方法就是向右移位,使最低位&上1进行判断,还有一种方法

int count_one_bit(int num)
{
    int count = 0;
    while(num)
    {
        count++;    //只要一个数不为0,则二进制表达中至少有一个1
        num = num & (num-1);//没执行一次这条语句,其实就是使该数最低位的一个1置成0
    }
    return count;
}

每次看完老师敲代码,都有一种脑袋上锈的赶脚技术分享


3.求两个数的最大公约数。

#include<stdio.h>
int main()
{
 int a,b,i;
 int min,max;
 int p = 0;
 scanf("%d%d",&a,&b);
 if(a > b)        //再上了两节课后,才发现这个if else什么的完全可以用提条件运算符来代替的
 {                  嘛~~~就是 a>b?a:b;
  min = b;
  max = a;
 }
 else
 {
  min = a;
  max = b;
 }
 for(i = min;i > 1;i--)
 {
  if(min % i ==0)        //我所能第一想到的办法,就是从最小的数开始不断的往下除/(ㄒoㄒ)/
  {
   if(max % i == 0)
   {
    p = i;
    printf("最大公约数为:%d\n",p);
    break;
   }
  }
 }
 if(p == 0)
  printf("没有最大公约数\n");
 return 0;
}

来来来,给你看看老师的代码

#include <stdio.h>
int main()
{
 int a, b;
 scanf("%d%d", &a, &b);
 while (a%b)
 {
  int tmp = a%b;
  a = b;
  b = tmp;
 }
 printf("%d\n", b);
 system("pause");
 return 0;
}

他告诉我们,求两个数的最大公约数,就是用辗转相除法,不断地相除取余,最终得到可以除尽的余数就是最大公约数,而最小公倍数就是两个数的乘积除以最大公约数......

我好想告诉他,我从小数学就老不及格,高考数学还是不及格技术分享

本文出自 “敲完代码好睡觉zzz” 博客,请务必保留此出处http://2627lounuo.blog.51cto.com/10696599/1698197

初涉 C 语言——(1)

原文:http://2627lounuo.blog.51cto.com/10696599/1698197

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!