程序设计实验第一学期期末考试复习用源代码【C语言深度解剖】【超详细注释】

程序设计实验第一学期期末考试复习用源代码【C语言深度解剖】【超详细注释】,第1张

有关此篇

在这里博主先告诉大家,博主在学校学的C语言课本是《谭浩强的C语言》那这本红色的书。
博主到期末阶段是学到了结构体那一章,下面是博主的复习代码,是一些比较有编程思想的一些源代码,博主就是用这个完成复习的,希望对大家有用!

导航小助手
  • 有关此篇
  • 说在前面
  • 干货源代码汇总
  • 尾声

说在前面

那么这里博主先安利一下一些干货满满的专栏啦!

数据结构专栏:数据结构 这里包含了博主很多的数据结构学习上的总结,每一篇都是超级用心编写的,有兴趣的伙伴们都支持一下吧!
算法专栏:算法 这里可以说是博主的刷题历程,里面总结了一些经典的力扣上的题目,和算法实现的总结,对考试和竞赛都是很有帮助的!
力扣刷题专栏:Leetcode 想要冲击ACM、蓝桥杯或者大学生程序设计竞赛的伙伴,这里面都是博主的刷题记录,希望对你们有帮助!
C的深度解剖专栏:C语言的深度解剖 想要深度学习C语言里面所蕴含的各种智慧,各种功能的底层实现的初学者们,相信这个专栏对你们会有帮助的!

干货源代码汇总

这是博主的复习代码,请大家食用!

  • 注意:大家在用的时候,每一个代码在用的时候要把前面的#if 0中的0改成1,其它的#if 后面全部改成0,一个程序只留一个main()函数。 当然,有关预定义部分的知识,博主给大家提供传送门供大家食用!
  • 【预定义】C语言预定义代码(宏、条件编译等)内容介绍【最全的保姆级别教程】

话不多说,直接上代码!

#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include
//比较好的题
// 《谭浩强的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]开始找
			//是
								  //上面
								  //和冒泡的外层循环原理一样
			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) = ';'//思考为什么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//二分法查找一个整型数组里面一个数字的下标

#
if1 int
*binarySearch(int*, arrint , szint ) input//函数返回值是int*代表什么? {//定义三个指针指向中间和两边
	int
	*= left ; arrint
	*= right + arr - sz 1 ;while
	( -right 2 left > )int {
		*= mid + left ( -right ) left/ 2 ;if
		( *==mid ) inputreturn {
			; mid}
		else
		if ( *input > )mid= {
			left ; mid//如果在中间位置的右边,那么新的left改成midcontinue
			;}
		else
		if ( <input * )mid//如果在中间位置的左边,那么新的right改成mid {=
			right ; midcontinue
			;}
		}
	//走到这里都还没返回,说明找不到了,返回空指针
	return
	NULL ;}
int
main ()int {
	= input 0 ;//要查找的数字int
	[ arr]= 1 { ,2,3,4,5,6,7,8,9,10} ;int
	= sz sizeof ()arr/ sizeof ([arr0]);//数组大小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的模拟实现

#
if0 int
my_strlen (char*) str//为什么是char*? {int
	= count 0 ;//计算字符串长度// *** 控地址的函数 尽量都用while循环,更清晰,除非for特别方便
	while
	( *!=str ')' //!='++'是可以不写的; {++
		count;//指针向后移
		str}return;
	}
	int countmain
(
) char[] {
	= arr"abcdefg"; int =my_strlen
	( len ) ;printfarr("该字符串的长度为:%d\n"
	,);system len("pause"
	);return0;
	} #endif
//strcat模拟实现
//strcat:连接两个字符串#
if
0
voidmy_strcat (
char *,char* dest) //a b c//d e f src//1.先找到abc也就是dest末尾的位置,从末尾的位置开始放src的内容 {
	char
	*
	=
	;//定义一个start指针,准备让它指向dest的末尾 start while dest(*
	) ++;start} {
		start//现在start已经指向abc后面的while了,开始拷贝内容(
	*
	)
	//循环结束的条件:src拷贝完了,也就是src碰到* =*src; {++
		;start ++ ;src}
		src}int
		startmain(
	)
char
[ 10]= {
	"abc" str1;char[ ] ="def"
	; str2//现在想把str2的内容接在str1后面//复制前要确保,str1位置够放 my_strcat (,
	)
	;
	printf(str1"连接后的字符串为:%s\n" str2,)
	;system("pause" str1);
	return0;}#
	endif //strcmp的模拟实现//比较两个字符串
#
if0
int
my_strcmp
(char *
, char*)char str1* =; str2char {
	*= pstr1 ; str1while
	(* pstr2 == str2*
	&& *&&pstr1 * )pstr2 //找不同 //与此同时,两个指针都不能指向++,如果有一个指向;即代表比较结束pstr1 ++ ;pstr2} {return
		                                        *
		pstr1-*
		pstr2;}
	int
	main (pstr1 ) charpstr2[
100
] =0} {
	; str1char[100 ] { = 0}
	; str2printf("请输入第一个字符串:" ) { ; gets(
	);printf("请输入第二个字符串:"
	);str1gets(
	);int=my_strcmp
	(,str2);
	//如果返回0,代表相等;返回正值代表str1大于str2 ret if (!str1) str2printf(
	"两个字符串相等\n"
	) ;}retelse {
		if(0)printf
	(
	"第一个字符串大于第二个\n" ) ;ret > }else {
		printf("第二个字符串大于第一个\n");
	}
	system {
		("pause");return
	0
	;}#endif//strcpy的模拟实现
	# if0
void
my_strcpy(
char
*, char
* )while(* destination++ =* source++ {
	) ;}destination//拷贝 //后置++可以使'}'完成拷贝 intsourcemain( { ) char[
	20
]
= 0}; {
	char str1[20] = { 0 };
	//输入字符串 str2printf() ; { gets ()
	;
	printf("请输入destination:>\n");
	gets(str1);
	//strcpy模拟实现my_strcpy"请输入source:>\n"(,
	);str2//拷贝'printf'的strcpy(

	)
	;printfstr1( str2"%s\n",)
	;system"拷贝结果为:>\n"("pause"
	);return0 str1;}
	#endif
	 


尾声

看到这里,如果伙伴们觉得有帮助的话,不要忘记一键三连哦!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/914559.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-16
下一篇2022-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存