C语言一些题目

完成猜数字游戏

 

 

  1.  
    #define _CRT_SECURE_NO_WARNINGS 1
  2.  
    #include<stdio.h>
  3.  
    #include<stdlib.h>
  4.  
     
  5.  
    void Menu() {
  6.  
    printf("------------------\n");
  7.  
    printf("欢迎来到猜数字小游戏\n");
  8.  
    printf("1.开始游戏\n");
  9.  
    printf("2.退出\n");
  10.  
    printf("------------------\n");
  11.  
    }
  12.  
     
  13.  
    int main() {
  14.  
    int i = 1;
  15.  
    while (i) {
  16.  
    Menu();
  17.  
    printf("请选择:");
  18.  
    scanf("%d", &i);
  19.  
    switch (i)
  20.  
    {
  21.  
    case 1:
  22.  
    printf("-------游戏开始------\n");
  23.  
    int input = 0;
  24.  
    unsigned int num = 0;
  25.  
    /*用srand和rand制造出一个伪随机数*/
  26.  
    srand((unsigned)time(NULL));
  27.  
    num = rand() % 100;
  28.  
    while (1) {
  29.  
    printf("请猜出你的数字:");
  30.  
    scanf("%d", &input);
  31.  
    if (num > input) {
  32.  
    printf("猜小了!\n");
  33.  
    }
  34.  
    else if (num < input) {
  35.  
    printf("猜大了\n");
  36.  
    }
  37.  
    else {
  38.  
    system("cls");
  39.  
    printf("恭喜你猜对了!\n");
  40.  
    break;
  41.  
    }
  42.  
    }
  43.  
    break;
  44.  
    case 2:
  45.  
    i = 0;
  46.  
    break;
  47.  
    default:
  48.  
    printf("选择错误");
  49.  
    break;
  50.  
    }
  51.  
    }
  52.  
    system("pause");
  53.  
    return 0;
  54.  
    }



 

写代码可以在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1.(折半查找) 

 

 

  1.  
    #define _CRT_SECURE_NO_WARNINGS 1
  2.  
    #include<stdio.h>
  3.  
    #include<stdlib.h>
  4.  
     
  5.  
    typedef int Type;
  6.  
     
  7.  
    int binary_search(Type arr[], int sz, int key) {
  8.  
    if (arr == NULL) {
  9.  
    return;
  10.  
    }
  11.  
    /*二分查找*/
  12.  
    int left = 0;
  13.  
    int right = sz - 1;
  14.  
     
  15.  
    while (left <= right) {
  16.  
    /*求出mid的下标*/
  17.  
    int mid = left + (right - left) / 2;
  18.  
    if (arr[mid] > key) {
  19.  
    right = mid - 1;
  20.  
    }
  21.  
    else if (arr[mid] < key) {
  22.  
    left = mid + 1;
  23.  
    }
  24.  
    else {
  25.  
    return mid;
  26.  
    }
  27.  
    }
  28.  
    /*如果到了这里表示没有找到*/
  29.  
    return -1;
  30.  
    }
  31.  
     
  32.  
    int main() {
  33.  
    Type arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  34.  
    int sz = sizeof(arr) / sizeof(arr[0]);
  35.  
    int key = 0;
  36.  
    int ret = binary_search(arr, sz, key);
  37.  
    printf("expect 0, actual :%d", ret);
  38.  
    system("pause");
  39.  
    return 0;
  40.  
    }



 

编写代码模拟三次密码输入的场景

 

 

  1.  
    #define _CRT_SECURE_NO_WARNINGS 1
  2.  
    #include<stdio.h>
  3.  
    #include<stdlib.h>
  4.  
    #include<string.h>
  5.  
     
  6.  
     
  7.  
    /*模拟三次输入密码的情况*/
  8.  
    int main() {
  9.  
    int i = 1;
  10.  
    char* mes = "123456";
  11.  
    while (i) {
  12.  
    if (i == 4) {
  13.  
    printf("您已经错误三次了!");
  14.  
    break;
  15.  
    }
  16.  
    printf("请输入密码:");
  17.  
    char mes2[20];
  18.  
    scanf("%s", mes2);
  19.  
    if (strcmp(mes, mes2) == 0) {
  20.  
    printf("登录成功!");
  21.  
    break;
  22.  
    }
  23.  
    else {
  24.  
    printf("第%d次输入失败,请重新输入!\n", i);
  25.  
    i++;
  26.  
    }
  27.  
    }
  28.  
    system("pause");
  29.  
    return 0;
  30.  
    }



编写一个程序,可以一直接收键盘字符,如果是小写字符就输出对应的大写字符,如果接收的是大写字符,就输出对应的小写字符,如果是数字不输出

 

 

  1.  
    #define _CRT_SECURE_NO_WARNINGS 1
  2.  
    #include<stdio.h>
  3.  
    #include<stdlib.h>
  4.  
     
  5.  
    int main() {
  6.  
    char ch;
  7.  
    while ((ch = getchar()) != EOF) {
  8.  
    if (ch >= 'a' && ch <= 'z') {
  9.  
    printf("%c \n", ch - 32);
  10.  
    }
  11.  
    else if (ch >= 'A' && ch <= 'Z') {
  12.  
    printf("%c \n", ch + 32);
  13.  
    }
  14.  
    else if(ch > '0' && ch < '9'){
  15.  
    printf("输错啦!\n");
  16.  
    }
  17.  
    else {
  18.  
    ;
  19.  
    }
  20.  
    }
  21.  
    system("pause");
  22.  
    return 0;
  23.  
    }



写一个函数返回参数二进制中 1 的个数 

 

 

  1.  
    #define _CRT_SECURE_NO_WARNINGS 1
  2.  
    #include<stdio.h>
  3.  
    #include<stdlib.h>
  4.  
     
  5.  
    int count_one_bits(unsigned int value) {
  6.  
     
  7.  
    int count = 0;
  8.  
    int i = 0;
  9.  
    while (value) {
  10.  
    if (value % 2 == 1) {
  11.  
    count++;
  12.  
    }
  13.  
    value /= 2;
  14.  
    }
  15.  
    return count;
  16.  
    }
  17.  
     
  18.  
    int main() {
  19.  
    int i = 15;
  20.  
    int ret = count_one_bits(i);
  21.  
    printf("expect 4, actual: %d\n", ret);
  22.  
    system("pause");
  23.  
    return 0;
  24.  
    }



输出一个整数的每一位

 

逆序输出:

 

 

  1.  
    #define _CRT_SECURE_NO_WARNINGS 1
  2.  
    #include<stdio.h>
  3.  
    #include<stdlib.h>
  4.  
     
  5.  
     
  6.  
    int main() {
  7.  
    int num = -12495;
  8.  
    printf("该整数的每一位为:\n");
  9.  
    while (num) {
  10.  
    if (num < 0) {
  11.  
    num = -num;
  12.  
    }
  13.  
    printf("%d ", num % 10);
  14.  
    num /= 10;
  15.  
    }
  16.  
    system("pause");
  17.  
    return 0;
  18.  
    }



正序输出(递归):

 

 

  1.  
    #define _CRT_SECURE_NO_WARNINGS 1
  2.  
    #include<stdio.h>
  3.  
    #include<stdlib.h>
  4.  
     
  5.  
    /*递归,正序*/
  6.  
    void Print(int num) {
  7.  
    if (num < 0) {
  8.  
    num = -num;
  9.  
    }
  10.  
    if (num >= 10) {
  11.  
    Print(num / 10);
  12.  
    }
  13.  
    /*num在10以内了*/
  14.  
    printf("%d ", num % 10);
  15.  
    }
  16.  
     
  17.  
    int main() {
  18.  
    int num = 12124;
  19.  
    printf("该整数的每一位为:\n");
  20.  
    Print(num);
  21.  
    system("pause");
  22.  
    return 0;
  23.  
    }

 

 

编程实现: 
两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同? 
输入例子: 
1999 2299 
输出例子:7 

 

 

  1.  
    #define _CRT_SECURE_NO_WARNINGS 1
  2.  
    #include<stdio.h>
  3.  
    #include<stdlib.h>
  4.  
     
  5.  
    int main() {
  6.  
    int i = 0;
  7.  
    int a[32] = { 0 };
  8.  
    int b[32] = { 0 };
  9.  
    int num1 = -1999;
  10.  
    int num2 = 2299;
  11.  
    for (; i < 32; i++) {
  12.  
    a[i] = num1 % 2;
  13.  
    num1 /= 2;
  14.  
    b[i] = num2 % 2;
  15.  
    num2 /= 2;
  16.  
    }
  17.  
    /*现在把num1和num2两个数的所有位分别存入到了a和b两个数组里面*/
  18.  
    int count = 0;
  19.  
    for (i = 0; i < 32; i++) {
  20.  
    if (a[i] != b[i]) {
  21.  
    count++;
  22.  
    }
  23.  
    }
  24.  
    printf("expect 7,actual:%d", count);
  25.  
    system("pause");
  26.  
    return 0;
  27.  
    }



获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列

 

 

  1.  
    #define _CRT_SECURE_NO_WARNINGS 1
  2.  
    #include<stdio.h>
  3.  
    #include<stdlib.h>
  4.  
    #include<math.h>
  5.  
     
  6.  
     
  7.  
    int main() {
  8.  
    //获取一个二进制序列的偶数位和奇数位
  9.  
    int num = -15;
  10.  
    int i = 32;
  11.  
    int arr[32] = { 0 };
  12.  
    if (num >= 0) {
  13.  
    /*如果这个数大于0*/
  14.  
    for (i = 31; i >= 0; i--) {
  15.  
    arr[i] = num % 2;
  16.  
    num /= 2;
  17.  
    }
  18.  
    /*现在数组arr里面是num的二进制序列*/
  19.  
    printf("该二进制的奇数序列为:\n");
  20.  
    for (i = 0; i < 32; i += 2) {
  21.  
    printf("%d", arr[i]);
  22.  
    }
  23.  
    printf("\n");
  24.  
    printf("该二进制的偶数序列为:\n");
  25.  
    for ( i = 1; i < 32; i += 2) {
  26.  
    printf("%d", arr[i]);
  27.  
    if (i % 4 == 0) {
  28.  
    printf(" ");
  29.  
    }
  30.  
    }
  31.  
    printf("\n");
  32.  
    }
  33.  
    else {
  34.  
    /*
  35.  
    **如果这个数小于0
  36.  
    **负数在机器中存的是补码
  37.  
    */
  38.  
    //对该数进行求绝对值,然后再减1
  39.  
    //源码取反+1就是这个数的补码,所以减个1再取反
  40.  
    num = abs(num) - 1;
  41.  
    for (i = 0; i < 32; i++) {
  42.  
    /*
  43.  
    **得到源码了
  44.  
    **对每一位进行取反
  45.  
    */
  46.  
    arr[i] = !((num%2)^0);
  47.  
    num /= 2;
  48.  
    }
  49.  
    printf("该二进制序列的奇数序列为:\n");
  50.  
    for (i = 31; i >= 0; i -= 2) {
  51.  
    printf("%d", arr[i]);
  52.  
    }
  53.  
    printf("该二进制序列的偶数序列为:\n");
  54.  
    for (i = 30; i >= 0; i -= 2) {
  55.  
    printf("%d", arr[i]);
  56.  
    }
  57.  
    }
  58.  
    system("pause");
  59.  
    return 0;
  60.  
    }

--------------------- 本文来自 Qregi 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/Qregi/article/details/79319123?utm_source=copy 

posted @ 2018-10-08 06:26  代码缔造的帝国  阅读(296)  评论(0编辑  收藏  举报