黑马程序员———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
- 黑马程序员———C语言基础测试总结
- 黑马程序员——C语言基础
- 黑马程序员——C语言基础
- 黑马程序员——C语言基础
- 黑马程序员——C语言总结
- 黑马程序员——C语言基础学习(一)---C语言中的基本概念总结
- 黑马程序员——C语言基础篇---基础语法
- 黑马程序员——C语言基础---基础语法
- 黑马程序员————C语言基础 第13篇 字符串知识总结
- 黑马程序员——C语言基础--函数的学习总结
- 黑马程序员——C语言基础学习(三)---进制和函数的总结学习
- 黑马程序员——C语言基础学习(四)---数组和指针的总结学习
- 黑马程序员——黑马基础测试
- 黑马程序员——C语言基础——指针
- 黑马程序员——C语言——基础运算
- 黑马程序员————C语言基础概念
- 黑马程序员——C语言基础——排列
- ——黑马程序员——C语言基础--数据类型
- myadd
- TFTP安装
- iOS多任务学习记录
- BufferedReader、DataInputStream
- 达内培训第一天笔记
- 黑马程序员———C语言基础测试总结
- ma2012
- 523C Name Quest【挡板,字符串】
- MinGW gcc 生成动态链接库 dll 的一些问题汇总 (补充)
- 对 java EE中session的理解
- Leetcode: Consecutive Numbers
- uboot 环境变量配置
- 使用对象流实现序列化
- Multiscale Combinatorial Grouping 学习与源码理解(一)