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

来源:互联网 发布:php文件上传下载系统 编辑:程序博客网 时间:2024/06/05 17:56
------- 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<strlen(msStr1); i++){      printf("%c\n", msStr1[i]);}// 用while循环实现int j = 0;while(msStr1[j]){     printf("%c\n", msStr1[j]);
<span style="white-space:pre"></span>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; i<sizeof(num)/sizeof(int) -1; i++){    // 两两比较    for(int j = 0; j<sizeof(num)/sizeof(int) - i; j++)    {            if(num[j] >num[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 <stdio.h>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;    }        }

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

0 0
原创粉丝点击