文章目录

  • C编程题
  • 第1题:功能: 输入两个整数, 求他们的按位与。
  • 第2题:功能: 有 n 个整数, 使其前面各数顺序向后移 m 个位置, 最后 m 个数变成最前面的 m 个数
  • 第3题:功能: seek()函数: 判断是否有不合格成绩;形参: 1 个, 指向由 3 个 int 型元素组成的 1 维数组的行指针变量返回值:(1)有不合格成绩, 则返回指向本行首列的一个(列)指针;(2)没有有不合格成绩, 返回值为指向下一行的一个(列)指针
  • 第4题:功能: 输入一个学生的生日(年: y0、 月: m0、 日: d0), 并输入当前日期(年: y1、 月: m1、 日: d1)。 求出该学生的年龄(实足年龄)
  • 第5题:功能: 编程求某年第 n 天的日期。 用数组表示月天数。
  • 第6题:功能: 算式: ? 2 * 7? = 3848 中缺少一个十位数和一个个位数。 编程求出使该算式成立时的这两个数, 并输出正确的算式。
  • 功能: 编程求任意给两个日期(年 月 日)相差的天数。


C编程题

第1题:功能: 输入两个整数, 求他们的按位与。

//功能: 输入两个整数, 求他们的按位与。
void main()
{
	int x, y, z = 0, a, b, k = 1;
	scanf("%d%d", &x, &y);
	while (x>0 && y>0)
	{
		a = x % 2;
		/***********SPACE***********/
		x = x/2;
		b = y % 2;
		y = y / 2;
		/***********SPACE***********/
		z = z + a*b*k;
		k = k * 2;
	} 
		
		printf("z=%d\n", z);
}

第2题:功能: 有 n 个整数, 使其前面各数顺序向后移 m 个位置, 最后 m 个数变成最前面的 m 个数

int main()
{
	int number[20], n, m, i;
	printf("the total numbers is:");
	scanf("%d", &n);
	printf("back m:");
	scanf("%d", &m);
	for (i = 0; i<n; i++)
		scanf("%d", &number[i]);
	
	/***********SPACE***********/
	move(number,n,m);
	for (i = 0; i < n - 1; i++)
	printf("%d,", number[i]);
	printf("%d", number[n - 1]);
} 
 move(array,n,m)
int n, m, array[20];
{
	int *p, array_end;
	/***********SPACE***********/
	array_end = *(array+n-1);//最后一个元素放到array_end
	for (p = array + n - 1; p>array; p--)
		/***********SPACE***********/
		*p = *(p-1);//倒数第2个放到最后一个位置,一次向后放
	*array = array_end;//循环完之后把最后一个元素放到第一个位置
	m--;//右移次数减1
	if (m>0) move(array, n, m);//再次调用
}

第3题:功能: seek()函数: 判断是否有不合格成绩;形参: 1 个, 指向由 3 个 int 型元素组成的 1 维数组的行指针变量返回值:(1)有不合格成绩, 则返回指向本行首列的一个(列)指针;(2)没有有不合格成绩, 返回值为指向下一行的一个(列)指针

//功能: seek()函数: 判断是否有不合格成绩; 形参: 1 个, 指
//向由 3 个 int 型元素组成的 1 维数组的行指针变量返回值:
//(1)有不合格成绩, 则返回指向本行首列的一个(列)指针;
//(2)没有有不合格成绩, 返回值为指向下一行的一个
//(列)指针
int *seek(int(*pnt_row)[3])
{
	int i = 0, *pnt_col;
	/***********SPACE***********/
	 pnt_col= *(pnt_row + 1);//+1指向第2个一维数组解引用降一级变为指向其一维数组的首元素的指针
	for (; i<3; i++)
	if (*(*pnt_row + i)<60)//判断这一行有没有不及格的
	{
		pnt_col = *pnt_row;
		break; /*退出循环*/
	} 

		return(pnt_col);
}
int main()
{
	static int grade[3][3] = { { 55, 65, 75 }, { 65, 75, 85 }, { 75, 80, 90 } };
	int i, j, *pointer;
	for (i = 0; i < 3; i++)
	{
		/***********SPACE***********/
		pointer = seek(grade[i]);//每次传的是二维数组的元素一维数组的地址

		if (pointer == *(grade + i))//若返回的该行首列的地址说明没有不及格的
		{
			printf("No.%d grade list: ", i + 1);
			for (j = 0; j < 3; j++)
				/***********SPACE***********/
				printf("%d ", *(pointer+j));
			printf("\n");
		}
	}
}

第4题:功能: 输入一个学生的生日(年: y0、 月: m0、 日: d0), 并输入当前日期(年: y1、 月: m1、 日: d1)。 求出该学生的年龄(实足年龄)

#include <stdio.h>
main()
{
	int age, y0, y1, m0, m1, d0, d1;
	printf("输入生日日期(年,月,日) ");
	/***********SPACE***********/
	scanf("%d%d%d", &y0, &m0, &d0);
	printf("输入当前日期(年,月,日)");
	scanf("%d%d%d", &y1, &m1, &d1);
	age = y1 - y0;
	/***********SPACE***********/
	if (m0>m1)age--;
	/***********SPACE***********/
	if ((m0==m1) && (d0>d1))age--;
	printf("age=%3d", age);
}

第5题:功能: 编程求某年第 n 天的日期。 用数组表示月天数。

//功能: 编程求某年第 n 天的日期。 用数组表示月天数。
#include<stdio.h>
int main()
{
	int y,f, n;
	int a[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	printf("y,n=");
	scanf("%d%d", &y, &n);
	/***********SPACE***********/
	f = y % 4 == 0 && y % 100 != 0 || y % 400 == 0;
	a[1]+=f;
	if (n<1 || n>365 + f)
	{
		printf("error!\n"); exit(0);
	} 
	int i = 0;
	while (n > 0){
		n -= a[i];
		i++;
	}
	
	 if (n <= 0){
		i--;//天数循环中多加了一次
		n += a[i];//再把日前天数加回来
	}
	printf("年=%d,月份=%d,日期=%d\n", y, i+1, n);
}

第6题:功能: 算式: ? 2 * 7? = 3848 中缺少一个十位数和一个个位数。 编程求出使该算式成立时的这两个数, 并输出正确的算式。

int main()
{
	int x, y;
	/***********SPACE***********/
	for (x = 1; x < 10; x++)//十位不能有10
		/***********SPACE***********/
	for (y = 0; y < 10; y++)//各位可以有0
		/***********SPACE***********/
	if ((10 * x + 2)*(70 + y) == 3848)
	{
		/***********SPACE***********/
		printf("%d*%d=3848\n", x*10+2, 70+y);
		exit(0);
	}
}

功能: 编程求任意给两个日期(年 月 日)相差的天数。

#include <stdio.h>
int date(int n, int m1, int d1, int m, int m2, int d2)
{   //n  起始年份  m  末年份
	int i, j, k, t1, t2, q, y, sum = 0;
	int a[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
	for (i = n; i <= m; i++)
	{
		if (i == n)//起始年是月份从输入的m1月开始
			t1 = m1;
		else t1 = 1;//其他的起始月份从1月开始

		if (i == m)//末尾年月份从m2结束
			t2 = m2;//否则再12结束
		else t2 = 12;
		//起始月份到末月份
		for (j = t1; j <= t2; j++)
		{    //判断当前年是否是闰年
			if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0)//判断该年是否是闰年
				a[2] = 29;
			else a[2] = 28;

			if (i == n&&j == m1)//起始年并且是起始月q从d1天开始
				q = d1;
			else q = 1;
			if (i == m&&j == m2)//末尾年并且是末尾月y从d2天结束
				y = d2;
			else y = a[j];//否则就是本月的最后一天

			for (k = q; k <= y; k++)
			{  //起始日+到末尾日
				sum++;
			}
		}
	}
	printf("%d", sum - 1);

}
int main()
{
	int n, m, m1, m2, d1, d2;
	int sum;
	scanf("%d %d %d", &n, &m1, &d1);//起始年月日 
	scanf("%d %d %d", &m, &m2, &d2);//最终年月日 
	date(n, m1, d1, m, m2, d2);
	return 0;
}