谭浩强c语言课后练习

 

目录

1字符串从第m个字符开始全部复制到另一个字符串

2指向指针的指针对五个数字排列输出

3指向指针的指针对五个字符串排列输出

 4 3*3行列转置 

5输入十个整数,最小数与第一个交换,最大数与最后数交换

6输入三个字符串,按由小到大顺序输出

 7十六进制转十进制

  8统计字符串中最长单词和最短单词

 9整数n变为字符串 递归

 10将一个5x5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素

11报数  n个人从3开始报数,输出最后一个人 的位置

12输入一个字符串,将其内连续的数字转为int型存到一维数组中 

 13四则运算

14键盘输入字符串a,并在a字符串最大元素后插入字符串b

 15结构体日期排序

16从键盘输入的偶数写成两个素数之和

17删除重复数

 18八进制转十进制

19两个排好序的字符串升序并归到到字符串c

20字符串转化为整数

21九九乘法表输出右上三角形

22母串中字符串个数

23打印菱形 

 24求质因数

 25一角加两角加五角得到2元

26判断该日为该年第几天

27结构体候选人投票

 28升序数组插入元素

29数字的正序输出,统计个数,递归

 30不多于五位的正数,几位数,分别输出每一位,逆序输出

31选择排序

32冒泡排序

 33乒乓球队比赛

34二次方程的根

 35两个排好序的字符串升序并归到到字符串c

36水仙花数 三位正整数每一位立方和

 37阶乘递归

38筛选法求素数

39比较字符串

 40杨辉三角之等腰输出

 41十进制数转化成N进制

42公鸡5钱一只,母鸡3钱一只,小鸡三只一钱,一百钱买一百只鸡

43 一个球从100m的高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求它在第10次落地时共经过多少米,第10次反弹多高

 44排好序的数组输入一个数,按原来的规律插入 

45 1000以内的完数

46数组逆序存放 

47打印鞍点 其为行上最大值,列上最小值

48 折半查找

49 数组从前向后移动n位

50 编写一个函数实现两个字符串的比较

51 重要 报数

52 最小公倍数

53 猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个;第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;以后每天都吃前一天剩下的一半多一个,到第10天想再吃时,只剩下一个桃子了

54四个数字组成多少种不重复的三位数  偶数

55百分制成绩

 56输入正整数a,b 若为a的平方+b的平方>100,输出百位以上数

57 输出字符串长度 

58 将n个数按输入时候的顺序逆序输出

59 2*22*222

60  数组插入

61 数组指针 对字符串进行排序

63指针数组 对字符串进行排序

64结构体 10个学生 输出三门课的总平均分,以及最高分的学生数据

65 打印同构数 

66 定义一个含有30个整型元素的数组 按顺序赋予从2开始的偶数,然后按顺序以每5个数一组的形式求出平均值并输出

67 指针数组编程输出月份的英文表示

68 魔方阵

69九阶方阵

70 输入若干字符,求每串长度。打印最长,以stop作为最后一个字符串


 


 


 

1字符串从第m个字符开始全部复制到另一个字符串

//限制字符串长,并且判断输入数是否在长度内

字符串从第m个字符开始全部复制到另一个字符串
//限制字符串长,并且判断输入数是否在长度内
#include <stdio.h>
void  copy_s(char* p, char* q, int m);
int main() {
	char a[100], * p = a, i, j, b[10];int m;
	printf("请输入字符串:");
	gets(a);


	printf("请输入从第几个字符开始移动:");
	scanf("%d",&m);
	if (m <= strlen(a) && strlen(a)<100)
		copy_s(a, b, m);
	else
		printf("超出长度");
	printf("%s", b);
	return 0;
}
void  copy_s(char* p, char* q, int m)
{
	strcpy(q,(p + m - 1));
	int i = strlen(p);
	*(q + i - m + 1) = '\0';
}



//void  copy_s(char* p, char* q, int m) {
//	int i = 0;
//	for (i = 0; *(p + m-1) != '\0'; m++, i++)  
小错误,比如reading_room 中要求把第9个字符移动。但是想要移动的r下标是8,。
区分下标和第几,移动加的步长需要-1;
//		*(q + i) = *(p + m - 1);
//	*(q + i) = '\0';
//	printf("%s", q);
//}
//

2指向指针的指针对五个数字排列输出

//输出的时候别忘了取值打印

void sort(char** p);
int main() {
	int** p, a[5] = { 4,5,9,0,1 }, * b[5];

	int i = 0;
	for (; i < 5; i++)
	{
		b[i] = &a[i];
	}
	p = b;
	sort(p);
	for (i = 0; i < 5; i++)
	{
		printf("%5d", *b[i]);  //输出的时候别忘了取值打印
	}
	return 0;
}
void sort(int** p) {
	int i, j, * swap;
	for (i = 0; i < 4; i++)
		for (j = 0; j < 4 - i; j++)
		{
			if (*(*(p + j)) > *(*(p + j + 1)))
			{
				swap = *(p + j);
				*(p + j) = *(p + j + 1);
				*(p + j + 1) = swap;

			}
		}

}

3指向指针的指针对五个字符串排列输出


void sort(char ** p);
int main() {
	char** p, a[5][20] = { "ab","xb","cb","nb","db" }, * b[5];
	int i = 0;
	for (i = 0; i < 5; i++)
	{
		b[i] = a[i];
	}
	p = b;
	sort(p);
	for (i = 0; i < 5; i++)
	{
		printf("%s\n", b[i]);
	}
	return 0;
}
void sort(char ** p) {
	int i, j, * swap;
	for (i = 0; i < 4; i++)
		for (j = 0; j < 4 - i; j++)
		{
			if (strcmp(*(p + j), *(p + j + 1)) > 0)
			{
				swap = *(p + j);
				*(p + j) = *(p + j + 1);
				*(p + j + 1) = swap;

			}
		}

}

 

 4 3*3行列转置 

        *(p + i * 3 + j) = *(p + j * 3 + i);

#include <stdio.h>
void  vome(int* p);
int main() {
	int i, j, k, a[3][3], * p = a[0];
	for (i = 0; i < 3; i++)
		scanf("%d%d%d", &a[i][0], &a[i][1], &a[i][2]);
	vome(p);
	for (i = 0; i < 3; i++)
		printf("%d%d%d\n", a[i][0], a[i][1], a[i][2]);
	return 0;
}
void  vome(int* p) {
	int i = 0, j = 0, swap;
	for (i = 0; i < 3; i++)
		for (j = i; j < 3; j++)   //不用每一个都换,j=i只用换右下角两个
		{
			swap = *(p + i * 3 + j);
			*(p + i * 3 + j) = *(p + j * 3 + i);
			*(p + j * 3 + i) = swap;
		}
}

 

5输入十个整数,最小数与第一个交换,最大数与最后数交换

分别求取,最大值和最小值然后交换,以防找不到地址


#define N 10
void swap_s(int* p);
int main() {
	int a[N] = { 98,24,56,78,1,32,36,44,29,6 }, * p = a, i, j;
	swap_s(p);
	return 0;
}
void swap_s(int* p) {
	int i, j, * max = p, * min = p, m;
	for (i = 0; i < N; i++)
	{
		if (*(p + i) < *min)
			min = p + i;
	}
	if (p != min) {
		m = *min;
		*min = *p;
		*p = m;
	}
	for (i = 0; i < N; i++)
	{
		if (*(p + i) > *max)
			max = p + i;
	}
	if (p + N - 1 != max) {
		m = *max;
		*max = *(p + N - 1);
		*(p + N - 1) = m;
	}
}


6输入三个字符串,按由小到大顺序输出


void main() {
	char a[3][10] = { {"e gf"},{"b"},{"a"} },(*p)[10]=a, swap[10];
	int i, j;
	for(i=0;i<2;i++)
		for (j = 0; j < 2 - i; j++)
		{
			if (strcmp(p+j, p + j + 1) > 0)
			{
				strcpy(swap, a + j);
				strcpy(a + j, a +j+1);
				strcpy(a + j + 1, swap);
			}
		}
	for (i = 0; i < 3; i++)
		printf("%s\n", p + i);
		
}

 7十六进制转十进制

/字符串形式存储十六进制数

/别忘记输入的限制条件为小于四,不然不停止

//字符串形式存储十六进制数
#include <math.h>
int main() {
	char a[4], c;//字符串形式存储十六进制数
	int i = 0, j;
	double	sum = 0, k = 0;  //定义double类型存储
	while ((c = getchar()) != '\n'&&i<4)   //别忘记输入的限制条件为小于四,不然不停止
	{
		if (c >= 'a' && c <= 'f' || c >= 'A' && c <= 'F' || c >= '0' && c <= '9')
			a[i++] = c;

	}
	for (j = i - 1; j >= 0; j--)
	{
		if (a[j] >= '0' && a[j] <= '9')
			sum += (a[j] - '0') * pow(16.0, k++);
		if (a[j] >= 'a' && a[j] <= 'f')
			sum += (a[j] - 'a' + 10) * pow(16.0, k++);
		if (a[j] >= 'A' && a[j] <= 'F')
			sum += (a[j] - 'A' + 10) * pow(16.0, k++);
	}
	printf("%lf", sum);
}


  8统计字符串中最长单词和最短单词

注意打印的时候不能为%s输入,只能一个一个打

void main()
{
	char s[3000]="i love you", * idx_max = s, * idx_min = s;
	int i = 0, max = 0, min = 10,  len = 0,l;

	//gets(s);
	while (s[i] != '\0')
	{
		for (len = 0; (s[i] != '\0') && (s[i] >= 'a' && s[i] <= 'z' ||s[i] >= 'A' && s[i] <= 'Z'); i++, len++);
		if (len > max)
		{
			max = len;
			l = i - len;
			idx_max = &s[i - len];
		}
		if (len < min)
		{
			min = len;
			idx_min = &s[i - len];
		}

		for (; !(s[i] >= 'a' && s[i] <= 'z' || s[i] >= 'A' && s[i] <= 'Z') && s[i] != '\0'; i++);
	}

	printf("最长为%d:", max);
	for (i = 0; i < max; i++)
		printf("%c", *(idx_max + i));
	printf("\n");
	printf("最短为%d:", min);
	for (i = 0; i < min; i++)
		printf("%c", *(idx_min + i));
	printf("\n");
}

 9整数n变为字符串 递归

直接调用函数,然后回归的时候会执行调用函数下一条语句;不能用return0ec5864c2151497b872c1ca61ab6b313.jpg

 


#include <string.h>
void change_s(int a);
int main() {
	int a;
	scanf("%d", &a);
	if (a < 0)
	{
		printf("-");
		a = -a;
	}
	change_s(a);
	return 0;
}
void change_s(int a) {
	if (a / 10 != 0)
		change_s(a /10);
		printf("%c", a % 10 + '0');
	

}

 10将一个5x5的矩阵中最大的元素放在中心,4个角分别放4个最小的元素


// //(顺序为从左到右,从上到下依次从小到大存放),写一函数实现之。用main函数调用。
// //注意点1.最小值赋值为最大值,这样才能好找
// //2.q首先也指向p指向的地址,以防出现第一个值为最大值,q成为野指针的情况
// //3.直接给p首地址,然后+数来改变p的指向 

#include <stdio.h>
#include <string.h>
void transform(int* p, int *q);
void check(int* p)
{
	int max = 0, min = 100, i, j, k, * q = p, * a[4] = { p,p + 4,p + 20,p + 24 }, index = 0, swap,flag=1;
	for (i = 0; i < 25; i++)
	{
		if (*(p + i) > max)
		{
			max = *(p + i);
			q = p + i;
		}
	}
	if (q != p + 12)
		transform(p + 12, q);

	for(k=0;k<4;k++)  //遍历求取四个最小值
	{
		min = 100;
	for (i = 0; i < 25; i++)  //遍历每一个数,求取最小值
	{
		flag = 1;  
		if (*(p + i) < min)
		{
			for (j = 0; j < index;j++) //判断是不是除前几个已经放置的值以外的最小值,index控制四个角坐标
			{
				if (p + i == a[j]) {   
					flag = 0;
					break;
				}
			}
			if(flag==1)   //是除前几个已经放置的值以外的最小值就交换
			{min = *(p + i);
			q = p + i;
			}
		}

	}
	transform(q, a[index++]);

	}

}
void transform(int* p, int *q)
{
	int m;
	m = *p; *p = *q; *q = m;
}
int main()
{
	int arry[5][5] = { 25,34,33,32,31,35,29,28,27,26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11 };
	//printf("Please enter a 5x5 matrix: \n");
	//for (int i = 0; i < 5; i++) {
	//	for (int j = 0; j < 5; j++) {
	//		scanf_s("%d", &arry[i][j]);
	//	}
	//}
	check(arry);//将二维数组当做一维数组传入处理,并且传入行列数
	for (int i = 0; i < 5; i++) {
		for (int j = 0; j < 5; j++) {
			printf("%d ", arry[i][j]);
		}
		printf("\n");
	}
	return 0;
}



11报数  n个人从3开始报数,输出最后一个人 的位置

问题1:%3==0在i开始循环的时候就会成立,让m==3

问题2:if语句要在m++后

问题3:不要把输入变量当成循环条件--

int main() {
	int a[100] = { 0 }, i, j, m = 0, n = 8;
	while (n > 1)
	{
		for (i = 0; i < 8; i++)
		{
			
			if (a[i] ==0)
				m++;
			if (m == 3)
			{
				m = 0;
				a[i] = 1;
				n--;
			}
		}

	}
	for (i = 0; i < 8; i++)
	{
		if (a[i] == 0)
			printf("%d", i + 1);
	}
}

12输入一个字符串,将其内连续的数字转为int型存到一维数组中 

int main() {
	int d = 0, sum = 0, i, j, a[100], dex = 0; char str[100] = "123fd+45,665f8", * p = str;
	for (i = 0; *p != '\0'; p++)
	{

		if ('0' <= *p && *p <= '9')
		{
			for (i = 0; '0' <= *p && *p <= '9' && *p != '\0'; p++)
			{
				d = *p - '0';
				sum = sum * 10 + d;
			}
			a[dex++] = sum;
			sum = 0, d = 0;
		}
	}
	printf("%d", dex);
	return 0;

}

 13四则运算

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main() {
	float a=3,b=0;
	char op='/';
	


	switch (op) {
	case '+': printf("a+b=%f", a + b); break;  //直接在后面打印输出
	case '-': printf("a-b=%f", a - b); break;
	case '*': printf("a*b=%f", a * b); break;
	case '/': if (b != 0)
		printf("a/b=%f",a/b);
			else printf("除数不能为0\n");
	}

	return 0;
}

14键盘输入字符串a,并在a字符串最大元素后插入字符串b

strcpy不能对同一个字符串同时操作,不然可能有问题。所以拷贝到另一个字符串在复制

#include<string.h>
int main() {
	char a[50] = "14690178", b[4] = "000", e[10];
	int i = 0, j, inde = 0;

	/*	gets(a);*/
	int a_l = strlen(a), b_l = strlen(b);
	for (i = 0; a[i] != '\0'; i++)
	{
		if (a[inde] < a[i])
			inde = i;
	}
	strcpy(e, a + inde + 1);
	strcpy(a + inde + 1, b);
	strcat(a, e);
	printf("%s",a);

}

 15结构体日期排序

struct rq {
	int mon;
	int day;
	int year;
};

int main() {
	int i, j;
	struct rq t, a[6] = { 12, 31 , 2005,
10 , 21 , 2003,
11 , 12 ,2003,
10 ,5 , 1999,
10 , 22 , 2003,
11 , 30, 2005 };

	for (i = 0; i < 5; i++)
		for (j = 0; j < 5 - i; j++)
		{
			if (a[j].year == a[j + 1].year)
			{
				if (a[j].mon >= a[j + 1].mon)
				{
					if (a[j].mon > a[j + 1].mon)
					{
						t = a[j];
						a[j] = a[j + 1];
						a[j + 1] = t;
					}
					else if (a[j].day > a[j + 1].day)
					{
						t = a[j];
						a[j] = a[j + 1];
						a[j + 1] = t;
					}
				}
			}
			else if (a[j].year > a[j + 1].year) {
				t = a[j];
				a[j] = a[j + 1];
				a[j + 1] = t;

			}
		}
}

16从键盘输入的偶数写成两个素数之和

条件只写为<= a / 2

#include<stdio.h>
main()
{
	int a=10, b, c, d;

	for (b = 3; b <= a / 2; b += 2) //b为a分解后其中一个小于a/2的一个素数
	{
		for (c = 2; c <= sqrt(b); c++) //这个循环是判断b是不是素数,用2-b的开方之间的数去处
			if (b % c == 0)
				break; //如果其中有一个数可以整除b,就中断该循环
		if (c > sqrt(b)) 
			d = a - b; //循环后判断c如果c最后的值>sqrt(b),表示它不是中途用break
		else continue; //来退出循环的,表示b是一个素数,如b是素数,则继续判断a-b是
		for (c = 2; c <= sqrt(d); c++) //否是素数,否则再换另一个b
			if (d % c == 0) 
				break;
		if (c > sqrt(d))
			printf("%d=%d+%d\n", a, b, d);
	}
}

17删除重复数

数组长度必须不断变化

    j--;    //必须回退一次,不然紧挨着的两个重复数字会漏删

字符串要每次都插入'\0'

数字字符串len-(删除数)

int main() {

		int s[21] = { 1,2,2,2,3,2,5,7,8,5,9};
	int a=10, b, c, f, i=0, j=0, r,k; //a为len,要不断变化
	for(i=0;i<a;i++)
		for (j = i + 1; j < a; j++)
		{
			if (s[i] == s[j])
			{
				for (k = j; k < a-1; k++)   //单独赋值,不然j变化后后面的重复值不在寻找
				{
					s[k] = s[k + 1];
				}
				a--;
				j--;    //必须回退一次,不然紧挨着的两个重复数字会漏删
			}
		}
	for (i = 0; i < a; i++)
		printf("%3d", s[i]);
	return 0;
}

#include<stdio.h>

#include<string.h>
int main() {
	int i, j,n=7,k;
	char a[100] = "12222ab24r6664285433";
	for (i = 0; a[i] != '\0'; i++)
	{for(j=i+1,k=j;a[j]!='\0';j++)
		if (a[j] != a[i])
		{
			a[k++] = a[j];
		}
	a[k] = '\0';
	}
	printf("%s", a);
	return 0;
}
int main() {

	int s[21] = { 1,2,2,2,3,2,5,7,8,5,9,11};
	int a = 12, b, c, f, i = 0, j = 0, r, k; //a为len,要不断变化
	for (i = 0; i < a; i++)
	{
		for (j = i + 1, k = j;j<a; j++)
			if (s[j] != s[i])
			{
				s[k++] = s[j];
			}
		a = a - (j - k);
	}
	for (i = 0; i < a; i++)
		printf("%3d", s[i]);
	return 0;
}

 18八进制转十进制

sum和i从0开始

int main() {
	char a[10] = "123";
	int sum = 0;
	int len = strlen(a),i;
	for (i = 0; i < 3; i++)
		sum = sum * 8 + a[i] - '0';
}

 

19两个排好序的字符串升序并归到到字符串c

    c[n] = '\0';    //忘记不写不能运行strcat

#include <stdio.h>
int main()
{
	char a[10] = "125", b[10] = "256789", c[20], * p = a;
	int n = 0, i, j, k;
	for (i = 0, j = 0; a[i] != '\0' && a[j] != '\0';)
	{
		if (a[i] < b[j])
			c[n++] = a[i++];
		else c[n++] = b[j++];
	}
	c[n] = '\0';    //忘记不写不能运行strcat
	if (a[i] != '\0')
	{
		p = a + i;
		strcat(c, p);
	}
	else
	{
		p = b + j;

		strcat(c, p);
	}

	return 0;
}

20字符串转化为整数

考虑负数情况

int main() {
	int i=0, j = 0, k = 0, h = 1, sum = 0,flage=1; 
	char a[20] = "-1234";
	int n = strlen(a)-1;
	if (a[0] == '-')
	{
		flage = -1;
		i = 1;
	}
	for (; i <= n; i++)
		sum = sum * 10 + a[i] - '0';
	
	printf("%d", sum*flage);
}

21九九乘法表输出右上三角形

j=1;j<i

int main() {
    int i, j;
    for (i = 1; i <= 9; i++) {
        for (j = 1; j <= 9; j++) {
            if (j < i)

                printf("\t"); //进行对空格
            else
                printf("%d*%d=%2d\t", i, j, i * j);
        }

        printf("\n");
    }
    return 0;
}

22母串中字符串个数

注意点 子串下标每次都清零,不然只能输出一个子串数。母串的下标要单独赋值给一个数进行遍历,这样返回外循环才不会错过下一个字符串。for循环是单独语句。

#include <stdio.h>
int main(void)
{
	char str[20] = "aacbac", substr[20] = "ac";
	int i = 0, j = 0, k = 0, number = 0;

	for (i = 0; str[i] != '\0'; i++)//从母串开始遍历
	{

		for (k = 0,j=i; str[j] == substr[k]&&str[j] != '\0' && substr[k] != '\0'; j++, k++);
			
		if (substr[k] == '\0')
			number++; 
				
	}
	printf("substr在str出现的次数为%d\n", number);
	return 0;
}


23打印菱形 

别忘记换行

#include  <stdio.h>

void main()
{
	int i, j, k,n=9;
	for (i = 0; i < n/2; i++)
	{
		for (j = 0; j < n / 2 - i; j++)
			printf(" ");
		for (k = 0; k < 2 * i + 1; k++)
			printf("*");
		printf("\n");
	}
	for (i = (n + 1) / 2; i >0; i--)
	{
		for (j = 0; j <(n+1)/2- i; j++)
			printf(" ");
		for (k = 0; k < 2 * i - 1; k++)
			printf("*");
		printf("\n");
	}
}

 

 24求质因数

88=2*2*2*11

80到不能被2整除的时候换成3,3不能被整除的时候换成4


main(void)
{
	int m = 88, j = 2, i,k=1;
	for (i = 2; i <= sqrt(m); i++)
	{
		while (m%i== 0) {
			printf("%d*", i);
			m = m / i;
		}
	}
}

main()
{
  int n,i;
  printf("\nplease input a number:\n");
  scanf("%d",&n);
  printf("%d=",n);
  for(i=2;i<=n;i++)
    while(n!=i)
    {
      if(n%i==0)
      {
        printf("%d*",i);
        n=n/i;
      }
      else
        break;
    }
  printf("%d",n);
}

 

 25一角加两角加五角得到2元

可以用一毛来限制个数就直接用3个循环写吧

#define _CRT_SECURE_NO_WARNINGS

#include  <stdio.h>
#include<stdio.h>
void main()
{
	int i, j, k, flag = 0;
	for (i = 0; i <= 2; i++)
	{
		for (j = 0; j <= 5; j++)
		{
			k = 10 - 5 * i - 2 * j;
			if (k >= 0 && k <= 10)
				{printf("%d %d %d\n", i, j, k); flag++; }
		}
	}
	printf(" % d",flag);
}
#include<stdio.h>
int main()
{
    int one,two,five,x;
    scanf("%d",&x);
    for(one=1;one<x*10;one++)
    {
        for(two=1;two<x*10/2;two++)
        {
            for(five=1;five<x*10/5;five++)
            {
                if(one+two*2+five*5==x*10)
                {
                    printf("可以用%d个1角加%d个2角加%d个5角得到%元\n",one,two,five,x);
                }
            }
        }
    }
    return 0;
}

26判断该日为该年第几天

判断日期是否从  三月  开始

#include <stdio.h>
struct year {
	int year;
	int month;
	int day;
};
int main() {  
	struct year rq;
	printf("请输入计算的年,月,日");
	scanf("%d,%d,%d", &rq.year, &rq.month, &rq.day);
	int a[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 },i,sum=0;
	for (i = 1; i < rq.month; i++) //最后一个月的月份不累加,直接加日期
		sum+= a[i];

	sum = sum + rq.day;
	if ((rq.year % 4 == 0 && rq.year % 100 != 0 || rq.year % 400 == 0) && rq.month >= 3) 
		/*判断是否为闰年,可以被四整除不能被100整除。可以被四百整除。并且从  三月  开始*/
		sum = sum + 1;
	printf("%d", sum);
	return 0;
}

27结构体候选人投票

#include <stdio.h>
#include <string.h>
#define N 10
struct poll {
	char name[10];
	int ps;
}hxr[3] = { "lihua",0,"lihua1",0 , "lihua2",0};

int main() {
	int i, j; char namen[10];
	for (i = 0; i < N; i++)
	{
		scanf("%s",namen);
		for (j = 0; j < 3; j++)
		{
			if (strcmp(namen,hxr[j].name) == 0)
				hxr[j].ps++; //对比候选人姓名,谁名字一样谁++
		}
	}
	for (i = 0; i < 3; i++)
		printf("候选人为%s,其票数为%d\n",hxr[i].name,hxr[i].ps);
	return 0;
}

 28升序数组插入元素

打印时要加插入数字长度,可以直接和尾元素比较,看是不是要直接插入最后。在循环前写if else

#include <stdio.h>
int main() {
	int i, j, m=11, s;
	int a[20] = {0,1,2,3,4,5,6,7,8,9};
	//scanf("%d", &m);
	for (i = 0; i < 10 && m>a[i]; i++);


	if (i < 10)  //注意插入头尾
	{
		for (j = 10; i < j; j--)
			a[j] = a[j - 1];
		a[i] = m;
	}
	else
		a[i] = m;
	for (i = 0; i < 11; i++) //打印时要加插入数字长度
		printf("%3d", a[i]);
	return 0;
}

29数字的正序输出,统计个数,递归

可以用全局变量接收个数

int fun(int a, int* p) {
	if (a / 10 != 0)
		fun(a / 10, p);
	printf("%d", a % 10);
	(*p)++;
}
int main() {
	int a=0, g, s = 0, i=0, j,z=2, f[5],*p=&a;
	fun(485, p);
	return 0;
}

 30不多于五位的正数,几位数,分别输出每一位,逆序输出

int main() {
	int a, g, s = 0, i = 0, j, z = 2, f[5];
	scanf("%d",&a);
	if (a > 0 && a <= 99999)
		while (a != 0)
		{
			f[i++] = a % 10; //放在a前面不然最后一位a会为0,,不进行存储
			s++;
			a = a / 10;
		}
	for (j = 0; j < i; j++)
		printf("%3d", f[j]);
	printf("\n");
	for (; 0 < i; i--)
		printf("%3d", f[i - 1]); //i已经自加1指向存储数据的后一位,所以在运行时要-1
	return 0;
}

31选择排序

找到的元素从前向后排列,j = i + 1

int main() {
	int a[10] = { 9,6,4,7,8,3,1,5,12,31 };
	int b, min, i, r, j;
	for (i = 0; i < 9; i++)
	{
		min = i;
		for (j = i + 1; j < 10; j++)
			if (a[min] > a[j])
				min = j;
		if (min != i)
		{
			r = a[min];
			a[min] = a[i];
			a[i] = r;
		}

	}
	for (i = 0; i <= 9; i++)
		printf("%3d", a[i]);
	return 0;

}


32冒泡排序

找到的数从最后往前放 

int main() {
	int a[10] = { 9,6,4,7,8,3,1,5,12,31 };
	int b, min, i, r, j;
	for (i = 0; i < 9; i++)
	{
		for(j=0;j<9-i;j++)  //注意越界问题,len-1-i
			if (a[j] > a[j + 1])
			{

							r = a[j];
							a[j] = a[j + 1];
							a[j + 1] = r;
			}
	}
	for (i = 0; i <= 9; i++)
		printf("%3d", a[i]);
	return 0;

}

 33乒乓球队比赛

int main()
{

	char a, b, c;
	for (a = 'X'; a <= 'Z'; a++)
	{
		for (b = 'X'; b <= 'Z'; b++)

		{
			for (c = 'X'; c <= 'Z'; c++)

				if (a !='X'&&c!='X' && c != 'Z'&&a!=b&&b!=c&&a!=c)
			
				printf("a--%c,b--%c,,c--%c\n", a,b,c);
		}

	}
	return 0;
}

34二次方程的根

d0a9be4cce6c4fe298725634e3fb3a0a.jpg

 

#include <stdio.h>
#include <math.h>
int main() {
	double a, b, c;
	double sum,e,p,q;
	scanf("%lf,%lf,%lf", &a, &b, &c); //用double类型,注意输入格式
	while (1) {
		if (fabs(a)<=1e-3)
			scanf("%lf", &a); 
		else
			break;
	}
	e = b * b - 4 * a * c;
	if (fabs(e) <= 1e-6) {
		p = -(b / (2 * a));
		printf("两个相等的实根:%8.4f\n", p);
	}
	else if (e > 1e-6) //进来以后判断不要加绝对值
	{
		p = (-b - sqrt(e)) / (2 * a);
		q = (-b + sqrt(e)) / (2 * a);
		printf("两个不等的实根:x1 = %8.4f  x2 = %8.4f\n", p, q);
	}
	else
	{
		p = -b / (2 * a);            //复根的实部
		q = sqrt(-e) / (2 * a);   //复根的虚部,b方-4ac小于零,所以要取负数
		printf("%8.4f+%8.4fi\n", p, q);
		printf("%8.4f-%8.4fi\n", p, q);

	}
	
	return 0;
}

 35两个排好序的字符串升序并归到到字符串c

1.用if else语句,这样两个字符串值相等的时候才不会死循环

2.'\0'

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
int main()
{
	char a[10] = "1257", b[10] = "25689", c[20], * p = a, * q = b;
	int n = 0, i, j, k;
	while (*p || *q)
	{
		if (*p != '\0' && *p <= *q)
			c[n++] = *(p++);
		else
			c[n++] = *(q++);
	}
	c[n] = '\0';
	printf("%s", c);
	return 0;
}

36水仙花数 三位正整数每一位立方和

int main() {
	int i = 0;
	int a = 0;
	int b = 0;
	int c = 0;
	int sum = 0;
	for (i = 100; i <= 999; i++) {
		a = i / 100;
		b = i / 10 % 10;
		c = i % 10;
		sum = a * a * a + b * b * b + c * c * c;
		if (sum == i) {
			printf(" %d", i);
		}
	}
	return 0;
}

 37阶乘递归

int fun(int x) {
	if (x == 1||x==0) {
		return  1;//1!=1; 
	}
	else
	return  x * fun(x - 1);
}

38筛选法求素数

///*把从1开始的、某一范围内的正整数从小到大顺序排列,
//1不是素数,首先把它筛掉。
//剩下的数从2开始遍历到sqrt(100),然后去掉它的倍数*/

#include <math.h>
int main() {
	int i, j, b, a[101];
	for (i =1; i < 101; i++)
		a[i] = i;
	a[1] = 0;
	for(i=2;i<=sqrt(100);i++)
		for (j = i+1; j < 100; j++) {
			if (a[j] % i == 0)
				a[j] = 0;
		}
	 
	for (i = 2; i <100; i++) //因为1不是素数,所以从2开始遍历输出素数
		if(a[i]!=0)
		printf("%3d", a[i]);
	return 0;

}

39比较字符串

#define n 6
int  main()
{
	int i;
	char a[15]="1234", b[15]="123";
	/*gets(a);
	gets(b);*/
	for (i = 0; i < 15 && a[i] != '\0' && a[i] == b[i] && b[i] != '\0';i++);
	if (a[i] == '\0' && b[i] == '\0')
		printf("相等");
	else printf("%d", a[i] - b[i]);

	return 0;
}

 40杨辉三角之等腰输出

注意打印,别的地方未初始化,打印赋值的地方

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
int main()
{
    int i, j, n = 7, k;
    //首先定义二维数组计数符号i,j 还有杨辉三角行数的初始化
    int a[7][7] = { 0 };
    for (i = 0; i < n; i++)
    { for (j = 0; j <= i; j++)
            if (j == 0 || i == j)
                a[i][j] = 1;
            else
                a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
    }
    for (i = 0; i < n; i++)
    {
        for (j = 0; j <n-i; j++)
            printf("\t");
        for (k = 0; k <= i; k++)
        {
            printf("%d\t",a[i][k]);
            printf("\t");
        }
        printf("\n");
    }
    return 0;
}

 

 41十进制数转化成N进制

#include<stdio.h
    void main()
{
    int bas, num, a[18], i, j;
    printf(“Input a shi jin zhi zhengshu and jin zhi : ”);
    scanf(“ % d, &d”, &num, &bas);
    for (i = 0; num; i++) //num变为0时停止循环
    {
        a[i] = num % bas;
        num = num / bas;
    }
    for (j = i - 1; j >= 0; j--)  //输出
        printf(“ % d”, a[j]);
}

42公鸡5钱一只,母鸡3钱一只,小鸡三只一钱,一百钱买一百只鸡

#include<stdio.h>
int main()
{
	int a, b, c;
	for (a = 0; a <= 20; a++)//买的公鸡的数量
		for (b = 0; b <= 33; b++)//母鸡的数量
		{
			c = 100 - a - b;//小鸡的数量      //c=3*(100-5*a-3*a) //算剩下的钱能买多少鸡
			if (a * 5 + b * 3 + c / 3.0 == 100) //小鸡的钱数       //if(a+b+c==100)//算三个加一起的个数
				printf("%d %d %d\n", a, b, c);
		}
	return 0;
}

43 一个球从100m的高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求它在第10次落地时共经过多少米,第10次反弹多高

反弹再落地不只计算了一次

int main()
{
    int i = 1;
    double a = 100, b, c, sum = 100;
    for (; i <= 10; i++)
    {
        a = a * 1 / 2;
      
        sum +=a * 2;
    }
    printf("%lf\n", a);
    printf("总共距离%lf", sum);
    return 0;
}

 44排好序的数组输入一个数,按原来的规律插入 

注意插入数在数组末尾和数组中间两种情况

打印的时候数组长度也+1

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#include<string.h>
int main() {
    int a[10] = { 1,2,4,5,9,10 };
    int i, j = 6, s, xb;
    scanf("%d", &s);
    for (i = 0; i < j;i++)
        if (s < a[i])
            break;
    if (i >= j)
        a[j] = s;
    if (i < j)
    {
        for (; j > i; j--)
        {
            a[j] = a[j - 1];
        }
        a[i] = s;
    }
    for (i = 0; i <7; i++)
        printf("%3d", a[i]);

    return 0;

}

45 1000以内的完数

第一个完全数是6,它有约数1、2、3、6,除去它本身6外,其余3个数相加


int main()
{
    int num, sum, i;

    for (num = 1; num <= 1000; num++)
    {
        sum = 0;      //忘记 每次判断一个数都要将 sum 初始化为 0
        for (i = 1; i < num; i++)
            if (num % i == 0)   
                sum += i;    
        if (sum == num)
            printf("%d\n", num);
    }

    return 0;
}

46数组逆序存放 

int main() {
    int a[5] = { 1,2,4,5,9 };
    int i, j = 5, s, xb;
    for (i = 0,s=j-1; i < 5 / 2; i++,s--)
    {
        xb = a[i];
        a[i] = a[s];
        a[s] = xb;

    }
    for (i = 0; i <5; i++)
        printf("%3d", a[i]);

    return 0;

}

47打印鞍点 其为行上最大值,列上最小值

别忘了没找到的情况

int main()
{

	int a[4][5] = { 1,2,3,4,5,2,4,6,8,10,3,6,9,12,15,4,8,12,16,20 }, b,k, i, j,max,index, flag ;
	for (i = 0; i < 4; i++)
	{
		max = a[i][0], index = 0;
		for (j = 0; j < 5; j++)
			if (a[i][j] > max)
			{max = a[i][j];
			index = j;}
		flag = 1;   //每次遍历记得重置
		for (b = 0; b < 4; b++)
		{
			if (a[b][index] < max)
			{
				flag = 0; //借助数字变化进行判断是否找到
				break;
			}
		}
		if (flag)
		{
			printf("%d", max);
			break;
		}
		}
	if (flag == 0)
	{
		printf("no");
	}
	return 0;
}


48 折半查找

注意点1 输入数字是否在范围内

注意点2 查找数字是否在范围内,用flag来判断

#define n 8
void main()
{
    int a[n] = {2,3,4,5,6,8,9,10 };
    int m, left=0, right=n-1,k,flag=0,index; //取到最后一位 或者用sizeof(a)/sizeof(a[0])-1 左闭右闭
    scanf("%d", &k);
    while (left <= right)
    {
        m = (left + right) / 2;

        if (k > a[n - 1] || k < a[0])  //判断是否不在排好序的数组内部
        {
            flag = 0;
            printf("输入错误");
            break;
        }
       if (k < a[m])
            right = m -1; 
         
        else if (k == a[m]){
           flag = 1;
            break;
       }
        else
            left = m + 1;

    }
    if (flag == 1)
        printf("%d", m + 1);
    else printf("未找到");

}

49 数组从前向后移动n位

注意点 数组的长度重复使用,要每次赋值给循环元素,以防无法进行下次循环

 

void move_S(int* p, int m, int n);
int main() {
	int a[8] = { 12,43,65,67,8,2,7,11 };
	int * p = a;
	move_S(p, 8,7);
	return 0;
}
void move_S(int* p, int m, int n) {
	int i, j, last;
	for (i = 0; i < n; i++)   
	{
		last = *(p + m - 1);
		for (j = m-1; 0 < j ; j--)  //不能直接用m--
		{
			*(p + j) = *(p + j - 1);
		}
		*p = last;
	}
}

50 编写一个函数实现两个字符串的比较

注意点 返回值为两个指针值的差,不是同一个指针不能进行+-

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int str_m(char* p1, char* p2);
int main() {
	char a[] = "CHINA", * p1 = a;
	char b[] = "CHINA", * p2 = b;
	printf("%d", str_m(p1, p2));
	return 0;
}
int str_m(char* p1, char* p2) {
	for (; *p1 == *p2 && *p1 != '\0' && *p2 != '\0'; p1++, p2++);  //遍历字符串相等的部分
	if (*p1 != '\0' || *p2 != '\0')
		return *p1 - *p2;
	else return 0;

}

51 重要 报数

if (a[i] != 1)

int main() {
	int i = 0, k = 0, a[8] = { 0 }, n = 8;
	while (n > 1) {
		for (i = 0; i < 8; i++)
		{
			if (a[i] != 1)
				k++;

			if (k == 3)
			{
				a[i] = 1;
				n--;
				k = 0;
			}

		}
	}
		return 0;

}

52 最小公倍数

 //注意ab值已经在循环中改变,所以不能直接乘 

辗转相除

int main() {
	int a = 12, b = 8,r,sum= a * b;
	while (r = a % b) {
		a = b;
		b = r;
	}
	printf("%d", sum/ a); //注意ab值已经在循环中改变,所以不能直接乘 
	return 0;
}

53 猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个;第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;以后每天都吃前一天剩下的一半多一个,到第10天想再吃时,只剩下一个桃子了

int f(int n) {
    if (n == 1)
        return 1;
    else return (f(n - 1) + 1) * 2.0 ; 
}
int main()
{
    int c;
    c=f(10);
    printf("%d", c);
    return 0;
 
}    


if (day == 10)
return 1;
    else
    return 2 * sumpeach(day + 1) + 2;

54四个数字组成多少种不重复的三位数  偶数

int main() {
    int i, j,k,sum=0;
    for (i = 1; i <=9; i++) {
        for (j = 0; j <= 9; j++) {
            for (k = 0; k <= 9; k=k+2)
                if (i != j && i != k && k != j)
                    sum++;
        }
    }
    printf("%d\n", sum);
    return 0;
}

55百分制成绩

输入数是否合法

int main() {
	float a, b;
	int g;
	while (scanf("%f", &a), a > 100 || a < 0);
	g = a / 10;

		switch(g){
		case 10:case 9: printf("A"); break;
		case 8: printf("B"); break;
		case 7: printf("C"); break;
		case 6: printf("D"); break;
		default: printf("E"); 

		}

	return 0;
}

 56输入正整数a,b 若为a的平方+b的平方>100,输出百位以上数

int main() {
	int a, b, c;
	while ((scanf("%d%d", &a, &b), a < 0 || b < 0));
	if ((c = a * a + b * b) > 100)
		printf("%d", c / 100);
	return 0;
}

57 输出字符串长度 

#include <stdio.h>
int len(char * p);
int main() {
	char a[100], * p = a, m;
	gets(a);
	printf("%d", len(p));
	return 0;
}
int len(char * p) {
	int i;
	for ( i = 0; *(p + i) != '\0'; i++);
		return i; 

58 将n个数按输入时候的顺序逆序输出

void sort(int* p, int m);
int main() {
	int a[10] = {10,9,8,7,6,5,4,3,2,1}, i, j, * p = a, * q, m;
	sort(p, 10);
	return 0;

}
void sort(int* p, int m) {
	int i, j, * q, sw;
	q = p + m - 1;
	for (i = 0; i <5; i++,q--)
	{
		sw = *(p + i);
		*(p + i) = *q;
		*q = sw;
	}
}

59 2*22*222

1+12+123+        a = a * 10+i;

1+22+333+4444+nnnn   

        for (i = 1; i <= n; i++) { //打印几个数
            m = 0;
            for (j = 1; j <= i; j++) //每个数怎么算
                m = m * 10 + i;
            s += m;    //语句不能放在for循环内 

int main() {
	int i ;
	int a = 0;
	int b = 0;
	int sum = 0;
	for (i = 1; i <= 5; i++) {
		a = a * 10 + 2; //前一项×10+2
		sum += a;
	
		printf(" %d", a);
	}
	printf(" %d", sum);
	return 0;
}

60  数组插入

#include <stdio.h>
#include <string.h>
int main() {
	char a[20] = "cehiknqtw";
	char s[] = "agh";
	int j;
	int e = strlen(a),f=strlen(s);
	for (int i = 0; s[i] != '\0'; i++) {    //将所有字符都插入
		j = 0;
		while (s[i] >= a[j] && a[j] != '\0')  //这个while循环找到插入位置
			j++;
		for (int k = strlen(a) - 1; k >= j; k--) {   //这个for循环将后面的所有字符向后移一位
			a[k + 1] = a[k];
		}
		a[j] = s[i];    //最后赋值到正确的位置
	}
	a[e + f] = '\0';
	printf("%s", a);
}

61 数组指针 对字符串进行排序

#include <stdio.h>
#include<string.h>

void sort(char (*p)[10]);
int main()
{
    int i, j;
    char a[5][10]={ "Follow","Basic","Great","F","Compu" } ,(*p)[10] = a;
  /*  for (i = 0; i <5 i++)
        gets(p + i);*/

   sort(p);
   for (i = 0; i < 5; i++)
       printf("%s\n", a[i]);
    return 0;
}
void sort(char(*p)[10])
{
    char m[10];
    int i, j, k;
    for (i = 0; i < 5 - 1; i++)
    {
        for (j = 0; j < 4 - i; j++)
            if (strcmp(p[j], p[j + 1]) > 0)
        {
                strcpy(m, p[j]);
                strcpy(p[j], p[j + 1]);
                strcpy(p[j + 1],m);
        }
    }
}

63指针数组 对字符串进行排序

void sort(char* p[5]);
int main()
{
    int i, j;
    char a[5][10] = { "Follow","Basic","Great","F","Compu" }, *p[5];
      for (i = 0; i < 5; i++)
         p[i]=a[i];

    sort(p);
    for (i = 0; i < 5; i++)
        printf("%s\n", p[i]);
    return 0;
}
void sort(char *p[5])
{
    char * m;
    int i=0, j=0, k;
    for (i = 0; i < 5 - 1; i++)
    {
        for (j = 0; j < 4 - i; j++)
            if (strcmp(p[j], p [j + 1]) > 0)
            {
                m = p[j];
                p[j] = p[j + 1];
                p[j + 1] = m;
            }
    }
}



 

64结构体 10个学生 输出三门课的总平均分,以及最高分的学生数据

 别忘记声明函数

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

#define N 2

struct student {
	int num;
	char name[8];
	float score[3];
	float avr;
}stu[N];
void input_n(struct student stu[]);
struct student output_n(struct student stu[]);
void print(struct student stu);

int main() {
	input_n(stu);
	print(output_n(stu));
	return 0;
}
void input_n(struct student stu[]) {
	int i, j;
	for (i = 0; i < N; i++)
	{
		printf("请分别输入%d学号,姓名:",i+1);
		scanf("%d%s%f%f%f", &stu[i].num, stu[i].name,&stu[i].score[0],&stu[i].score[1], &stu[i].score[2]);
		stu[i].avr = (stu[i].score[1] + stu[i].score[0] + stu[i].score[2])/3.0;
	}
}
struct student output_n(struct student stu[]) {
	int max = 0;
	for (int i = 0; i < N; i++)
	{
		if (stu[max].avr < stu[i].avr)
			max = i;
	}
	return stu[max];

}
void print(struct student stu) {
	printf("最高分为%s同学,成绩为%f", stu.name, stu.avr);
}


65 打印同构数 

它出现在平方数的右边。

如5是25右边的数,25是625右边的数,5和25均是同构数。

 

        if (i * i % 10 == i || i * i % 100 == i || i * i % 1000 == i)

66 定义一个含有30个整型元素的数组 按顺序赋予从2开始的偶数,然后按顺序以每5个数一组的形式求出平均值并输出

问题点 i%5 时为0,可以进入if语句 

#include<stdio.h>
main()
{
	int a[30], i, j = 2, b = 0, e = 0, c; float ave[10],sum=0;
	for (i = 1; i <=30; i++, j = 2 + j)
	{
		
		a[i] = j;
		sum += a[i];
		if (i % 5 == 0)
		{
			ave[e++] = sum / 5.0;
			sum = 0;
		}
	}
	for (i = 0; i < 30; i++)
	{
		printf("%d\t", a[i]);
		j++;
		if (j % 5 == 0)
			printf("\n");
	}
}

67 指针数组编程输出月份的英文表示

声明

数组长13 判断输入合法


#include <stdio.h>
char* getmonth(int n);
int main()
{
    int n;
    char* s;
    char* p = NULL;
    scanf("%d", &n);
    if (n >= 1 && n <= 12)
        printf("%s\n", getmonth(n));
  
    else
        printf("wrong input!\n");
 
    return 0;
}
char* getmonth(int n)
{
    //指针数组
    char* month[13] = { "0", "January", "February", "March", "April", "May",
                          "June", "July", "August", "September", "October", "November", "December" };

        return month[n];
    
}

68 魔方阵

行列元素保存在赋值后做,并且别忘记判断输入是否为奇数小于预定义数组长

#include<stdio.h>
int main()
{
	int n, a[100][100] = {0}, i, j, k, h_i = 1,l_i = 1, c, b;
	while (1)
	{
		scanf("%d", &n);
		if ((n != 0) && (n <= 100) && n >= 3 && (n % 2 != 0))
		{
			break;
		}
	}

	a[0][1] = 1;
	h_i = 0; l_i = 1;
	for (i = 1; i < n*n; i++)
	{
		h_i-= 1; l_i+= 1;

		if (h_i < 0)
			h_i = n-1;
		if (l_i >=n)
			l_i = 0;
		if (a[h_i][l_i]!= 0)
		{
			h_i = c + 1;
			l_i = b;

		}
	
		a[h_i][l_i] = i + 1;
		c = h_i; b = l_i;
	}
	for (i = 0; i < n; i++)
	{
		for (j = 0; j <n; j++)
		{
			printf("%5d", a[i][j]);
		}
		printf("\n");
	}

	return 0;
}

69九阶方阵

1 1 1 1 1 1 1 1 1
1 2 2 2 2 2 2 2 1
1 2 3 3 3 3 3 2 1
1 2 3 4 4 4 3 2 1
1 2 3 4 5 4 3 2 1
1 2 3 4 4 4 3 2 1
1 2 3 3 3 3 3 2 1
1 2 2 2 2 2 2 2 1
1 1 1 1 1 1 1 1 1

int main() {
	int s[9][9] ;
	int a=9, b, c, f, i=0, j=0, r,k;
	for(i=1;i<=(a+1)/2;i++)  //遍历循环次数,为要填充的数
		for (j = i-1; j <= a - i; j++)  //每个方阵要打印的个数
		{
			s[i - 1][j] = i;
			s[j][i-1] = i;
			s[a-i][j] = i;
			s[j][a - i] = i;
		}
	return 0;
}

70 输入若干字符,求每串长度。打印最长,以stop作为最后一个字符串

strcmp(p, "stop") == 0

#include <string.h>

int main() {
	char a[10][15] = {"abc","e","qwert","stop","12"}, (*p)[15] = a, (*q)[15] = a;
	int sum = 0, i, j,max=0,le[10];
	for (i = 0; i < 10; i++, p++)
	{
		//gets(p);
		if (strlen(a[i]) > max)
		{
			max = strlen(a + i);
			q = p;

		}
		le[i] = strlen(a + i);
		if (strcmp(p, "stop") == 0)
			break;
	}
	printf("%s", q);
}


 二分法求方程根

d563c7be82fd449186063339d8808a04.jpg

 

#include <stdio.h>
#include <math.h>
int main() {
	double x0, x1, x2, f0, f1, f2;
	do {
		printf("请输入两个点:");
		scanf("%lf,%lf", &x1, &x2);
		f1 = ((2 * x1 - 4) * x1 + 3) * x1 - 6;
		f2 = ((2 * x2 - 4) * x2 + 3) * x2 - 6;
		printf("f1 = %f, f2 = %f\n", f1, f2);
	} while (f1 * f2 > 0);

	do {
		x0 = (x1 + x2) / 2;
		f0 = ((2 * x0 - 4) * x0 + 3) * x0 - 6;
		if (f0 * f1 < 0) {
			x2 = x0;
			f2 = f0;
		}
		else {
			x1 = x0;
			f1 = f0;
		}
	} while (fabs(f0) >= 0.00001);
	printf("方程根为:%lf\n", x0);

	return 0;
}

打印螺旋方阵


#include<stdio.h>
int main()
{
	int i,  j = 1, a[7][7],n=7,c=0;
	

	while (n-2!=0)
	{				
		for (i =c; i < n;i++,j++)//向右 
			a[c][i] = j;
		for (i =c+1; i < n; i++, j++)//向下 
			a[i][n - 1] = j;
		for (i = n-2; i >=c; i--, j++)//向左
			a[n-1][i] = j;
		for (i = n - 2; c+1<=i; i--, j++) //向上
			a[i][c] = j;
		c++; n--;
	}
	for (i = 0; i < 7; i++)  //列数已经自减,打印的时候注意
	{
		for (j = 0; j < 7; j++)
			printf("%4d", a[i][j]);
		printf("\n");
	}
	return 0;
}




 牛顿迭代法求根

7e6d49939e8d48ca9bfbcc9e9f50cc34.jpg

 

#include <stdio.h>
#include <math.h>
int main() {
    float a,f,f1;
    float x=1.5, x1;
    f = 2 * pow(x, 3) - 4 * pow(x, 2) + 3*x - 6;
    f1 = 6 * pow(x, 2) - 8 * x + 3;
    x1 = x - f / f1;
    while (fabs(x1-x) >= 1e-5) {
        x = x1;
        f = 2 * pow(x, 3) - 4 * pow(x, 2) + 3*x - 6;
        f1 = 6 * pow(x, 2) - 8 * x + 3;
        x1 = x - f / f1;
    }
    printf("%f", x1);
}



冒泡法字符排序

#define n 6
void px(char a[]);
int  main()
{
    int i;
    char a[10];
    scanf("%s", a);
    if (strlen(a) <= 10)
    {
      px(a);
    }
    else
        while (1) {
            if (strlen(a) <= 10)
            {
                px(a);
                break;
            }
            else { printf("输入超出范围");
            scanf("%s", a);
            }
        }
    printf("%s", a);

    return 0;
}



void px(char a[]) {

    char m;
    int i, j;
    for(i=0;i<strlen(a)-1;i++)
        for (j = 0; j < strlen(a) - 1-i;j++)
        {
            if (a[j] > a[j + 1])
            {
                m = a[j];
                a[j] = a[j + 1];
                a[j + 1] = m;
            }
        }
}




 

eaa7bc0364a941eb888a2311ed25db9c.jpg

d77e9e195bca473e9f00db8af1c20c31.jpg

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值