05-c语言的一些简单算法

1.提示用户输入一个正整数n, 计算1 + 2 + 3 + ...n的和。

 //    1.定义变量保存上一次的和
    int sum = 0;
//    2.定义变量保存递增的数
    int number = 0;
    while (number <= 5) {
        printf("sum = %d + number = %d\n", sum, number);
       sum = sum + number;
       number++;
    }
    printf("sum = %d\n", sum);


2.获取1~100之间 7的倍数的个数并打印,并统计个数

   int count = 1;
    int nubmer = 0;
    while (count <= 100) {

        if (count % 7 == 0) {

            printf("count = %d\n", count);
            nubmer++;//计数器
        }
        count++;
    }

    printf("number = %d\n", nubmer);


3.for循环嵌套实现:正方形、矩形打印

//  外循环控制行数
    for (int i = 0; i < 2; i++) {
//        内循环控制列数
        for (int j = 0; j < 4; j++)//1 2 3
        {
            printf("*");
        }
        printf("\n");
    }


4.for循环嵌套实现:打印三角形

  • 实现

    for(int i = 0; i< 5; i++){
        for(int j = 0; j <= i; j++){
            printf("*\t");
        }
        printf("\n");
    }
    for(int i = 0; i< 5; i++){
        for(int j = i; j < 5; j++){
            printf("*\t");
        }
        printf("\n");
    }
  • 规律
    • 尖尖朝上,改变内循环的条件表达式,让内循环的条件表达式随着外循环的i值变化
    • 尖尖朝下,改变内循环的初始化表达式,让内循环的初始化表达式随着外循环的i值变化


5.打印特殊三角形

  for (int i = 0; i < 3; i++) {
      for (int j = 0; j <= i; j++) {
          printf("%d", j+1);
      }
      printf("\n");
  }


6.打印99乘法表

  • 实现

      for (int i = 1; i <= 9; i++) {
          for (int j = 1; j <= i; j++) {
              printf("%d * %d = %d \t", j, i, (j * i));
          }
          printf("\n");
      }

 



7.设计一个函数用来计算B的n次方

  • 实现

  • int main(int argc, const char * argv[]) {

  •     int a = 2;

        int b = 3;

        int resutl = myPow2(a, b);

        printf("result = %i\n", resutl);

        return 0;

    }

  •  

    int myPow2(int base, int n)
    {
      if (n <= 0) {
          return 1;
      }
    
     return myPow2(base, n - 1) * base;
    }

 

8.用户从键盘输入一个字母如果用户输入的是大写那么就转换为小写

 

int main(int argc, const char * argv[]) {

 

    // 要求用户从键盘输入一个字母如果用户输入的是大写那么就转换为小写

 

    

 

    printf("请输入一个字母\n");

 

    char charValue;

 

    scanf("%c", &charValue);

 

    

 

    // 转换

 

    printf("%c\n", lowerCase(charValue));

 

    return 0;

 

}

 

char lowerCase(char temp)

{

    // 1.判断是否是大写字母

    if (temp >= 'A' && temp <= 'Z') {

        temp = temp + ('a' - 'A');

    }

    return temp;

}

9. 要求定义一个函数, 传入一个整数, 输出该整数的二进制

int main(int argc, const char * argv[]) {

   

    int num = 15;

    printBinay(num);

    return 0;

}

void printBinay(int value)

{

    // 1.定义变量需要向右移动的位数

    int offset = 31;

    // 2.通过循环取出每一位

    while (offset >=0) {

        int result  = (value >> offset) & 1;

        printf("%i", result);

        // 3.每次取出一位就让控制右移的变量-1

        offset--;

        if ((offset+1) % 4 == 0) {

            printf(" ");

        }

    }

    printf("\n");

}

 10.进制查表法优化

 

//

 

//  main.c

 

//  进制查表法优化

 

//

 

//  Created by xiaomage on 15/6/10.

 

//  Copyright (c) 2015年 xiaomage. All rights reserved.

 

//

 

 

 

#include <stdio.h>

 

void total(int value, int base, int offset);

 

void ptintBinary(int num);

 

void printfOct(int num);

 

void printfHex(int num);

 

 

 

int main(int argc, const char * argv[]) {

 

    // insert code here...

 

//    ptintBinary(10);

 

//    printfOct(10);

 

    printfHex(10);

 

    return 0;

 

}

 

 

 

void printfHex(int num)

 

{

 

    total(num, 15, 4);

 

}

 

 

 

void printfOct(int num)

 

{

 

    total(num, 7, 3);

 

}

 

 

 

void ptintBinary(int num)

 

{

 

    total(num, 1, 1);

 

}

 

 

 

// 转换所有的进制

 

// value就是需要转换的数值

 

// base就是需要&上的数

 

// offset就是需要右移的位数

 

void total(int value, int base, int offset)

 

{

 

    // 1.定义一个数组用于保存十六进制中所有的取值

 

    char charValues[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

 

    // 2.定义一个数组用于保存查询后的结果

 

    char results[32] = {'0'};

 

    // 3.定义一个变量用于记录当前需要存储到查询结果数组的索引

 

    int pos = sizeof(results)/ sizeof(results[0]);

 

    

 

    while (value != 0) {

 

        // 1.取出1位的值

 

        int res = value & base;// 1 7 15

 

        // 2.利用取出来得值到表中查询对应的结果

 

        char c = charValues[res];

 

        // 3.存储查询的结果

 

        results[--pos] = c;

 

        // 4.移除二进制被取过的1

 

        value = value >> offset;// 1 3 4

 

    }

 

    

 

    // 4.打印结果

 

    for (int i = pos; i < 32; i++) {

 

        printf("%c", results[i]);

 

    }

 

    printf("\n");

 

    

 

}

 

 








posted @ 2016-03-02 15:04  wc&Home  阅读(257)  评论(0)    收藏  举报