程序设计实验第一学期期末考试复习用源代码【C语言深度解剖】【超详细注释】
有关此篇
在这里博主先告诉大家,博主在学校学的C语言课本是《谭浩强的C语言》
那这本红色的书。
博主到期末阶段是学到了结构体那一章,下面是博主的复习代码,是一些比较有编程思想的一些源代码,博主就是用这个完成复习的,希望对大家有用!
说在前面
那么这里博主先安利一下一些干货满满的专栏啦!
数据结构专栏:数据结构 这里包含了博主很多的数据结构学习上的总结,每一篇都是超级用心编写的,有兴趣的伙伴们都支持一下吧!
算法专栏:算法 这里可以说是博主的刷题历程,里面总结了一些经典的力扣上的题目,和算法实现的总结,对考试和竞赛都是很有帮助的!
力扣刷题专栏:Leetcode 想要冲击ACM、蓝桥杯或者大学生程序设计竞赛的伙伴,这里面都是博主的刷题记录,希望对你们有帮助!
C的深度解剖专栏:C语言的深度解剖 想要深度学习C语言里面所蕴含的各种智慧,各种功能的底层实现的初学者们,相信这个专栏对你们会有帮助的!
干货源代码汇总
这是博主的复习代码,请大家食用!
- 注意:大家在用的时候,每一个代码在用的时候要把前面的
#if 0
中的0
改成1
,其它的#if
后面全部改成0
,一个程序只留一个main()
函数。 当然,有关预定义部分的知识,博主给大家提供传送门供大家食用! - 【预定义】C语言预定义代码(宏、条件编译等)内容介绍【最全的保姆级别教程】
话不多说,直接上代码!
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<string.h>
//比较好的题
// 《谭浩强的C语言》
// 第七章第八题
// 第七章第十题
// 第八章第四题
// 第八章第五题
// 第八章第十六题
// 第八章第十七题
// 第九章第三题
// 有关字符串函数的实现
//
//冒泡排序法
#if 0
void bubbleSort(int* arr, int sz) {
int i = 0;
int j = 0;
for (i = 0; i < sz - 1; i++) {
for (j = 0; j < sz - 1 - i; j++) {
if (*(arr + j) > *(arr + j + 1)) {
//交换
int tmp = *(arr + j);
*(arr + j) = *(arr + j + 1);
*(arr + j + 1) = tmp;
}
}
}
}
int main() {
int arr[] = { 0,9,8,7,6,5,4,3,2,1 };
int sz = sizeof(arr) / sizeof(arr[0]);//计算数组的大小
bubbleSort(arr, sz);//思考:为什么不能在bubbleSort里面计算数组大小?
//一定要在main里面算完传过去?
//输出
for (int i = 0; i < sz; i++) {
printf("%d ", arr[i]);
}
system("pause");
return 0;
}
#endif
//选择排序
#if 0
void selectingSort(int* arr, int sz) {
int i = 0;
int j = 0;
for (i = 0; i < sz - 1; i++) {
int min = i;
for (j = i + 1; j < sz; j++) {
//从下标为arr[i+1]开始找
//是<sz,因为最后一个元素也要比较
//上面<sz-1的原因是,总体循环只需要sz-1次,最后一次不用排了
//和冒泡的外层循环原理一样
if (arr[j] < arr[min]) {
min = j;//打擂台
}
}
//出了这层循环之后,交换min和i的值,把i后面最小的放到i的位置
int tmp = arr[i];
arr[i] = arr[min];
arr[min] = arr[i];
}
}
int main() {
int arr[] = { 0,9,8,7,6,5,4,3,2,1 };
int sz = sizeof(arr) / sizeof(arr[0]);
selectingSort(arr, sz);
for (int i = 0; i < sz; i++) {
printf("%d ", arr[i]);
}
system("pause");
return 0;
}
#endif
//实现整型数组的逆序
#if 0
void reverse_intArr(int* arr, int sz) {
//方法一:利用双指针 左右循环
#if 0//要看哪个就把哪个改成1即可
int* left = arr;
int* right = arr + sz - 1;//为什么是减一?
//开始交换
while (left <= right) {
int tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
#endif
#if 0
//方法二 递归法
int tmp = *arr;
*arr = *(arr + sz - 1);
*(arr + sz - 1) = tmp;
if (sz >= 2) {//思考为什么是sz>2才递归,而不是sz>=2,如果写成sz>=2会怎么样?
reverse_intArr(arr + 1, sz - 2);//思考为什么是arr+1,sz-2
}
#endif
}
int main() {
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
//逆序
reverse_intArr(arr,sz);
//输出
for (int i = 0; i < sz; i++) {
printf("%d ", arr[i]);
}
system("pause");
return 0;
}
#endif
//实现字符串的逆序
#if 0
void reverse_charStr(char* str) {
//这里只展示递归法,循环法和int数组是一样的,只是多一步strlen
int len = strlen(str);
char tmp = *str;
*str = *(str + len - 1);
*(str + len - 1) = '\0';//思考为什么
if (strlen(str + 1) >= 2) {
reverse_charStr(str + 1);
}
*(str + len - 1) = tmp;
}
int main() {
char str[] = "abcdefg";
//实现逆序
reverse_charStr(str);//对比传参,为什么不用传大小
//输出
//对比:和整型数组的输出有什么不同
printf("%s\n", str);
system("pause");
return 0;
}
#endif
//二分法查找一个整型数组里面一个数字的下标
#if 1
int*binarySearch(int* arr, int sz, int input) {//函数返回值是int*代表什么?
//定义三个指针指向中间和两边
int* left = arr;
int* right = arr + sz - 1;
while (right - left > 2) {
int* mid = left + (right - left) / 2;
if (*mid == input) {
return mid;
}
else if (input > *mid) {
left = mid;//如果在中间位置的右边,那么新的left改成mid
continue;
}
else if (input < *mid) {//如果在中间位置的左边,那么新的right改成mid
right = mid;
continue;
}
}
//走到这里都还没返回,说明找不到了,返回空指针
return NULL;
}
int main() {
int input = 0;//要查找的数字
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);//数组大小
printf("请输入你要查找的数字:");
scanf("%d", &input);
int*ret = binarySearch(arr, sz,input);
if (ret != NULL) {//EOF就是-1
printf("找到了!该数字的下标是%d\n", ret-arr);
}
else {
printf("找不到该数字!\n");
}
system("pause");
return 0;
}
#endif
//err
//strlen的模拟实现
#if 0
int my_strlen(char* str) {//为什么是char*?
int count = 0;//计算字符串长度
//操控地址的函数 尽量都用while循环,更清晰,除非for特别方便
while (*str != '\0') {//!='\0'是可以不写的
count++;
str++;//指针向后移
}
return count;
}
int main() {
char arr[] = "abcdefg";
int len = my_strlen(arr);
printf("该字符串的长度为:%d\n", len);
system("pause");
return 0;
}
#endif
//strcat模拟实现
//strcat:连接两个字符串
#if 0
void my_strcat(char* dest, char* src) {
//a b c
//d e f
//1.先找到abc也就是dest末尾的位置,从末尾的位置开始放src的内容
char* start = dest;//定义一个start指针,准备让它指向dest的末尾
while (*start) {
start++;
}
//现在start已经指向abc后面的\0了,开始拷贝内容
while (*src) {//循环结束的条件:src拷贝完了,也就是src碰到\0了
*start = *src;
src++;
start++;
}
}
int main() {
char str1[10] = "abc";
char str2[] = "def";
//现在想把str2的内容接在str1后面
//复制前要确保,str1位置够放
my_strcat(str1, str2);
printf("连接后的字符串为:%s\n", str1);
system("pause");
return 0;
}
#endif
//strcmp的模拟实现
//比较两个字符串
#if 0
int my_strcmp(char* str1, char* str2) {
char* pstr1 = str1;
char* pstr2 = str2;
while (*pstr1 == *pstr2 && *pstr1 && *pstr2) {//找不同
//与此同时,两个指针都不能指向\0,如果有一个指向\0即代表比较结束
pstr1++;
pstr2++;
}
return *pstr1 - *pstr2;
}
int main() {
char str1[100] = { 0 };
char str2[100] = { 0 };
printf("请输入第一个字符串:");
gets(str1);
printf("请输入第二个字符串:");
gets(str2);
int ret = my_strcmp(str1, str2);
//如果返回0,代表相等;返回正值代表str1大于str2
if (!ret) {
printf("两个字符串相等\n");
}
else if (ret > 0) {
printf("第一个字符串大于第二个\n");
}
else {
printf("第二个字符串大于第一个\n");
}
system("pause");
return 0;
}
#endif
//strcpy的模拟实现
#if 0
void my_strcpy(char* destination, char* source) {
while (*destination++ = *source++) { ; }//拷贝
//后置++可以使'\0'完成拷贝
}
int main() {
char str1[20] = { 0 };
char str2[20] = { 0 };
//输入字符串
printf("请输入destination:>\n");
gets(str1);
printf("请输入source:>\n");
gets(str2);
//strcpy模拟实现
my_strcpy(str1, str2);//拷贝'\0'的strcpy
printf("拷贝结果为:>\n");
printf("%s\n", str1);
system("pause");
return 0;
}
#endif
尾声
看到这里,如果伙伴们觉得有帮助的话,不要忘记一键三连哦!
程序设计实验第一学期期末考试复习用源代码【C语言深度解剖】【超详细注释】的更多相关文章
- python期末考试复习
期末考试复习 补修的python跟着大一一起学,考试肯定不会出难,于是就敲了一些代码,把他们放到博客上,来记录一下 代码都是一段一段的,且python代码不是很多,所以我都写到了一个文件里,作为练习 ...
- 网易云课堂_C++程序设计入门(下)_期末考试_期末考试在线编程题目
期末考试在线编程题目 返回考试 本次考试题目一共两个,在考试期间可以不限制次数地提交 温馨提示: 1.本次考试属于Online Judge题目,提交后由系统即时判分. 2.学生可以在考试截止时间 ...
- java 期末考试复习
//Scanner这样写? Scanner input = new Scanner(System.in); //不断获得下一个单词 names[i] = toTitleCase(input.nex ...
- 期末考试复习c#时总结的抽象类与接口的一些区别
抽象类: (1)抽象类中可以定义抽象方法,属性,变量 (2)抽象类的派生类必须实现所有的抽象方法.要求所有的派生非抽象类都要用override重写实现抽象方法. (3)抽象类可以存放抽象方法,属性,也 ...
- 复旦大学2016--2017学年第一学期高等代数I期末考试情况分析
一.期末考试成绩班级前十名 宁盛臻(100).朱民哲(92).徐钰伦(86).范凌虎(85).沈伊南(84).何陶然(84).丁知愚(83).焦思邈(83).董瀚泽(82).钱信(81) 二.总成绩计 ...
- 复旦大学2018--2019学年第一学期高等代数I期末考试情况分析
一.期末考试成绩90分以上的同学(共21人) 周烁星(99).封清(99).叶雨阳(97).周子翔(96).王捷翔(96).张思哲(95).丁思成(94).陈宇杰(94).谢永乐(93).张哲维(93 ...
- 复旦大学2017--2018学年第一学期高等代数I期末考试情况分析
一.期末考试成绩班级前十名 郭宇城(100).魏一鸣(93).乔嘉玮(92).刘宇其(90).朱柏青(90).王成文健(90).方博越(88).熊子恺(88).张君格(88).崔镇涛(87).史书珣( ...
- C++程序设计实验考试准备资料(2019级秋学期)
程序设计实验考试准备资料 ——傲珂 #include<bits/stdc++.h> C++常用函数: <math.h>头文件 floor() 函数原型:double floor ...
- 复旦大学2015--2016学年第一学期高等代数I期末考试情况分析
一.期末考试成绩班级前几名 胡晓波(93).宋沛颖(92).张舒帆(91).姚人天(90).曾奕博(90).杨彦婷(90).白睿(88).唐指朝(87).谢灵尧(87).蔡雪(87) 二.总成绩计算方 ...
- 复旦大学2014--2015学年第一学期高等代数I期末考试情况分析
一.期末考试成绩班级前几名 金羽佳(92).包振航(91).陈品翰(91).孙浩然(90).李卓凡(85).张钧瑞(84).郭昱君(84).董麒麟(84).张诚纯(84).叶瑜(84) 二.总成绩计算 ...
随机推荐
- 类加载机制-深入理解jvm
一.什么是类的加载: 如上图,java文件通过编译器变成了.class文件,接下来类加载器又将这些.class文件加载到JVM中.其中类装载器的作用其实就是类的加载. 二.原理 (类的加载过程及其最终 ...
- rabbitMq消息持久化机制,和延时队列
1.RabbitMQ的一大特色是消息的可靠性,那么它是如何保证消息可靠性的呢? 消息持久化.可以将Queue,Exchange,Message都设置为可持久化的.为了保证RabbitMQ在退出,服务重 ...
- java进阶(25)--泛型
一.泛型基本概念 JDK5.0后新特性:Generic 1.不使用泛型举例
- (已解决)C·lash 核心崩溃“failed to c·lash core, logs are not available”
问题情况: 解决方案:管理员打开 cmd,输入 netsh winsock reset,重启电脑就可以了! 原经验帖:https://www.oleou.com/soft/715.html 谢谢这位大 ...
- 解决 idea maven plugins 报红波浪线
导入新项目到 idea 的时候,由于依赖的环境以及项目中 maven 编译所依赖的pom的版本不同,很多时候导入到idea的时候 maven Plugins 会出现报红的情况,这是由于maven仓库中 ...
- SD协议-基本概念
1.SD协议版本 SD 1.1 SD 2.0 SD 3.0 在看协议的时候,需要注意协议的版本,注意版本之间的差别 SD协议是常见的数据通信和存储卡之间的协议 HDMI是显示相关的协议,遵循HDMI协 ...
- MongoDB 部署分片集群
部署配置服务器:configsvr 先生成.conf文件 mkdir -p /data/mongodb/configsvr vim /data/mongodb/configsvr/configsvr. ...
- [转帖]Jmeter_jmeter-plugins插件的安装使用
一.安装JMter Plugins 1.官网下载 JMeter Plugins 的jar包 2. 将下载的jar包复制到 %JMETER_HOME%\lib\ext 目录下 3. 启动 JMeter ...
- [转帖]Postmark - 存储性能测试工具
1. 引言 Postmark是由著名的NAS提供商NetApp开发,用来测试其产品的后端存储性能. Postmark主要用于测试文件系统在邮件系统或电子商务系统中性能,这类应用的特点是:需要频繁.大量 ...
- [转帖]2022年 SRE、DevOps技能图谱
https://zhuanlan.zhihu.com/p/568752990 在过去一段时间,我面试过一些 DevOps 相关从业者,并且曾经收到过一些知乎小伙伴的提问,针对于 DevOps 以及相关 ...