20级北京信息科技大学C语言考试大题题库(完整最简版)

​
/*1、输入星期数,输出行程安排,例如:
周六 - 和朋友去长城
周日 - 陪家人去故宫
周一至周五 - 工作*/
#include<stdio.h>
int main()
{
	int n;
	printf("输入星期数n:");
	scanf_s("%d", &n);
	switch (n)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:printf("工作"); break;
	case 6:printf("和朋友去长城"); break;
	case 7:printf("陪家人去故宫"); break;
	}
	return 0;
}
	
//2、写一程序,判断某一年是否为闰年。
#include<stdio.h>
int main()
{
	int year;
	printf("input year:");
	scanf_s("%d", &year);
	if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
		printf("%d is a leap year.", year);
	else
		printf("%d is not a leap year.", year);
	return 0;
}

//3、有人用温度计测量出用华氏法表示的温度(如64°F),今要求把它转换为以摄氏法表示的温度(如17.8℃)
#include<stdio.h>
int main()
{
	double F, C;
	F = 64.0;
	C = (5.0 / 9) * (F - 32);
	printf("F=%2.0f\nC=%2.1f\n", F, C);
	return 0;
}

//4、用C语言求30!。并画出流程图
#include<stdio.h>
int main()
{ //int会数据溢出,12/13为界
	float t = 1, i = 2;
	while (i <= 30)
	{
		t = t * i;
		i = i + 1;
	}
	printf("%f\n", t);
	return 0;
}

//5、输入身高(米)和体重(千克)计算BMI值,其中BMI值计算公式为,BMI = 体重/身高^2。
#include<stdio.h>
int main()
{
	double h, w, BIM;
	printf("输入您的身高(米)、体重(千克)分别是:\n");
	scanf_s("%lf%lf", &h, &w);
	BIM = w / (h * h);
	printf("您的BMI=%8.6f", BIM);
}

//6、给定一个大写字母,要求用小写字母输出。提示:大写字母比小写字母的ASCII 码小32。
/*
//法一
#include<stdio.h>
int main()
{
	char c = 'A';
	c = c + 32;
	printf("%c\n", c);
	return 0;
}
//法二
#include<stdio.h>
int main()
{
	char c;
	printf("输入一个大写字母:");
	scanf_s("%c", &c, 5);
	c = c + 32;
	printf("输出它的小写字母:%c\n", c);
	return 0;
}
*/

//7、从键盘输入一个四位的整数num,将其个、十、百、千位倒序生成一个数字输出。例如:输入1234,输出4321 。
#include<stdio.h>
int main()
{
	int num, y;
	printf("请输入原数字:");
	scanf_s("%d", &num);
	if (num > 9999) printf("输入数字不能超过四位数");
	else
	{
		for (y = 0; num != 0; num = num / 10)
			y = y * 10 + num % 10;
	}
	printf("倒序后的数字:%d", y);
	return 0;
}

//8、求ax2+bx+c=0方程的根。a,b,c由键盘输入,设b2-4ac>0。
#include<stdio.h>
#include<math.h>
int main()
{
	double a, b, c, x1, x2;
	printf("Input a,b,c:");
	scanf_s("%lf,%lf,%lf", &a, &b, &c);
	if (a == 0)
		printf("x=%lf", -c / b);
	else
	{
		x1 = (-b + sqrt(b * b - 4 * a * c)) / 2 * a;
		x2 = (-b - sqrt(b * b - 4 * a * c)) / 2 * a;
		printf("x1=%lf,x2=%lf", x1, x2);
	}
	return 0;
}

/*9、求ax2+bx+c=0方程的根。a,b,c由键盘输入。需判别,
	 如果b2-4ac≥0,就计算并输出方程的两个实根,
	 如果b2-4ac<0,就输出“此方程无实根”的信息。*/
#include<stdio.h>
#include<math.h>
int main()
{
	double a, b, c, x, x1, x2;
	printf("Input a,b,c:");
	scanf_s("%lf,%lf,%lf", &a, &b, &c);
	if (a == 0)
		printf("x=%lf", -c / b);
	else if (b * b - 4 * a * c < 0)
		printf("此方程无实根");
	else
	{
		x1 = (-b + sqrt(b * b - 4 * a * c)) / 2 * a;
		x2 = (-b - sqrt(b * b - 4 * a * c)) / 2 * a;
		printf("x1=%lf,x2=%lf", x1, x2);
	}
	return 0;
}

//10、给出三角形的三边长,求三角形面积。
#include <stdio.h>
#include <math.h>
int main()
{
	double a, b, c, s, area;
	printf("输三角形三边长:");
	scanf_s("%lf,%lf,%lf", &a, &b, &c);
	if (a + b > c && b + c > a && a + c > b)
	{
		s = (a + b + c) / 2;
		area = sqrt(s * (s - a) * (s - b) * (s - c));
		printf("三角形的面积是:%lf\n", area);
	}
	else
		printf("不能构成三角形");
	return 0;
}

//11、输入两个实数,按由小到大的顺序输出这两个数。
#include<stdio.h>
int main()
{
	float num1, num2;
	printf("输入输入两个实数:");
	scanf_s("%f,%f", &num1, &num2);
	float temp;
	if (num1 > num2)
	{
		temp = num1;
		num1 = num2;
		num2 = temp;
	}
	printf("按由小到大的顺序:%.2f,%.2f\n", num1, num2);
	return 0;
}

/*12、输入一个字符,判别它是否为大写字母,
	  如果是,将它转换成小写字母;
	  如果不是,不转换。然后输出最后得到的字符。*/
#include <stdio.h>
int main()
{
	char a;
	printf("输入一个字符:");
	a = getchar();
	a = (a >= 'A' && a <= 'Z') ? (a + 32) : a;
	printf("由题意输出为:%c", a);
	return 0;
}

/*13、模拟自动售货机可选择的:
	  1、巧克力
	  2、小面包
	  3、可口可乐
	  如果都不是则 输出错误!!!*/
#include<stdio.h>
int main()
{
	int n;
	printf("********************\n");
	printf("自动售货机可选择的:\n");
	printf("1:巧克力\n");
	printf("2:小面包\n");
	printf("3:可口可乐\n");
	printf("输入您的选择:");
	scanf_s("%d", &n);
	switch (n)
	{
	case  1:printf("选择巧克力\n"); break;
	case  2:printf("选择蛋糕\n"); break;
	case  3:printf("选择可口可乐\n"); break;
	default:printf("输出错误!!!\n"); break;
	}
	printf("\n");
	return 0;
}

/*14、已知小明成绩为85分,请使用if else语句判断小明的成绩属于以下哪个等级。
	  60分以下:不及格
	  60 - 70分:及格
	  70 - 90分:良好
	  90 - 100分:优秀*/
#include<stdio.h>
int main()
{
	float g = 85;
	printf("已知小明成绩为%.1f分\n", g);
	if (g < 60) printf("不及格");
	else if (g < 70) printf("及格");
	else if (g < 90) printf("良好");
	else if (g < 100)printf("优秀");
	return 0;
}
/*
#include<stdio.h>
int main()
{
	printf("已知小明成绩为");
	float g = scanf_s("%f", &g);
	if      (g < 60) printf("不及格");
	else if (g < 70) printf("及格")  ;
	else if (g < 90) printf("良好");
	else if (g < 100)printf("优秀")  ;
	return 0;
}
*/

//15、求1+2+3+…+100。并画出流程图。
/*
//法一while当型
#include<stdio.h>
int main()
{
	int i=1, sum = 0;
	while (i <= 100)
	{
	sum = sum + i;
	i = i++;
	}
	printf("sum=%d\n", sum);
	return 0;
}
//法二do while直到型
#include<stdio.h>
int main()
{
	int i=1, sum = 0;
	do
	{
	sum = sum + i;
	i = i++;
	}while(i<=100);
	printf("sum=%d\n", sum);
	return 0;
}
//法三for当型
#include<stdio.h>
int main()
{
	int i, sum;
	for(i=1,sum=0;i<=100;i++)
	sum=sum+i;
	printf("sum=%d\n", sum);
	return 0;
}
*/
 
/*16、用公式π/4≈1?1/3+1/5?1/7+?求π的近似值,
	  直到发现某一项的绝对值小于10-6为止(该项不累加)。*/
#include<stdio.h>
#include<math.h>
int main()
{
	int sign = 1;//sign数值符号
	double pi = 0.0, n = 1.0, term = 1.0;//n分母,term当前项
	while (fabs(term) >= 1e-6)//绝对值
	{
		pi = pi + term;
		n = n + 2;
		sign = -sign;
		term = sign / n;
	}
	pi = pi * 4;
	printf("pi=%10.8f\n", pi);
	return 0;
}

/*17、百钱百鸡:中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱百鸡问题”:
				一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,
				现在要用百钱买百鸡,请问公鸡、母鸡、小鸡各多少只?
 问题分析
(1)用百钱如果只买公鸡,最多可以买20只,但题目要求买一百只,由此可知,所买公鸡的数量应该在0~20之间。
(2)同理,所买母鸡的数量应该在0~33之间。
(3)不妨把公鸡,母鸡和小鸡的数量分别设为cock,hen,chicken,则cock+hen+chicken=100*/
/*
//法一
#include<stdio.h>
int main()
{
	int cock, hen, chicken;
	for (cock = 0; cock <= 20; cock++)
		for (hen = 0; hen <= 33; hen++)
			for (chicken = 0; chicken <= 100; chicken++)
			{
				if ((5 * cock + 3 * hen + chicken / 3.0 == 100) && (cock + hen + chicken == 100))
				printf("cock=%2d,hen=%2d,chicken=%2d\n", cock, hen, chicken);
			}
	return 0;
}
//法二
#include<stdio.h>
int main()
{
	int cock, hen;
	for (cock = 0; cock <= 20; cock++)
		for (hen = 0; hen <= 33; hen++)
		{
			if (5 * cock + 3 * hen + (100 - cock - hen) / 3.0 == 100)
			printf("cock=%2d,hen=%2d,chicken=%2d\n", cock, hen, 100 - cock - hen);
		}
	return 0;
}
*/

/*18、在全系1000名学生中举行慈善募捐,
	  当总数达到10万元时就结束,
	  统计此时捐款的人数以及平均每人捐款的数目*/
#include<stdio.h>
#define SUM 100000
int main()
{
	float amount, aver, total;
	int i;
	for (i = 1, total = 0; i <= 1000; i++)
	{
		printf("please enter amount:");
		scanf_s("%f", &amount);
		total = total + amount;
		if (total >= SUM) break;
	}
	aver = total / i;
	printf("num=%d\naver=%10.2f\n", i, aver);
	return 0;
}

//19、要求输出100~200之间的不能被3整除的数。并画出流程图。
//法一
#include <stdio.h>
int main()
{
	int n;
	printf("100~200之间不能被3整除的数:\n");
	for (n = 100; n <= 200; n++)
	{
		if (n % 3 == 0)
			continue;
		printf("%d ", n);//有空格
	}
	printf("\n");
	return 0;
}
/*
//法二
#include <stdio.h>
int main()
{
	int n;
	printf("100~200之间不能被3整除的数:\n");
	for (n = 100; n <= 200; n++)
	{
		if (n % 3 != 0)
			printf("%d\t", n);
	}
	printf("\n");
	return 0;
}
*/

//20、输入一个大于3的整数n,判定它是否为素数(prime,又称质数)。
//法一
#include <stdio.h>
int main()
{
	int n, i;
	printf("please enter a integer number,n=?");
	scanf_s("%d", &n);
	for (i = 2; i <= n - 1; i++)
		if (n % i == 0) break;
	if (i < n) printf("%d is not a prime number.\n", n);
	else printf("%d is a prime number.\n", n);
	return 0;
}
//法二
/*
#include <stdio.h>
#include <math.h>
int main()
{
	int n, i, k;
	printf("please enter a integer number:n=?");
	scanf_s("%d", &n);
	k = sqrt(n);
	for (i = 2; i <= k; i++)
		if (n % i == 0) break;
	if (i <= k) printf("%d is not a prime number.\n", n);
	else printf("%d is a prime number.\n", n);
	return 0;
}
*/

/*21、假如我国国民生产总值的年增长率为10%,计算10年后我国国民生产总值与现在相比增长多少百分比。
	  计算公式为P=(1+r)^n,r为年增长率;n为年数;P为与现在相比的百分比。*/
	  //法一
#include <stdio.h>
#include <math.h>
int main()
{
	float p, r, n;
	r = 0.1;     //如果年增长率为9%,就改为r=0.09
	n = 10;
	p = pow(1 + r, n);
	printf("p=%f\n", p);
	return 0;
}
/*
//法二
#include <stdio.h>
#include <math.h>
int main()
{
	float p, r, i;
	r = 0.1;     //如果年增长率为9%,就改为r=0.09
	for (p = 1, i = 1; i <= 10; i++)
		p = p * (1 + r);
	printf("p=%f\n", p);
	return 0;
}
*//22.

* 存款利息的计算 有1000元,想存5年,可按以下5种办法存:	2007年12月的银行存款利息如下:
(1)一次存5年期										1年期定期存款利息为1.5 %
(2)先存2年,到期后将本息再存3年期					2年期定期存款利息为2.1 %
(3)先存3年,到期后将本息再存2年期					3年期定期存款利息为2.75 %
(4)存1年期,到期后将本息再存1年期,连续存5次。	    5年期定期存款利息为3 %
(5)存活期存款。活期利息每一季度结算一次。			活期存款利息为0.35 % (活期存款每一季度结算一次利息)
如果r为年利息,n为存款年数,则计算本息和的公式为 :
1年期本息和:P = 1000 * (1 + r);
n年期本息和:P = 1000 * (1 + n * r);
存n次1年期的本息和:P = 1000 * (1 + r) ^ n;
活期存款本息和:P = 1000 * (1 + r / 4) ^ 4n;
说明:1000 * (1 + r / 4)是一个季度的本息和。 * /
#include <stdio.h>
#include <math.h>
int main()
{
	float r5, r3, r2, r1, r0, p, p1, p2, p3, p4, p5;
	p = 1000;
	r1 = 0.0015;
	r2 = 0.0021;
	r3 = 0.00275;
	r5 = 0.003;
	r0 = 0.00035;
	p1 = p * (1 + 5 * r5);            // 一次存5年期
	p2 = p * (1 + 2 * r2) * (1 + 3 * r3);     // 先存2年期,到期后将本息再存3年期
	p3 = p * (1 + 3 * r3) * (1 + 2 * r2);     // 先存3年期,到期后将本息再存2年期
	p4 = p * pow(1 + r1, 5);           // 存1年期,到期后将本息存再存1年期,连续存5次
	p5 = p * pow(1 + r0 / 4, 4 * 5);       // 存活期存款。活期利息每一季度结算一次
	printf("p1=%10.2f\n", p1);       // 输出按第1方案得到的本息和
	printf("p2=%10.2f\n", p2);       // 输出按第2方案得到的本息和
	printf("p3=%10.2f\n", p3);       // 输出按第3方案得到的本息和
	printf("p4=%10.2f\n", p4);       // 输出按第4方案得到的本息和
	printf("p5=%10.2f\n", p5);       // 输出按第5方案得到的本息和
	return 0;
}

/*23、购房从银行贷了一笔款d ,准备每月还款额为p ,月利率为r ,计算多少月能还清。
	  设d为300000元,p为6000元,r为1%。对求得的月份取小数点后一位,对第2位按四舍五入处理。
	  提示:计算还请月数m 的公式如下:
	  m = [log p - log(p - d * r)] / log(1 + r)
			可以将公式该写为
	  m = { log[p / (p - d * r)] } / log(1 + r)
	  C的库函数中有求对数的函数log10, 是求以10为底的对数,log(p)表示log p。*/
#include <stdio.h>
#include <math.h>
int main()
{
	float d = 300000, p = 6000, r = 0.01, m;
	m = log10(p / (p - d * r)) / log10(1 + r);
	printf("m=%6.2f\n", m);
	return 0;
}

/*24、请编程序将“China”译成密码,密码规律是:用原来的字母后面的第4个字母代替原来的字母。
	  例如,字母“A”后面第4个字母是“E”,用“E”代替“A”。因此,“China”应译为“Glmre”。*/
	  //法一
#include <stdio.h>
int main()
{
	char c = getchar();                          // 输入一个字符给字符变量c
	while (c != '\n')                           // 检查c的值是否换行符'\n'  
	{
		if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))     // c如果是字母
		{
			if (c >= 'W' && c <= 'Z' || c >= 'w' && c <= 'z') c = c - 22;   // 如果是26个字母中最后4个字母之一
			else c = c + 4;                      // 如果是前面22个字母之一,就使c加4,即变成其后第4个字母
		}
		printf("%c", c);                      // 输出己改变的字符
		c = getchar();                         // 再输入下一个字符给字符变量c
	}
	printf("\n");
	return 0;
}
/*
#include <stdio.h>
int main()
{
	char c;
	while ((c = getchar()) != '\n')        // 输入一个字符给字符变量c并检查它c的值是否换行符
	{
		if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))     // c如果是字母
		{
			c = c + 4;                       // 只要是字母,都先加4
			if (c >= 'W' && c <= 'Z' + 4 || c > 'z')   // 如果是26个字母中最后4个字母之一
				c = c - 26;                   // c的值改变为26个字母中最前面的4个字母中对应的字母
		}
		printf("%c", c);                  // 输出己改变的字符
	}
	printf("\n");
	return 0;
}
*/

/*25、编写一个函数,接受3个参数:一个字符和两个整数。               编写一个调用此函数的程序。
	  字符参数是待打印的字符,第1个整数指定一行中打印字符的次数,第2个整数指定打印字符的行数。
	  示例:Enter a character (# to quit): s
			Enter number of columns and number of rows: 5 2
			sssss
			sssss                                             */
#include<stdio.h>
int main()
{
	void f(char ch, int m, int n);
	char ch;
	int m, n;
	printf("Enter a character (# to quit):");
	ch = getchar();
	printf("Enter number of columns and number of rows:");
	scanf_s("%d%d", &n, &m);
	f(ch, n, m);
	return 0;
}
void f(char ch, int m, int n)
{
	int i, j;
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
			printf("%c", ch);
		printf("\n");
	}
}

/*26、编写一个函数,返回存储在double类型数组中的最大值和最小值的差值,并在一个简单的程序中调用测试该函数。
	  示例: 数组是:1.1  2  3  4  12  61.3  7  8  9  10
			 maxmin difference=60.2                         */
#include<stdio.h>
#define N 400
double CH(double a[], int n);
int main()
{
	double a[N];
	int n, i;
	printf("元数个数:");
	scanf_s("%d", &n);
	printf("数组是:");
	for (i = 0; i < n; i++)
		scanf_s("%lf", &a[i]);
	printf("%.1lf", CH(a, n));
	return 0;
}
double CH(double a[], int n)
{
	int i;
	double min = a[0], max = a[0], c;
	for (i = 0; i < n; i++)
	{
		if (max < a[i]) max = a[i];
		if (min > a[i]) min = a[i];
	}
	c = max - min;
	return c;
}

/*27、两数的调和平均数这样计算:先得到两数的倒数,然后计算两个倒数的平均值,
	  最后取计算结果的倒数。编写一个函数,接受两个double类型的参数,返回这两个参数的调和平均函数。
	  示例: Enter two numbers and i will return it's harmonic mean:
			 1 2
			 harmonic mean is 1.33                   */
#include<stdio.h>
int main()
{
	double tiaohe(double m, double n);
	double n1, n2, harmonic;
	printf("Enter two numbers and i will return it's harmonic mean:\n");
	scanf_s("%lf%lf", &n1, &n2);
	harmonic = tiaohe(n1, n2);
	printf("harmonic mean is ");
	printf("%.2lf", harmonic);
	return 0;
}
double tiaohe(double m, double n)
{
	double harmonic = 1 / ((1 / m + 1 / n) / 2);
	return harmonic;
}

/*28、编写一个函数,把两个数组中相对应的元素相加,然后把结果储存到第3个数组中。
	  也就是说,如果数组1中包含的值是2、4、5、8,数组2中包含的值是1、0、4、6,
	  那么该函数把3、4、9、14赋给第3个数组。函数接受3个数组名和一个数组大小。
	  在一个简单的程序中调用测试该函数。
	  示例: 原两个数组为:
			 1 2 3 4 5
			 2 3 4 5 6
			 原两个数组相加后为:
			 3 5 7 9 11            */
#include<stdio.h>
int main()
{
	void solve(int a[], int b[], int c[], int n);
	int a[5], b[5], c[5], i, n = 5;
	printf("原两个数组为:\n");
	for (i = 0; i < n; i++) scanf_s("%d", &a[i]);
	for (i = 0; i < n; i++) scanf_s("%d", &b[i]);
	printf("原两个数组相加后为:\n");
	solve(a, b, c, n);
	for (i = 0; i < n; i++)
		printf("%d ", c[i]);
	return 0;
}
void solve(int a[], int b[], int c[], int n)
{
	int i;
	for (i = 0; i < n; i++) c[i] = a[i] + b[i];
}

/*29、编写一个程序,声明一个int类型的3×5二维数组,并用合适的值初始化它。
	  该程序打印数组中的值,然后各值翻倍(即是原值的2倍),并显示出各元素的新值。
	  编写一个函数显示数组的内容,再编写一个函数把各元素的值翻倍。这两个函数都以数组名和行数作为参数。
	  示例: original array:                double array:
			 1   2   3   4   5              2   4   6   8  10
			 6   7   8   9  10              12  14  16  18  20
			 11  12  13  14  15             22  24  26  28  30    */
#include <stdio.h>
void double_arr(int n, int m, double source[3][5]);
void show_arr(int n, int m, double arr1[3][5]);
int main(void)
{
	double arr[3][5] = { {1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15} };
	printf("original array:\n");
	show_arr(3, 5, arr);
	printf("double array:\n");
	double_arr(3, 5, arr);
	show_arr(3, 5, arr);
	return 0;
}
void double_arr(int m, int n, double source[3][5])
{
	for (int i = 0; i < m; i++)
		for (int j = 0; j < n; j++)
			source[i][j] = source[i][j] * 2;
}
void show_arr(int n, int m, double arr1[3][5])
{
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
			printf("%-4.0f", arr1[i][j]);
		printf("\n");
	}
}

/*30、给定一个按非递减顺序排序的整数数组A,返回每个数字的平方组成的新数组,
	  要求也按非递减顺序排序。要求用函数实现。示例: 输入:-4,-1,0,3,10
													 输出:0,1,9,16,100  */
#include<stdio.h>
int main()
{
	int A[5], i, j, temp;
	printf("输入:");
	for (i = 0; i < 5; i++)
	{
		scanf_s("%d", &A[i]);
		A[i] *= A[i];
	}
	for (j = 0; j < 4; j++)
		for (i = 0; i < 4 - i; i++)
			if (A[i] > A[i + 1])
			{
				temp = A[i];
				A[i] = A[i + 1];
				A[i + 1] = temp;
			}
	printf("输出:");
	for (i = 0; i < 5; i++)
		printf("%d,", A[i]);
	return 0;
}

/*31、编写一个函数,返回储存在int类型数组中的最大值;编写一个函数,返回储存在double类型数组中最大值的下标;
	  编写一个函数,把 double类型数组中的数据倒序排列。在一个简单的程序中调用并测试这三个函数。 */
#include <stdio.h>
int main()
{
	int Max(int Array[], int Array_Length);
	int Arr(double Array[], int Array_Length);
	void sort(double Array[], int Array_Length);
	int A[10] = { 1,2,3,4,5,6,7,8,9,0 };
	double B[10] = { 1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0 };
	printf("%d\n", Max(A, 10));
	printf("%d\n", Arr(B, 10));
	sort(B, 10);
	for (int i = 0; i < 10; i++)printf("%.0lf ", B[i]);
	return 0;
}
int Max(int Array[], int Array_Length)//int类型数组中的最大值函数
{
	int Max = Array[0];
	for (int i = 1; i < Array_Length; i++)
		if (Max < Array[i])Max = Array[i];
	return Max;
}
int Arr(double Array[], int Array_Length)//double类型数组中最大值的下标函数
{
	int Max = Array[0], i, Arr;
	for (i = 1, Arr = 0; i < Array_Length; i++)
		if (Max < Array[i])
		{
			Max = Array[i];
			Arr = i;
		} return Arr;
}
void sort(double Array[], int Array_Length)// 将n个数逆序排列函数
{
	int i, temp;
	for (i = 0; i < Array_Length / 2; i++)
	{
		temp = Array[i];
		Array[i] = Array[Array_Length - 1 - i];
		Array[Array_Length - 1 - i] = temp;
	}return;
}

/*32、编写一个程序,提示用户输入3组数,每组数包含5个double类型的数
	 (假设用户都正确地响应,不会输入非数值数据)。该程序应完成下列任务。
	  a.把用户输入的数据储存在3×5的数组中
	  b.计算每组(5个)数据的平均值
	  c.计算所有数据的平均值
	  d.找出这15个数据中的最大值 */
#include <stdio.h>
#define ROW 3
#define LIN 5
void save(double pt[][LIN], int n);
double ave1(double pt[][LIN], int n);
double ave2(double pt[][LIN], int n);
double max(double pt[][LIN], int n);
void show(double ptp[][LIN], int n);
int main(void)
{
	double ajazz[ROW][LIN];
	int i;
	save(ajazz, ROW);
	printf("你输入的数组是:\n");
	show(ajazz, ROW);
	for (i = 0; i < ROW; i++)
		printf("第%d行的平均值为:%.2lf\n", i + 1, ave1(ajazz, i));
	printf("数组的平均数是:%.2lf\n", ave2(ajazz, ROW));
	printf("数组中最大值是:%.2lf\n", max(ajazz, ROW));
	return 0;
}
void save(double pt[][LIN], int n)
{
	double val;
	int i, j;
	printf("Please enter 3 * 5 for value:\n");
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < LIN; j++)
		{
			scanf_s("%lf", &val);
			pt[i][j] = val;
		}
	}
}
void show(double ptp[][LIN], int n)
{
	int i, j;
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < LIN; j++)
			printf("%5.2lf ", ptp[i][j]);
		putchar('\n');
	}
}
double ave1(double pt[][LIN], int n)
{
	int j;
	double ave, sum_row = 0;
	for (j = 0; j < LIN; j++)
		sum_row += pt[n][j];
	ave = sum_row / LIN;
	return ave;
}
double ave2(double pt[][LIN], int n)
{
	int i, j;
	double ave, sum = 0;
	for (i = 0; i < n; i++)
		for (j = 0; j < LIN; j++)
			sum += pt[i][j];
	ave = sum / (ROW * LIN);
	return ave;
}
double max(double pt[][LIN], int n)
{
	int i, j;
	double max = pt[0][0];
	for (i = 0; i < n; i++)
		for (j = 0; j < LIN; j++)
			if (max < pt[i][j])max = pt[i][j];
	return max;
}

/*34、编程求1!+2!+3!+4!+……+12!。(!为阶乘符号)*/
#include <stdio.h>
int main()
{
	double s = 0, t = 1;
	int n;
	for (n = 1; n <= 20; n++)
	{
		t = t * n;
		s = s + t;
	}
	printf("1!+2!+...+20!=%.0lf\n", s);
	//printf("1!+2!+...+20!=%22.15e\n",s);
	//e以指数形式输出单双精度实数
	return 0;
}

/*35、一个球从100米高度落下,每次落地后跳回原高度的一半,再落下,
	  编程求第10次落地时,球共经过的距离为多少米?
	  第10次落地后的反弹高度是多少米? */
#include<stdio.h>
int main()
{
	double a = 100, b = a / 2, c = 100;//开始的初始值100米
	int i;
	for (i = 1; i < 10; i++)//i自加完后循环,循环9次
	{
		c = c + 2 * b;//假设小球从弹起到刚落地一个循环,开始100米落地那次不是循环
		b = b / 2;//第i+1次小球弹起的高度
	}
	printf("共经过的距离为%lf\n", c);
	printf("10落地反弹高度%lf\n", b);
	return 0;
}

/*36、编写程序,找出用户输入的一串数中的最大数。
	  程序需要提示用户一个一个地输入数。
	  当用户输入0或者负数时,程序必须显示出已输入的最大非负数。
	  Enter a number:60
	  Enter a number:78.5
	  Enter a number:1203
	  Enter a number:100.2
	  Enter a number:0
	  The largest number entered was 1203  */
#include<stdio.h>
int main()
{
	int i, N = 5, max = 0;
	for (i = 0; i < N; i++)
	{
		printf("Enter a number:");
		scanf_s("%d", &i);
		if (i > max) max = i;
	}
	printf("The largest number entered was %d", max);
	return 0;
}

/*37、数学常量e的值可以用一个无穷级数表示:e = 1 + 1/1! + 1/2! + 1/3! +……
	  编写程序,用下面的公式计算e的近似值:1 + 1/1! +1/2! + 1/3! +……+ 1/n!,
	  其中n是用户输入的整数。
	  请给出n=50时,e的近似值。*/
#include<stdio.h>
int main()
{
	int i;
	double fenmu = 1, e = 1;
	for (i = 1; i <= 50; i++)
	{
		fenmu = fenmu * i;
		e = e + 1 / fenmu;
	}
	printf("%lf", e);
	return 0;
}

//38、编写程序读入一个整数数组,用于保存5个学生的课程成绩,
//然后用函数调用的形式实现课程的平均分、最高分和最低分的计算
/*请输入第1位同学的成绩:100   
  请输入第2位同学的成绩:100       
  请输入第3位同学的成绩:100
  请输入第4位同学的成绩:100
  请输入第5位同学的成绩:100
  课程平均分是:100    最高分是:100    最低分是100 */
#include<stdio.h>
int main()
{
	float ave(float score[], int n);
	float max(float score[], int n);
	float min(float score[], int n);
	float score[5];
	for (int i = 0; i < 5; i++)
	{
		printf("请输入第%d位同学的分数:", i + 1);
		scanf_s("%f", &score[i]);
	}
	printf("课程平均分是:%7.2f 最高分是:%7.2f 最低分是:%7.2f", ave(score, 5), max(score, 5), min(score, 5));
	return 0;
}
float ave(float score[], int n)
{
	float p, num = 0;
	for (int i = 0; i < n; i++)
		num = num + score[i];
	p = num / n;
	return p;
}
float max(float score[], int n)
{
	float max = score[0];
	for (int i = 0; i < n; i++)
		if (score[i] > max)max = score[i];
	return max;
}
float min(float score[], int n)
{
	float min = score[0];
	for (int i = 0; i < n; i++)
		if (score[i] < min)min = score[i];
	return min;
}

/*41、定义一个结构体变量(包括年、月、日),编写一个函数能够计算一个日期在本年中是第几天(注意闰年的问题),
	  在主函数中将年、月、日传递给功能函数,计算结果返回主函数输出显示。*/
#include <stdio.h>
struct
{
	int year;
	int month;
	int day;
}date;

int main()
{
	int time(int year, int mouth, int day); //声明函数
	int days;
	printf("input year,month,day:");
	scanf_s("%d,%d,%d", &date.year, &date.month, &date.day);
	days = time(date.year, date.month, date.day);
	printf("%d/%d is the %dth day in %d.\n", date.month, date.day, days, date.year);
	return 0;
}
int time(int year, int mouth, int day)
{
	int i, days;
	int day_tab[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
	days = 0;
	for (i = 1; i < date.month; i++)
		days = days + day_tab[i];
	days = days + date.day;
	if ((date.year % 4 == 0 && date.year % 100 != 0 || date.year % 400 == 0) && date.month >= 3)
		days = days + 1;
	return(days);
}

/*43、用指针实现以下程序,输入一个字符串,包括数字和非数字字符,例如:abddf90333?<>2308nfdiufoien8dsuf
	  将其中连续的数字作为一个整数,依次放入一个数组a中,
	  例如90333放在a[0]中,2308放在a[1]中……统计一共出现了多少个整数,并输出这些整数。 */
#include <stdio.h>
int main()
{
	char str[50], * pstr;
	int i, j, k, m, e10, digit, ndigit, a[10], * pa;
	printf("input a string:\n");
	gets_s(str);
	pstr = &str[0];    /*字符指针pstr置于数组str 首地址*/
	pa = &a[0];        /*指针pa置于a数组首地址*/
	ndigit = 0;        /*ndigit代表有多少个整数*/
	i = 0;             /*代表字符串中的第几个字符*/
	j = 0;
	while (*(pstr + i) != '\0')
	{
		if ((*(pstr + i) >= '0') && (*(pstr + i) <= '9'))
			j++;
		else
		{
			if (j > 0)
			{
				digit = *(pstr + i - 1) - 48;          /*将个数位赋予digit*/
				k = 1;
				while (k < j)     /*将含有两位以上数的其它位的数值累计于digit*/
				{
					e10 = 1;
					for (m = 1; m <= k; m++)
						e10 = e10 * 10;                  /*e10代表该位数所应乘的因子*/
					digit = digit + (*(pstr + i - 1 - k) - 48) * e10;  /*将该位数的数值\累加于digit*/
					k++;                   /*位数K自增*/
				}
				*pa = digit;                /*将数值赋予数组a*/
				ndigit++;
				pa++;                    /*指针pa指向a数组下一元素*/
				j = 0;
			}
		}
		i++;
	}
	if (j > 0)                         /*以数字结尾字符串的最后一个数据*/
	{
		digit = *(pstr + i - 1) - 48;          /*将个数位赋予digit*/
		k = 1;
		while (k < j)          /* 将含有两位以上数的其它位的数值累加于digit*/
		{
			e10 = 1;
			for (m = 1; m <= k; m++)
				e10 = e10 * 10;            /*e10代表位数所应乘的因子*/
			digit = digit + (*(pstr + i - 1 - k) - 48) * e10;  /*将该位数的数值累加于digit*/
			k++;  /*位数K自增*/
		}
		*pa = digit;                 /*将数值赋予数组a*/
		ndigit++;
		j = 0;
	}
	printf("There are %d numbers in this line, they are:\n", ndigit);
	pa = &a[0];
	for (j = 0; j < ndigit; j++)            /*打印数据*/
		printf("%d ", *(pa + j));
	printf("\n");
	return 0;
}
/*44、编写一个程序,输入月份号,输出该月的英文月名。例如,输入3,输出“March”,要求按照指针数组处理。*/
#include<stdio.h>
int main()
{
	const char* months[] = { "January","February","March","April","May","June",
		"July","August","September","October","December","November" };
	int number;
	printf("输入:");
	scanf_s("%d", &number);
	printf("输出:");
	printf("%s", *(months + number));
	return 0;
}
/*45、编写一个函数print,打印一个学生的成绩数组,该数组有5个学生的数据记录,
	  每个记录包括num,nam,score[3],用input函数输入这些记录,用print函数输出这些记录。*/
#include<stdio.h>
struct Student
{
	int num;
	char nam[20];
	float score[3];
};
int main()
{
	void input(struct Student student[], int n);
	void print(struct Student student[], int n);
	struct Student student[5];
	input(student, 5);
	print(student, 5);
	return 0;
}
void input(struct Student student[], int n)
{
	for (int i = 0; i < n; i++)
	{
		printf("第%d名学生\n", i + 1);
		printf("请输入学号:");
		scanf_s("%d", &student[i].num);
		getchar();
		printf("请输入姓名:");
		scanf_s("%s", student[i].nam, sizeof(student[i].nam));
		for (int j = 0; j < 3; j++)
		{
			printf("请输入成绩%d:", j + 1);
			scanf_s("%f", &student[i].score[j]);
		}
	}
}
void print(struct Student student[], int n)
{
	printf("学号       姓名       成绩1       成绩2       成绩3\n");
	for (int i = 0; i < n; i++)
		printf("%d       %s      %7.2f      %7.2f      %7.2f\n",
			student[i].num, student[i].nam, student[i].score[0], student[i].score[1], student[i].score[2]);
}
/*46、编写一个程序,将数组a中n个整数按相反顺序存放,需使用指针变量作为实参。*/
#include <stdio.h>
int main()
{
	void sort(char* p, int m);
	int i, n;
	char* p, num[20];
	printf("input n:");
	scanf_s("%d", &n);
	printf("please input these numbers:\n");
	for (i = 0; i < n; i++)
		scanf_s("%d", &num[i]);
	p = &num[0];
	sort(p, n);
	printf("Now,the sequence is:\n");
	for (i = 0; i < n; i++)
		printf("%d ", num[i]);
	printf("\n");
	return 0;
}
void sort(char* p, int m) // 将n个数逆序排列函数 
{
	int i;
	char temp, * p1, * p2;
	for (i = 0; i < m / 2; i++)
	{
		p1 = p + i;
		p2 = p + (m - 1 - i);
		temp = *p1;
		*p1 = *p2;
		*p2 = temp;
	}
}
/*47、编写一个程序,用指针方法对10个整数按由大到小顺序排序,要求使用选择排序法。*/
#include <stdio.h>
int main()
{
	void sort(int x[], int n);
	int i, * p, a[10];
	p = a;
	printf("Please enter 10 integer numbers:\n");
	for (i = 0; i < 10; i++)
		scanf_s("%d", p++);
	p = a;
	sort(p, 10);
	for (p = a, i = 0; i < 10; i++)
		printf("%d ", *p++);
	printf("\n");
	return 0;
}
void sort(int x[], int n)
{
	int i, j, k, t;
	for (i = 0; i < n - 1; i++)
	{
		k = i;
		for (j = i + 1; j < n; j++)
			if (x[j] > x[k])
				k = j;
		if (k != i)
		{
			t = x[i];
			x[i] = x[k];
			x[k] = t;
		}
	}
	/*48、编写一个程序,将字符串a复制为字符串b,然后输出字符串b。要求使用指针变量处理。*/
#include <stdio.h>
	int main()
	{
		char a[] = "I am a boy.", b[20], * p1, * p2;
		p1 = a; p2 = b;                                   // p1,p2分别指向a数组和b数组中的第一个元素
		for (; *p1 != '\0'; p1++, p2++)
			*p2 = *p1;                                  // 将p1所指向的元素的值赋给p2所指向的元素
		*p2 = '\0';                                    // 在复制完全部有效字符后加'\0'
		printf("string a is:%s\n", a);                // 输出a数组中的字符
		printf("string b is:%s\n", b);                // 输出b数组中的字符
		return 0;
	}
	/*49、用函数调用实现字符串的复制
		 (1)用字符数组名作为函数参数
		 (2)用字符型指针变量作实参
		 (3)用字符指针变量作形参和实参  */
		 //(1)
#include <stdio.h>
	int main()
	{
		void copy_string(char from[], char to[]);
		char a[] = "I am a teacher.";
		char b[] = "you are a student.";
		printf("string a=%s\nstring b=%s\n", a, b);
		printf("copy string a to string b:\n");
		copy_string(a, b);
		printf("\nstring a=%s\nstring b=%s\n", a, b);
		return 0;
	}
	void copy_string(char from[], char to[])
	{
		int i = 0;
		while (from[i] != '\0')
		{
			to[i] = from[i]; i++;
		}
		to[i] = '\0';
	}
	
	//(2)
	#include <stdio.h>
	int main()
	{
		void copy_string(char from[], char to[]);
		char a[] = "I am a teacher.";
		char b[] = "you are a student.";
		char* from = a, * to = b;
		printf("string a=%s\nstring b=%s\n", a, b);
		printf("\ncopy string a to string b:\n");
		copy_string(from, to);
		printf("string a=%s\nstring b=%s\n", a, b);
		return 0;
	}
	void copy_string(char from[], char to[])
	{
		int i = 0;
		while (from[i] != '\0')
		{
			to[i] = from[i]; i++;
		}
		to[i] = '\0';
	}
	//(3)
	#include <stdio.h>
	int main()
	{
		void copy_string(char* from, char* to);
		char* a = "I am a teacher.";
		char b[] = "You are a student.";
		char* p = b;                                             // 使指针变量p指向b数组首元素
		printf("string a=%s\nstring b=%s\n", a, b);              // 输出a串和b串
		printf("\ncopy string a to string b:\n");
		copy_string(a, p);                                      // 调用copy_string函数,实现复制
		printf("string a=%s\nstring b=%s\n", a, b);
		return 0;
	}
	void copy_string(char* from, char* to)                  // 定义函数,形参为字符指针变量
	{
		for (; *from != '\0'; from++, to++)
		{
			*to = *from;
		}
		*to = '\0';
	}
	/*50、建立动态数组,输入5个学生的成绩,另外用一个函数检查其中有无低于60分的,输出不合格的成绩*/
#include <stdio.h>
#include <stdlib.h>
	int main(void)
	{
		void check(int*);
		int* p1, i;
		p1 = (int*)malloc(5 * sizeof(int));//动态开辟一段空间,作为动态数组使用 
		for (i = 0; i < 5; i++)
			scanf_s("%d", p1 + i);
		check(p1);
		return 0;
	}
	void check(int* p)
	{
		int i;
		for (i = 0; i < 5; i++)
			if (p[i] < 60)
				printf("%d\t", p[i]);
		printf("\n");
	}
	/*51、编写一个程序,实现:3个学生各学4门课,计算总平均分,然后在输入一个学生的编号后显示出他的其他成绩*/
#include <stdio.h>
#include <stdlib.h>
	int aver(int* p, int n);//指向数组元素的指针。
	int search(int(*p)[4], int n);//指向4个元素的数组指针。
	int main()
	{
		int score[3][4] = { {65,67,79,60},{80,87,90,81},{90,99,100,98} }, n;
		aver(*score, 12);
		printf("输入一个学生的编号:");
		scanf_s("%d", &n);
		search(score, n);
		return 0;
	}
	int aver(int* p, int n)
	{
		int aver, sum = 0;
		int* p_end;
		p_end = p + n - 1;
		for (; p <= p_end; p++)
			sum = sum + (*p);
		aver = sum / n;
		printf("average=%4d\n", aver);
		return 0;
	}
	int search(int(*p)[4], int n)
	{
		int i;
		printf("NO.%d :\n", n);
		for (i = 0; i < 4; i++)
			printf("%4d", *(*(p + n) + i));
		printf("\n");
		return 0;
	}
	/*52、生成一个指定长度的字符串,并用随机生成的字符填充。字符串的长度仅受限于可用内存的长度。*/
#include <stdio.h>  /* printf, scanf, NULL */
#include <stdlib.h>  /* malloc, free, rand, system */
	int main()
	{
		int i, n;
		char* buffer;
		printf("输入字符串的长度:");
		scanf_s("%d", &i);
		buffer = (char*)malloc(i + 1);  // 字符串最后包含 \0
		if (buffer == NULL) exit(1);  // 判断是否分配成功
		// 随机生成字符串
		for (n = 0; n < i; n++)
			buffer[n] = rand() % 26 + 'a';
		buffer[i] = '\0';
		printf("随机生成的字符串为:%s\n", buffer);
		free(buffer);  // 释放内存空间
		system("pause");
		return 0;
	}
	/*53把一个学生的信息(包括学号、姓名、性别、住址)放在一个结构体变量中,然后输出这个学生的信息*/
#include <stdio.h>
	int main()
	{
		struct student
		{
			long int num;
			char name[20];
			char sex;
			char addr[20];
		}a = { 2020010111,"Li Lin",'M',"123 Beijing Road" };
		printf("NO.:%ld\nname:%s\nsex:%c\naddress:%s\n", a.num, a.name, a.sex, a.addr);
		return 0;
	}
	/*54、利用结构体,输入两个学生的学号、姓名和成绩,输出成绩较高的学生的学号、姓名和成绩。*/
#include <stdio.h>
	int main()
	{
		struct student                      // 声明结构体类型struct student 
		{
			int num;
			char name[20];
			float score;
		}student1, student2;                 // 定义两个结构体变量seudent1,student2 
		scanf_s("%d%s%f", &student1.num, student1.name, sizeof(student1.name), &student1.score);    //输入学生的数据
		scanf_s("%d%s%f", &student2.num, student2.name, sizeof(student2.name), &student2.score);    //输入学生的数据
		printf("The higher score is:\n");
		if (student1.score > student2.score)
			printf("%d  %s  %6.2f\n", student1.num, student1.name, student1.score);
		else if (student1.score < student2.score)
			printf("%d  %s  %6.2f\n", student2.num, student2.name, student2.score);
		else
		{
			printf("%d  %s  %6.2f\n", student1.num, student1.name, student1.score);
			printf("%d  %s  %6.2f\n", student2.num, student2.name, student2.score);
		}
		return 0;
	}
	/*55、结构体数组:有3个候选人,每个选民只能投票选一人,
	  要求编一个统计选票的程序,先后输入被选人的名字,最后输出各人得票结果*/
#include <string.h>
#include <stdio.h>
	struct person                               // 声明结构体类型struct person
	{
		char name[20];                           // 候选人姓名
		int count;                               // 候选人得票数 
	}leader[3] = { "Li",0,"Zhang",0,"Sun",0 };    // 定义结构体数组并初始化
	int main()
	{
		int i, j;
		char leader_name[20];                    // 定义字符数组 
		for (i = 1; i <= 3; i++)
		{
			scanf_s("%s", leader_name, sizeof(leader_name));              // 输入所选的候选人姓名  
			for (j = 0; j < 3; j++)
				if (strcmp(leader_name, leader[j].name) == 0) leader[j].count++;
		}
		printf("\nResoult:\n");
		for (i = 0; i < 3; i++)
			printf("%5s:%d\n", leader[i].name, leader[i].count);
		return 0;
	}
	/*56、有n个学生的信息(包括学号、姓名、成绩),要求按照成绩的高低顺序输出各学生的信息。
	  要求使用结构体数组有关知识。*/
#include <stdio.h>
	struct student                                       // 声明结构体类型struct student  
	{
		int num;
		char name[20];
		float score;
	};
	int main()
	{
		struct student stu[5] = { {10101,"Zhang",78},{10103,"Wang",98.5},{10106,"Li",86},
			   {10108,"Ling",73.5},{10110,"Fun",100} };    // 定义结倒构体数组并初始化 
		struct student temp;                              //定义结构体变量temp,用作交换时的临时变量  
		const int n = 5;
		int i, j, k;
		printf("The order is:\n");
		for (i = 0; i < n - 1; i++)
		{
			k = i;
			for (j = i + 1; j < n; j++)
				if (stu[j].score > stu[k].score)                // 进行成绩的比较   
					k = j;
			temp = stu[k]; stu[k] = stu[i]; stu[i] = temp;           // stu[k]和stu[i]元素互换  
		}
		for (i = 0; i < n; i++)
			printf("%6d %8s %6.2f\n", stu[i].num, stu[i].name, stu[i].score);
		printf("\n");
		return 0;
	}
	/*57、有3个学生的信息,放在结构体数组中,要求输出全部学生的信息。要求使用结构体指针有关知识。*/
#include <stdio.h>
	struct student
	{
		int num;
		char name[20];
		char sex;
		int age;
	};
	struct student stu[3] = { {10101,"Li Lin",'M',18},{10102,"Zhang Fun",'M',19},{10104,"Wang Min",'F',20} };
	// 定义结构体数组并初始化 
	int main()
	{
		struct student* p;                                            //定义指向struct student结构体的数组 
		printf(" No.  Name                 sex age\n");
		for (p = stu; p < stu + 3; p++)
			printf("%5d %-20s %2c %4d\n", p->num, p->name, p->sex, p->age);//p-num等价(*p).num
		return 0;
	}
	/*58、有n个结构体变量,内含学生学号、姓名和3门课程的成绩。
	  要求输出平均成绩最高的学生的信息(包括学号、姓名、3门课程成绩和平均成绩)。*/
#include <stdio.h>
#define N 2                                     // 学生数为3  
	struct student                                  // 建立结构体类型struct student  
	{
		int num;                                      // 学号  
		char name[20];                                // 姓名   
		float score[3];                               // 3门课成绩  
		float aver;                                   // 平均成绩  
	};
	int main()
	{
		void input(struct student stu[]);             // 函数声明  
		struct student max(struct student stu[]);     // 函数声明    
		void print(struct student stu);               // 函数声明  
		struct student stu[N], * p = stu;                 // 定义结构体数组和指针  
		input(p);                                     // 调用input函数  
		print(max(p));                                // 调用print函数,以max函数的返回值作为实参  
		return 0;
	}
	void input(struct student stu[])   // 定义input 函数  
	{
		int i;
		printf("请输入各学生的信息:学号、姓名、三门课成绩:\n");
		for (i = 0; i < N; i++)
		{
			scanf_s("%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].aver = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2]) / 3.0;                                   // 求各人平均成绩  
		}
	}
	struct student max(struct student stu[])          // 定义max 函数  
	{
		int i, m = 0;                                       // 用m存放成绩最高的学生在数组中的序号  
		for (i = 0; i < N; i++)
			if (stu[i].aver > stu[m].aver) m = i;            // 找出平均成绩最高的学生在数组中的序号    
		return stu[m];                                  // 返回包含该生信息的结构体元素  
	}
	void print(struct student stud)                   // 定义print函数  
	{
		printf("\n成绩最高的学生是:\n");
		printf("学号:%d\n姓名:%s\n三门课成绩:%5.1f,%5.1f,%5.1f\n平均成绩:%6.2f\n",
			stud.num, stud.name, stud.score[0], stud.score[1], stud.score[2], stud.aver);
	}
	/*59、编写一个程序,录入每位同学的信息,包括学号,姓名,c语言成绩,数学成绩以及英语成绩。要求:
		  1)从键盘上输入N名同学的成绩;
		  2)求出每名同学的总成绩和平均分;
		  3)输出每名同学的信息,包括学号,姓名,总分,平均分;
		  4)按照c语言成绩排序输出                              */
#include <stdio.h>
#define M  5
#define N  3 
	int i, j, m, cj[M][N];
	float pj[M], Pj[N];
	void main()
	{
		float sum(int i);
		float mpj(int i);
		void sort();
		void bjg();
		printf("            学号   k1 k2 k3\n");
		for (i = 0; i < M; i++)
		{
			printf(" input number %d cj:", i + 1);
			for (j = 0; j < N; j++)
				scanf_s("%d", &cj[i][j]);
		}
		printf("\n");
	c:  printf("\t\t\t1--每个学生的平均成绩\n\t\t\t2--每门课的平均分\n\t\t\t3--按平均分降序排列\n\t\t\t4--不及格学生及其科目\n\t\t\t0--退出\n\n");
		printf("\t\t请选择<0--4>:");
		scanf_s("%d", &m);
		if (m == 1)
		{
			for (i = 1; i <= M; i++)
			{
				pj[i - 1] = sum(i - 1) / N;
				printf("\t\t学号%d,平均成绩%.2f\n", i, pj[i - 1]);
			} goto c;
		}
		if (m == 2)
			for (i = 0; i < N; i++)
			{
				Pj[i] = mpj(i);
				printf("\t\t科目%d的平均分%.2f\n", i + 1, Pj[i]);
			} goto c;
		if (m == 3) sort(); goto c;
		if (m == 4) bjg(); goto c;
		if (m == 0);
	}
	float sum(int i)
	{
		float s = 0.0;
		for (j = 0; j < N; j++)
			s += cj[i][j];
		return(s);
	}
	float mpj(int i)
	{
		float s = 0.0;
		for (j = 0; j < M; j++)
			s += cj[j][i];
		return(s / M);
	}
	void sort()
	{
		int k = 0, l;
		float t;
		for (j = 0; j < M; k = j, j++)
		{
			for (i = j + 1; i < M; i++)
				if (pj[j] < pj[i])
					t = pj[j], pj[j] = pj[i], pj[i] = t, k = i;
			printf("\t\t学号%d,平均分%.2f,成绩", k + 1, pj[j]);
			for (l = 0; l < N; l++)
				printf("%-3d", cj[k][l]);
			printf("\n");
		}
	}
	void bjg()
	{
		for (i = 0; i < M; i++)
			for (j = 0; j < N; j++)
				if (cj[i][j] < 60)
					printf("\t\t不及格学号%d,科目%d得分%d\n", i + 1, j + 1, cj[i][j]);
	}
	/*60、定义一个表示日期的结构体变量(包括年、月、日),并实现以下要求:
		  1)编写一个函数,用于让用户输入年、月、日,函数参数为结构体指针;
		  2)编写一个函数,实现用“日/月/年”格式输出日期(例如21/12/2020),函数参数为结构体变量;
		  3)编写一个函数,计算一个日期在本年中是第几天(注意闰年的问题),函数参数为要计算的日期(年、月、日),计算结果为函数返回值;
		  4)编写一个main函数,可以测试以上函数的功能,并给出2020年5月15日是这一年中的第几天。         */
#include<stdio.h>
	struct Date
	{
		int year;
		int month;
		int day;
	};
	void input(Date* date)
	{
		printf("请输入年:");
		scanf_s("%d", &date->year);
		printf("请输入月:");
		scanf_s("%d", &date->month);
		printf("请输入日:");
		scanf_s("%d", &date->day);
	}
	void print(Date date)
	{
		printf("%d/%d/%d\n", date.day, date.month, date.year);
	}
	int summ(int year, int month, int day)
	{
		int sum = 0;
		int i;
		sum = day;
		int m[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
		for (i = 0; i < month - 1; i++)
			sum = sum + m[i];
		if (((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) && month > 2)
			sum = sum + 1;
		else
			sum = sum;
		return sum;
	}
	int main()
	{
		Date date;
		int sum;
		input(&date);
		print(date);
		sum = summ(date.year, date.month, date.day);
		printf("%d年%d月%d日是%d年第%d天", date.year, date.month, date.day, date.year, sum);
		return 0;
	}


​

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

燕归来大王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值