程序

1.编写函数:

unsigned int reverse_bit(unsigned int value);

这个函数的返回值value的二进制位模式从左到右翻转后的值。

如:

在32位机器上25这个值包含下列各位:

00000000000000000000000000011001

翻转后:(2550136832)

10011000000000000000000000000000

程序结果返回:

2550136832

#include<stdio.h>

#include<stdlib.h>

int reverse_bit(unsigned int value)

{

     int i = 0;

     int ret = 0;

     int bit = 0;

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

     {

              ret <<= 1;

              bit = value & 1;

              value >>= 1;

              ret = ret | bit;

     }

     return ret;
     }
     int main(){

     int value = 25;

     unsigned int ret = reverse_bit(value);

     printf("%u\n", ret);

     system("pause");
     }

2.不使用(a+b)/2这种方式,求两个数的平均值。

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

#include<stdlib.h>

float avrerage(float x, float y)

{

     float ret = 0;

     ret = y+(x-y)/2;

     return ret;
     }
     int main(){

     float c = 0;

     float a = 0;

     float b = 0;

     printf("请输入两个数:");

     scanf("%f,%f", &a, &b);

     printf("输出的结果为:");

     c=avrerage(a, b);

     printf("%f\n", c);

     printf("\n");

     system("pause");
     }

3.编程实现:

一组数据中只有一个数字出现了一次。其他所有数字都是成对出现的。

请找出这个数字。(使用位运算)

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

#include<stdlib.h>

int find(int arr[], int len)

{

     int tmp = 0;

     for (int i = 0; i < len; i++)

     {

              tmp = tmp^arr[i];

     }

     for (int i = 0; i < len; i++)

     {

              if (tmp == arr[i])

                      return i;

     }

     return len+1;
     }
     int main(){

     int a = 0;

     int len = 0;

     int arr[] = {5,4,5};

     len = sizeof(arr) / sizeof(arr[0]);

     a = find(arr, len);

     if (a>len)

              printf("这组数中没有单独的数\n");

     else

     {

              printf("%d\n", arr[a]);

     }

     system("pause");
     }

4.有一个字符数组的内容为:“student a am i”,

请你将数组的内容改为"i am a student".

要求:

不能使用库函数。

只能开辟有限个空间(空间个数和字符串的长度无关)。

student a am i

i ma a tneduts

i am a student

#include<stdio.h>

#include<stdlib.h>

int length(char *arr)

{

     int i = 0;

     while (arr[i] != '\0')

     {

              i++;

     }

     return  i;
     }
     void swap(char* a, char *p){

     char tem;

     while (a < p)

     {

              tem = *a;

              *a = *p;

              *p = tem;

              a++;

              p--;

     }
     }
     int main(){

     char arr[] = "student a am i";

     char *p = arr;

     char *q = arr;

     int flag = 0;

     for (int i = 0; arr[i] != '\0'; i++)

     {

              if ((flag == 0) && (arr[i] != ' '))

              {

                      p = arr + i;

                      flag = 1;

              }

              else if ((flag == 1) && (arr[i] == ' '))

              {

                      q = arr + i - 1;

                      flag = 0;

                      swap(p, q);

              }

     }

     swap(arr, arr + length(arr) - 1);

     printf("%s", arr);

     system("pause");
     }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值