K&Rの名著:<br>ウィジェットまとめ1

2713 ワード

1、文字列sに現れるすべての文字squeeze(char s[],int c)を削除する
void squeeze_test(char str[],int c)
         {
                int i,j;
                for (i=j=0;str[i] !='\0'; i++)
                     if (str[i] != c)
                            str[j++]=str[i];
                    str[j]='\0';
         }

2、標準ライブラリ関数strcat(s,t)文字列tを文字列sの末尾に接続する---sに十分な空間があると仮定する
  
void strcat(char s[], char t[])
{
   int i, j;
   i=j=0;
   while(s[i] !='\0')
   i++;
   while((s[i++] = t[j++]) != '\0')
   ;
}

3、関数getbits(x,p,n)は、xの右からp番目から右へn番目のフィールドを返す
unsigned getbits(unsigned x, int p, int n)
{
return (x >> (p+1)) & ~(~0 << n);
}

4、C言語は判断の大端と小端を実現する.
#include<stdio.h>
int check()
{
	union check
	{
		int i;
		char ch;
	}c;
	c.i  =1;
	return (c.ch == 1);
}
int main()
{
   int ret;
   ret = check();
   if(ret == 0)
   {
   printf("Big
"); } else { printf("little
"); } return 0; }

5、構造体と共同体の違い
a、struct、unionは複数の異なるデータ型メンバーで構成されていますが、同じ時点でunionには選択されたメンバーが1つしか保存されず、structのすべてのメンバーが存在します.structでは、各メンバーが独自のメモリ領域を占有し、同時に存在します.1つのstruct変数の合計長は、すべてのメンバーの長さの和に等しい.Unionでは、すべてのメンバーが同時にメモリ領域を占有することはできません.同時に存在することはできません.Union変数の長さは、最も長いメンバーの長さに等しい.
b、unionの異なるメンバーに対して値を付与すると、他のメンバーに対して書き換えられ、元のメンバーの値は存在せず、structの異なるメンバーに対して値を付与することは互いに影響しない. 
6、計算実行プログラムのコンピュータワード長worldlength()
int worldlength(void)
{
   int i;
   unsigned v = (unsigned)~0;
   
   for (i = 1; (v = v >> 1) >0); i++)
        ;
   return i ;

}

7、bitcount()関数統計x中値1のバイナリビット数
int bitcount(unsigned x)
{
  int b;
  for (b = 0; x !=0; x>>= 1)
     if (x & 01)
        b++;
  return b;
}

8、折半法(二分法)
/*binsearch  ,v              */
int binsearch(int x, int v[], int n)
{
   int low, high, mid;
   low = 0;
   high = n -1;
   while ( low <= high) {
        mid = (low+high) / 2;
        if (x < v[mid]) 
           high = mid -1;
       else if 
           low = mid +1;
       else
           return mid;
    } 
   return -1;
}