C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)

文章目录

  • 1第二章
  • 2第4章
  • 3第4章2
  • 4第4章
  • 5第4章
  • 6第5,6章
  • 7第6章
  • 8第6章
  • 9第6章
  • 10第6章
  • 11模拟子串strstr
  • 12第7章
  • 13第7章
  • 14第7章
  • 15第7章
  • 16第7章
  • 17第7章
  • 18第8章
  • 19第8章
  • 20第8-9章
  • 21结构题数组非常重要的题
  • 22第10章
  • 23第十章
  • 24文件不复习第10章
  • 25-40题 1~12
  • 26 13~19题
  • 27 20~30题
  • //gets输入完毕不会有别的字符在缓冲区,在使用getchar直接来,而是scanf会有 要用getchar吃掉回车
  • 28 31题
  • 29 30~44题
  • 30 加薪诺卷1
  • 31卷2
    • **转义字符**
  • 32卷3
  • 33卷4
  • 阶乘递归 还不会吗
  • 34卷5
  • 35卷6
  • 36 卷7
  • 37考研卷
  • 38 卷1
  • register 相关
  • 39卷2
  • 40 卷3
  • 41卷4
  • 42 卷5
  • 43 卷6
  • 44卷7
  • 45卷8
  • 46 卷1
  • 47 卷2
  • 48 卷4
  • 49卷5
  • 50卷6
  • 51卷7
  • 52卷8
  • 53 卷1
  • 54卷3
  • 55卷5
  • 56
  • 57
  • 58卷8 2022-01-18
  • 2022-3-20

1第二章

#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
//1.三个数,找较大值
//int main(){
//	int a = 0;
//	int b = 0;
//	int c = 0;
//	scanf("%d", &a);
//	scanf("%d", &b);
//	scanf("%d", &c);
//	int max = a;
//		if (max
//			max = b;
//		}
//		if (max < c){
//			max = c;
//		}
//		printf("%d\n", max);
//
//	return 0;
//}


// 2. 交换两个数
//第一种
//int main(){
//	int A = 10;
//	int B = 20;
//	int tmp = 0;
//	tmp = A;
//	A = B;
//	B = tmp;
//	printf("A=%d  B=%d\n", A, B);
//}
//第二种
//int main(){
//	int a = 10;
//	int b = 20;
//	a = a + b;  //a=30
//	b = a - b;  //30-20=10   b=10
//	a = a - b;//  30-10=20    a=20
//	printf("a=%d  b=%d\n", a, b);
//	return 0;
//}
第三种
//int main(){
//	int a = 10;
//	int b = 20;
//	a = a^b;  //10^20
//	b = a^b;  //10^20^20   b=10
//	a = a^b;  //10^20^10   a=20
//	printf("a=%d,b=%d\n", a, b);
//	return 0;
//}


3.依次输入10个数求最大值
//int main(){
//	int a = 0;
//	int max = -1;
//	scanf("%d", &a);
//	max = a;
//	for (int i = 0; i < 9; i++){
//		scanf("%d", &a);
//		if (max
//			max = a;
//		}
//	}
//	printf("max=%d", max);
//	return 0;
//}


4. 有三个数a,b,c 要求把他们从小到大顺序输出
//int main(){
//	int a = 10;
//	int b = 20;
//	int c = 30;
//	int tmp = 0;
//	if (a > b){
//		tmp = a;
//		a = b;
//		b = tmp;
//		//if   a>b   b->a,a是二着中较小值
//	}
//	if (a > c){
//		tmp = a;
//		a = c;
//		c = tmp;
//		//a现在是最小值
//	}
//	if (b > c){
//		tmp = b;
//		b = c;
//		c = tmp;//b是中间值   c是最大值
//	}
//	printf("a=%d b=%d  c=%d\n", a, b, c);
//	//中心思想就是让a第一个输出  让b第二个输出,让c第三个输出   从小到大
//	//那么   a最小   b次之   c最大
//}


//5.求1到100的累加和
//int main(){
//	int sum = 0;
//	for (int i = 0; i <=100; i++)
//	{
//		sum = sum + i;
//	}
//	printf("sum=%d\n", sum);
//}


//6.判断一个数能否被3和5整除
//int main(){
//	int a = 0;
//	scanf("%d", &a);
//	if (a % 5 == 0 && a % 3 == 0){
//		printf("you can see me\n");
//	}
//	else printf("you can  not see me\n");
//}


//7.求100~200 之间的素数   只能被1和它本身整除
//int main(){
//	int i = 0;
//	int  j = 2;
//	for (i = 100; i <= 200; i++){
//		if (i % 2 != 0){
//			for ( j = 2; j < i; j++){
//				if (i%j == 0){
//					break;//==0说明不是素数
//				}
//			}
//			if (j == i){
//				printf("i=%d  ", i);
//			}
//		}
//	}
//}


8.求两个数的最大公约数
//int main(){
//	int m = 0;
//	int n = 0;
//	int min = 0;
//	scanf("%d%d", &m, &n);
//	if (m >n){
//		
//		min=n;//找m和n中最小的,因为最大公约数不会大于最小的这个数
//	}
//	else  min = m;
//	int tmp = 0;//暂存公约数
//	for (int i = 1; i <= min; i++){
//		if (m%i == 0 && n%i == 0){
//			if (tmp < i){
//				tmp = i;//找最大公约数
//			}
//		}
//	}
//	printf("%d\n", tmp);
//	return 0;
//}

//9.辗转相除法求最大公约数
//int main(){
//	int m = 0;
//	int n = 0;
//	int r = 0;
//	scanf("%d%d", &m, &n);
//	if (m>n){      //m>n  m和n交换   m存小数  n存大数     
//		m = m^n; //这个判断就是避免 被除数是0  即分母为0
//		n = m^n;
//		m = m^n;
//	}
//	while(n!=0){
//		r = m%n;
//		m = n;
//		n = r;
//	}
//	printf("%d\n", m);
//	return 0;
//}

10.求一元二次方程解的情况
//#define fr1(a,b,c) (((-b) + sqrt((b*b) - (4 * a*c))) / (2 * a))
//#define fr2(a,b,c) (((-b) - sqrt((b*b) - (4 * a*c)) )/ (2 * a))
//
//int main(){
//	int a = 0;
//	int b = 0;
//	int c = 0;
//	scanf("%d%d%d", &a, &b, &c);
//	int p = b*b - 4 * a*c;
//	if (p < 0){
//		printf("you have not gen\n");
//	}
//	else if (p == 0){
//		printf("x=%d", -b / (2 * a));
//	}
//	else{
//		int x1 = (int)fr1(a, b, c);
//		int x2 = (int)fr2(a, b, c);
//		printf("x1=%d   x2=%d\n", x1,x2);
//	}
//	return 0;
//}


//11.输出1900到2000之间的所有闰年
int main(){
	for (int i= 1900; i <= 2000; i++){//世纪闰年 必须是400的倍数
		if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0 ))
		{
			printf("%d是闰年  ",i);
		}
	}
}//润年分为世纪闰年和普通润年  
//普通闰年是  能整除4就行   为啥还要加%100不等于0呢  排除不是世纪闰年的 比如1900 不是闰年
//整百数的世纪闰年是   能整除400就行



2第4章

#define _CRT_SECURE_NO_WARNINGS 1
#include
//int main(){
//	int a = 0;
//	int b = 0;
//	int c = 0;
//	scanf("%d%d%d", &a, &b, &c);
//	if ((a > b) && (a > c)){
//		printf("%d", a);
//	}if ((b > a) && (b > c)){
//		printf("%d", b);
//	}if ((c > b) && (c > a)){
//		printf("%d", c);
//	}
//	return 0;
//}


//4-5
#include
//int main(){
//	int num = 0;
//	do{
//		printf("请输入一个小于1000的正数:\n");
//		scanf("%d", &num);
//	
//	} while (num >= 1000||num<0);
//	int  a = sqrt(num);
//	printf("%d\n", a);
//}



//4-6
//int main(){
//	int x = 0;
//	scanf("%d", &x);
//	if (x < 1){
//		printf("y=%d\n", x);
//	}
//	else if (x >= 1 && x < 10){
//		printf("y=%d\n", 2 * x - 1);
//	}
//	else{
//		printf("y=%d\n", 3 * x - 11);
//	}
//}

//4-8
//void Show(){
//	float num = 0;
//	printf("请输入分数:\n");
//	scanf("%f", &num);
//	while (num<0 || num>100){
//		printf("请输入0~100之间的数\n");
//		scanf("%f", &num);
//	}
//	switch ((int)(num/10)){//90-100这个段是A  case只能匹配一下 要不除10就要至少50个case
//	case 10:
//	case 9:
//		printf("A");
//		break;
//	case 8:
//		printf("B");
//		break;
//	case7:
//		printf("C");
//		break;
//	case 6:
//		printf("D");
//		break;
//	default :
//		printf("E");
//		break;
//
//	}
//}
//int main(){
//	Show();
//	return 0;
//}

//4-9



//void Reverse(int num){
//	if (num == 0)
//	{
//		printf("%d\n", num);
//	}
//	else{
//		while (num){
//			int tmp = 0;//暂存余数以便打印
//			tmp = num % 10;
//			printf("%d ", tmp);
//			num /= 10;//除10 以便分解下一位
//		}
//		printf("\n");
//	}
//
//}
//
//
//void Search(int num){
//	
//	int count = 0;
//	if (num == 0){
//		printf("是一个1位数\n");
//	}
//	else{
//		while (num > 0){
//			num /= 10;//999/10=99  c+1  99/10=9  c+1   9/10=0   c+1   c=3  num=0
//			count++;//记录几位数字
//		}
//		printf("是一个%d位数\n", count);
//	}
//}



//void Print(int num){
//	int arr[10];
//	int i = 0;//循环变量  还可计算由几位数
//	int n = 0;
//	if (num == 0)
//	{
//		printf("%d\n", num);
//	}
//	else{
//		for (i = 1; num; i++){
//			arr[i] = num % 10;//数组下标从1开始的,下标是6的话,存的就是 第5个数
//			num /= 10;
//		}
//		n = i - 1;//赋給n做逆序;
//
//		//利用数组下标得知是几位数
//
//
//		//完成判断num是几位的数字
//		printf("num是一个%d位的数\n\n", i - 1);
//
//
//		//完成正序打印每位数
//		for (--i; i; i--){//为啥先--i  因为再退出循环的时候,i多自增了一下
//			printf("%d ", arr[i]);
//		}
//		printf("\n");
//		printf("\n");
//
//	}
//
//	//完成逆序功能
//	printf("逆序打印各位数字:\n");
//	for (int j = 1; j <= n; j++)
//	{
//		printf("%d ", arr[j]);
//	}
//	printf("\n");
//
//}
//
//int main(){
//	int num = 0;
//	printf("请输入一个不多于5位的正整数:\n");
//	scanf("%d", &num);
//	while (num < 0 || num>99999){
//		printf("输入有误,请重新输入:\n");
//			scanf("%d", &num);
//	}
//	//求它是几位数
//	//Search(num);
//
//
//	//分别输出每位数
//	printf("输出每位数字:\n");
//	Print(num);
//
//
//	//逆序数字
//	/*printf("逆序输出每位数字:\n");
//	Reverse(num);*/
//
//	return 0;
//}

//int main()
//{
//	int temp;
//	int pow = 1;
//	int i = 1;
//	int n;
//	scanf("%d", &n);
//
//	temp = n;//暂存
//	while (temp / 10)//避免是1位数
//	{
//		temp /= 10;
//		pow *= 10;   //记录被除数
//		++i;//记录位数
//	}
//
//	while (i)
//	{
//		printf("%d ", n / pow);//先打印最高位 依次->
//		n %= pow;//把高位去除
//		pow /= 10;
//		--i;
//	}
//
//	printf("\n");
//
//	return 0;
//}
















3第4章2

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第1张图片


//}
//#define C1 (I-(I-100000))*(0.1)//0~100000
//#define C2 (100000)*(0.075)//100000~200000
//#define C3 (200000)*(0.05) //200000~400000
//#define C4 (400000)*(0.03) //400000~600000
//#define C5 (600000)*(0.015)//600000~100000
//#define C6 (100000)*(0.01)//高于一百万的
//int main(){
//	float I = 0;
//	printf("请输入钱数:\n");
//	scanf("%f", &I);
//	while (I < 0){
//		printf("输入错误:");
//		scanf("%f", &I);
//	}
//	switch ((int)(I / 100000)){
//	case 0:
//	case 1:printf("%.2f", C1+C2);//0~20000之间的
//		break;
//		case 2:
//		case 3:
//			printf("%.2f", C1 + C2 + C3);//200000~400000
//			break;
//		case 4:
//		case 5:
//			printf("%.2f", C1 + C2 + C3 + C4);//400000~600000	
//			break;
//	case 6:
//	case 7:
//	case 8:
//	case 9:
//		printf("%.2f", C1 + C2 + C3 + C4 + C5);//600000~100000
//		break;
//	default:
//		printf("%.2f", C1 + C2 + C3 + C4 + C5+C6);
//		break;
//	}

	return 0;
}
//int main(){
//	double I, salary;
//	printf("输入钱数:\n");
//	scanf("%lf", &I);
//	double salary1 = 100000 * (0.1);
//	double  salary2 = salary1 + 100000 * (0.075);//满额20W
//	double  salary3 = salary2 + 200000 * (0.05);//满额40W
//	double  salary4 = salary3 + 200000 * (0.03);//满额60W
//	double  salary5 = salary4 + 400000 * (0.015);//满额100W
//	switch ((int)I / 100000){
//	case 0:
//		salary=I*0.1;
//		break;
//	case 1:
//		salary = salary1 + (I - 100000)*0.075;
//		break;
//	case 2:
//	case 3:
//		salary = salary2 + (I - 200000)*0.05;
//
//		break;
//	case 4:
//	case 5:
//		salary = salary3 + (I - 400000)*0.03;
//		break;
//	case 6:
//	case 7:
//	case 8:
//	case 9:
//		salary = salary4 + (I - 600000)*0.015;
//		break;
//	default :
//		salary = salary5 + (I - 1000000)*0.01;
//		break;
//	}
//	printf("%.2lf\n", salary);
//	return 0;
//}
//本题主要是  分段  10W 一下一个段   10W~20W   20W~40W   40W~60W   60W~100W   100W  以上


//int main(){
//	int a[4];
//	scanf("%d", &a[0]);
//	int max = a[0];
//	for (int i = 1; i < 4; i++){
//		scanf("%d", &a[i]);
//		if (max < a[i]){
//			max = a[i];
//		}
//	}
//	printf("%d", max);
//	return 0;
//}


4-12
//int main(){
//	float x = 0;
//	float y = 0;
//	printf("请输入两个坐标用空格隔开:\n");
//	scanf("%f %f", &x, &y);
//	float fx = fabs(x);
//	float fy = fabs(y);
//	float lx = fabs(fx - 2);
//	float ly = fabs(fy - 2);
//	float len = sqrt((lx*lx) + (ly*ly));
//	if (len > 1){
//		printf("不塔内范围内高度0m\n");
//	}
//	else{
//		printf("再塔范围内高度10m\n");
//	}
//	return 0;
//}


//5-2  求pi的近似值
//int main(){
//	double n = 1.0;
//	double i = 1;
//	double sum = 0.0;//累加和
//	int count = 0;
//	int t = -1;
//	while (fabs(n) >= 1e-6){
//		i += 2;
//		sum += n;//累加
//		n =  t*(1 / (i));
//		t = -t;
//		count++;
//	}
//	sum *= 4;
//	printf("%lf", sum);
//	printf("%d\n", count);
//	return 0;
//}


//4-3输入俩个数   求最大公约数和最小公倍数
//int main(){
//	int m = 10;
//	int n = 32;
//	scanf("%d%d", &m, &n);
//	if (n < m){
//		int tmp = n;
//		n = m;
//		m = tmp;//n大  m小
//	}
//	int r = 0;
//	int p = n*m;
//	while (n != 0){
//		r = m%n;
//		m = n;
//		n = r;
//	}
//	printf("最大公约数是:%d\n", m);
//	printf("最小公倍数是:%d\n", p/m);//两数之积/最大公约数就是最小公倍数
//
//	return 0;
//}

4第4章

#define _CRT_SECURE_NO_WARNINGS 1
#include
//int main(){
//	double sum=0, t=1.0;
//	int i = 0;
//	for (i = 1; i <= 20; i++){
//		t = i*t;
//		sum = sum + t;
//	}
//	printf("sum=%22.15e\n", sum);
//	return 0;
//}



//2-9完数
//void Show(int sum){
//	printf("他的因子就是:");
//	for (int i = 1; i < sum; i++)
//	{
//		if (sum%i == 0){
//			printf("%d   ", i);
//		}
//	}
//	printf("\n");
//}
//int main(){
//	int sum = 0;//累加器
//	int i = 0;
//	for (i = 1; i <= 1000; i++){
//		int  j = 0;
//		for (j = 1; j < i; j++){
//			if (i%j == 0){
//				sum += j;
//			}//算出当前i的所有因子之和
//		}
//		if (sum == i){//判断和等不等于它本身
//			printf("完数%d\n", i);
//			Show(sum);
//		}
//		sum = 0;//sum 清0
//	}
//	return 0;
//}


//5-10
//int main(){
//	double sum = 0, a = 2.0, t = 0, b = 1;
//	int i = 0;
//	for (i = 0; i < 20; i++){
//		sum = sum + a / b;//第一项
//		t = a;//前一项的分母是后一项的分子
//		a = a + b;//后一项的分子是前一项的分子+分母!!!
//		b = t;
//	}
//	printf("%lf", sum);
//	return 0;
//}


//5-11
//int main(){
//	double ooo = 100, sum = 100;
//
//	for (int i = 0; i < 10; i++){
//		sum = sum / 2;//反弹的米数
//		ooo += sum * 2;//反弹要分为两次,一次是上升,一次是下降,同一时刻米数是一样的
//		if (i == 9){
//			printf("第10次反弹%lf\n", sum);
//		}
//	}
//	printf("共经历:%lfm\n", ooo);
//	return 0;
//}

//#include
//int main(){
//	double x0,a;
//	scanf("%lf", &a);
//	x0 = a / 2;
//	double x1 = (x0 + a / x0) / 2;
//	
//	do{
//		x0 = x1;
//		x1 = (x0 + a / x0)/2;//第2项
//	} while (fabs(x0 - x1) >= 1e-5);
//	printf("%lf   %lf\n", a, x1);
//	return 0;
//}
//








#include

//
//int main(){
//	double total_sum = 0.0;
//	//1~20阶乘
//	for (int i = 1; i <= 20; i++){
//		double only_sum = 1.0;
//		//每个数的阶乘
//		for (int j =1; j <=i; j++){
//			only_sum = j*only_sum;
//		}
//		//算完每个数的加一起
//		total_sum += only_sum;
//	}
//	printf("%22.15e\n", total_sum);
//	return 0;
//}

//水鲜花数
//int main(){
//	int i = 0;
//	//100~999之间的
//	for (i = 1000; i < 10000; i++){
//		int sum = 0;//存放累加和
//		int r = 0;//存放余下来个每个数
//		int tmp = i;//暂存去进行运算
//		for (int j = 0; j < 4; j++){
//			r = tmp% 10;
//			sum += r*r*r*r;// 把余数立方加一起
//			tmp = tmp / 10;
//		}
//		if (sum == i){
//			printf("是水仙花数:%d\n", i);
//		}
//	}
//	return 0;
//}

//法2
//int main(){
//	int a, b, c;
//	for (int i = 100; i < 1000; i++){
//		a = i / 100;
//		b = (i / 10) % 10;//第二位
//		c = i % 10;
//		if ((a*a*a + b*b*b + c*c*c)==i){
//			printf("水鲜花数:%d\n", i);
//		}
//	}
//	return 0;
//}









5第4章



//2021_11_12


//5-12猴子吃桃问题
//前一天桃子数量=(后一天桃子数量+1)*2  
//int main(){
//	int day = 9;
//	int cur_day_sum = 1;
//	int prv_day_sum = 0;
//	while (day){
//		prv_day_sum = (cur_day_sum + 1) * 2;//前一天桃子数量
//		cur_day_sum = prv_day_sum;//前一天   ——>   当前  循环9次
//		day--;
//	}
//	printf("%d\n", cur_day_sum);
//	return 0;
//}

//5-13  迭代法求平方根
//int main(){
//	double x0 , a = 0;
//	scanf("%lf", &a);//输入某个数
//	x0 = a / 2;//a的平方根肯定比2分之a小
//	double x1 = (x0 + a / x0)/2;//利用公式   得出后一项
//	
//	//进行迭代  
//	do{
//		x0 = x1;
//		x1 = (x0 + a / x0) / 2;//每次x1都在变小
//
//	} while (fabs(x0 - x1) >= 1e-5);//直到前1次求出的值减后一次求出的值 绝对值小于1e-5结束  
//	printf("%lf\n", x1);
//	return 0;
//}

//5-14  牛顿迭代法求方程的根
//int main(){
//	double x0 , x1=1.5,f,f1;
//	
//	do{
//		x0 = x1;//每次x0都在变小
//		f = (((2 * x0 - 4)*x0) + 3)*x0 - 6;
//		f1 = ((6 * x0 - 8)*x0) + 3;
//		x1 = x0 - f / f1;//因为每次x在变小  x1也在变小
//	} while (fabs(x1 - x0) >= 1e-6);//小于1e-6结束
//
//	printf("x1=%lf", x1);
//
//	
//	return 0;
//}


//5-15用2分法求方程(-10,10)的根
//int main(){
//	double left = -10, right = 10,mid;
//	double tmp = 10;//方程的结果
//	while (fabs(tmp) >= 1e-6){
//		mid = (left + right) / 2;//算出中间值
//		tmp = ((2 * mid - 4)*mid + 3)*mid - 6;//中间值带入方程来测试
//		if (tmp > 0){//结果大于0 说明中间值右边的带入肯定也大于0
//			right = mid;
//		}
//		else if(tmp<0){//结果小0  说明中间值左边的带入肯定也小于0  
//			left = mid;
//		}
//	}
//	printf("%lf\n", mid);
//	return 0;
//}

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第2张图片

6第5,6章



//2021_11_13
//5-16
//int main(){
//	//上三角
//	for (int i = 0; i < 4; i++){
//		//打印空格
//		for (int j = 3; j>i; j--){
//			printf(" ");
//		}
//		//打印*
//		for (int j = 0; j <= i*2; j++){
//			printf("*");
//		}
//		printf("\n");
//	}
//	//下三角
//	for (int i = 0; i < 3; i++){
//		//打印空格
//		for (int j = 0; j <= i; j++){
//			printf(" ");
//		}
//		//打印*
//		for (int j = 0; j <=4-2*i; j++){
//			//1      0~4打印5个星号
//			//2      0~2打印3个星号
//			//3      0~0打印1个星号
//			printf("*");
//		}
//		printf("\n");
//	}
//	return 0;
//}



//5-17
//int main(){
//	int i = 0;
//   //列举A的对战对象
//	for (int A = 'X'; A <= 'Z'; A++){
//		//列举B的对战对象
//		for (int B = 'X'; B<= 'Z'; B++){
//			//列举C的对战对象
//			for (int C = 'X'; C <= 'Z'; C++){
//				//列举众多次满足以下条件,就算出来了,
//				if (A != 'X'&&C != 'X'&&C != 'Z'&&A != B&&A != C&&B != C){
//					printf("A VS %c   B VS %c    C VS %c", A, B, C);
//				
//				}
//				i++;
//				printf("hello world%d\n",i);
//			}
//		}
//	}
//	return 0;
//}




//6-1   数组筛选法求100以内的素数  
//int main(){
//	int i = 0;
//	for (i = 2; i <= 100; i++){
//		int j = 0;//内层循环
//		
//			for ( j = 2; j < i; j++){
//				if (i%j == 0)
//					break;//==0说明不是素数,结束循环换下一个
//			}
//		
//		if (j == i){
//			printf("%d ", i);
//		}
//	}
//	return 0;
//}

//法2
int main(){
	int arr[100];
	int i, j;
    //利用数组把每个元素赋值为1~100
	for (i = 0; i < 100; i++){
		
		arr[i] = i + 1;//元素下标是0开始
	}
	arr[0] = 0;//先挖掉1 1不是素数
	for (i = 1; i < 100; i++){
		if (arr[i] == 0)continue;//跳出,被已经设置为0的元素,为了避免在被循环模除

		//j+1就是把不包含j的全部倍数都赋值为0
		for (j = i+1; j < 100; j++){
                
			if (0!=arr[j]&&arr[j] % arr[i] ==0 ){
				arr[j] = 0;
			}
		}
	}
	for (i = 0; i < 100; i++){
		if (arr[i] != 0){
			printf("%d  ", arr[i]);
		}
	}
	return 0;
}
//本题中心思想就是,把1~100中所有数的倍数都设置为0,不包含其本身,不包含1的倍数









7第6章

//2021_11_14
//6-2
//选择排序法
//#define M 10
//int main(){
//	int i = 0,j=0;
//	int a[M] = {9,8,7,6,5,4,3,2,10,1};
//	int sz = sizeof(a) / sizeof(a[0]);
//	for (i = 0; i < sz; i++){
//		printf("%d ", a[i]);
//	}
//	printf("\n");
//	for (i = 0; i < sz; i++){
//		int max = 0;//max指向第1个元素
//		//第一次要比较10次 
//		for ( j = 1; j < sz - i; j++){
//			if (a[max] < a[j]){
//				max = j;//若max指向的元素小于j指向的元素 j的下标给max  
//				//比完之后max就指向最大值
//			}
//		}
//		
//		int tmp = a[max];
//		a[max] = a[sz-i-1];//当前max的和数组最高元素的值交换
//		a[sz-1-i] = tmp;
//	}
//	for (i = 0; i < 10; i++){
//		printf("%d ", a[i]);
//	}
//	return 0;
//}

//6-3求3*3矩阵对角元素的和
//int  main(){
//	int total_sum = 0;
//	int a[3][3];
//	for (int i = 0; i < 3; i++){
//		for (int j = 0; j < 3; j++){
//			scanf("%d", &a[i][j]);
//		}
//	}
//	for (int i = 0; i < 3; i++){
//		for (int j = 0; j < 3; j++){
//			printf("%d ", a[i][j]);
//		}
//		printf("\n");
//	}
//	for (int i = 0; i < 3; i++){
//		for (int j = 0; j < 3; j++){
//			if (i == j){//主对角元素的行下表和列下标都是一样的
//				total_sum = total_sum + a[i][j];
//			}
//			if (i + j == 2){//负对角元素相加都等于2;
//				total_sum += a[i][j];
//			}
//		}
//		
//	}
//	printf("对角元素和为:%d\n", total_sum);
//	return 0;
//}


int main(){
	int a[3][3];
	int left_right=0, right_left = 0;
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++){
			scanf("%d", &a[i][j]);
		}
	}
	//主对角元素之和
	for (int i = 0; i < 3; i++){
		left_right += a[i][i];
	}
	//副对角线元素之和  [0,2] [1,1] [2,0]  看:行下表 一直再增长 0~2  列下标在减小 2~0
	for (int i = 0, j = 2; i < 3; i++,j--){
		right_left += a[i][j];
	}
	printf("主对角元素之和   %d\n", left_right);
	printf("副对角线元素之和 %d\n", right_left);
	return 0;
}

8第6章

//2021_11_15
//6-4 向有序的数组插入一个数,该数组还是有序的
//int main(){
//	int a[11] = { 0, 1, 2, 3, 4, 4, 6, 7, 8, 9 };
//	int sz = sizeof(a) / sizeof(a[0]);
//	int end = sz-2;//11-2=9号下标
//	int num = 0;
//	scanf("%d", &num);
//	//1. 找待插入的位置,如果num比当前end指向的元素小  把其搬移到后面一位
//	while (end>=0&&a[end] > num){
//		a[end + 1] = a[end];//若num小于end号下表的数  end下标数向后挪一个
//		end--;
//	}
//	//若num不小于end号元素就把num放到end+1号元素中
//	a[end + 1] = num;
//	for (int i = 0; i < sz; i++){
//		printf("%d ", a[i]);
//	}
//	return 0;
//}

//把数组中的元素值逆序存放
//int main(){
//	int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
//	int b[10] = { 0 };
//	int sz = sizeof(a) / sizeof(a[0]);
//	for (int i = 0, j = sz - 1; i < sz; i++, j--){
//
//		b[j] = a[i];
//	}
//	for (int i = 0; i < sz; i++){
//		a[i] = b[i];
//	}
//	for (int i = 0; i < sz; i++)
//	{
//		printf("%d ", a[i]);
//	}
//
//	return 0;
//}




//int main(){
//	int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8,9};
//	int sz = sizeof(a) / sizeof(a[0]);
//	for (int i = 0; i < sz / 2; i++){//10个元素就交换5次
//	//交换第一个和倒数第一个,之后一次类推
//		int tmp = a[i];//第一个元素暂存起来
//		a[i] = a[sz - 1 - i];
//		a[sz - 1 - i] = tmp;
//	}
//	for (int i = 0; i < sz; i++){
//		printf("%d ", a[i]);
//	}
//	return 0;
//}


//int main(){
//	int a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
//	int start = 0; 
//	int sz = sizeof(a) / sizeof(a[0]);
//	int end = sz;//注意sz
//	while (start < end){
//		end--;
//		int tmp = a[start];
//		a[start] = a[end];
//		a[end] = tmp;
//		start++;
//		
//	}
//	for (int i = 0; i < sz; i++){
//		printf("%d ", a[i]);
//	}
//	return 0;
//}



//6-6杨辉三角形
//int main(){
//	//利用二维数组
//	int a[10][10];
//	for (int i = 0; i < 10; i++){//循环10次
//		for (int j = 0; j <= i; j++){
//			if (0 == j || i == j){
//				a[i][j] = 1;//对角线元素和0列赋值
//			}
//			else{//其余元素赋值
//				a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
//			}
//		}
//	}
//	for (int i = 0; i < 10; i++){
//		for (int j = 0; j <= i; j++){
//			printf("%4d", a[i][j]);
//		}
//		printf("\n");
//	}
//	return 0;
//}

//6-7奇数次魔方阵
int main(){
	int a[100][100] = { 0 };
	int row = 0, col = 0;
	int prvRow = 0, prvCol = 0;
	int i = 0;//循环变量
	printf("请输入一个3~100之间的奇数次阶的方阵:\n");
	int n = 0;
	scanf("%d", &n);
	while (n % 2 == 0 || n<3 || n>100){
		printf("请重新输入:\n");
		scanf("%d", &n);
	}
	//第一个元素存放位置
	col = n / 2;//第0行最中间的位置存放1  n=5  5/2=2  即第0行  第3个元素的位置
	a[row][col] = 1;

	//对于剩余的n^2-1个元素,存放位置是上一行的下一列
	for (i = 2; i <= n*n; i++){
		row--;//行--,若row--后越界了,那就把该元素放到当前列的下一行

		col++;//行++
		if (row < 0){
			row = n - 1;//即最后一行上
		}
		if (col >= n){
			//说明是列越界  右边越界了
			col = 0;//把该元素放到0列上 
		}


		//要存放的空间里已经有元素了的情况
		if (0 != a[row][col]){
			//说明里面已经有元素了;
			row = prvRow + 1;
			col = prvCol;
		}
		a[row][col] = i;
		prvRow = row;
		prvCol = col;
	}

	for (int i = 0; i < n; i++){
		for (int j = 0; j < n; j++){
			printf("%d ", a[i][j]);
		}
		printf("\n");
	}
	return 0;
}

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第3张图片

9第6章

//2021_11_16
//6-8找出数组中的一个鞍点
//#define N 3
//#define M 3
//int main(){
//	int a[N][M] = { 0 };
//	int i = 0, j = 0,max=0,flag,pos=0;
//	//输入一个数组
//	for (i = 0; i < N; i++){
//		for (j = 0; j < M; j++){
//			scanf("%d", &a[i][j]);
//		}
//	}
//
//	for ( i = 0; i < N; i++){
//		max = 0;
//		
//		max = a[i][0];
//		for ( j = 1; j < M; j++){
//			if (max < a[i][j]){
//				max = a[i][j];//max 存最大数
//				flag = j;//记录列下标
//
//			}
//		}//找到一行中最大的 
//		//下一步 行是变的  列是不变的  
//		int row;
//		for (row = 0; row < N; row++){
//			if (a[row][flag] 
//				break;
//			}
//		}
//		if (row == N){
//			printf("%d \n", a[i][flag]);
//			pos = 1;
//			break;
//		}
//
//	}
//	if (pos == 0)printf("没找到鞍点\n");
//
//		return 0;
//}


//6-9折半查找
//int main(){
//	int a[15] = {14,13,12,11,10,9,8,7,6,5,4,3,2,1,1};
//	int sz = sizeof(a) / sizeof(a[0]);
//	int left = 0,right=sz;
//	int num = 0;
//	scanf("%d", &num);
//	int mid;
//
//	while (left
//			 mid = (left + right) / 2;
//			 if (a[mid] == num){
//				 printf("对应数组下标是:%d \n", mid);
//				 break;
//			 }
//			 else if (a[mid] < num){
//				right = mid;//令中间下标给右边
//			}
//			else{
//				left = mid+1;//令中间下标给左边
//			}
//			
//		
//	}//left==right跳出
//	if(left==right)printf("没有找到该元素\n");
//
//	return 0;
//}

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第4张图片

10第6章

#define _CRT_SECURE_NO_WARNINGS 1
#include
//6-10  计算3行  80个字符 的类型个数
//int main(){
//	char ch[3][80];
//	int i = 0;
//	//输入3行字符
//	//for (i = 0; i < 3; i++){
//	//	gets(ch[i]);//scanf遇到空格或者换行就结束了
//	//}
//	int max_sum = 0, min_sum = 0, number_sum = 0, speace_sum = 0, other_sum = 0;
//	for (i = 0; i < 3; i++){
//		gets(ch[i]);
//		for (int j = 0; ch[i][j] != '\0'; j++){
//			if (ch[i][j]>='a'&&ch[i][j]<= 'z')
//				min_sum++;
//			else if (ch[i][j]>='A'&&ch[i][j] <= 'Z')
//				max_sum++;
//			else if (ch[i][j]>='0'&&ch[i][j] <= '9')
//				number_sum++;
//			else if (ch[i][j]==' ')
//				speace_sum++;
//			else other_sum++;
//		}
//	}
//	printf("小写字母:%d\n大写字母:%d\n数字数量:%d\n空格数量:\n其它字符数量:%d\n", min_sum, max_sum,\
//		number_sum,speace_sum, other_sum);
//	return 0;
//}


//6-11星星
//int main(){
//	char *str = " * * * * *";
//	for (int i = 0; i < 5; i++){
//		//打印空格
//		for (int j = 0; j < i; j++)
//			printf(" ");
//		printf("%s\n", str);//直接放字符串的地址,要是*str还%s打印就错了,*str找字符串首元素的地址打印这个首元素
//		//                    就是一个字符
//	}
//	return 0;
//}

//6-12原文与密码
//int main(){
//	char a[26];
//	gets(a);
//	int i = 0;
//	while (a[i] != '\0'){
//		a[i] = 'A' + (26 - (a[i] - 'A') - 1);//为啥-1 因为你A加25才等于Z   
//		//'A'+26-(a[i]-'A')-1;  a[i]-'A'这能说明你a[i]是第几个字母再-1,+26就可以转为对应的字母了
//		i++;
//	}
//	puts(a);
//	return 0;
//}


//6-13模拟strcat字符串连接函数
#include
char* My_strcat(char* str1,  const char*  str2){
	assert(str1&&str2);

	
	int i = 0;
	while (*(str1+i) != '\0'){
		i++;//计算字符串长度;
	}
	int j = 0;
	while (*(str2+j) != '\0'){
		*(str1 + i) = *(str2 + j);
		j++;
		i++;
	}
	*(str1 + i) = *(str2 + j);//把'\0'放到str1
	
	return str1;
}
//int main(){
//	char str1[10] = "abc";//前文不能是字符串常量,字符串常量是不能被修改的,连接字符串也不行
//	//再字符常量区开辟的属于系统空间不属于用户空间
//	 char str2[] = "def";
//	
//     char *str=My_strcat(str1, str2);
//	printf("%s\n", str);
//	return 0;
//}


//模拟strlen
//int My_strlen(const char *str){
//	if (str == NULL)
//		return -1;
//	int i = 0;
//	while (*(str + i)){
//		i++;
//	}
//	return i ;
//}
int My_strlen(const char *str){
	assert(str);
	int i = 0;
	if (*(str + i) == '\0'){
		return 0;//如果是空串就直接返回0下面就不执行了
	}
	i++;
	 return 1 + My_strlen(str+i);
}

//int main(){
//	char *str = "";
//	int ret;
//    ret=My_strlen(str);
//	printf("%d\n", ret);
//	return 0;
//}

//6-14模拟strcmp
int My_strcmp(const char*str1, const char* str2){
	int i = 0,sum=0;
	//str1或str2指向\0就结束
	while (*(str1 + i) != '\0'&&*(str2 + i) != '\0'){
		sum = *(str1 + i) - *(str2 + i);
		i++;
		if (sum > 0 || sum < 0){
			return sum;//两串不相等的情况,直接返回比较的结果调用完毕
		}
	}
	//遇到\0 到这里
	sum = *(str1 + i) - *(str2 + i);
	return sum;

}
//int main(){
//	char str1[100], str2[100];
//	gets(str1);
//	gets(str2);
//	int ret=My_strcmp(str1, str2);
//	printf("%d\n", ret);
//	return 0;
//}

//6-15模拟字符串拷贝函数
//法1
//char* My_strcpy(char* str1, const char* str2){
//	if (str1 == NULL&&str2 == NULL)
//		return -1;
//	int i = 0;
//	while ('\0'!=*(str2 + i)){
//		*(str1 + i) = *(str2 + i);
//		i++;
//	}
//	*(str1 + i) = *(str2 + i);//遇到\0调到这里,把\0放到里面去
//	return str1;
//}
//法2
//char* My_strcpy(char* str1, const char* str2){
//	assert(str1&&str2);
//	//                循环串2长度的次数
//	for (int i = 0; i <= My_strlen(str2); i++){
//		*(str1 + i) = *(str2 + i);
//	}
//	return str1;
//}


//strncpy的模拟
char* My_strncpy(char* str1, const char* str2, int k){
	assert(str1&&str2);
	char* str = str1;//str1的地址给str
	while (k--){//控制循环次数
		*str1++ = *str2++;
	}
	return str;
}

//
//int main(){
//	char str1[100], str2[50];
//	gets(str1);
//	gets(str2);
//	int n = 0;
//	scanf("%d", &n);
//	char *ch = My_strncpy(str1, str2,n);
//	printf("%s\n", ch);
//	return 0;
//}

//strncat模拟实现
char* My_strncat(char* str1, const char* str2, int k){
	assert(str1&&str2);
	int len=My_strlen(str1);//求长度找到了'\0'
	int i = 0;
	while (k--){
		//连接个数大于字符串个数情况
		if ((*(str1 + len) = *(str2 + i))!='\0'){
			len++;
			i++;
		}
		else  return str1;
	}
	//连接个数小于字符串情况自动赋值'\0'
	*(str1 + len) = '\0';
	return str1;
}

//int  My_strncmp(const char*str1, const char *str2, int k){
//	assert(str1&&str2);
//	int i = 0;
//	int flag;
//	while (k--){
//		if (*(str1 + i) == '\0'||*(str2 + i) == '\0')
//			break;
//		flag = *(str1 + i) -*(str2 + i);
//		i++;
//		if (flag<0 || flag>0)
//			return flag;
//	}
//	
//	
//}


//int my_strncmp(char *str1, char *str2, int k){
//	int tmp;
//	while (k-- && *str1&&*str2){//结束条件:k==0 或者 *str1或*str2有一方是'\0'就结束
//		
//		tmp = *str1 - *str2;
//		if (tmp<0 || tmp>0)//如果串1-串2不等于0就直接返回
//			return tmp;
//
//		str1++;
//		str2++;
//	}//如果k==0就说明不是因为串1或串2是'\0'而跳出的,是比较次数完毕,前k个相等
//	if (k == 0&&*str1!='\0'&&*str2!='\0')
//		return 0;
//	//否则str1或者str2遇见'\0'了  
//	else	return *str1 - *str2;
//}
//int main(){
//	char arr1[] = "aab0a";
//	char arr2[] = "aabz";
//	printf("%d\n", my_strncmp(arr1, arr2, 4));
//}

//法3指针-指针strlen
//int Myptr_strlen(const char* str1){
//	char *start = str1;//用的指针变量的右值str1里面的内容
//	while (*str1 != '\0'){
//		str1++;
//	}
//	return str1 - start;//指针减指针代表指针之间所经历的元素个数
//}
//int main(){
//	char *str1 = "abcdef";
//	int ret =Myptr_strlen(str1);
//	printf("字符串的长度是:%d\n", ret);
//	return 0;
//}


11模拟子串strstr


//模拟寻找子串的函数strstr
char* My_strstr(const char* str1, const char* str2){
	assert(str1&&str2);
	char* s1 = NULL;//指向串1的可改变临时指针变量
	char* s2 = NULL;
	char* cp = (char*)str1;
	//cp临时指针是为了,循环串1的次数


	if (*str2 == '\0'){//若是空串就直接返回串1
		return cp;
	}

	//外循环:就是每次cp进行改变指向,重新指向串1的某个字符再向后比较
	while (*cp){
		s1 = cp;//s1每次像后面指
		s2 = str2;

		//内循环:每次从cp指向的字符开始和串2进行比较看是不是相等的,不是cp++改变指向

		while (*s1 != '\0'&&*s2 != '\0'&&*s1 == *s2){
			s1++;//条件都满足我们看下一个字符相同吗
			s2++;
		}
		if (*s2 == '\0'){
			return cp;//返回当前cp指向的字符串
		}
		cp++;
	}
	return NULL;
}
int main(){
	char arr1[] = "abcd";
	char arr2[] = "abcd";
	char* ret = My_strstr(arr1, arr2);
	if (ret == NULL){
		printf("没有子串\n");
	}
	else{
		printf("%s\n", ret);
	}
	return 0;
}

12第7章


//2021_11_20
//内存拷贝函数
//void * My_memcpy(void* str1, const void* str2, int k){
//	assert(str1&&str2);
//	char* ret = (char*)str1;//首地址暂存
//	while (k){
//		*(char*)str1 = *(char*)str2;
//		(char*)str1 += 1;//一个个字节拷贝
//		(char*)str2 += 1;
//		k--;
//	}
//	return ret;
//}
//
//int main(){
//	int arr1[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//	//int arr2[10] = { 0 };
//	My_memcpy(arr1+2, arr1, 20);
//	for (int i = 0; i < 10; i++){
//		printf("%d ", arr1[i]);
//	}
//	return 0;
//}

//模拟memmove
//void* My_memmove(void* dest, const void* src, int k){
//	assert(dest&&src);
//	void* ret = dest;
//	if (src > dest){
//		//从前往后挪
//		while (k--){
//			*(char*)dest = *(char*)src;//源的一个字节给目的
//			(char*)dest += 1;
//			(char*)src += 1;
//		}
//	}
//	else{
//		//src
//		while (k--){
//			//void* 类型的不能指针加减常数,和指针加减指针操作
//			*((char*)dest+k) = *((char*)src+k);
//			//k--变为19  +20就越界了,不加是指向当前字节,加一指向第二个
//		}
//	}
//	return ret;
//}
//int main(){
//	int arr1[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//	My_memmove(arr1 + 2, arr1, 20);
//	for (int i = 0; i < 10; i++){
//		printf("%d ", arr1[i]);
//	}
//	return 0;
//}


//7-1函数实现求最大公约数和最小公倍数
//int MaxNumber(int n, int m){
//	if (n > m){
//		int tmp = n;
//		n = m;
//		m = tmp;
//	}
//	int r = 0;
//	while (n != 0){
//		r = m%n;
//		m = n;
//		n = r;//当r==0找到最大公约数,最大公约数就是除数
//	}
//	printf("最大公约数是:%d\n", m);
//	return m;
//}
//int Mindouble(int n,int m,int sum){
//	return n*m / sum;
//}
//int main(){
//	int a, b;
//	scanf("%d%d", &a, &b);
//	int ret=MaxNumber(a, b);//返回最大公约数
//	int num=Mindouble(a,b,ret);
//	printf("最小公倍数是:%d\n", num);
//	return 0;
//}

//
7-2函数实现方程的根
//#include
//double My_sqrt(double a){
//	double x0 = a / 2;//先给x0赋值,
//	double x1 = (x0 + a / x0) / 2;
//	while (fabs(x1 - x0) > 1e-6){
//		x0 = x1;//x0随x1每次赋值变小
//		x1 = (x0 + a / x0) / 2;
//	}
//	return x1;
//}
//void Root(double a, double b, double c){
//	double p = b*b - 4 * a*c;
//	if (p < 0){
//		printf("没有实根\n");
//	}
//	else if (p == 0){
//		printf("单根:%lf\n",-b / (2 * a));
//	}
//	else{
//		double x1 = (-b + My_sqrt(p)) / 2 * a;
//		double x2 = (-b - My_sqrt(p)) / 2 * a;
//		printf("x1=%lf  x2=%lf", x1, x2);
//	}
//}
//int main(){
//	double a, b, c;
//	printf("请输入,a,b,c的值:");
//	scanf("%lf%lf%lf", &a, &b, &c);
//	Root(a, b, c);
//	return 0;
//}
//本题格外注意类型,输入和输出以及定义时

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第5张图片

13第7章

//2021_11_21
//函数求素数
void Alone(int n){
	int i = 0;
	for ( i = 2; i <=n/2; i++)
	{
		if (n%i == 0){
			break;
		}
	}
	if (i == n){
		printf("%d是素数!!!",n);
	}
	else{
		printf("%d不是素数\n", n);
	}
}
//int main(){
//	int n = 0;
//	printf("请输入一个数:\n");
//	scanf("%d", &n);
//	Alone(n);
//	return 0;
//}
//7-4  转置3*3的矩阵
//void printArray(int (*p)[3]){
//	for (int i = 0; i < 3; i++){
//		for (int j = 0; j < 3; j++){
//			printf("%d ", *(*(p+i)+j));
//		}
//		printf("\n");
//	}
//}
//void ReverseArray(int a[3][3]){
//	for (int i = 0; i < 3; i++){
//		for (int j = 0; j < i; j++){
//			int tmp = a[i][j];
//			a[i][j] = a[j][i];
//			a[j][i] = tmp;
//		}
//	}
//}
//int main(){
//	int a[3][3] = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
//	printArray(a);
//	printf("\n");
//	ReverseArray(a);
//	printArray(a);
//	return 0;
//}

//7-5函数实现讲字符串逆序存放
char* Reverse(char* str1){
	char* ret = str1;//起始位置暂存
	char* left = str1;
	while (*str1){
		str1++;
	}
	str1 -= 1;//指向最后一个元素
	while (left < str1){
		char tmp = *left;
		*left = *str1;
		*str1 = tmp;
		left++;
		str1--;
	}
	return ret;
}
//int main(){
//	char ch1[20];
//	gets(ch1);
//	printf("交换之前:%s\n", ch1);
//	char* ret = Reverse(ch1);
//	printf("逆序之后:%s\n", ret);
//	return 0;
//}


//7-6将第一个字符串的元音字母拷贝到另一个字符串
char* Cpy(char* str1, const char* str2){
	assert(str1&&str2);
	char* ret = str1;
	for (int i = 0; *str2 != '\0'; i++){
		if (*str2 == 'a' || *str2 == 'e' || *str2 == 'i' || *str2 == 'o' || *str2 == 'u'){
			*str1 = *str2;
			str1++;
		}
		if (*str2 == 'A' || *str2 == 'E' || *str2 == 'I' || *str2 == 'O' || *str2 == 'U'){
			*str1 = *str2;
			str1++;
		}
		str2++;
	}
	*str1 = '\0';//最后循环完毕把元音字母都放到了串1 '\0'也要放进去
	return ret;
}

int main(){
	char ch1[100];
	char ch2[100];
	gets(ch2);
	char* ret=Cpy(ch1, ch2);
	printf("%s\n", ret);
	return 0;
}

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第6张图片

14第7章

//2021_11_22
//输入四位数字输出四个字符
int My_strlen(char *str){
	int i = 0;
	while (*str++){
		i++;
	}
	return i;
}
//void Show(char ch[]){
//	int i = 0;
//	printf("%d\n", My_strlen(ch));
//	for (i = My_strlen(ch); i > 0; i--){
//		ch[2 * i] = ch[i];
//		ch[2 * i - 1] = ' ';
//	}
//	printf("%s    %d", ch, My_strlen(ch));
//}
//int main(){
//	char ch[80];
//	printf("请输入4位数:>\n");
//	scanf("%s", ch);
//	Show(ch);
//	return 0;
//}
//7-8  分割打印
//void Show(char *str){
//	int i = 0;
//	while (*(str + i) != '\0'){
//		printf("%c", *(str+i));
//		i++;
//		if (*(str + i) == '\0')
//			break;
//		printf(" ");
//	}
//}
//int main(){
//	char ch[10];
//	scanf("%s", ch);
//	Show(ch);
//	return 0;
//}
//int main(){
//	int i, k = 0;
//	char a[80], b[80], *p;
//	p = a;
//	gets(p);
//	while (*p){
//		for (i = 1;i<=3&&*p; p++, k++, i++)
//			b[k] = *p;
//			if (*p){
//				b[k] =' '; k++;
//			}
//	}
//	b[k] = '\0';
//	printf("%d", NULL);
//	return 0;
//}

//7-9全局变量再函数下面定义要进行声明,才能再函数中使用,不能再进行初始化
//int digit = 0, Eng_sum = 0, eng_sum = 0, space = 0, other = 0;
//void Show(char str[]){
//	//extern int digit, Eng_sum, eng_sum , space , other ;
//
//	int i = 0;
//	for (i = 0; str[i] != '\0'; i++){
//		if (str[i] >= 'a'&&str[i] <= 'z')
//			eng_sum++;
//		else if (str[i] >= 'A'&&str[i] <= 'Z')
//			Eng_sum++;
//		else if (str[i] >= '0'&&str[i] <= '9')
//			digit++;
//		else if (str[i] == ' ')
//		space++;
//		else other++;
//	}
//}
// 
//int main(){
//	char ch[80];
//	gets(ch);
//	
//	Show(ch);
//	printf("digit=%d\nEng_sum=%d\neng_sum=%d\nspace=%d\nother%d\n",digit,Eng_sum,eng_sum,space,other);
//	printf("%s\n", ch);
//	return 0;
//}

//33天啊,7-10写一个函数,将最长的单词输出
//char* Find_word(char str1[], char str2[]){
//	int i = 0;
//	int j = i;
//	//每次找单词j和i的起始地址都是一样的
//
//	while (str2[i] != '\0'){
//		//避免最后一个串是最大
//		while (str2[j]>='a'&&str2[j]<='z'){
//			j++;
//		}
//		//碰到不是小写字母的到这里把单词放到数组,并记录长度,下次小于就不赋值
//		int len = j - i;
//		if (My_strlen(str1) < len){
//			strncpy(str1, str2 + i, len);
//		}
//		j++;
//		i = j;
//	}
//	return str1;
//}
//int main(){
//	char ch2[256] = "abc";
//	char ch1[256] = { 0 };//存最大单词;
//	char* ret=Find_word(ch1, ch2);
//	printf("%s\n", ret);
//	return 0;
//}


//7-11冒泡排序
//void Bubble_sort(int arr[], int sz){
//	int i = 0;
//	int j = 0;
//	int flag = 1;//标识
//
//	//外层控制趟数
//	for (i = 0; i < sz - 1; i++){
//	
//		//内层控制比较多少次
//		for (j = 0; j < sz - 1 - i; j++){
//			if (arr[j]
//				int tmp = arr[j];//前一个数比后一个大,交换
//				arr[j] = arr[j + 1];//目的把最大数放到最前面
//				arr[j + 1] = tmp;
//				flag =0;
//			}
//		}
//		if (flag == 1)break;
//		//比较一趟发现是有序的直接退出;
//	}
//
//}
//int main(){
//	int arr[10] = { 1, 4, 7, 2, 5, 8, 3, 6, 9, 0 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	Bubble_sort(arr, sz);
//	for (int i = 0; i < sz; i++){
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}


//7-12  函数判断3次方程的根
//#include
//float Fx(float a, float b, float c, float d){
//	float x0 ,x1=1,f,f1;
//	
//	do{
//		x0 = x1;
//		 f = (a*x0*x0 + b*x0 + c)*x0 + d;//这两行应该再里面随着x0的变化而变化
//		 f1 = (3 * a*x0 + 2 * b)*x0 + c;//否则再外面f和f1都是固定的值了
//		 x1 = x0 - f / f1;
//	} while (fabs(x1 - x0) > 1e-6);
//	return x1;
//}
//int main(){
//	float a, b, c, d;
//	printf("请输入4个值:>\n");
//	scanf("%f%f%f%f", &a, &b, &c, &d);
//	float ret = Fx(a, b, c, d);
//	printf("%f \n", ret);
//	return 0;
//}

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第7张图片

15第7章

//2021_11_23
//7-13勒让德多项式递归
//float Lrd(int n, float x){
//	if (n == 0)
//		return 1;
//	else if (n == 1)
//		return x;
//	return ((2 * n - 1)*x - Lrd(n - 1, x) - (n - 1)*Lrd(n - 2, x)) / n;
//}
//int main(){
//	float x;
//	int n = 0;
//	scanf("%d%f", &n, &x);
//	float ret=Lrd(n, x);
//	printf("%f", x);
//	return 0;
//}

16第7章

//2021_11_24
//7-14学生成绩
#include"sum.h"
float ret = 0.0;//接收返回值
//int main(){
//	float stu[N][M] = {
//		{1,2,3,4,5},
//		{2,3,4,5,6},
//		{3,4,5,6,7},
//		{4,5,6,7,8},
//		{5,6,7,8,9},
//		{6,7,8,9,0},
//		{7,8,2,0,1},
//		{8,9,0,0,0},
//		{9,0,1,2,3},
//		{0,1,2,3,4}
//	};
//	Ave_Sum(stu);//求平均分函数
//	Ave_tip_sum(stu);//课程平均
//	Search(stu);//寻找最大值
//	ret=Ave_fangcha(Ave_score_array);//平均分方差
//	Print(stu);//打印函数
//	return 0;
//}
#define _CRT_SECURE_NO_WARNINGS 1

#define N 10
#define M 5
#include
#include
extern float Ave_score_sum;//学生平均数全局

extern float  Ave_tip_score;//每门课程平均分全局

extern float Ave_score_array[N];//存放平均数的数组

extern float Ave_tip_array[M];//课程平均分数组

extern int Row, Col;//找哪位学生

float max;//最大值

extern float ret;//方差返回值

extern void Print();//打印函数

extern void Ave_Sum();//书生平均分函数

extern void Ave_tip_sum();//课程平均分函数

extern void Search();//查高分函数

extern float Ave_fangcha();//计算方差函数


#define _CRT_SECURE_NO_WARNINGS 1
#include"sum.h"

float Ave_score_sum = 0.0;//每个学生平均分
float Ave_tip_score = 0.0;
float Ave_score_array[N];//学生平均分
float Ave_tip_array[M];//课程平均分数组
int Row = 0, Col = 0;
float max = -1;
void Ave_Sum(float stu[N][M]){
	int i = 0,j=0;
	for (i = 0; i < N; i++){
		Ave_score_sum = 0.0;//从新赋值!!!
		for (j = 0; j < M; j++){//累加每科分数
			Ave_score_sum += stu[i][j];
		}
		Ave_score_array[i] = Ave_score_sum / 5.0;//每个学生的平均分放到数组中

	}
}

//打印函数
void Print(float stu[N][M]){
	printf("NO.  cour1   cour2   course3   cour4    cour5    ave_sum\n");
	//打印学生成绩
	for (int i = 0; i < N; i++){
		printf("----------|---------|---------|--------|--------|--------|\n");
		printf("stu%d ", i);
		for (int j = 0; j < M; j++){
			printf("%-9.1f", stu[i][j]);
		}
		printf("%-9.1f", Ave_score_array[i]);
		printf("\n");
	}
	printf("----------|---------|---------|--------|--------|--------|\n");

	//打印每门课程的平均分
	printf("Ave: ");
	for (int i = 0; i < M; i++){
		printf("%-9.1f", Ave_tip_array[i]);
	}
	printf("\n----------|---------|---------|--------|--------|--------|\n");

	//50个课程的最高分
	printf("\n第%d个同学的第%d门课最高,分数是%.1f\n", Row+1, Col+1, max);
	printf("平均分方差: %.2f\n", ret);
	//printf("%d", a);
}

//计算每门课的平均分
void Ave_tip_sum(float stu[N][M]){
	int i = 0, j = 0;

	for (i = 0; i < M; i++){
		Ave_tip_score = 0.0;
		for (j = 0; j < N; j++){
			Ave_tip_score+=stu[j][i];
		}
		//没门课程平均分     一科总成绩/10
		Ave_tip_array[i] = Ave_tip_score / 10.0;
	}
}

//课程函数最高,及寻找是哪个学生
void Search(float stu[N][M]){
	int i = 0,j=0;
	for (i = 0; i < N; i++){
		for (j = 0; j < M; j++){
			if (stu[i][j]>max){
				max = stu[i][j];
				Row = i;//标记最大值位置
				Col = j;
			}
		}
	}
}

//计算平均分方差函数
float Ave_fangcha(float Ave_score_array[N]){
      float sum_square = 0.0;
	  float sum_score = 0.0;
	  for (int i = 0; i < N; i++){
		  sum_square += (Ave_score_array[i] * Ave_score_array[i]);
		  sum_score += Ave_score_array[i];
	  }
	  //利用的公式
	  return sum_square / N - (sum_score / N)*(sum_score / N);
	  
}


17第7章

//2021_11_26
#define N 5
#define NAME_SIZE 10
//输入函数
void Scan(int id[N], char name[][NAME_SIZE]){
	for (int i = 0; i < N; i++){
		printf("请输入职工号:>\n");
		scanf("%d", &id[i]);
		printf("请输入姓名:>\n");
		scanf("%s", name[i]);

	}
}
//排序函数
void Sort(int id[], char name[][NAME_SIZE]){
	int i = 0,j=0;
	char kong[NAME_SIZE];
	for ( i = 0; i < N - 1; i++){
		for (j = 0; j < N - 1 - i; j++){
			if (id[j]>id[j + 1]){
				int tmp = id[j];
				strcpy(kong, name[j]);//名字暂存到另一个一维数组;
				id[j] = id[j + 1];
				strcpy(name[j], name[j + 1]);//后一个名字拷贝到前一个一维数组
				id[j + 1] = tmp;
				strcpy(name[j + 1], kong);//完成交换任务
			}
		}
	}
}

//打印函数
void Print(int id[], char name[][NAME_SIZE]){
	for (int i = 0; i < N; i++){
		printf("职工%d:  [%s]\n", id[i], name[i]);
	}
}

//折半查找函数
void Search(int id[],char name[][NAME_SIZE],int n){
	int left = 0, right = N, mid = 0;;
	while (left <= right){
		mid = (left + right) / 2;
		if (id[mid] < n){
			left = mid + 1;
		}
		else if (id[mid]>n){
			right = mid - 1;
		}
		else{
			printf("%d:  [%s]\n", id[mid], name[mid]);
			break;
		}
	}
	if (left > right){
		printf("没有找到\n");
	}
}      //1 2 3 4 5 6 7 8 9 10
//int main(){
//	int id[N];//职工号数组
//	char name[N][NAME_SIZE];
//	Scan(id, name);//输入函数
//	//Print(id, name);//打印函数
//	Sort(id, name);//排序函数
//	Print(id, name);
//	printf("请输入要查找的职工号:>\n");
//	int n = 0;
//	scanf("%d", &n);
//	Search(id,name,n);
//	return 0;
//}


//7-16  16进制转换位10进制
//unsigned int Swit(char ch[]){
//	int i = 0;
//	unsigned int num = 0;
//	while (ch[i] != '\0'){
//		if (ch[i] >= 'a'&&ch[i] <= 'f'){
//			num = num * 16 + ch[i] - 'a' + 10;
//		}
//		else if (ch[i] >= 'A'&&ch[i] <= 'F'){
//
//		//1AB  num=0*16+'1'-'0'=1  num=1
//			 //num=1*16+'A'-'A'+10=26 num=16
//			// num=26*16+'B'-'A'+10=416+1+10  num=427
//
//			num = num * 16 + ch[i] - 'A' + 10;
//		}
//		else if (ch[i] >= '0'&&ch[i] <= '9'){
//			num = num * 16 + ch[i] - '0';
//		}
//		i++;
//	}
//	return num;
//}
//int main()
//{
//	char ch[9] = { 0 };//范围不能超过FF FF FF FF
//	printf("输入一个16进制数:>\n");
//	scanf("%s", ch);
//	unsigned int ret=Swit(ch);
//	printf("%u", ret);
//	return 0;
//}


//7-17数字转字符串
//void Digit_Letter(int num){
//	num = fabs(num);
//	if (num / 10 != 0)
//		Digit_Letter(num / 10);
//	printf("%c", num % 10 + '0');
//}
//int main(){
//	int num = 0;
//	printf("请输入一个数字:>\n");
//	scanf("%d", &num);
//	if (num < 0){
//		printf("-");
//	}
//	Digit_Letter(num);
//	return 0;
//}


//7-18输入年月日,判断这是一年的第几天
//判断闰年函数
int Leap(int year){
	return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

//获取某年某月的天数的函数
int GetDayByYM(int year, int month){
	                //1    2   3  4   5    6  7   8    9   10  11  12
	          //a[0]存放闰年的2月天数
	int a[13] = { 29, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

	if (month == 2 && Leap(year)){//若是2月且还是闰年条件满足
		return a[0];
	}
	return a[month];
}

//累加某年某月的天数函数
int GetDays(int year, int month, int day){
	int i = 0;
	int days = 0;
	//若是三月循环2次
	for (i = 1; i < month; i++){
		days += GetDayByYM(year,i);
	}
	days += day;
	return days;
}

int main(){
	int year, month, day;
	printf("请输入年 月 日:>\n");
	scanf("%d%d%d", &year, &month, &day);
	
	int days=GetDays(year, month, day);

	printf("%d年的%d月的%d天是:第%d天\n", year,month,day,days);
	
	return 0;
}

18第8章

//2021_11_26 
//8-1 输入3个数用由小到大的方式输出
//void Min_Max(int *p1, int *p2, int *p3){
//	if (*p1 > *p2){
//		int tmp = *p1;
//		*p1 = *p2;
//		*p2 = tmp;
//	}//若*p1大于*p2交换 
//	if (*p1 > *p3){
//		int tmp = *p1;
//		*p1 = *p3;
//		*p3 = tmp;
//	}//*p1中存的是最小数 
//	if (*p2 > *p3){
//		int tmp = *p2;
//		*p2 = *p3;
//		*p3 = tmp;
//	}
//	printf("%d %d %d\n", *p1, *p2, *p3);
//}
//int main(){
//	int a = 0, b = 0, c = 0;
//	scanf("%d%d%d", &a, &b, &c);
//	int *p1 = &a;
//	int *p2 = &b;
//	int *p3 = &c;
//	Min_Max(p1, p2, p3);
//	return 0;
//}


//8-2输入三个串,按从小到大的顺序输出
#include
#define M 30
//
//
拷贝函数的实现
//void My_strcpy(char* str1, char *str2){
//	assert(str1&&str2);
//	while (*str1 = *str2){
//		str1++;
//		str2++;
//	}
//}
//
//
交换函数的实现
//void swap(char *str1, char *str2){
//	char tmp[M] = { 0 };//暂存数组
//	My_strcpy(tmp, str1);
//	My_strcpy(str1, str2);
//	My_strcpy(str2, tmp);
//}
//
比较函数
//int My_strcmp(char*str1, char*str2){
//	assert(str1&&str2);
//	while (*str1 != '\0'&&*str2 != '\0'){
//		int flag = *str1 - *str2;
//		if (flag > 0 || flag<0){
//			return flag;
//		}
//		str1++;
//		str2++;
//	}
//	return *str1 - *str2;
//}
//void Min_Max(char *a1, char *a2, char *a3){
//	if (My_strcmp(a1, a2) > 0){
//		swap(a1, a2);//若串1大于串2返回正数,————交换
//	}
//	if (My_strcmp(a1, a3) > 0){
//		swap(a1, a3);//若串1大于串3返回正数,————交换
//
//	}
//	if (My_strcmp(a2, a3) > 0){
//		swap(a2, a3);//若串2大于串3返回正数,————交换
//
//	}
//	printf("%s %s %s\n", a1, a2, a3);
//}
//int main(){
//	char a1[M];
//	char a2[M];
//	char a3[M];
//	printf("大爷请输入三个字符串:>\n");
//	gets(a1);
//	gets(a2);
//	gets(a3);
//	Min_Max(a1, a2, a3);
//	return 0;
//}

//8-3  输入10个整数,最大的和最后一个位置上的交换,最小的和最前面的那个交换写三个函数
void Scan(int *a,int sz){
	printf("请输入10个整数:>");
	for (int i = 0; i < sz; i++){
		scanf("%d", (a + i));
	}
}
void Deal(int *a, int sz){
	int max=0, min=0;
	for (int i = 1; i < sz; i++){

		if (a[max] < a[i]){//若a[max]中的数小于a[i]————交换 a[max]始终存大数
			int tmp1 = a[max];
			a[max] = a[i];
			a[i] = tmp1;
		}
	}
	//最大数放最后面
	int tmp = a[max];
	a[max] = a[sz - 1];
	a[sz - 1] = tmp;

	for (int i = 1; i < sz; i++){
		if (a[min]>a[i]){//若a[min]中的数大于a[i]————交换  a[min]始终存小数
			int tmp2 = a[min];
			a[min] = a[i];
			a[i] = tmp2;
		}
	}
	//最小数放在最前面
	tmp = a[min];
	a[min] = a[0];
	a[0] = tmp;
}

//重点复习
void Print(int *a, int sz){
	for (int i = 0; i < sz; i++){
		printf("%d ", *(a + i));
	}
}
void DealPlus(int * a, int sz){
	int max = *a,min=*a;
	int pos_Max=0, pos_Min=0;
	for (int i = 0; i < sz; i++){
		if (max < *(a + i)){
			max = *(a + i);
			pos_Max = i;//保存最大数下标
		}
		if (min>*(a + i)){
			min = *(a + i);
			pos_Min = i;//保存最小数下标
		}
	}
	int tmp = 0;
	if (max == *a){//若第一个数是最大数,因为先换的小的,换完之后把小的小标再给pos_Max
		tmp = a[pos_Min]; 
		a[pos_Min] = a[0];
		a[0] = tmp;
		pos_Max = pos_Min;
	}
	else{
		tmp = a[pos_Min];
		a[pos_Min] = a[0];
		a[0] = tmp;
	}
	//大数放的最后面
	tmp = a[pos_Max];
	a[pos_Max] = a[sz - 1];
	a[sz - 1] = tmp;
}


//int main(){
//	int a[10] = {10,1,2,3,4,5,6,7,8,9};
//	int sz = sizeof(a) / sizeof(a[0]);
//	//Scan(a,sz);//输入函数
//	Deal(a, sz);//处理函数
//	//DealPlus(a, sz);
//	Print(a, sz);//打印函数
//	return 0;
//}

//7-4循环题目
void ROR(int *a, int sz,int n){
	int tmp = 0;//存放移出来的一位数字
	for (int i = 0; i < n; i++){
		tmp = *(a + sz-1);//每次都是指向最高元素
		        //j=6
		for (int j = sz-2; j >=0; j--){
			*(a + j+1) = *(a + j);//倒数第二个下标的数,给倒数第一个元素
		}
		//完事 全向前挪了一位 ,把暂存的最高位放到首元素里面
		*a = tmp;
	}
	for (int i = 0; i < sz; i++){
		printf("%d ", *(a + i));
	}
}
int main(){
	int n = 0;
	int a[8] = {1,2,3,4,5,6,7,8};
	int sz = sizeof(a) / sizeof(a[0]);
	printf("请输入循环右移几次:>\n");
	scanf("%d", &n);
	ROR(a, sz,n);
	return 0;
}

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第8张图片

19第8章

//8-5  报数问题 n个人 从1报数到3,每次报数到3的那个元素被清空
//int main(){
//	int a[120];
//	int n = 0;
//	printf("请输入人数:");
//	scanf("%d", &n);
//	for (int i = 0; i < n; i++){
//		a[i] = i + 1;
//	}
//	int *p = a;
//	int m = 0;//存放被搞走的人数
//	int j = 0;//每次循环的变量
//	int k = 0;//每次从1,2,3计算的变量
//	while (m < n - 1){//m再循环中增加不能大于=n 即剩余1个人时结束循环
//		if (*(p+j) != 0){
//			k++;
//			if (k == 3){
//				*(p+j) = 0;//报数位3的被搞走
//				m++;//被搞走的数++
//				k = 0;//再从0开始循环
//			}
//		}
//		j++;//循环变量每次让指针后移
//		if (j == n) j = 0;//若后移次数==n  就是指向了最后一个元素的下一个元素  从新开始报数
//	}
//	for (int i = 0; i < n; i++){
//		if(a[i]!=0)printf("%d ", a[i]);
//	}
//	return 0;
//}

//8-8
//void My_strcpyplus(char *str1, char*str2, int m){
//	char* ret = str1;
//	str2 += (m-1);//为了从m开始之后的字符进行拷贝
//	while (*str1 = *str2){
//		str1++;
//		str2++;
//	}
//	printf("%s ", ret);
//}
//int main(){
//	char ch1[20];
//	char ch2[20] = "bbaaa";
//	int m = 0;
//	printf("请输入从第几个数开始拷贝:");
//	scanf("%d", &m);
//	My_strcpyplus(ch1, ch2, m);
//	return 0;
//}

//8-9;
void reverse(int (*a)[3]){
	int i = 0;
	int j = 0;
	for (i = 0; i < 3; i++){
		for (j = 0; j < i; j++){
			int tmp = *(*(a + i) + j);
			*(*(a + i) + j) = *(*(a + j) + i);
			*(*(a + j) + i) = tmp;
		}
	}
	for ( i = 0; i < 3; i++){
		for (j = 0; j < 3; j++){
			printf("%d ", *(*(a + i) + j));
		}
		printf("\n");
	}
}
int main(){
	int a[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	reverse(a);
	return 0;
}

20第8-9章

#define _CRT_SECURE_NO_WARNINGS 1
#include
//#define N 5
//#define M 6
#include

//8-11输入多个字符串,排序后输出
//void Sort(char str[][M]){
//	char tmp[10];
//	for (int i = 0; i < N - 1; i++){
//
//		for (int j = 0; j < N - i - 1; j++){
//			if (strcmp(str[j],str[j + 1])>0){//前一个大于后面一个进行交换
//				strcpy(tmp, str[j]);
//				strcpy(str[j], str[j+1]);
//				strcpy(str[j+1], tmp);
//
//			}
//		}
//	}
//}
//int main(){
//	char str[N][M] = {"bbbbb","aaaaa","ccccc","fffff","eeeee"};
//	/*printf("请输入%d个字符串:", N);
//	for (int i = 0; i < N; i++){
//		scanf("%s", str[i]);
//	}*/
//	Sort(str);
//	for (int i = 0; i < N; i++){
//		printf("%s\n", str[i]);
//
//	}
//}


//8-12用指针数组来完成上一题;
//void sort(char* p[5]){
//	char tmp[10];
//	for (int i = 0; i < 5 - 1; i++){
//		for (int j = 0; j < 5 - 1 - i; j++){
//			if (strcmp(p[j], p[j + 1])>0){
//				strcpy(tmp, p[j]);
//				strcpy(p[j], p[j+1]);
//				strcpy(p[j+1], tmp);
//			}
//		}
//	}
//}
//int main(){
//	char *p[5];
//	char str[5][6];
//	for (int i = 0; i < 5; i++){
//		scanf("%s", str[i]);
//	}
//	for (int i = 0; i < 5; i++){
//		p[i]= str[i];
//	}
//	sort(p);
//	for (int i = 0; i < 5; i++){
//				printf("%s\n", str[i]);
//		
//			}
//	return 0;
//}

//8-13 设计一个通用的就定积分的函数
//#include
//double cal(double(*p)(double),double a,double b){
//	double dx = (a - b) / 10000.0;//这算的是小型矩形块的底边长  p(i)是高  p(i)*dx 底边×高累加在一起求面积
//	double sum = 0;//存放总和
//	for (double i = b; i <= a; i += dx){
//		sum += p(i)*dx;//p是函数指针量存放的sin等函数的地址再次可以调用sin函数
//	}
//	return sum;
//}
//int main(){
//	double a = 0;//上限
//	double b = 1;//下限
//	int n = 0;//确定几号功能
//	printf("亲输入使用几号功能:1.sin   2.cos    3.exp\n");
//	scanf("%d", &n);
//	printf("请输入上下限:\n");
//	scanf("%lf", &a);
//	scanf("%lf", &b);
//	double result = 0.0;
//	switch (n){
//	case 1:
//		result = cal(sin,b,a); break;
//	case 2:
//		result=cal(cos,b,a); break;
//	case 3:
//		result=cal(exp,b,a); break;
//	default:printf("请输入1~3之间的数\n");
//	}
//	printf("结果是:%lf", result);
//	return 0;
//}
//8-14将输入的n个数,逆序存放
//void Reverse(int a[], int n){
//	int left = 0;
//	int right = n-1;
//	while (left < right){
//		int tmp = a[left];
//		a[left] = a[right];
//		a[right] = tmp;
//		left++;
//		right--;
//	}
//	for (int i = 0; i < n; i++){
//		printf("%d ", a[i]);
//	}
//}
//int main(){
//	int a[20];
//	int n;
//	printf("请输入一个数:\n");
//	scanf("%d", &n);
//	printf("请给每个数组赋值:\n");
//	for (int i = 0; i < n; i++){
//		scanf("%d", &a[i]);
//	}
//	Reverse(a, n);
//}


//8-15学生成绩管理系统  

//#define N 4
//#define M 5
//int one_ave = 0;
//void AVE_score(int stu[N][M]){
//	int total = 0;
//	for (int i = 0; i < N; i++){
//		total += stu[i][0];//列加第一门课程的平均分
//	}
//	one_ave = total / 4;
//}
//Find(int stu[N][M]){
//	int flag = 0;//标记
//	int row=-1;//不及格学生的学号
//	int total = 0;//不及格学生的总成绩
//	for (int i = 0; i < N; i++){
//		flag = 0;
//		for (int j = 0; j < M; j++){
//			if (stu[i][j] < 60){
//				flag++;//若学生的某门课程的分数小于60 flag++
//			}
//			//若两门课程及以上的课程不及格
//			if (flag >= 2){ 
//				row = i; 
//			}
//		}
//		//求不及格学生的总分和平均分
//		if (i == row){//若row==i  说明本趟第i个学生就是成绩不及格的
//			for (int k = 0; k < M; k++){
//				total += stu[row][k];
//			}
//			printf("不及格学生的学号是:  %d\n", row+1);
//			printf("不及格学生总分:  %d\n", total);
//			printf("不及格学生平均分:%d\n", total / M);
//		}
//	}//外层for_end
//}
//void Find_prefer(int stu[N][M]){
//	int total = 0, ave = 0,flag=0;
//	for (int i = 0; i < N; i++){
//		flag = 0;//标记清0
//		total = 0;
//		for (int j = 0; j < M; j++){
//			total += stu[i][j];//累加每个学生的平均分
//			if (stu[i][j]>85){
//				flag++;//记录大于85分课程的个数
//			}
//		}
//		ave = total / M;
//		if (ave>90 || flag == M){
//			printf("平均分大于90或者每科成绩都在85以上的学生学号是:%d号\n", i+1);
//		}
//	}
//}
//int main(){
//	int stu[N][M] = {{ 90, 90,90,90,90 },{ 100,100,100,100,90}, {60,70,20,30,80},
//	{50,60,80,80,90} };
//	AVE_score(stu);//求第一门课程的平均分
//	Find(stu);//找出两门课程不及格的学生,输出其平均分,和总分;
//	Find_prefer(stu);//找平均分再90分以上的或全部成绩再85分以上的
//}

//8-16输入一个字符串,将连续的字符放到另一个二维数组中

//int Find_number(char *a, char ch[][20]){
//	int i = 0;
//	int j = 0;
//	int row = 0;//控制字符串的拷贝,做二维数组的行下标
//	//每次内外循环i和j都是指向同一个起始位置
//	while (*(a + i) != '\0'){
//
//		while (*(a + j) >= '0'&&*(a + j) <= '9'){
//			j++;//满足条件j向后面指
//		}
//		int k = 0;
//		//j退出来就已经指向了一个不知数字的字符  再这里结束条件k不能等于j-1,因为有一个k+1呢
//		for (k = i; k < j-1; k++){
//			//前一个元素加1不等于后一个元素就退出
//			if ( (a[k] + 1) != a[k + 1]){
//				 break;
//			}
//		}
//		//逆序连续
//		int n = 0;
//		for (n = i; n
//		//前一个元素减1 不等于后一个元素就退出
//			if ((a[n] - 1) != a[n +1])
//				break;
//		}
//		if (((k!=i)&&k == j - 1)||(n!=i)&&(n==j-1)){//说明没有提前退出数字是连续的
//			//完成拷贝问题
//			int len = j - i;//算出要拷贝字符的长度
//			strncpy(ch[row], a + i, len);
//			row++;//数组行下标+1
//		}
//		j++;//跳过当前指向的不是数字字符的字符
//		i = j;
//
//	}
//	return row;
//}
//int main(){
//	char a[100];
//	char ch[10][20] = { 0 };
//
//	printf("请输入一段字符内包含连续数字:");
//	gets(a);
//	int ret=Find_number(a, ch);
//	for (int i = 0; i 
//		printf("%s\n", ch[i]);
//	}
//	return 0;
//}
//

//8-18输入一个月份输出对应的英文月份
//void Swit(char **month, int n){
//	printf("%s", *(month+n));
//}
//int main(){
//	char *month[13] = { "hello", "January", "February", "March", "April", "May ", "June", "July",
//		"August ", "September", "October", "November", "December" };
//	int n = 0;
//	do{
//		printf("请输入月份:\n");
//		scanf("%d", &n);
//	} while (n<1 || n>12);
//	Swit(month, n);
//}

//8-19动态内存的申请与释放
//#include
//int main(){
//	char*ch = NULL;
//	printf("申请之前的地址:%p\n", ch);
//	ch = (char*)malloc(32);
//	scanf("%s", ch);
//	printf("申请之后的地址:%p   %s",ch,ch);
//	free(ch);
//	ch = NULL;
//	return 0;
//}

//8-20用指向指针的方法将5个字符串进行排序
//#define H 5
//#define STR_SIZE  20
//void Sort(char **ptr){
//	char tmp[STR_SIZE];
//	for (int i = 0; i < N - 1; i++){
//		for (int j = 0; j < N - 1 - i; j++){
//			if (strcmp(*(ptr+j), *(ptr+j+1))>0){
//				strcpy(tmp, *(ptr + j));
//				strcpy(*(ptr + j), *(ptr + j + 1));
//				strcpy(*(ptr + j + 1), tmp);
//			}
//		}
//	}
//}
//主要就定义一个二维数组,给其赋值,把二维数组各个元素的的地址存到一个指针数组中再函数传参排序
//int main(){
//	char a[H][STR_SIZE];
//	for (int i = 0; i < H; i++){
//		printf("请输入第%d个字符串:\n",i+1);
//		scanf("%s", a[i]);
//	}
//	char* p[H];
//	for (int i = 0; i < H; i++){
//		p[i] = a[i];
//	}
//	Sort(p);
//	for (int i = 0; i < H; i++){
//		printf("%s\n", a[i]);
//	}
//	return 0;
//}
//8-21用指向指针的方法进行对那个数排序
//void Sort1(int **ptr, int n){
//	int i = 0,j=0,flag=0;
//	for (i = 0; i < n - 1; i++){
//		for (j = 0; j < n - 1 - i; j++){
//			if (*(*ptr + j)>*(*ptr + j + 1)){
//				int tmp = **(ptr + j);//解释ptr是一个指针变量存放的是数组首元素地址+1,就跳过第一个元素,
//				//解引用一下是找的第一个元素一级指针,再解引用找到一级指针所指向的目标
//				**(ptr + j)=**(ptr+j+1);
//				**(ptr + j + 1) = tmp;
//				flag = 1;
//			}
//		}
//		if (flag == 0)break;
//	}
//
//}
//int main(){
//	int a[100];
//	int *str[100];
//	printf("请输入一个数字:");
//	int n = 0;
//	scanf("%d", &n);
//	printf("请输入%d个数:\n",n);
//	int i = 0;
//	for ( i = 0; i < n; i++){
//		scanf("%d", &a[i]);
//	}
//	for (i = 0; i < n; i++){
//		str[i] = &a[i];//存放整型一维数组元素的地址
//	}
//	Sort1(str,n);
//	for (i = 0; i < n; i++){
//		printf("%d  ", **(str + i));
//	}
//	return 0;
//}




//9-1利用结构体进行年份判别,输入年月日求该日是给该年的第几天
//int Find_days(int  year, int month, int day){
//	int months[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
//	int days = 0;
//	for (int i = 1; i < month; i++){
//		days += months[i];//累加输入的月份的之前的天数
//	}
//	days += day;
//	//判断是不是闰年以及月份大不大于3月
//	if (month>3 && (year % 4 == 0 && year % 10 != 0 || year % 400 == 0)){
//		days += 1;
//	}
//	return days;
//}
//struct year_day{
//	int year;
//	int month;
//	int day;
//}date;
//int main(){
//	printf("请输入:年 月 日:\n");
//	scanf("%d%d%d", &date.year, &date.month, &date.day);
//	int days = 0;//累加天数
//	 days=Find_days(date.year,date.month, date.day);
//	printf("%d年的%d月%d号是第%d天\n", date.year, date.month, date.day, days);
//	return 0;
//}
#include
9-3~5结合:编写一个程序用结构体,再主函数输入 学号  名字  三门课的成绩五个学生的利用结构体数组
//#define N 2
//#define M 3 
//struct student{
//	char num[5];
//	char name[20];
//	int score[M];
//}stu[N];
//void Print_stu(struct student *ptr, int n, int ave){
//	printf("最高分学生的学号是:%d\n", n+1);
//	printf("----------------------------\n");
//	printf("最高分学生的名字是:%s\n", ptr[n].name);
//	printf("----------------------------\n");
//	printf("最高分学生的平均分是:%d\n", ave);
//	printf("----------------------------\n");
//	for (int i = 0; i < M; i++){
//		printf("第%d门课程的分数是:%d\n", i + 1, ptr[n].score[i]);
//		printf("----------------------------\n");
//	}
//}
//
//void Print(struct student *ptr){
//	int i = 0;
//	int j = 0;
//	//打印每个学生的数据
//	for (i = 0; i < N; i++){
//		printf("学号是:%s\n", ptr[i].num);
//		printf("----------------------------\n");
//		printf("名字是:%s\n", ptr[i].name);
//		printf("----------------------------\n");
//		for (j = 0; j < M; j++){
//			printf("第%d门课成绩是:%d\n", j+1, ptr[i].score[j]);
//			printf("----------------------------\n");
//		}
//	}
//	printf("\n");
//}
//void Input(struct student *ptr){
//	int i = 0;
//	//输入学生的成绩
//	for (int i = 0; i < N; i++){
//		printf("请输入学号:");
//		scanf("%s", &ptr[i].num);
//		printf("请输入名字:");
//		scanf("%s", &ptr[i].name);
//		for (int j = 0; j < M; j++){
//			printf("请输入第%d个成绩:", j + 1);
//			scanf("%d", &ptr[i].score[j]);
//		}
//	}
//}
//void Deal(struct student *ptr){
//	//每个学生的成绩累加到一个数组;
//	int stu_score[N];
//	int i = 0;
//	for (i = 0; i < N; i++){
//		int total = 0;
//		for (int j = 0; j < M; j++){
//			total += ptr[i].score[j];//累加各个学生的三门成绩
//		}
//		stu_score[i] = total;//学生三门成绩赋值到数组
//	}
//	int total_plus = 0;
//	//累加所用课程的成绩以及找出那个学生的成绩最高
//	int max = INT32_MIN,flag=-1;
//	for (i = 0; i < N; i++){
//		total_plus += stu_score[i];//累加学生的成绩
//		if (stu_score[i]>max){
//			max = stu_score[i];
//			flag = i;//标记那个学生的分数最高
//		}
//	}
//	int all_stu_ave = total_plus / M*N;//所有课程的平均成绩
//	//求最高分学生的平均成绩
//	int plus_stu_ave = stu_score[flag] / M;
//
//	Print_stu(stu,flag,plus_stu_ave);//打印最高分学生数据的函数
//}
//int main(){
//	Input(stu);
//	Print(stu);
//	Deal(stu);
//}


C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第9张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第10张图片

21结构题数组非常重要的题

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第11张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第12张图片

22第10章

//2021-12-01  10-3向文件输入一个字符串其中的小写字母转换为大写字母
//int main(){
//	FILE *pf = NULL;
//	//利用文件指针打开文件  以只读的方式
//	pf = fopen("test.txt", "w");
//	if (NULL == pf){
//		printf("Open File Error \n");
//	}
//	char ch;                           //Error  Of  File
//	while ((ch = getchar()) != '!'&&ch != EOF){
//		if (ch >= 'a'&&ch <= 'z')
//			ch -= 32;//小写转大写
//		fputc(ch, pf);//把ch中的字符通过pf写到文件
//	}
//	fclose(pf);
//	return 0;
//}


//10-4  把A文件和B文件中字母按照循序排列到文件C中
void OpenFile(FILE** fpa, FILE** fpb, FILE** fpc){
	*fpa = fopen("A.txt", "r");
	if (NULL == fpa){
		printf("打开失败\n");
		exit(1);
	}
	*fpb = fopen("B.txt", "r");
	if (NULL == fpb){
		printf("打开失败\n");
		exit(1);
	}
	*fpc = fopen("C.txt", "w");
	if (NULL == fpc){
		printf("打开失败\n");
		exit(1);
	}
}
void CloseFile(FILE* fpa, FILE* fpb, FILE* fpc){
	fclose(fpa);
	fclose(fpb);
	fclose(fpc);
}
void Getbuffer(FILE* fpa, FILE* fpb, char *buffer){
	fgets(buffer, 1024, fpa);//从文件A读数据到buffer缓冲区 缓冲区空间1024字节

	int len = strlen(buffer);
	fgets(buffer + len, 1024 - len, fpb);//从文件B读数据到buffer缓冲区 缓冲区空间1024字节-len字节长度
}
void BufferSort(char* buffer){
	int i = 0,j=0;
	printf("未排序之前:%s\n",buffer);
	int len=strlen(buffer);
	for (i = 0; i < len - 1; i++){
		for (j = 0; j < len - 1 - i; j++){
			if (*(buffer + j)>*(buffer + j + 1)){
				char tmp = *(buffer + j);
				*(buffer + j) = *(buffer + j + 1);
				*(buffer + j + 1) = tmp;
			}
		}
	}
	printf("%s", buffer);
}
//包存到C文件中
void Savebuffer(FILE* fpc, char *buffer){
	fputs(buffer, fpc);//把buffer中的内用写到fpc指向的文件
}
//#include
//int main(){
//	FILE* fpa = NULL, *fpb = NULL ,*fpc = NULL;
//	//这要将进行传址操作,要是传值 函数再调用时会发生临时拷贝,调用完毕就会释放了,传址是借助地址把地址空间的内容改了
//	OpenFile(&fpa, &fpb, &fpc);//打开文件
//	char buffer[1024] = { 0 };
//	//获取A B文件的字符函数
//	Getbuffer(fpa, fpb, buffer);
//	BufferSort(buffer);
//
//	Savebuffer(fpc, buffer);
//	CloseFile(fpa, fpb, fpc);//关闭文件
//
//	return 0;
//}

23第十章

//2021_12_2
//8-5 有五个学生 三门成绩,求出学生的平均分  输入学号和名字都放到文件中
//#define M 2
//#define N 3
//struct student{
//	char num[5];
//	char name[20];
//	int score[3];
//}stu[N];
//void Scan(struct student* ptr){
//	//输入每个学生的信息
//	for (int i = 0; i < M; i++){
//		printf("请输入第%d个学生的学号:",i+1);
//		scanf("%s", ptr[i].num);
//		printf("请输入第%d个学生的名字:", i + 1);
//		scanf("%s", ptr[i].name);
//		for (int j = 0; j < N; j++){
//			printf("请输入第%d个学生的分数:", j + 1);
//			scanf("%d", &ptr[i].score[j]);
//		}
//		printf("\n");
//	}
//}
//void Ave(struct student *ptr){
//	int  ave[M];
//	int total = 0;
//	for (int i = 0; i < M; i++){
//		total = 0;
//		for (int j = 0; j < N; j++){
//			total += ptr[i].score[j];//累加每个学生的分数
//		}
//		ave[i] = total / N;
//	}
//	/*for (int i = 0; i < M; i++){
//		printf("%f ", ave[i]);
//	}*/
//	FILE*fp = NULL;
//	fp = fopen("stu.txt", "w");
//	if (fp == NULL){
//		printf("打开失败....\n");
//		return -1;
//	}
//	for (int i = 0; i < M; i++){
//		fprintf(fp, "%s  %s: %d %d %d 平均分: %d\n", ptr[i].num, ptr[i].name, ptr[i].score[0], ptr[i].score[1],
//			ptr[i].score[2],ave[i]);
//	}
//}
int main(){
	Scan(stu);
	Ave(stu);

	return 0;
}


//8-6
#define M 2
#define N 3
struct student{
	char num[5];
	char name[20];
	int score[3];
	int ave;
}stu[M];
void ReadFile(struct student*stu){
	FILE* fp = fopen("stu.txt", "r");
	if (fp == NULL){
		printf("打开失败:");
		return -1;
	}
	for (int i = 0; i < M; i++){
		fscanf(fp, "%s %s %d %d %d %d", stu[i].num, stu[i].name, &stu[i].score[0], &stu[i].score[1],
			&stu[i].score[2], &stu[i].ave);
	}
	fclose(fp);
}
#include
void* My_memcpy(void*src, void*dest, int k){
	assert(src&&dest);
	int i = 0;
	while (k){
		*((char*)src + i) = *((char*)dest + i);
		i++;
		k--;
	}
}
void Sort(struct student*ptr){
	int i = 0, j = 0;
	struct student tmp;
	int sz = sizeof(tmp);//计算结构体的大小;
	for (i = 0; i < M-1; i++){
		for (j = 0; j < M - 1 - i; j++){
			if (ptr[j].ave>ptr[j + 1].ave){
				//再内存层面拷贝
				My_memcpy(&tmp, &ptr[j], sz);
				My_memcpy(&ptr[j], &ptr[j + 1], sz);
				My_memcpy(&ptr[j+1], &tmp, sz);
			}
		}
	}
	
}
//void SaveFile(struct student *ptr){
//	FILE*fp = fopen("stu_sort.txt", "w");
//	if (fp == NULL){
//		printf("打开失败:");
//		exit(1);
//	}
//	int i = 0;
//	for (i = 0; i < M; i++){
//		fprintf(fp, "%s %s %d %d %d %d\n", ptr[i].num, ptr[i].name, ptr[i].score[0], ptr[i].score[1],
//			ptr[i].score[2], ptr[i].ave);
//	}
//	fclose(fp);
//}
//int main(){
//	//从文件读入数据到结构体
//	ReadFile(stu);
//	//按平均分排序;
//	Sort(stu);
//	//存到新文件 stu_sort.txt
//	SaveFile(stu);
//	
//	return 0;
//}

24文件不复习第10章

//2021-12-4  10-7
#include
//#define M 6
//typedef struct student{
//	int num;
//	char name[20];
//	int score[3];
//	float ave;
//}student;
//student stu[M];
//void Iput(student * ptr){
//	printf("请输入学生的数据:\n");
//	scanf("%d %s %d %d %d", &ptr->num, ptr->name, &ptr->score[0], &ptr->score[1], &ptr->score[2]);
//	ptr->ave = (ptr->score[0] + ptr->score[1] + ptr->score[2])/3.0;
//}
//void ReadFile(student* stu){
//	FILE* fp = fopen("stusort.txt", "r");
//	if (fp == NULL){
//		printf("打开文件失败:");
//		exit(1);
//	}
//	for (int i = 0; i < M-1; i++){
//		fscanf(fp, "%d %s %d %d %d %f", &stu[i].num, stu[i].name, &stu[i].score[0], &stu[i].score[1],
//			&stu[i].score[2],&stu[i].ave);
//	}
//
//}
//void Cmpstu(student *stu, student *new_stu){
//	//90 100 110 
//	int i = 0;
//	int sz = sizeof(student);
//	for (i = M - 2; i >= 0; i--){
//		if (stu[i].ave>(new_stu->ave)){
//			//若大于插入对象就放后面搬
//			memcpy(&stu[i + 1], &stu[i],sz);
//		}
//		else{
//			memcpy(&stu[i + 1], new_stu,sz);
//			break;
//		}
//	}
//}
//void Write_new(student* stu){
//	FILE* fp = fopen("pstu.txt", "w");
//	if (fp == NULL){
//		printf("not open!!!");
//		exit(1);
//	}
//	for (int i = 0; i < M; i++){
//		fprintf(fp, "%d %s %d %d %d %.2f\n", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1],
//			stu[i].score[2], stu[i].ave);
//	}
//	fclose(fp);
//}

int main(){
	student new_stu;
	Iput(&new_stu);//输入一个新学生数据
	//把原始的5个已经排序好的文件读入结构体
	ReadFile(stu);
	//比较平均分进行插入
	Cmpstu(stu, &new_stu);
	//写入到新文件
	Write_new(stu);
	return 0;
}



//#include
10-9   动态增长版
//#define M 6
//typedef struct student{
//	int num;
//	char name[20];
//	int score[3];
//	float ave;
//}student;
//
//static int count;//static修饰全局变量作用域没变,生命周期变了,不能跨文件使用
//void Iput(student * ptr){
//	printf("请输入学生的数据:\n");
//	scanf("%d %s %d %d %d", &ptr->num, ptr->name, &ptr->score[0], &ptr->score[1], &ptr->score[2]);
//	ptr->ave = (ptr->score[0] + ptr->score[1] + ptr->score[2]) / 3.0;
//}
//
//void ReadFile(student** stu){
//	FILE* fp = fopen("stusort.txt", "r");
//	if (fp == NULL){
//		printf("打开文件失败:");
//		exit(1);
//	}
//	//读出数据的条数
//	
//	fscanf(fp, "%d", &count);
//	
//	*stu = (student*)malloc(sizeof(student)*(count + 1));
//	student* pstu = *stu;//暂存*stu中的内容到另一个一级指针变量中
//	//为啥暂存因为stu是一个二级指针变量  
//
//		//读入结构体数据
//	for (int i = 0; i < count; i++){
//		fscanf(fp, "%d %s %d %d %d %f", &pstu[i].num, pstu[i].name, &pstu[i].score[0], &pstu[i].score[1],
//			&pstu[i].score[2], &pstu[i].ave);
//	}
//	fclose(fp);
//}
//void Cmpstu(student *stu, student *new_stu,int couunt){
//	//90 100 110 
//	int i = 0;
//	int sz = sizeof(student);
//	for (i = count - 2; i >= 0; i--){
//		if (stu[i].ave>(new_stu->ave)){
//			//若大于插入对象就放后面搬
//			memcpy(&stu[i + 1], &stu[i], sz);
//		}
//		else{
//			memcpy(&stu[i + 1], new_stu, sz);
//			break;
//		}
//	}
//}
//void Write_new(student* stu,int count){
//	FILE* fp = fopen("pstu.txt", "w");
//	if (fp == NULL){
//		printf("not open!!!");
//		exit(1);
//	}
//	//先写入条数:
//	fprintf(fp, "%d\n", count + 1);
//
//	//写入数据
//	for (int i = 0; i < count+1; i++){
//		fprintf(fp, "%d %s %d %d %d %.2f\n", stu[i].num, stu[i].name, stu[i].score[0], stu[i].score[1],
//			stu[i].score[2], stu[i].ave);
//	}
//	fclose(fp);
//
//	//写完之后把申请的空间释放掉
//	free(stu);
//}
//
//int main(){
//	student new_stu;
//	Iput(&new_stu);
//	student *stu;
//	ReadFile(&stu);//,很妙的一招!!! 传结构体指针变量的地址过去 为了那边动态开辟返回的地址放到结构体指针变量的里
//	
//	Cmpstu(stu, &new_stu,count);
//	
//	Write_new(stu,count);
//	return 0;
//}

//10-9
//typedef struct emp{
//	int num;
//	char name[20];
//	int  salary;
//	char gree[20];
//}emp;
//int main(){
//	emp emplor;
//	FILE *fpin = fopen("emplor.txt", "r");
//	if (fpin == NULL){
//		printf("打开失败:\n");
//		return -1;
//	}
//	FILE * fpout = fopen("emp_salary.txt", "w");
//	if (fpin == NULL){
//		printf("打开失败:\n");
//		fclose(fpin);
//		return -1;
//	}
//	while (!feof(fpin)){//没有读到文件结尾就返回0
//		//将文件中数据读出来
//		int ret=fscanf(fpin, "%d %s %d %s", &emplor.num, emplor.name, &emplor.salary, emplor.gree);
//
//		//写入新文件
//		fprintf(fpout, "%s %d\n", emplor.name, emplor.salary);
//		if (ret == -1)break;
//	}
//
//	fclose(fpin);
//	fclose(fpout);
//
//	return 0;
//}


10-10 把9题中工资表的一个员工的数据删除
// typedef struct emp{
//		char name[30];
//		int  salary;
//	}emp;
//int main(){
//	//建立一个暂存器
//	emp emploee[100];
//	FILE *fp = fopen("emp_salary.txt", "r");
//	if (fp == NULL){
//		printf("打开失败:");
//		return -1;
//	}
//	//读到结构体数组
//	int i = 0;
//	while (!feof(fp)){
//		int ret=fscanf(fp, "%s  %d", emploee[i].name, &emploee[i].salary);
//		
//		if (ret == -1)break;
//		i++;
//	}
//	fclose(fp);
删除操作:
//	char name1[20];
//	printf("请输入要删除的名字:");
//	scanf("%s", name1);
//	//打开新的文件
//	FILE* fw = fopen("new_salary.txt", "w");
//	if (fp == NULL){
//		printf("打开失败:");
//		return -1;
//	}
//	int j;
//	for (j = 0; j < i; j++){
//		if (strcmp(name1, emploee[j].name) == 0)
//			continue;
//		fprintf(fw, "%s %d\n", emploee[j].name, emploee[j].salary);
//
//
//	}
//	fclose(fw);
//	
//	return 0;
//}

//10-11 从键盘输入n个字符串再放到文件中
//int main(){
//	char a[10][30];
//	int n = 0;
//	printf("请输入要输入几个字符串:");
//	scanf("%d", &n);
//	FILE*fp = fopen("str.txt", "w");
//	if (fp == NULL){
//		printf("打开错误:");
//		return -1;
//	}
//	for (int i = 0; i < n; i++){
//		printf("请输入第%d个字符串:", i + 1);
//		scanf("%s", a[i]);
//		fprintf(fp, "%s\n", a[i]);
//	}
//	fclose(fp);
//	FILE*fw = fopen("str.txt", "r");
//	if (fw == NULL){
//		printf("打开错误:");
//		return -1;
//	}
//	char str[30];
//	int i = 0;
//	while (!feof(fw)){
//		int ret = fscanf(fp, "%s", str);
//		int len = strlen(str);
//		for (int j = 0; j < len; j++){
//			if (str[j] >= 'a'&&str[j] <= 'z'){
//				str[j] -= 32;
//			}
//		}
//		if (ret == -1)break;
//		printf("操作之后的第一个字符是:%s\n", str);
//		i++;
//	}
//
//	fclose(fp);
//	return 0;
//}

25-40题 1~12

//12_5 1
//int main(){
//	float dis = 0.0;
//	float money = 10.0;
//	float money3_10=7*2.0;//3到10公里的总花费
//	float wit = 0.0;
//	printf("请输入里程和等待时间:");
//	scanf("%f%f", &dis, &wit);
//	if (dis < 3.0){
//		;
//	}//3-10之间的
//	else if((int)(dis / 10.0) <1){
//		money += (dis - 3)*2.0;//10公里之内的
//	}
//	else {
//		money = money + money3_10 + (dis - 10)*3.0;
//	}
//	if (wit < 5){
//		;
//	}
//	else{
//		wit = (wit / 5)*2.0;
//	}
//	money += wit;
//	printf("%f", money);
//	return 0;
//}

//2 用递归的方法求1~20阶乘
//求n的阶乘
//int main(){
//	int i = 0;
//	int j = 0;
//	int sum = 0;
//	int n = 0;
//	printf("请输入一个数:");
//	scanf("%d", &n);
//
//	for (i = 1; i <= n; i++){
//		int ret = 1;
//		for (j = 1; j <= i; j++){
//			ret = ret*j;//累成1~i的阶乘
//		}
//		sum += ret;//累加1~n的阶乘
//	}
//	printf("%d", sum);
//	return 0;
//}


 递归法
//int Mul(int x){
//	int a;
//	if (x < 1)
//		return a=1;
//	else {
//		a = x*Mul(x - 1);
//	}
//	return a;
//	
//}
//int main(){
//	int i = 0;
//	printf("请输入一个数:\n");
//	int n = 0;
//	int sum = 0;//累加用
//	scanf("%d", &n);
//	for (i = 1; i <= n; i++){
//		sum += Mul(i);//每次求i的阶乘再加上去
//	}
//	printf("1~%d的阶乘是:%d", n,sum);
//	return 0;
//}


#include
//3
//#define M 3
//typedef struct emp{
//	int num;
//	char name[32];
//	float tv, bx, kt, xj, total;
//}ep;
//int main(){
//	ep emple[M];
//	//输入信息
//	int i = 0;
//	for (i = 0; i < M; i++){
//		printf("工号 名字 TV 冰箱 空调 洗衣\n");
//		scanf("%d %s %f %f %f %f", &emple[i].num, emple[i].name, &emple[i].tv, &emple[i].bx,
//			&emple[i].kt, &emple[i].xj);
//		emple[i].total = (emple[i].tv+emple[i].bx+emple[i].kt+emple[i].xj);
//	}
//	printf("\n");
//	//排序
//	ep tmp;//暂存用的结构体变量
//	for (i = 0; i < M - 1; i++){
//		for (int j = 0; j < M - 1 - i; j++){
//			
//			if (emple[j].total
//				memcpy(&tmp, &emple[j], sizeof(ep));
//				memcpy(&emple[j], &emple[j+1], sizeof(ep));
//				memcpy(&emple[j + 1], &tmp, sizeof(ep));
//			}
//		}
//	}
//	
//	for (i = 0; i < M; i++){
//		printf("工号 名字 TV 冰箱 空调 洗衣 总和\n");
//		printf("%d %s %.2f %.2f %.2f %.2f %.2f\n", emple[i].num, emple[i].name, emple[i].tv, emple[i].bx,
//			emple[i].kt, emple[i].xj,emple[i].total);
//	}
//	return 0;
//}
//

//4  三天打鱼两天晒网
//int  main(){
//	int days = 0;
//	printf("请输入天数:");
//	scanf("%d", &days);
//	if (days % 5 == 4 || days % 5 == 0)printf("第%d天是在筛网\n", days);
//	else printf("第%d天是在打鱼\n", days);
//
//	return 0;
//}


//6---输入多个字符串, 然后输出最短的字符串。
//#define M 3
//#define size 30
//
//int main(){
//	char a[M][size];
//	for (int i = 0; i < M; i++){
//		printf("请输入%d个字符串\n", i + 1);
//		gets(a[i]);
//	}
//	char tmp[size];
//int	flag = 0;
//	int len = strlen(a[0]);
//	for (int i = 1; i < M; i++){
//		if (strlen(a[i])
//			flag = i;
//		}
//	}
//	printf("最短的字符串是:%s", a[flag]);
//	return 0;
//}

//三个球, 大小一样, 其中有一个质量和其他球质量不同, 请找出不同
//也就是 3 个数, 有两个数一样, 找另一个数
//思路先排序把最大值或者最小值放到最后面 再让最后一个和倒数第二个比较若相等,单身狗就是第一个
//若不相等单身狗就是最后面一个
//穷举法
//int main(){
//	int a[10] = { 1, 2, 3, 4, 5, 5, 4, 3, 2, 2 };
//	int i = 0;
//	int count = 0;
//	for (i = 0; i < 10; i++){
//		count = 0;
//		for (int j = 0; j < 10; j++){
//			if (a[i] == a[j]){
//				count++;
//			}
//		}
//		if (count == 1){
//			printf("单身狗是:%d", a[i]);
//			break;
//		}
//	}
//	return 0;
//}

//异或方法只能找全是偶数对的其余一个是单身狗的类型  奇数对的不行
//int main(){
//	int a[11] = { 1, 2, 3, 4, 5, 5, 4, 3, 2, 2,2 };
//	int tmp = 0;
//	for (int i = 0; i < 11; i++){
//		tmp = tmp^a[i];//
//	}
//	printf("单身狗是:%d", tmp);
//}



//8---有 1000 人捐款, 捐到 10 万就停止捐款。 统计捐款人数, 再求平均数

//
//int main(){
//	int peo = 1;
//	float money, total = 0, ave = 0;
//	for (peo = 1; peo <= 1000; peo++){
//		printf("第%d个慈善家请输入钱数:", peo);
//		scanf("%f", &money);
//		total += money;
//		if (total >= 100000.0){
//			printf("捐款完成 总钱数是:%f\n",total);
//			break;
//		}
//	}
//	if (peo> 1000 && total < 100000.0)printf("美娟狗!");
//	ave = total / peo;
//	printf("每人捐了%f\n", ave);
//	return 0;
//}


//9--采用递归, 把整形转化成字符串
//#include
//void Num_Str(int num){
//	num = fabs(num);
//	if (num / 10 != 0)
//		Num_Str(num / 10); 
//		printf("%c", (num % 10 +'0'));
//}
//int main(){
//	int num = 0;
//	printf("请输入一个整数:");
//	scanf("%d", &num);
//	if (num < 0)printf("-");
//	Num_Str(num);
//	return 0;
//}


//10 出发时间和起始时间问题,算出所用时间是多少
//int main(){
//	int start_time = 0;
//	int end_time = 0;
//	printf("请输入出发时间:12:34,就输入1234\n");
//	scanf("%d", &start_time);
//	printf("请输入到达时间:12:34,就输入1234\n");
//	scanf("%d", &end_time);
//	int hour_time = end_time / 100 - start_time / 100;
//	int mintue_time = end_time % 100 - start_time % 100;
//	if (mintue_time < 0){
//		//如12:32  17:10   17-12=5   10-32=-22  时间没负数  故 小时-1  分钟 +60  
//		hour_time -= 1;
//		mintue_time += 60;
//	}
//	printf("总共要花费%d小时,%d分钟", hour_time, mintue_time);
//	return 0;
//}
//11--输入一行字符串, 求数字, 大小写字母, 空格, 其他字符各多少
//int main(){
//	char ch;
//	int number = 0, max = 0, min = 0, space = 0, other = 0;
//	while ((ch = getchar()) != '\n'&&ch != EOF){
//		if (ch >= 'a'&&ch <= 'z')
//			min++;
//		else if (ch >= 'A'&&ch <= 'Z')
//			max++;
//		else if (ch >= '0'&&ch <= '9')
//			number++;
//		else if (ch == ' ')
//			space++;
//		else{
//			other++;
//		}
//	}
//
//	printf("小写字母数量:%d 大写字母数量:%d 数字数量:%d 空格数量:%d 其他数量:%d\n", min, max, number, space, other);
//	return 0;
//}

12--编写 char *str( char *s, char x) , 其功能: 在给定的字符串 s
//寻找一个特定的字符 x, 如果找到, 返回 x 在 s 的第一次出现的地址,
//在主函数中把该字符串输出,再把这个x字符之前的字符串逆序输出
//char* Find(char *a, char ch){
//	int i = 0;
//	for (i = 0; a[i] != '\0'; i++){
//		if (a[i] == ch){
//			return &a[i];
//			break;
//		}
//	}
//	if (a[i] == '\0')
//		return NULL;
//}
//int main(){
//	char a[30];
//	printf("请输入一个字符串:\n");
//	gets(a);
//	
//	printf("请输入一个字符:\n");
//	char ch = getchar();
//	char *pc = Find(a, ch);
//	if (pc == NULL)printf("没有找到输入的字符");
//	else{
//		printf("%s", pc);//打印x以及x之后的内容
//
//
//		//再把这个x字符之前的字符串逆序输出
//		int i = 0;
//		for (i = 0; a[i] != ch; i++){
//			;
//		}//循环完毕就找到了a[i]就指向了这个ch
//		for (int j = i-1; j >= 0; j--){
//			putchar(a[j]);
//		}
//		//逆序一个一个的打印
//	}
//	
//
//	return 0;
//}

26 13~19题

//2021_12_6   13
//求分段函数 f(x),1 / x,x != 0; 0, x = 0;
//f(100) = 1 / 100;f(7) = 1 / 7;f(0) = 0

//int main()
//{
//	float x = 0;
//	printf("请输入一个数:");
//	scanf("%f", &x);
//	if (x == 0)printf("%f", x);
//	else printf("%.2f", 1 / x);
//	return 0;
//}

//  水仙花数,153=1*1*1+5*5*5+3*3*3
//int main(){
//	int i = 0, total = 0,r=0;
//	for (i = 100; i <= 999; i++){
//		int sum = i;
//		total = 0;
//		for (int j = 0; j < 3; j++){
//			r = sum %10;
//			total += r*r*r;
//			sum /= 10;
//		}
//		if (total == i)printf("是水仙花数:%d\n", i);
//	}
//	return 0;
//}
//#include
//int main(){
//	int a=0, b=0, c=0,i;
//	for ( i = 153; i < 1000; i++){
//		int sum = i;
//		a = sum % 10;
//		b = (sum / 10) % 10;
//		c = sum /100;
//		int total = 0;
//			total= a*a*a+ b*b*b + c*c*c;
//		if (total == i)printf("水仙花数:%d\n", i);
//	}
//}

//15 给一个数,求它的素数因子。
//int Search(int n){
//	int i = 0;
//	for (i = 2; i < n; i++){
//		if (n % 2 == 0){
//			break;
//		}
//	}
//	if (i == n){
//		printf("是素数不用操作:\n");
//		return 0;
//	}
//	else {
//		printf("不是素数要操作:\n");
//		return 1;
//	}
//}
int main(){//2 5     12   2 2 3   15  3   5
	int n = 0;
	printf("请输入一个大于2的整数:");
	scanf("%d", &n);
	//判断是不是素数:
//	int ret = Search(n);
//	if (ret == 1){
//		//不是素数要操作
//		while (n){
//			//12%2=0  out 2   12/2=6   6%2=0  out 2    6/2=3 3%2!=0 j++  3%3==0  out 3  
//			//因为每次都是从2开始模 不会模到2 的倍数,3的倍数也一样
//			for (int j = 2; j <=n; j++){
//				if (n%j == 0){//==0每次输出除数
//					printf("因子有:%d\n", j);
//					n /= j;//在除j  跳出换下一次
//					break;
//				}
//			}
//		}
//	}
//	return 0;
//}
//
//

//十六、对两个数整数进行加减乘除取余, 且除取余分母不为 0;

//int main(){
//	int a, b;
//	char c;
//	printf("请输入数 例如 100+100\n");
//	scanf("%d%c%d", &a, &c, &b);
//	switch (c){
//	case '+':
//		printf("%d", a + b);
//		break;
//	case '-':
//		printf("%d", a - b);
//		break;
//	case '*':
//		printf("%d", a * b);
//		break;
//	case '/':
//		if (b != 0)
//		{
//			printf("%d", a / b);
//			break;
//		}
//	case '%':
//		if (b != 0){
//			printf("%d", a % b);
//			break;
//		}
//	default:printf("分母为0了");
//		break;
//	}
//	return 0;
//}

//16求 s = a + aa + aaa + aaaa 四个数相加, 其中 a 和几个数相加由用户决定
//int main(){
//	int a = 0;
//	int n = 0;
//	printf("请输入两个数:");
//	scanf("%d%d", &a,&n);
//	int tmp = a;//不改变的
//	int sum = 0, total = 0;
//	while (n){
//		sum = a;
//		total += sum;//累加每一项
//		a = a * 10 + tmp;
//		n--;
//	}
//	printf("%d", total);
//
//}

//18.已经定义 void swap(*int a, *int b)( 功能是交换) , 实现输入 n 个整数, 然后升序排列

//void Swap(int *a, int *b){
//	int tmp = *a;
//	*a = *b;
//	*b = tmp;
//}
//int main(){
//	int a[100];
//	int n = 0;
//	printf("请输入一个整数:");
//	scanf("%d", &n);
//	for (int i = 0; i < n; i++){
//		printf("请输入第%d的数  ",i+1);
//		scanf("%d", &a[i]);
//	}
//	for (int i = 0; i < n - 1; i++){
//		for (int j = 0; j < n - 1 - i; j++){
//			if (a[j]>a[j + 1]){
//				Swap(&a[j], &a[j + 1]);//交换这两个地址中的数,否则函数调用完毕栈帧释放,临时变量也销毁了,
//				//其次就是函数不能返回两个值
//			}
//		}
//	}
//	for (int i = 0; i < n; i++){
//		printf("%d ", a[i]);
//	}
//	return 0;
//}

//19.高速公路达到或超出限速的 10 % 处罚 200 元, 输出 Exceed x%.Ticket 200
//达到或超出限速的 50 % 则吊销驾驶证。 输出 Exceed x%.License Revoked
//其中 x 是超速的百分比, 精确到整数。
//正常行驶输出 OK, , , 分别输入车速和限速
//int main(){
//	int  x = 0.0, s = 0.0, ls = 0.0;
//	printf("请输入车速和限速:");
//	scanf("%d%d", &s, &ls);
//	int l_10 = ls*(1+0.1);
//	int l_50 = ls*(1+0.5);
//	if (s < ls){//无超速
//		printf("ok");
//	}
//	else{//超速了
//		
//		if (s
//			
//			printf("Exceed %.0f%%.Ticket 200", 1.0*(ls - s) / ls*100 );
//		}
//		else
//		{
//			printf("输出 Exceed %.0f%%.License Revoked", 1.0*(ls - s) / ls*100);
//		}
//	}
//	return 0;
//}

27 20~30题

//2021_12_7  20.输入全班 30 个学生的成绩, 成绩由高到低排序, 主函数要求输入和输出, 子函数排序

//void Getscore(int *a,int sz){
//	for (int i = 0; i < sz; i++){
//		scanf("%d", &a[i]);
//	}
//}
//void Sort(int *a, int sz){
//	int i, j, max;
//	for (int i = 0; i < sz-1; i++){
//		int max = 0;
//		for (int j = 1; j < sz - i; j++){
//			if (a[max] > a[j]){
//				max = j;
//			}
//		}
//		int tmp = a[max];
//		a[max] = a[sz - 1 - i];
//		a[sz - 1 - i] = tmp;
//	}
//}
//int main(){
//	int a[10] = { 1, 4, 7, 2, 5, 8, 3, 6, 9, 10 };
//	int sz = sizeof(a) / sizeof(a[0]);
//	//Getscore(a,sz);
//	Sort(a,sz);
//	for (int i = 0; i < sz; i++){
//		printf("%d ", a[i]);
//	}
//}

//
//21.编写函数, int IsQuare( long int n) 功能判定完全平方数, 若一个数能表示成某个数平方形
//式, 则为完全平方数  2*2=4就是完全平方数  8就不是
//#include
//int find(int n){
//	int m =(int)sqrt(n););//比如5 开根号 2.2...  强转变成了2 ret=2 不等于5 所以不满足
//	if (m*m != n){
//		return 0;
//	}
//	else {
//		return m;
//	}
//}
//int main(){
//	long int n = 0;
//	printf("请输入一个数:");
//	scanf("%d", &n);
//	int ret = find(n);
//	if (ret*ret == n){
//		printf("%d*%d=%d是完全平方数:", ret, ret, n);
//	}
//	else{
//		printf("不是完全平方数...");
//	}
//	return 0;
//}

//
//22.生活问题, 交水费 y 元, 可以用 x 吨水, x 不超过 15 吨时, y = 4x / 3, 超过后, y = 2.5x - 17.5。

//int main(){
//	float x, y;
//	printf("请输入你的吨数:");
//	scanf("%f", &x);
//	if (x > 0 && x < 15)
//	{
//		y = (4 * x) / 3;
//	}
//	else {
//		y = (2.5*x) - 17.5;
//	}
//	printf("%.2f", y);
//	return 0;
//}

//23.一条蠕虫长 1 寸, 其 1 分钟可以向上爬 U 寸, 但是他得休息, 休息的时候下滑 D 寸,
//*问什么时候爬出去? 不足 1 分钟按照 1 分钟计算, 蠕虫头部到达井的顶部,
//*则完成任务, 开始蠕虫趴在井底(高度为 0)

//int main(){
//	int u, d, time = 0, zlen;
//	printf("请输入井深,上爬,下滑 多少!");
//	scanf("%d%d%d", &zlen, &u, &d);
//	int total = 0;
//	while (total < zlen){
//		
//		total += u;
//		time++;
//		total -= d;
//		time++;
//	}//跳出条件是爬的总长度>=井深zlen跳出,也就是最后一次爬上去到了高度就不向下掉了,-1分钟  加上多减的下滑
//	time--;
//	total += d;
//	printf("花费了%d分钟,爬了%d厘米", time, total);
//	return 0;
//}
//24  编写函数 void sort(char *words[] , int n),
//对一组单词进行字典排序, 在主函数输出原序列和排序后的序列
//就是输入多个字符串按大小排序:
//#define N 4
//#define SIZE 10
//void Print(char **str){
//	for (int i = 0; i < N; i++){
//		printf("%s\n", *(str+i));
//	}
//	printf("\n");
//}
//void Sort(char** str, int n){
//	int pos;
//	for (int i = 0; i < n - 1; i++){ 
//		pos = 0;
//		for (int j = 1; j < n-i; j++){
//			if (strcmp(*(str + pos), *(str + j)) > 0){
//				pos = j;//若pos指向的大于j指向的就把 j给pos
//			}
//		}
//		char tmp[SIZE];
//		strcpy(tmp, *(str + pos));
//		strcpy(*(str + pos), *(str + n - 1-i));
//		strcpy(*(str + n-1-i), tmp);
//	}
//}
//int main(){
//	char a[N][SIZE];
//	char* str[N];
//	int i;
//	printf("请输入%d个字符串:\n", N);
//	for (i = 0; i < N; i++){
//		printf("请输入第%d个字符串:", i + 1);
//		scanf("%s", a[i]);
//		str[i] = &a[i];
//	}
//	Print(str);
//	Sort(str, N);
//	Print(str);
//
//	return 0;
//}
//

//25.生活问题, 50 度(含) 电以内, 0.53 元 / 度, 超过 50 度, 电价上调 0.05 元 / 度
//int main(){
//	float i = 0;
//	printf("请输入用了多少度电!!");
//	scanf("%f", &i);
//	if (i <= 50){
//		printf("花费:%.2f元\n", i*0.53);
//	}
//	else{
//		printf("花费:%.2f元\n", (i*0.58));
//	}
//	return 0;
//}


//26.任何比 2 大的偶数, 总能表示两个素数, 比如 24 = 5 + 19; 5 和 19 都是素数
//法一  自己做的
//void Find(int n){
//	int i = 0;
//	int a[10000] = { 0 }, k = 0;//存放素数的
//	for (i = 2; i < n; i++){
//		int j = 0;
//		for ( j = 2; j < i; j++){
//			if (i%j == 0){
//				break;
//			}
//		}
//		if (j == i){
//			a[k] = i;
//			k++;
//		}
//	}//素数存到了一个数组中
//	for (i = 0; i < k; i++){
//		for (int j = i; j < k; j++){
//			if (a[i] + a[j] == n){
//				printf("%d %d\n", a[i], a[j]);
//				break;
//			}
//		}
//	}
//
//
//
//}
int main(){
	int n = 0;
	do{
		printf("请输入一个大于2的偶数:");
		scanf("%d", &n);
	} while (n % 2 != 0 || n <= 2);
	Find(n);
	return 0;
}

//int Find(int n){
//	int j = 0;
//	for (j = 2; j < n; j++){
//		if (n%j == 0)break;
//	}
//	if (n == j)
//		return 1;
//	else
//		return 0;
//}
//int main(){
//	int n = 0;
//	do{
//		printf("请输入一个大于2的偶数:");
//				scanf("%d", &n);
//	} while (n % 2 != 0 || n <= 2);
//	int i = 0;
//	//寻找2~n之间的素数
//	for (i = 2; i < n; i++){
//		//从前面趋向 盼是不是素数 再从后面趋向 两者同时位素数,两者相加就等于这个n
//		if (Find(i) == 1 && Find(n - i) == 1){
//			printf("%d  %d\n", i, n - i);
//			break;
//		}
//	}
//	return 0;
//}



// 27  6个人给三个人投票
//#define P_NUM 4
//#define H_SUM 3
//#define PW  3
//void vote(int n, int at[]){
//	int i = 1;
//	int k = 0;//共6个评委循环六次
//	for (i = 0; i 
//		printf("请第%d个评委输入为那个人投票,1号就输入:1 \n", i+1);
//		for (int j = 0; j < 3; j++){
//			scanf("%d", &k);
//			if (k < 1 || k >= P_NUM){//表示弃票
//				at[P_NUM-1]++;//若输入的是1~3之外的数第4个元素中数+1;
//			}//否则对应的人+1
//			else at[k-1]++;
//		}
//	}
//	printf("-----------------------------------------\n");
//	for (i = 0; i < P_NUM; i++){
//		if (i == P_NUM-1){
//			printf("弃票数是:                      %d票\n", at[i]);
//			break;
//		}
//		printf("第%d个人的票数是:               %d票\n", i + 1, at[i]);
//	}
//}
//int main(){
//	int at[P_NUM] = { 0 };//存放每个人的票数
//
//	//int peo[H_SUM] = { 0 };
//	vote(H_SUM, at);
//	return 0;
//}


//28. 现在 90#汽油 6.95 元/升,93#汽油 7.44 元/升, 97#汽油 7.93 元/升, 加油站推出了“自助服务”
//和“协助服务” 两个服务等级, 分别可得到 5 % 和 3 % 的折扣, 根据输入顾客的加油量 a, 汽
//油品种 b(90、 93、 97) 和服务类型 c(m - 自助, e - 协助) , 计算应付金额。

//int main(){
//	float total = 0.0, sum = 0.0;
//	int a=0, b=0;
//	char c='0';
//	printf("请输入加油多少升:   \n");
//	scanf("%d", &a);
//	printf("请输入加的几号的汽油:\n");
//	scanf("%d", &b);
//
//	switch (b){
//	case 90:
//		sum = 6.95; break;
//	case 93:
//		sum = 7.44; break;
//	case 97:
//		sum = 7.93; break;
//	}
//	getchar();
//	printf("请输入是协助服务-e 还是资助服务-m:");
//	scanf("%c", &c);
//	if (c == 'e'){
//		//      总价-折扣
//		total = a*sum - a*sum*0.05;
//		printf("%.2f\n", total);
//	}
//	else if (c == 'm'){
//
//		total = a*sum - a*sum*0.03;
//		printf("%.2f\n", total);
//
//	}
//	return 0;
//}


//29.编写程序, 求两个给定正整数的最大公约数和最小公倍数
//int main(){
//	int n = 0;
//	int m = 0;
//	printf("请输入两个数:");
//	scanf("%d%d", &n, &m);
//	if (n > m){
//		int tmp = n;
//		n = m;
//		m = tmp;
//	}//n中存小数:
//	int total = n*m;
//	int r = 0;
//	while (n != 0){
//		r = m % n;
//		m = n;
//		n = r;
//	}
//	printf("最大公约数是:%d  最小公倍数是:%d\n", m, total / m);
//	return 0;
//}

//法2
//int main(){
//	int n, m;
//	printf("请输入两数:");
//	scanf("%d%d", &n, &m);
//	int i = 0;
//	if (n > m){
//		int tmp = n;
//		n = m;
//		m = tmp;
//	}//最大公约数肯定不会大于二者中小的那个
//	int max = 0;
//	for (i = 1; i <= n; i++){
//		if (m%i == 0 && n%i == 0){
//			max = i;
//		}
//	}
//	int total = n*m;
//	printf("最大公约数是:%d  最小公倍数是:%d\n", max, total / max);
//	return 0;
//}


30,用结构体来描述一个学生的成绩情况, 内容包括: 姓名、 学号、 C 成绩、 微机原理成绩、 对
一个班 30 同学统计。
求同学平均分、 分数从高到低排名, 打印出名字, 打印出 90 以上和不及格的同学名字
//typedef struct student{
//	char name[32];
//	int num;
//	int c_w_score[2];
//	float ave;
//}student;
//#define M 3
//void Sort(student *stu){
//	int i = 0,j=0;
//	int min = 0;
//	for (i = 0; i < M - 1; i++){
//		min = 0;
//		for (j = 1; j < M - i; j++){
//			if (stu[min].ave>stu[j].ave)
//				min = j;
//		}
//		student tmp;
//		tmp = stu[min];
//		stu[min] = stu[M - 1 - i];
//		stu[M - 1 - i] = tmp;
//	}
//	
//}
//void Print(student* stu){
//	for (int i = 0; i < M; i++){
//		printf("%s  %d c成绩:%d 微机:%d ave: %f\n", stu[i].name, stu[i].num, stu[i].c_w_score[0],
//			stu[i].c_w_score[1], stu[i].ave);
//	}
//	for (int i = 0; i < M; i++){
//		if (stu[i].ave>90)printf("优秀的是:%s  %d c成绩:%d 微机:%d ave: %f\n", stu[i].name, stu[i].num, stu[i].c_w_score[0],
//			stu[i].c_w_score[1], stu[i].ave);
//		else if (stu[i].ave<60)printf("不及格的是:%s  %d c成绩:%d 微机:%d ave: %f\n", stu[i].name, stu[i].num, stu[i].c_w_score[0],
//			stu[i].c_w_score[1], stu[i].ave);
//	}
//}
//int main(){
//	student stu[M];
//	printf("请输入:姓名  学号  c成绩 微机原理成绩:\n");
//	for (int i = 0; i < M; i++){
//		printf("请输入第%d个学生的信息:\n", i + 1);
//		scanf("%s%d%d%d", stu[i].name, &stu[i].num, &stu[i].c_w_score[0],& stu[i].c_w_score[1]);
//		stu[i].ave = (stu[i].c_w_score[0] + stu[i].c_w_score[1]) / 2.0;
//	}
//	Sort(stu);
//	Print(stu);
//	return 0;
//}

//gets输入完毕不会有别的字符在缓冲区,在使用getchar直接来,而是scanf会有 要用getchar吃掉回车

28 31题

//31.给定平面上任意三个点的坐标(x1, y1) 、 (x2, y2) 、 (x3, y3) 编写程序, 是否能构成三角
//形, 不能构成输出 No, 如果可以, 输出三角形周长和面积
/*
//*了解两点之间的距离公式 
//*了解求三角形的公式
//*/

//两点之间的距离公式  根号下(x1-x2)^2+(y1-y2)^2=a边
int main(){
	float x1, x2, x3, y1, y2, y3, s,area;
	printf("请输入三个坐标:\n");
	scanf("%f%f%f%f%f%f", &x1, &x2, &x3, &y1, &y2, &y3);
	float a = sqrt((x1 - x2)*(x1 - x2) + (y1 - y2)*(y1 - y2));
	float b = sqrt((x1 - x3)*(x1 - x3) + (y1 - y3)*(y1 - y3));
	float c = sqrt((x3 - x2)*(x3 - x2) + (y3 - y2)*(y3 - y2));
	if (a + b > c&&a + c > b&&c + b > a){
		s = (a + b + c) / 2;
		area = sqrt(s*(s - a)*(s - b)*(s - c));
		float len = a + b + c;
		printf("面积是:%.3f,周长是:%.2f", area, len);
	}
	else printf("NO...");
	return 0;
}

29 30~44题

//2021-12-9  
//三十三、
//10 个评委打分, 采用百分制, 先计算评委的分数之和, 减去最高分和最低分, 再除以 8 得
//到成绩, 输入 1 - 10 个评委的分数, 计算学生的最终得分。 请写出 input() 、 ssum() 、 smax
//() 、 smin() 函数的定义

//#define M 5
//void input(float a[]){
//	int i = 0;
//	for (i = 0; i < M; i++){
//		printf("请%d个人输入分数:\n", i + 1);
//		scanf("%f", &a[i]);
//	}
//}
//int ssum(float a[]){
//	float total = 0;
//	for (int i = 0; i < M; i++)
//		total += a[i];
//	return total;
//}
//int smax(float a[]){
//	float  max;
//	max = a[0];
//	for (int i = 1; i < M; i++){
//		if (max
//			max = a[i];
//		}
//	}
//	return max;
//}
//int smin(float a[]){
//	float  min;
//	min = a[0];
//	for (int i = 1; i < M; i++){
//		if (min>a[i]){
//			min = a[i];
//		}
//	}
//	return min;
//}
//int main(){
//	float a[M];
//	input(a);//输入分数函数
//	float max, min,total;
//	total = ssum(a);//获取总和
//	max = smax(a);//获取最大值
//	min = smin(a);//获取最小值
//	total -= (max + min);
//	printf("最终得分是:%.2f\n", total / (M-2));
//	return 0;
//}

34.求一元二次方程的根, ax 方+bx + c = 0, a, b, c 自己输入
//int main(){
//	float a, b, c;
//	printf("请输入三个数:");
//	scanf("%f%f%f", &a, &b, &c);
//	float s = b*b - 4 * a*c;
//	if (s < 0)
//		printf("没有根....\n");
//	else if (s == 0)
//		printf("单根:%f",-b / (2 * a));
//	else {
//		float x1 = (-b + sqrt(b*b - 4 * a*c)) / (2 * a);
//		float x2 = (-b - sqrt(b*b - 4 * a*c)) / (2 * a);
//		printf("x1=%.2f,x2=%.2f\n", x1, x2);
//	}
//	return 0;
//}

//35 pi的近似值
//int main(){
//	float a = 3, b = 1, sum = 1, total = 0;
//	while (sum > 1e-6){
//		total = total + sum;//sum 就是累加的每1项
//		sum = sum*(b / a);//前一项乘后面一项等于累加的哪一项
//		b++;//分子每次加1
//		a = a + 2;//a每次加2
//	}
//	printf("%f", total * 2);
//}


//37,编写程序, 要求输出的百分制分数段, A 为 85 分以上, B 为 70~84 分, C 为 60~69 分, D 为
//60 以下, 成绩由键盘输
//
//int main(){
//	int n = 0;
//	printf("请输入分数:\n");
//	scanf("%d", &n);
//	if (n >= 85){
//		printf("A");
//	}
//	else if (n >= 70 && n <= 84)
//		printf("B");
//	else if (n >= 60 && n <= 69)
//		printf("C");
//	else printf("D");
//	return 0;
//}


//38.先在有 10 个城市名 以及春夏秋冬的平均温差, 编写程序, 定义结构体, 输入城市名称、 四
//季温度以及全年平均温度。
//typedef struct tmp{
//	char city[32];
//	struct season{
//		float chun;
//		float xia;
//		float qiu;
//		float dong;
//	}ses;
//	float ave;
//}tmp;
//#define M 3
//int main(){
//	int i = 0;
//	tmp arr[M];
//	for (i = 0; i < M; i++){
//		printf("请输入第%d个城市的相关温度信息:\n", i + 1);
//		printf("城市      春      夏      秋      冬     平均温度 \n");
//
//		scanf("%s%f%f%f%f", arr[i].city, &arr[i].ses.chun, &arr[i].ses.xia, &arr[i].ses.qiu,
//			&arr[i].ses.dong);
//		arr[i].ave = (arr[i].ses.chun+arr[i].ses.xia+arr[i].ses.qiu+arr[i].ses.dong)/ 4.0;
//	}
//	printf("城市  春   夏   秋   冬  平均温度 \n");
//
//	for (i = 0; i < M; i++){
//		printf("%s |  %.2f  | %.2f  |  %.2f  |  %.2f  |  %.2f\n", arr[i].city, arr[i].ses.chun,
//			arr[i].ses.xia, arr[i].ses.qiu, arr[i].ses.dong, arr[i].ave);
//	}
//	return 0;
//}


//三十九、
//设计一个函数 int isprime(int x) , 判断是否为素数, 是返回 1, 否返回 0, 在主函数中调用
//isprime(int x) 函数, 输出 100 - 999 之间的各位数为 7 的所有素数之和。

//int Find(int n){
//	int i = 0;
//	for (i = 2; i < n; i++){
//		if (n%i == 0){
//			//printf("不是素数:....\n");
//			return 0;
//		}
//	}
//	if (i == n){
//		//printf("是素数:%d...\n",n);
//		return 1;
//	}
//}
//int main(){
//	int total=0,i = 0;
//
//	for (i = 100; i < 1000; i++){
//		if (Find(i)){
//			if (i % 10 == 7){
//				total += i;
//				printf("      %d\n", i);
//			}
//		}
//	}
//	printf("个位数是7的素数的和是:[ %d ] \n", total);
//	return 0;
//}

//44.编写 N 个学生的成绩(百分制) , 统计 N 个学生的等级分布。
//大于等于 90 的是 A, 小于 90 大于等于 80 的是 B, 小于 80 大于等于 70 的是 C, 小于 70 大
//于等于 60 的是 D, 小于 60 的是 E。

//int main(){
//	float score = 0.0;
//	int A=0, B=0, C=0, D=0, E=0;
//	
//	printf("请输入有几位学生:");
//	int n = 0;
//	scanf("%d", &n);
//	for (int i = 0; i < n; i++){
//		printf("请输入%d个学生的成绩:\n", i + 1);
//		scanf("%f", &score);
//		switch ((int)score / 10){
//		case 10:
//		case 9:
//			printf("等级A\n");
//			A++;
//			break;
//		case 8:
//			printf("等级B\n"); 
//			A++;
//			break; 
//		case 7:
//			C++;
//				printf("等级c\n"); break;
//		case 6:
//			D++;
//			printf("等级D\n"); break;
//		default:printf("等级E\n");
//			E++;
//			break;
//		}
//		
//	}
//	printf("A级:%d  B级:%d  C级:%d  D级: %d E级: %d\n", A, B, C, D,E);
//	return 0;
//}


 
//41.输出空心菱形
//int main(){
//	char a[5][15] = { "     * *     ", "   *    * ", "  *      *  ", "   *    *  ", "    * *  " };
//	for (int i = 0; i < 5; i++){
//		printf("%s\n\n", a[i]);
//	}
//	return 0;
//}

//42 题
//#define N 6
//void Input(float price[]){
//	int i = 0;
//	for (i = 0; i < N; i++){
//		printf("请输入第%d件商品的价格:\n", i + 1);
//		scanf("%f", &price[i]);
//	}
//}
//float GetAve(float price[]){
//	int i = 0, total = 0;;
//	for (i = 0; i < N; i++){
//		total += price[i];
//	}
//	total /= N;
//	return total;
//}
//float GetMax(float price[]){
//	int i = 0;
//	int max = price[0];
//	for (i = 1; i < N; i++){
//		if (max < price[i]){
//			max = price[i];
//		}
//	}
//	return max;
//}
//float GetMin(float price[]){
//	int i = 0;
//	int min = price[0];
//	for (i = 1; i < N; i++){
//		if (min > price[i]){
//			min= price[i];
//		}
//	}
//	return min;
//}
//void Print_AVE(float price[], float ave){
//	int i = 0;
//	for (i = 0; i < N; i++){
//		if (price[i]>ave)
//			printf("高于平均价格的产品价格是:%.2f\n", price[i]);
//	}
//}
//int main(){
//	float price[N];
//	Input(price);//输入函数
//	float max, min, ave;
//	ave = GetAve(price);//获取平均分函数
//	max = GetMax(price);//获取最大值
//	min = GetMin(price);//获取最小值
//	Print_AVE(price, ave);//输出高于平均价格的产品价格
//	printf("最贵的:%.2f    最便宜的:%.2f 平均价格是:%.2f\n", max, min,ave);
//
//	return 0;
//}

int main(){
	printf("请输入一个数不大于200000\n");
	int n = 0;
	scanf("%d", &n);
	int total = 0, k = 0, l = 1;
	int month = 1;
	while (total < n){

		month++;
		total =l+k;//菲薄纳妾数列不是累计的
		k = l;
		l = total;
		printf("%d\n", total);
	}
	printf("%d,total=%d", month, total);
	return 0;
}
//45,迭代求平方根
//int main(){
//	double a = 0.0,x1,x2;
//	
//	printf("请输入一个数:");
//	scanf("%lf", &a);
//	x2 = a / 2;
//	do{
//		x1 = x2;
//		x2 = (x1 + a / x1) / 2;
//	} while (fabs(x2 - x1) > 1e-6);
//	printf("%lf", x2);
//	return 0;
//}

30 加薪诺卷1

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第13张图片C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第14张图片

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第15张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第16张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第17张图片
累加二维数组边缘元素的和

//2021_12_10  累加二维数组边缘元素的和
#include 
add(int m, int n, int arr[])
{
	int i, j, sum = 0;
	for (i = 0; i<m; i = i + m - 1)//i+m-1=0+3-1=2  故是累加第2行各个元素
	for (j = 0; j<n; j++)//第一次 累加0行的元素
		sum = sum+*(arr+i*4+j);//i是行  i=0 累加0行的,  i=1 j变化累加1行的

for (j = 0; j<n; j = j + n - 1)
	
for (i = 1; i<m-1; i++)//第一次累加对左侧元素的第一行的元素  完事退出循环  i
	//第二次  j=j+n-1  过j=0+4-1=3  第三列  i=2   i*n+j =1*4+3=11  
sum = sum + arr[i*n + j];
return(sum);
} 
int main()
{
	int a[3][4] = { 3, 0, 0, 3, 2, 5, 7, 3, 1, 0, 4, 2 }, s=0;
	s = add(3,4,a[0]);
	//a[0]是一位数组的数组名,没有单独放在sizeof中也没取地址,代表一位数组首元素的地址
	//一位数组的首元素就是一个整型int *指针变量来接收没问题
//*a  a是二维数组的名字,数组名是首元素地址,故一维数组的地址,解引用a找到的是一位数组第一个元素的地址*a~a[0]
	//printf("%d", **a);//测试结果为3
	
	
	printf("s=%d\n", s);
	return 0;
}

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第18张图片

/3. 本程序的功能是将字符串 a 的所有字符传送到字符串 b 中, 要求每传送三个字符后再存放一
//个’#’。
//int main()
//{
//	int i, k = 0;
//	char a[80], b[80], *p;
//	p = a;
//	gets(p);
//	while (*p)
//	{
//		for (i = 1; i<4&&*p!='\0'; p++, k++, i++) b[k] = *p;
//		if (*p) { b[k] = '#'; k++; }
//	} 
//		b[k] = '\0';
//	puts(b);
//	return 0;
//}
//1.程序功能: 找出一个大于给定整数且紧随这个整数的素数, 并作为函数值返回。

//int Find(int n){
//	int sum = n+1,i;
//	while (1){
//		for ( i = 2; i < sum; i++){
//			if (sum%i == 0){
//				break;
//			}
//		}
//		if (sum == i&&sum>n)
//		{
//			printf("找到了:\n");
//			return sum;
//		}
//		sum++;
//	}
//}
//int main(){
//	int n = 0;
//	printf("请输入一个数:\n");
//	scanf("%d", &n);
//	int ret = Find(n);
//	printf("%d", ret);
//	return 0;
//}

2. 编写程序: 输入多个字符串, 输出其中最短的字符串。
//#include
//int main(){
//	char tmp[90];
//	char arr[90];
//	int k = 0;
//	printf("请输入一个字符串:");
//	gets(arr);
//	strcpy(tmp, arr);//先把输入的第一个拷贝到另一个数组  
//	int len = strlen(tmp);
//	do{
//		k = strlen(arr);//先求长度,在比较k小于tmp就把小串给tmp
//		if (k < len){
//			len = k;
//			strcpy(tmp, arr);
//		}
//		printf("请输入一个字符串停止请输入回车:");//循环输入
//		getchar();
//		gets(arr);//gets会把回车转换为'\0'
//	} while (arr[0] != '\0');
//	printf("长度是:%d   %s\n", len,tmp);
//	return 0;
//}

//int main(){
//	char tmp[90];
//	gets(tmp);
//	printf("%s", tmp);
//	return 0;
//}


31卷2

在这里插入图片描述C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第19张图片

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第20张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第21张图片

转义字符

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第22张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第23张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第24张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第25张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第26张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第27张图片

//1. 百马百担问题: 有 100 匹马, 驮 100 担货, 大马驮 3 担, 中马驮 2 担, 两匹小马驮 1 担, 问
//大、 中、 小马各多少匹 ?

//int main()
//{
//	int hb, hm, hl, n = 0;
//	for (hb = 0; hb <= 100; hb += 1)//穷举每次大马加一
//	for (hm = 0; hm <= 100 - hb; hm += 1)//中马=100-大马数  
//	{
//		hl=100-hb-hm;
//		if (hb * 6 + hm * 4 + hl == 200)
//		{//为啥==200因为小马是2匹驼1担,等式两边都乘以2  避免出现小数了
//			n++;
//			printf("hb=%d,hm=%d,hl=%d\n", hb, hm, hl);
//		}
//	}
//	printf("n=%d\n", n);
//	return 0;
//}
//3. 以下程序的功能是将无符号八进制数字构成的字符串转换为十进制整数。 例如输入的字符串
//为“556”, 则输出十进制整数 366。
//void main()
//{
//	char *p, s[6];
//	int n;
//	p = s;//556   n=5     5*8+5=45   45*8+6 
//	//   5*8^2+5*8+6    (5*8+5)*8+6  5556
//	// 5*8^3+5*8^2+5*8+6     (5*8+5)*8+5)*8+6
//	gets(p);
//	n = *p - '0';//先把最高位转换为数字  在令p指向下一个数,
//	while (*(++p)!= '\0')
//		n = n*8+*p-'0';//
//
//	printf("%d\n", n);
//	return 0;
//}

32卷3

在这里插入图片描述C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第28张图片

#define MAX(x,y) x<y?x:y
int main()
{
	int a = 5, b = 2, c = 3, d = 3, t;
	t = MAX(a + b, c + d) * 10;

	//原样替换
	//t=a+b
	 //  7   6   7   3+30  算术运算符>逻辑运算符>三目
	printf("%d\n", t);
}

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第29张图片

33卷4

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第30张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第31张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第32张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第33张图片

//1. 按照规定, 在高速公路上行使的机动车, 达到或超出本车道限速的 10 % 则处 200 元罚款; 若
//达到或超出 50 % , 就要吊销驾驶证。 编写程序根据车速和限速自动判别对该机动车的处理。
//输入 2 个正整数, 分别对应车速和限速。
//输出处理意见: 若属于正常行驶, 则输出“OK”; 若应处罚款, 则输出“Exceed x%.Ticket 200”;
//若应吊销驾驶证, 则输出“Exceed x%.License Revoked”。 其中 x 是超速的百分比, 精确到整数。
int main(){
	int cs = 0, xs = 0;
	printf("请输入车速和限速:\n");
	scanf("%d%d", &cs, &xs);
	int x_10 = xs*(1 + 0.1);//xs*1.1=再用车速和他比较
	int x_50 = xs*(1 + 0.5);
	if (cs < x_10)printf("ok\n");
	else if (cs >= x_10&&cs < x_50){
		printf("Exceed%.0f%%.ticket200\n", 1.0*(cs - xs) / xs * 100);
	}                                      //1.0*(车速-限速)/限速*100才能百分之几表示
	else{
		printf("Exceed%.0f%%.吊销驾驶证\n", 1.0*(cs - xs) / xs * 100);

	}
	return 0;
}

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第34张图片

//法2
int main(){
	int num = 0;
	int i = 0;
	int a[6] = { 0 };//存放每个人的
	int j = 0;
	for (j = 1;; j++){//每次哪数试
		num = j;
		while (num % 5 == 1){//循环6次每次要满足这个条件
			num = (num - 1) / 5;//分为5分
			a[i] = num;
			num = num * 4;//合成一份
			i++;
			if (i == 6)break;//完成分6次
		}
		if (i == 6)break;//正常退出
		else if (i != 6)i = 0;
	}
	for (i = 0; i < 5; i++){
		printf("第%d个人分了%d个\n", i + 1, a[i]+a[5]);
	}
	printf("j=%d\n", j);
	return 0;
}
int main(){
	int i = 0;//控制循环次数
	int total = 1, x = 1;
	int sum[6] = { 0 };
	while (i <6){//5个人 每人睡醒一次,偷摸自己放了一份,给了猴子一份,最后分成5分又给猴子一个,一共分了6次
	
		if (x % 5 == 1){//6次都满足分完5份还多一个
			sum[i] = (x - 1) / 5;//累计每个人的
			x = (x - 1) / 5 * 4;//x是       当前的总数=(上一次-1)*4  
			i++;
		}
		else {
			total++;//有一次不一样了就换下一个总数试
			i = 0;//循环数归零
			x = total;//x暂存,处理避免总数变化
		}
	}
	for (i = 0; i < 5; i++){
		printf("第%d个人分了 %d个椰子。。。\n", i + 1, sum[i]+sum[5]);
	}
	printf("总数=%d\n", total);
	return 0;
}

阶乘递归 还不会吗

double deal(int n){
	double total;
	if (n < 1)
		total = 1;
	else
		total = n*deal(n - 1);
	return total;
}
int main(){
	int n = 0;
	scanf("%d", &n);
	double ret = deal(n);
	printf("%lf", ret);
	return 0;
}

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第35张图片
菲薄纳妾数列
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第36张图片

//用数组方式完成斐波那契数列
int main(){
	int f[40] = { 1, 1 };
	int i = 2;
	for (i = 2; i < 40; i++){
		f[i] = f[i - 2] + f[i - 1];
	}
	for (i = 0; i < 40; i++){
		if (i % 4 == 0)printf("\n");
		printf("%10d", f[i]);
		
	}
	return 0;
}
//递归完成菲薄纳妾数列
//int fib(int n){
//	if (n <= 2)
//		return 1;
//	else return fib(n - 1) + fib(n - 2);
//}
//int main(){
//	int i = 0, a = 1, b = 1;
//	printf("%10d%10d", a, b);
//	int m = 2;
//	for (i = 3; i < 20; i++){
//		if (m % 5 == 0)printf("\n");
//		m++;
//		printf("%10d", fib(i));
//	}
//	return 0;
//}

34卷5

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第37张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第38张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第39张图片

//1.要求采用选择法排序, 将给定的 n 个整数从大到小排序后输出。
#include 
# define MAXN 10
void main()
{
	int i, index, k, n, temp;
	int a[MAXN];
	scanf("%d", &n);
	for (i = 0; i<n; i++){
		scanf("%d", &a[i]);
	} 
	for(k = 0; k<n - 1; k++){
			index=k;//每次idex先指向最前面的要比较的元素
			for (i = k+1; i<n; i++)
			{
				if (a[i] > a[index])//前一个大于index指向的,把i给index  ,index始终指向最大数
				{
					index = i;
				}
			} 
			temp = a[index];//把最大数放到k的位置上,意思是,把大数一次从数组的首个元素可是存放,大——》小
			a[index] = a[k];
			a[k] = temp;
		}
	for (i = 0; i<n; i++) {
		printf("%d ", a[i]);
	}
}

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第40张图片

35卷6

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第41张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第42张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第43张图片

//2. 函数 reverse(long number)的功能是返回 number 的逆序数。 例如 reverse(12345)的返回值是
//54321。 请将函数补充完整。

int Reverse(int n){
	int flag;
	flag = n < 0 ? -1 : 1;
	if (flag == -1)n = -n;
	int k = 0;
	while (n){
		k = k * 10 + n % 10;
		n = n / 10;
	}
	return flag*k;
}
int main(){
	int n = 0;
	printf("请输入一个数字:\n");
	scanf("%d", &n);
	int ret = Reverse(n);
	printf("%d", ret);
	return 0;
}

36 卷7

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第44张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第45张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第46张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第47张图片
在这里插入图片描述
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第48张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第49张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第50张图片

//1.一个整数称为完全平方数, 是指它的值是另一个数的平方。 如 81 是个完全平方数, 因为它是 9
//的平方。 下列程序是在三位的正整数中寻找复合下列条件的整数: 它既是完全平方数, 且三位数
//字中又有两位数字相同: 例如 144(12 * 12) 、 676(26 * 26) 等。
int fun(int a, int b, int c){
	return !((a - b)*(a - c)*(b - c));//右一个等于零就说明有两个数是相等的  非一下变为真
}
int main(){
	int k = 0;
	int n = 0;
	for (k = 1;; k++){
		n = k*k;//找每个数得平方
		if (n < 100)continue;//要满足三位正整数
		if (n > 1000)break;//两个数得平方大于1000就退出
		int a = n / 100;
		int b = (n % 100) / 10;
		int c = n % 10;
		if (fun(a, b, c)){
			printf("完全平方数是:%d*%d=%d\n",k,k ,n);
		}
	}
	return 0;
}

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第51张图片

37考研卷

int main(){
	int a[3][4] = {1,2,3,4,5,6,7,8,9};
	int i = 0, j = 0;
	int *p = (int*)a;//a的类型是int (*)[3]  强转为int*
	for (i = 0; i < 3; i++){
		for (j = 0; j < 4; j++){
			printf("%d ", p[i * 4 + j]);
			//             i*m(列)+j
		}
	}
	return 0;
}

在这里插入图片描述
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第52张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第53张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第54张图片

//猴子吃桃
//int main(){
//	int prv = 0, cur = 1;
//	int day = 9;
//	while (day--){
//		//当前=前一天/2-1   当前吃了前一天的一半零一个
//		prv=(cur + 1) * 2;//
//		cur = prv;
//	}
//	printf("%d", cur);
//	return 0;
//}
//

38 卷1

在这里插入图片描述
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第55张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第56张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第57张图片C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第58张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第59张图片

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第60张图片


//1-3+5-7+9.....101
int main(){
	int i = 0, s = 0, t=1;
	for (i = 1; i <= 101; i += 2){
		t = t*i;
		s = s + t;
		t = t > 0 ? -1 : 1;
	}
	printf("总和=%d\n", s);
	return 0;
}
//有学号和成绩的结构体找最低分最低分不止一个
typedef struct stu{
	int num;
	int score;
}T;
void Find(T *stu, int n, T* stu_k){
	int tmp = stu[0].score;//把第一个当作最低分
	int count = 0;//记录最低分的个数

	for (int i = 1; i < n; i++){
		if (tmp>stu[i].score){
			tmp = stu[i].score;//寻找最小值
		}
	}
	int j = 0;//当暂存数组的下标
	for (int i = 0; i < n; i++){
		if (stu[i].score ==tmp){
			stu_k[j] = stu[i];//如果等于最低分把他放到空数组
			j++;
			count++;
		}
	}
	for (int i = 0; i < count; i++){
		printf("学号是:%d  成绩是:%d\n", stu_k[i].num, stu_k[i].score);
	}
}
int main(){
	T stu[5];
	int i = 0;
	for (i = 0; i < 5; i++){
		printf("请输入第%d个学生的学号  成绩:\n", i + 1);
		scanf("%d%d", &stu[i].num, &stu[i].score);
	}
	T stu_k[5] = { 0 };

	T *sp = stu, *st = stu_k;
	Find(sp, 5, st);
	return 0;
}

register 相关

register变量不一定是在寄存器里,它只是建议性质的。编译器最终决定把它到底放在内存中还是放在寄存器中。现在register几乎没用了,现在的编译器都很强大,即使你不用register定义,编译器也会在一些情况下将其放在寄存器中用来加快速度。相反即使你用了register定义最终也不见得会放在寄存器中,反倒会扰乱编译器的优化逻辑。
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第61张图片挖素数
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第62张图片

39卷2


C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第63张图片

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第64张图片
在这里插入图片描述
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第65张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第66张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第67张图片

//两个有序递增 的数组存到另一个数组还是有序的
#define N 6
#define M 5

int main(){
	int a[N] = { 2, 4, 6, 8, 10, 12 };
	int b[M] = { 1, 3, 5, 7, 9 };
	int c[N*M];
	int i = 0;//控制a数组的下标
	int j = 0;//控制b数组的下标
	int k = 0;//控制c数组的下标
	while (i < N&&j < M){//两方有一个不满足条件就退出,i==N-1,是最后一个元素
		if (a[i] <= b[j])
			c[k++] = a[i++];//=是判断相等的情况
		else if (a[i] > b[j])
			c[k++] = b[j++];
				}
	while (i < N){//若i
		c[k++] = a[i++];
	}
	while (j < M){//若j
		c[k++] = b[j++];
	}
	for (k = 0; k < M + N; k++){
		printf("%d ", c[k]);
	}
	return 0;
}

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第68张图片

void Swit(int n){
	int a[90];
	int k = 0;
	do{
		int r = n % 2;

		a[k] = r;
		k++;
		n /= 2;
	} while (n);
	for (int i = k-1; i>=0; i--){
		printf("%d ", a[i]);
	}

}
//把8进制转换为2进制算法,
int main(){
	int n = 0;
	printf("请输入一个数字转换为2进制:");
	scanf("%d", &n);
	Swit(n);
	return 0;
}

40 卷3

在这里插入图片描述
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第69张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第70张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第71张图片数组地址相关

#define M 3
#define N 4
int main(){
	int a[M][N] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
	int i = 0, j = 0;
	int (*p)[4] = &a[0];
	printf("%d\n", *(*(p + 1) + 1));
	printf("%d\n", *(p+1)[0]);//先执行小括号的p存放的一维数组的地址,+1跳过一个一维数组,现在是一个地址~地址[0]
	//算是(p+1)[0],也就是第二个一维数组的地址,再对这个地址进行解引用的到5
	printf("%p\n", (p+1)[0]);//就是一个地址呀
	
	printf("%p\n", &a[1]);
	printf("%p\n", a[0]);
	printf("%p\n", a);


}

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第72张图片

**++p p++相关
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第73张图片数组引用从优先级来入手
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第74张图片

41卷4

在这里插入图片描述C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第75张图片

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第76张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第77张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第78张图片

#include
//把字符串中的空格去掉
int main(){
	char s[] = "beijing ligong daxue";//*s 不行字符串常量不能改变,放到数组可以改变
	
	int i = 0,j=0;
	for (i = 0; s[i] != '\0'; i++){
		if (s[i] != ' ')s[j++]=s[i];
		else s[j]=s[i];
	}
	s[j] = '\0';
	printf("%s", s);
	return 0;
}


42 卷5

#include
int main(){
	int a[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
	//sizeof() 括号里面的表达式不计算
	printf("%d\n", sizeof(a));
	//sizeof(数组名)求的是整个数组的大小
	printf("%d\n", sizeof(a[0]));
	printf("%d\n", sizeof(*(a+1)));
	//a[0]和*(a+0)是等价的编译器能分别出来,但是你把他存到另一个指针变量里面再sizeof求就会是求的地址的大小
	printf("%d\n", sizeof((a[0]+1)));

	int *p = a[0];//转存情况
	printf("%d\n", sizeof(p));
	printf("%d\n", *p);
	printf("%d\n", *a[0]);
	printf("%d\n", *(a[0]+1));



	return 0;
}

在这里插入图片描述
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第79张图片

//把字符串中的C干掉
int main(){
	char s[20];
	gets(s);
	int i, j;
	for (i = j = 0; s[i] != '\0'; i++){
	//获取一个和C比较,再放到s[j]的空间里面去,若是C就不放向下获取,不是C才放
		if (s[i] != 'c')s[j++] = s[i];
	}
	s[j] = '\0';
	puts(s);
	return 0;
}

模拟子串

模拟子串
//char *My_strstr(const char* str1, const char* str2){
//	assert(str1&&str2);
//	char *s1 = NULL;
//	char *s2 = NULL;
//	char *cp = (char*)str1;
//	while (*cp){
//		s1 = cp;
//		s2 = str2;
//		while (*s1 != '\0'&&*s2 != '\0'&&*s1 == *s2){
//			s1++;
//			s2++;
//		}
//		if (*s2 == '\0')return cp;
//		cp++;
//	}
//	return NULL;
//}
//int main(){
//	char str1[20];
//	char str2[20];
//	printf("请输入两个字符串:\n");
//	gets(str1);
//	gets(str2);
//	char *ret = My_strstr(str1, str2);
//	if (ret!=NULL)
//	printf("%s\n", ret);
//	else printf("没找到子串\n");
//	return 0;
//}

数组来模拟寻找子串:

char *My_strstr(char* a,  char *b){
	int i = 0, j = 0, k = 0;
	if (*b == '\0')return a;
	for (i = 0; a[i] != '\0'; i++){//让i每次控制起始的位置   
		k = i;//每次从i指向的位置开始,i指向的是串1
		//让j每次从串2开始的位置开始
		for (j = 0; a[k] != '\0'&&b[j] != '\0'&&a[k] == b[j]; k++, j++);
		if (b[j] == '\0')return &a[i];
	}
	return NULL;
}
int main(){
	char a[20];
	char b[20];
	printf("请输入两个字符串:");
	gets(a);
	gets(b);
	char *ret = My_strstr(a, b);
	if (NULL == ret)printf("没有找到子串:");
	else printf("%s\n", ret);
	return 0;
}

43 卷6

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第80张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第81张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第82张图片

//将a字符串的内容插入到b字符串,b字符串保持升序
int main(){
	char b[20] = "acdfhi";
	char a[] = "beg";
	int i, j, k;
	i = j = k = 0;
	for (k = 0; a[k] != '\0'; k++){
		j = 0;//控制b串的下标每次都是在首个字符开始向下查找
		while (a[k] >= b[j] && b[j] != '\0')
			j++;//找到a[k]小于首个字符的位置
		for (i = strlen(b); i >= j; i--)
			b[i + 1] = b[i];//依次像后面挪
		b[j] = a[k];
	}
	printf("%s\n", b);
	return 0;
}


//从后面挪的情况
int main(){
	char a[90] = "abdf";
	char b[10] = "ce";
	int i = 0, j = 0;
	for (j = 0; b[j] != '\0'; j++){

		i = strlen(a);
		a[i + 1] = a[i--];//先挪'\0'

		for (; i >= 0; i--){
			if (a[i] > b[j])
				a[i + 1] = a[i];
			else { 
				a[i + 1] = b[j]; 
			    break; }
		}
	}
	printf("%s", a);
	return 0;
}+
//3*3矩阵对角线
int main(){
	int a[3][3] = { 1, 2, 3, 4, 5,6,7,8,9 };
	int i = 0, j = 0;
	int left_total = 0;
	int right_total = 0;
	//主队角元素和
	for (i = 0; i < 3; i++)
		left_total += a[i][i];
	//副队角线元素
	for (i = 0, j = 2; i < 3; i++, j--){
		if (i!=j)//避免11下标的数被重复相加
		right_total += a[i][j];
	}
	printf("total=%d\n", left_total+right_total);
	return 0;
}



//向有序的数组中插入一个数
int main(){
	int a[11] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int sz = sizeof(a) / sizeof(a[0]);
	int i = 0, n= 0;
	printf("请输入一个插入的数:");
	scanf("%d", &n);
	for (i = sz - 2; i >= 0; i--){
		if (a[i] > n)//若n大于a[i]  就让a[i]像后面挪
			a[i + 1] = a[i];
		else { 
			a[i + 1] = n; //否则不大于的时候就把n放到a[i+1]上,a[i+1]这个位置是空的
		break;//完事之后必须break否则n在比较,就比后面的全都小了就会把之后的全赋成n
		}
		if (a[i] > n&&i == 0)//避免遇到n比数组中的数都小的情况
		{
			a[i] = n; break;
		}
	}
	for (i = 0; i < sz; i++){
		printf("%d ", a[i]);
	}
	return 0;
}

44卷7

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第83张图片

45卷8

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第84张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第85张图片

//用递归的方法把字符串逆序abcde  转换为edcba
void fun(char a[]){
	char *p = a,c;
	while (*p)p++;
	p--;//每次p指向'\0'的下一个字符
	if (a < p){
		c = *a;
		*a = *p;
		*p = '\0';//为了每次函数调用p--一下都指向应操作的字符
	 fun(a + 1);
		*p = c;
	}

}
int main(){
	char a[90];
	printf("请输入一个字符串:\n");
	gets(a);
	fun(a);
	puts(a);
	return 0;
}
void Reverse(char* a){
	char *p=a, c;
	while (*p)p++;
	p--;//指向'\0'的下一个
	while (a < p){
		c = *a;
		*a++ = *p;
		*p-- = a;
	}
}
int main(){
	char a[90];
	printf("请输入一个字符串:\n");
	gets(a);
	fun(a);
	puts(a);
	return 0;
}
//求级数的和 S=1+x*1+(x*2)/2!+(x*3)/3!+(x*n)/n!;
double Deal(double x, int n){
	double S = 1.0,t=1.0, p = 1.0;
	int i = 1;
	for (i = 1; i <= n; i++){
		t *= i;//阶乘
		p = x*i;//存x*n的
		S += p / t;//累加
	}
	return S;
}
int main(){
	int n = 0;
	double x = 0;
	printf("请输入两个数:\n");
	scanf("%d%lf", &n, &x);
	double total=Deal(x, n);
	printf("和是%lf\n", total);
	return 0;
}
//求级数的和 S=1+x*1+(x*2)/2!+(x*3)/3!+(x*n)/n!;
double Deal(double x, int n){
	double S = 1.0,t=1.0, p = 1.0;
	int i = 1;
	for (i = 1; i <= n; i++){
		t *= i;//阶乘
		p = x*i;//存x*n的
		S += p / t;//累加
	}
	return S;
}
int main(){
	int n = 0;
	double x = 0;
	printf("请输入两个数:\n");
	scanf("%d%lf", &n, &x);
	double total=Deal(x, n);
	printf("和是%lf\n", total);
	return 0;
}

46 卷1

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第86张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第87张图片
C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第88张图片

//分解质因数,若150 分为 1*2*3*5*5 负数就是-1乘
//int main(){
//	int n = 0;
//	printf("请输入一个数字:");
//	scanf("%d", &n);
//	if (n > 0){
//		printf("n=1");
//	}
//	else {
//		printf("n=-1");
//		n = -n;
//	}
//	int r = 0;
//	for (int i = 2; i <= n; i++){
//		r = n%i;
//		while (r == 0){//如果除以i余0说明是n的质因数
//			printf("*%d", i);
//			n /= i;//n/i换下一个
//			r = n%i;
//		}
//	}
//
//	return 0;
//}

47 卷2

#include
void fun(int n, int a[][3]){
	int i = 0, j = 0;
	for (i = 0; i < n; i++){
		for (j = 0; j < n; j++){
			a[i][j] = a[i][j] / a[i][i];//00或01或10下标的会发生变化要注意

		}
	}
}
int main(){
	int a[3][3] = { { 6, 4, 2 }, { 8, 6, 4 }, { 9, 6, 3 } };
	fun(3, a);
	for (int i = 0; i < 3; i++){
		for (int j = 0; j < 3; j++)
			printf("%d ", a[i][j]);
		printf("\n");
	}

	return 0;
}
//int main(){
//	int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//	int i = 0;
//	for (i = 0; i < 10; i++){
//		printf("%d ", a[i]);
//		if ((i + 1) % 3 == 0)printf("\n");
//
//	}
//	return 0;
//}
/
//拷贝n个字符问题
//void My_strncpy(char *str1, char *str2, int k){
//	char *s1 = str1 + k;
//	char *s2 = str2;
//	while (*s1)
//		*s2++ = *s1++;
//	*s2 = '\0';
//
//}

void My_strncpy(char *str1, char *str2, int k){
	while (k > 0 &&( *str2 = *str1)){
		k--;
		str1++, str2++;
	}
}
int main(){

	char a[10] = "abcedfg";
	int n = 0;
	printf("请输入一个数:\n");
	scanf("%d", &n);
	char b[10] = { 0 };
	My_strncpy(a, b, n);
	puts(b);
	return 0;
}

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第89张图片

48 卷4

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第90张图片

49卷5

//输入数子输入到零就结束,判断技术和偶数的平均值
int main(){
	int n = 1;
	int i = 0, j = 0, total_i = 0, total_j = 0;
	printf("请输入一个数:\n");
	scanf("%d", &n);
	while (n != 0){
		if (n % 2 == 0){
			total_j += n;
			j++;//偶数加1
		}
		else if (n % 2 != 0)
		{
			total_i += n;
			i++;//奇数加1
		}
		printf("请输入一个数输入0结束:\n");
		scanf("%d", &n);
		}
	if (j != 0)printf("偶数平均数是:%d\n", total_j / j);
	else printf("偶数的个数是0个\n");
	if (i != 0)printf("偶数平均数是:%d\n", total_i / i);
	else printf("奇数的个数是0个\n");

	return 0;
}


//删除一个字符串中数字字符
void Delstr(char *a){
	int i, j=0;
	for (i = 0; a[i] != '\0';i++){
		if (a[i]<'0' || a[i]>'9'){
			a[j++] = a[i];
		}
	}
	a[j] = '\0';
	printf("%s\n", a);
}
int main(){
	char a[10] = "a12b34c45";
	Delstr(a);
	return 0;
}

50卷6

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第91张图片

#include
//10进制转16进制
//void Swit(char *ch, int n){
//	int tmp = 0,i=0;
//	while (n > 0){
//		tmp = n % 16;
//		if (tmp > 0 && tmp <= 9)
//			ch[i] = tmp + '0';//是字符0~’'9'那就加字符‘0’变为数字ASCII
//		else ch[i] = tmp + 55;//否则余数是大于9的就加55来修正ASCII
//		i++;
//		n /= 16;
//	}
//	ch[i] = '\0';
//}
//10进制转8进制除8取余判断他是不是在0~7之间是就加字符0修正为ASCII
//void Swit(char *ch, int n){
//	int tmp = 0, i = 0;
//	while (n > 0){
//		tmp = n % 8;
//		if (tmp >= 0 && tmp < 8)
//			ch[i] = tmp + '0';
//		n /= 8;
//		i++;
//
//	}
//	ch[i] = '\0';
//}
//int main(){
//	int n = 0, i = 0;
//	char ch[20];
//	printf("请输入一个数字:");
//	scanf("%d", &n);
//	Swit(ch, n);
//	for (i = strlen(ch) - 1; i >= 0; i--)
//		printf("%c", ch[i]);
//	return 0;
//}

//16进制转10进制
//void Swit(char *ch){
//	int i = 0;
//	int num = 0;
//	while (ch[i] != '\0'){
//		if (ch[i] >= 'a'&&ch[i] <= 'f')
//			num = num * 16 + ch[i] - 'a' + 10;
//		if (ch[i] >= 'A'&&ch[i] <= 'F')
//			num = num * 16 + ch[i] - 'A' + 10;
//		if (ch[i] >= '0'&&ch[i] <= '9')
//			num = num * 16 + ch[i] - '0';
//		i++;
//	}
//	printf("%d", num);
//}
//int main(){
//	char ch[8];
//	printf("请输入一个16进制数:");
//	gets(ch);
//	Swit(ch);
//	return 0;
//}

//八进制转16进制
//void Swit(char *a){
//	int num = 0, i = 0;
//	while (a[i] != '\0'){
//		if (a[i] >= '0'&&a[i] <= '9')
//			num = num * 8 + a[i] - '0';
//		i++;
//	}
//	printf("%d", num);
//}
//int main(){
//	char a[10];
//	printf("请输入一个八进制数:");
//	gets(a);
//	Swit(a);
//
//	return 0;
//}
//2进制转10进制
#include
void Swit(char *a, int num){
	int i = 0;
	while (num > 0){
		a[i] = num % 2+'0';
		num /= 2;
		i++;
	}
	a[i] = '\0';
	for (i = strlen(a)-1; i>=0; i--){
		printf("%c", a[i]);
	}
}
int main(){
	int num = 0;
	char a[32];
	printf("请输入一个数:");
	scanf("%d", &num);
	Swit(a, num);
	return 0;
}

51卷7


//计算并输出n以内10个最大素数的和
int GetData(int n){
	int a[10]={0}, i = 0, total = 0, flag = 0;
	int j = 0;
	for (i = 2; i <= n; i++){
		for (j = 2; j < i; j++){
			if (i%j == 0)break;
		}
		if (j == i){
			a[flag++] = i;
		}
		if (flag % 10 == 0)flag = 0;
	}
	for (i = 0; i < 10; i++)
		total += a[i];
	return total;
}
int main(){
	int n = 0;
	printf("请输入一个数字:");
	scanf("%d", &n);
	int ret = GetData(n);
	printf("最后是个素数之和是:%d\n", ret);
	return 0;
}
//版本2 
//int GetData(int high){
//int sum = 0, n = 0, j, yes;
//
//while ((high >= 2) && (n<10))
//{
//	yes = 1;
//	//因子只能是小于等于这个数的一半  思路就是从high开始向下一个一个的试那个是 素数,记录个数,素数必须是>=2
//	for (j = 2; j <= high / 2; j++)
//	if (high%j == 0)
//	{
//		yes = 0;
//		break;
//	}
//	if (yes)
//	{
//		sum += high;
//		n++;
//	}
//	high--;
//}
//return  sum;
//}

int main(){
	int n = 0;
	printf("请输入一个数字:");
	scanf("%d", &n);
	int ret = GetData(n);
	printf("最后是个素数之和是:%d\n", ret);
	return 0;
}

//将字符串译码输出a=b b=c  z=a
int main(){
	char a[80];
	printf("请输入一个字符串");
		gets(a);
		for (int i = 0; a[i] != '\0'; i++){
			if (a[i] >= 'a'&&a[i] < 'z' || a[i] >= 'A'&&a[i] < 'Z')
				a[i] += 1;
			if (a[i] == 'z')a[i] = a[i] - 'z' + 'a';
			if (a[i] == 'Z')a[i] = a[i] - 'Z' + 'A';

		}
		printf("%s\n", a);
	return 0;
}

52卷8

//报数问题
int main(){
	int i = 0, m = 0, k = 0, a[100], n = 0;
	printf("请输入人数:\n");
	scanf("%d", &n);
	for (i = 0; i < n; i++)
		a[i] = i + 1;
	i = 0;
	while (m < n - 1){
		if (a[i] != 0){//若a[i]不是0就报数
			k++;
			if (k == 3){
				m++;
				a[i] = 0;
				k = 0;
			}
		}

		i++;//++指向下一个
		if (n == i)i = 0;//一轮完了下一论
		}


	
	for (i = 0; i < n;i++)
	if (a[i] != 0)printf("幸存者是:%d", a[i]);
	return 0;
}

53 卷1

54卷3

C语言编程题-大总结(个人专升本艾宾浩斯复习笔记)_第92张图片

int main(){
	int day = 0;
	printf("请输入天数;");
	scanf("%d", &day);
	if (day % 5== 4||day % 5 == 0)
		printf("第%d天在筛网\n", day);
	else 
		printf("第%d天在打鱼\n", day);

	return 0;
}

55卷5

#include
int main(){
	int m, s, i;
	for (m = 2; m < 1000; m++){
		s = 0;
		for (i = 1; i < m;i++)
		if (m%i == 0)s += i;
		if (s == m){
			//满足条件说明是完数
			printf("%d因子是:",m);
			for (i = 1; i < m;i++)//打印每个因子
			if (m%i==0)printf("%d ", i);
			printf("\n");
		}
	}
	return 0;
}
//求素数因子
int main(){
	int n = 0;
	printf("请输入一个正整数:");
	scanf("%d", &n);
	printf("%d=", n);
	for (int i = 2; i <=n; i++){
		while (n!=i){
			if (n%i == 0){
				printf("%d*", i);
				n /= i;
			}
			else break;
		}
	}
	printf("%d", n);
	return 0;
}
//金字塔
//int main(){
//	int n = 0;
//	while (scanf("%d", &n) != EOF){
//		int i = 0, j = 0;
//		for (i = 0; i < n; i++){//打印行
//			//打印空格
//			for (j = 0; j < n - 1 - i; j++)
//				printf(" ");
//			//打印星号
//			for (j = 0; j < n-(n-1-i); j++)
//				printf("* ");
//			printf("\n");
//		}
//	
//	}
//	return 0;
//}
//打印X型图案
int main()

{
	int n = 0;
	while (scanf("%d", &n) != EOF){
		int i = 0, j = 0;
		for (i = 0; i < n; i++){
			for (j = 0; j < n; j++){
				if (i + j == n - 1)printf("*");
				else if (i == j)printf("*");
				else printf(" ");
			}
			printf("\n");
		}
	}
}
//打印空心正方形
int main()
{
	int n = 0;
	while (scanf("%d", &n) != EOF){
		int i = 0, j = 0;
		for (i = 0; i < n; i++){
			for (j = 0; j < n; j++)
			{
				if (j == 0 || i == 0||i==n-1||j==n-1)printf("8 ");
				else printf("  ");
			}
			printf("\n");
		}
	}
}

56

//判断一个数组是否有序
int main(){
	int a[10] = { 1, 2, 5,4, 5, 6, 7, 8, 9, 10 };
	int flag1 = 0, flag2 = 0;
	int i = 0;
	for (i = 0; i < 10-1; i++){
		if (a[i]>a[i + 1])
		{
			flag1++;
		}
		if (a[i] < a[i + 1])
			flag2++;
	}
	if (flag1 == 9)printf("该数组是降序的...");
	else if (flag2 == 9)printf("该数组是升序的...");
	else printf("该数组无序...");
	return 0;
}
//int main(){
//	char *st[3] = { "abc", "bcd", "cdf" };
//	char **ch = st;//
//	printf("%s\n", *ch + 1);//对指针进行解引用代表指针所指向的目标,解引用一下降一级变为char* 指向其内部元素

//	printf("%s", *(ch + 1));
//
//}
//自己做的删除指定的数字
int main(){
	int a[10] = { 1, 2, 3, 4, 5, 8, 7, 8, 9, 10 };
	int sz = sizeof(a) / sizeof(a[0]);
	int i = 0, j = 0, n = 0;
	printf("请输入一个要删除的数字:");
	scanf("%d", &n);
	int k = 0;
	for (i = 0; i < sz;i++){
		if (a[i] == n){
			k++;//记录删除几个数
			for (j = i + 1; j <= sz - 1; j++)
			{
				a[j - 1] = a[j];
			}
		}
		else if (i == sz-1 && a[i] == n)k++;
	}
	if (k == 0)printf("没有找到要删除的数字\n");
	for (i = 0; i < sz-k; i++)
		printf("%d ", a[i]);
	return 0;
}
//双指针的方法
int main(){
	int a[10] = { 1, 2, 3,6,5, 6, 7, 8, 9, 0 };
	int sz = sizeof(a)/sizeof(a[0]);
	int i = 0, j = 0,n=0;
	printf("请输入一个数字:");
	scanf("%d", &n);
	for (i = 0; i < sz; i++){
		if (a[i] != n)a[j++] = a[i];
		//j代表数字元素的空间,i代表指向的内容
	}
	for (i = 0; i < j; i++)
		printf("%d ", a[i]);
	return 0;
}

57

#include
//给数组去掉重复的元素,只保留第一个位置上的
int main(){
	int a[10] = { 1, 2,2, 2,4, 5, 5, 7, 8, 8};
	int sz = sizeof(a) / sizeof(a[0]);
	int i = 0, j = 0;
	for (i = 0; i < sz; i++){
		for (j = i + 1; j < sz; j++){
			if (a[i] == a[j]){
				              //若相等就把后面的元素向前移
				for (int k = j; k < sz-1; k++)
					a[k] = a[k + 1];
				sz--;//往前挪一轮就减1,即去掉一个
				j--;//因为j+1上的元素挪到了j上,这个也要测试
			}
				
		}
	}
	for (i = 0; i <sz; i++)
		printf("%d ", a[i]);
}


//给字符数组每个元素中间添加一个空格
int main(){
	char a[100];
	int i = 0;
	gets(a);
	printf("修改之前:\n");
	puts(a);
	for (i = strlen(a);i>0; i--){
		a[2 * i] = a[i];
		a[2 * i - 1] = ' ';
	}
	printf("修改之后:\n");
	puts(a);
	return 0;
}

58卷8 2022-01-18

//int main(){
//	char a[30];
//	gets(a);
//	for (int i = 0; a[i] != '\0';i++)
//	if (i % 2 != 0 && a[i] >= 'a'&&a[i] <= 'z')
//		a[i] -= 32;
//	printf("%s", a);
//}
//验证一个偶数可以由两个素数组成
int fun(int n){
	int i;
	for (i = 2; i < n; i++){
		if (n%i == 0)return 0;
	}
	return 1;
}
int main(){
	int a, b ,d;
	scanf("%d", &a); 
	for (b = 3; b <= a / 2; b += 2){
		if (fun(b)){//判断a的一半中有没有素数
			d = a - b;
		}
		else continue;
		if (fun(d))//判断差值是不是素数
			printf("%d=%d+%d\n", a, b, d);
	}
	return 0;
}
//
//int main(){
//	int a, b, c, d;
//	scanf("%d", &a);
//	for (b = 3; b <= a / 2; b += 2){
//		//判断3~a/2 是不是素数的中的数
//		for (c = 2; c < b;c++)
//		if (b%c == 0)break;
//		if (c >= b)d = a - b;//若是就让a-这个素数  这个差给d,再判断d是不是素数
//		else continue;
//
//		for (c = 2; c < d;c++)//在判断这个差值是不是素数
//		if (d%c == 0)break;
//		if (c >= d)printf("%d=%d+%d\n", a, b, d);
//	}
//	return 0;
//}

2022-3-20

#include 
#define abs(x)(x>0?x:-(x))
#define eps 1.0E-5
void main()
{
	float x, x1, y1, y2;
	int i = 0;
	scanf("%f", &x);
	y2 = x;
	x1 = x;
	do
	{
		i++;
		y1 = y2;//分母是阶乘  分子是x的幂次
		x1 *= x*x / ((2 * i)*(2 * i + 1))*(-1);
		y2 = y2 + x1;
	} while (abs(y2 - y1) > eps);
	printf("%lf", y2);
}

在这里插入图片描述

你可能感兴趣的:(#,C语言——130题,c语言)