C和指針課後習題(第五章)

5.1

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main()
{
	char ch;
	while(scanf("%c",&ch))
	{
		if (islower(ch))
		{
			putchar(toupper(ch));
		}
		else
			putchar(ch);
	}
	system("pause");
	return 0;
}

5.2

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main()
{
	char ch;
	while(scanf("%c",&ch))
	{
		if (isalpha(ch))
		{
			
			if (isupper(ch))
			{
				ch += 13;
				if(ch>90)
					ch -= 26;
			}
			else
			{
				ch -= 13;
				if(ch<97)
					ch += 26;
			}
			putchar(ch);
		}
		else
			putchar(ch);
	}
	system("pause");
	return 0;
}

5.3

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
long long number;
char *string_bits(long long n)
{
	const int bits = sizeof(int)*8;
#if 0
	printf("sizeof(bits)=%d\n",bits);
#endif
	
	int i,j=0;
	char *string = (char *)malloc(bits);
	memset(string,'\0',sizeof(char)*(bits));
	for(i=bits-1; i>=0; i--)
	{
		//printf("%c", (n & (1<<i)) ?'1':'0');
		string[j++] = (n & (1<<i)) ?'1':'0';
	}
	char string_of_bit[33];
	for (int j=0;j<32;j++)
	{
		string_of_bit[j] = string[j];
	}
	string_of_bit[32] = '\0';
#if 1
	printf("string_of_bit = \n%s\n",string_of_bit);
#endif
	
	return string_of_bit;
}
unsigned int reverse_bits(unsigned int value)
{
	int num = 0;
	for (int i=strlen(string_bits(number))-1;i>=0;i--)
	{
		num *= 2;
		num += string_bits(number)[i] - '0';
	}
	return num;
}
int main()
{
	
	printf("please input a number:\n");
	scanf("%lld",&number);
	printf("%s\n",string_bits(number));
	printf("the number is %lld\n",reverse_bits(number));
	system("pause");
	return 0;
}

5.4

#include <stdio.h>
#include <stdlib.h>
//#define NDEBUG
#include <assert.h>
#include <string.h>
#define TRUE 1
#define FALSE 0
void set_bit(char bit_array[],unsigned bit_number);
void clear_bit(char bit_array[],unsigned bit_number);
void assign_bit(char bit_array[],unsigned bit_number,int value);
int test_bit(char bit_array[],unsigned bit_number);

void set_bit(char bit_array[],unsigned bit_number)
{
	assert(bit_number>=sizeof(bit_array)||bit_number<0);
	bit_array[bit_number-1] = 1;
	printf("bit_array is \n%s\n",bit_array);
}

void clear_bit(char bit_array[],unsigned bit_number)
{
	assert(bit_number>=sizeof(bit_array)||bit_number<0);
	bit_array[bit_number-1] = 0;
	printf("bit_array is \n%s\n",bit_array);
}

void assign_bit(char bit_array[],unsigned bit_number,int value)
{
	assert(bit_number>=sizeof(bit_array)||bit_number<0);
	if (0 == value)
	{
		bit_array[bit_number-1] = 0;
	}
	else
		bit_array[bit_number-1] = 1;
	printf("bit_array is \n%s\n",bit_array);
}

int test_bit(char bit_array[],unsigned bit_number)
{
	assert(bit_number>=sizeof(bit_array)||bit_number<0);
	if (bit_number!=0)
	{
		return TRUE;
	}
	else
		return FALSE;
}
char *string_bits(long long n)
{
	#pragma pack(8)
	const int bits = sizeof(int)*8;
#if 0
	printf("sizeof(bits)=%d\n",bits);
#endif

	int i,j=0;
	char *string = (char *)malloc(bits);
	memset(string,'\0',sizeof(char)*(bits));
	for(i=bits-1; i>=0; i--)
	{
		//printf("%c", (n & (1<<i)) ?'1':'0');
		string[j++] = (n & (1<<i)) ?'1':'0';
	}
	char string_of_bit[33];
	for (int j=0;j<32;j++)
	{
		string_of_bit[j] = string[j];
	}
	string_of_bit[32] = '\0';
#if 0
	printf("string_of_bit = \n%s\n",string_of_bit);
#endif

	return string_of_bit;
}
int main()
{
	
	int number,bit_number,value;
	char *bit_array = (char *)malloc(sizeof(char));
	printf("please input a number:\n");
	int i,j=0;
	scanf("%d",&number);
	for (i=0;i<32;i++)
	{
		bit_array = (char *)realloc(bit_array,i+1);
		bit_array[i] = string_bits(number)[i];
	}
	printf("the original bit_array is %s\n",bit_array);
	printf("after set_bit:\n");
	set_bit(bit_array,10);
	printf("after clear_bit:\n");
	clear_bit(bit_array,31);
	printf("after assign_bit:\n");
	assign_bit(bit_array,31,0);
	printf("the result is %d\n",test_bit(bit_array,32));
	system("pause");
	return 0;
}


發佈了105 篇原創文章 · 獲贊 10 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章