黑马程序员———C语言基础测试总结

------- Android培训、 Java培训、 IOS培训、 .NET培训 期待与您交流! ----------
不知道其他人的编程题是什么样的,我的6道编程题中有4道都是与字符串相关的。那么让我们回忆下C语言字符串中的相关知识点把。

一、字符串的定义

  • C语言中没有String类型
  • 用char类型的数组定义字符串
  • 用char类型的指针定义字符串

如下代码所示:
// String str = "dlsjfdlk"; 是错得

char  name [] = {'i', 'l', 'o', 'v', 'e', 'y', 'o', 'u', '\0'};

char *name1 = "jack";

问题来了,用char类型的数组和char类型的指针定义字符串有什么区别呢。说到这里,我们不得不提一下我们的内存。我们的内存其实可以分为5大块:
1、常量区
存放一些字符串常量
2、堆
存放一些对象
3、栈
存放一些局部变量
4、全局区(静态区)
存放全局变量和静态变量
5、程序代码区
存放函数体的二进制代码

用char类型的指针定义的字符串是放在常量区里的,所以它和char类型的数组定义的字符串的最大的不同就是它的值是不能修改的。

二、字符串的使用

1、字符串的遍历
字符串遍历在字符串中用得非常的多
如下所示:
// 用for循环实现
char msStr1 [] = "itcast";
for (int i = 0; i
	j++
}
2、字符串的输入
输入一个字符串,那么这个字符串肯定是一个变量,所以得用char类型的数组存储字符串
如下所示
char msStr2 [100];

scanf("%s", msStr2); 

三、排序算法

在这次的编程题中,有2题考到了排序的问题,在C语言中用得比较多的排序方法就是冒泡排序了。什么是冒泡排序呢?
冒泡排序法的原理其实很简单,就是对一堆数据进行两两比较,把较大的数放到后面,较小的数放到前面,最后形成从小到大排列的一组数据,由于类似气泡,所以被称作为冒泡排序法。
编程示例:
// 整型数组num[] 中存放了一堆整型数据,先需要将他们排序并按从小到大输出
int num [] = {1, 23, 5, 4, 11, 55, 18};
int temp = 0;
// 冒泡排序
// 趟数,明显数组中有7个数组,那么需要进行(7-1)趟比较
for(int i = 0; inum[j+1])
             {
                  
                   temp = num[j];
                   num[j] = num[j+1];
                   num[j+1] = temp;
              }
   }
}


四、编程最后一题

/*
   
    10、 小明从2006年1月1日开始,每三天结识一个美女两天结识一个帅哥,编程实现当输入2006年1月1日之后的任意一天,输出小明那天是结识美女还是帅哥(注意润年问题)(C语言)
        
            主要考点:
                1.算法,间隔天数是3的倍数遇美女,2的倍数遇帅哥,6的倍数帅哥美女一起遇
                2.计算天数,闰年问题
 
 */

#include 

int isLeapYear (int _year);

int main(int argc, const char * argv[])
{
    // 定义年月日
    int year, month, day;
    
    // 定义整型数组存储每月天数(非闰年)
    int monthDays [] ={31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    
    // 定义整型数组存储每月天数(闰年)
    int monthDays1 [] ={31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    
    // 定义总天数
    int sum = 0;
    
    //
    // 提示用户输入年月日
    printf("请输入时间格式(2014-12-12):\n");
    
    // scanf 函数
    scanf("%d-%d-%d", &year, &month, &day);
    
    // 年月日 分开算
    // 第一步算间隔多少年换算为天数
    for (int i = 2006; i < year; i++)
    {
        sum = sum + isLeapYear (i) ;
    }
    printf("%d---year\n", sum);
    // 第二步算间隔多少月换算为天数
    if (isLeapYear(year) == 365 )
    {
        for (int j = 0; j < month -1; j++)
        {
            sum = sum + monthDays [j];
        }
    }
    else
    {
        for (int j = 0; j < month -1; j++)
        {
            sum = sum + monthDays1 [j];
        }
    }
    printf("%d---month\n", sum);
    
    // 第三步计算间隔多少天
    sum = sum + day - 1 ;
    printf("%d---day\n", sum);
    
    // 计算是遇美女还是帅哥了
    if (sum % 2 == 0 && sum % 3 != 0)
    {
        printf("小明遇帅哥!\n");
    }
    else if (sum % 3 ==0 && sum % 2 != 0)
    {
        printf("小明遇美女!\n");
    }
    else if (sum % 2 == 0 && sum % 3 == 0)
    {
        printf("小明美女帅哥一起遇!!!\n");
    }
    else
    {
        printf("小明谁都没遇上。。。。\n");
    }
    return 0;
}

int isLeapYear (int _year)
{
    if (_year % 100 ==0)
    {
        if(_year % 4 ==0)
        {
            return 366;
        }
        else
        {
            return 365;
        }
    }
    else if (_year % 4 == 0)
    {
        return 366;
    }
    else
    {
        return 365;
    }
        
}

这道题其实主要的难点就是计算天数的问题,计算天数,我这边是拆开了算得,我感觉这样算十分的清晰,当然大家如果有其他的方法,欢迎交流。

你可能感兴趣的:(黑马程序员———C语言基础测试总结)