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;
}