(c语言)作业讲解

例一:

题目:(c语言)作业讲解_第1张图片

答案: 

#include
#include
int main()
{
	int x;
	double sum=0; int g = 0; int i = 0;
	scanf("%d",&x);
	while (x > 0)
	{
		g = x % 10;
		if (g % 2 == 0)
		{
			g = 0;
		}
		else
		{
			g = 1;
		}
		sum += g*pow(10,i); //pow函数的返回值为double类型
		i++;
		x /= 10;
	}
	printf("%.0lf",sum);
	return 0;
}

 (c语言)作业讲解_第2张图片

例二: 

题目: 

(c语言)作业讲解_第3张图片

答案: 

#include
#include
int main()
{
	int x,i,j,n;
	scanf("%d",&x);
	n = x;
	while (n--)
	{
		for (i = 0; i < n; i++)
		{
			printf("  ");
		}
		for (j = n+1; j <= x; j++)
		{
			printf("* ");
		}
		printf("\n");
	}
	return 0;
}

(c语言)作业讲解_第4张图片

例三: 

题目: 

(c语言)作业讲解_第5张图片

答案: 

#include
int main()
{
  double value;
  int m, d, h;
  scanf("%lf %d %d %d", &value, &m, &d, &h);
  if (m == 11 && d == 11)
  {
    value *= 0.7;
    if (h == 1)
    {
      value -= 50.0;
    }
  }
  if (m == 12 && d == 12)
  {
    value *= 0.8;
    if (h == 1)
    {
      value -= 50;
    }
  }
  printf("%.2lf",value);
}

 (c语言)作业讲解_第6张图片

例四: 

题目: 

 (c语言)作业讲解_第7张图片

答案: 

 D

原码、反码、补码的最高位是0表示正数,1表示负数 

例五: 

题目: 

 (c语言)作业讲解_第8张图片

答案: 

 C

#include
int main()
{
  unsigned char a = 200;
  unsigned char b = 100;
  unsigned char c = 0;
  //无符号字符型可存储数据大小为0~255,故不存在数据溢出和截断
  //0000 0000 0000 0000 0000 0000 1100 1000——(int)200
  //1100 1000——(unsigned char)200
  //0000 0000 0000 0000 0000 0000 0110 0100——(int)100
  //0110 0100——(unsigned char)100
  c = a + b;
  //0000 0000 0000 0000 0000 0001 0010 1100——(int)300
  //0010 1100——(unsigned char)200 ==44   发生截断
  printf("%d %d",a+b,c);
  //故a+b=300,c=44
}

 (c语言)作业讲解_第9张图片

例六: 

题目: 

 (c语言)作业讲解_第10张图片

答案: 

A

大端存储:低位数据放在高位,高位数据放在低位

小端存储:低位数据放在低位,高位数据放在高位

a大端存储:00 00 12 34

a小端存储:34 12 00 00 

变为字符型往后读取一个字节 00

例七: 

题目: 

 (c语言)作业讲解_第11张图片

答案: 

 C

#include
#include
int main()
{
	char a[1000] = {0};
	//字符型的数据存储范围为-127~128
	int i = 0;
	for (i = 0; i < 1000; i++)
	{
		a[i] = -1 - i;    //当数据超过存储范围时就不会执行赋值
	}
	printf("%d",strlen(a));
	//故最后数组里的元素只会有-127~128,也就是255个
	return 0;
}

 例八:

题目: 

(c语言)作业讲解_第12张图片

答案: 

 D

大端存储:低位数据放在高位,高位数据放在低位

小端存储:低位数据放在低位,高位数据放在高位

在计算机领域,大小端(Endianness)是指字节序的排列顺序。

字节序,就是 大于一个字节类型的数据在内存中的存放顺序。

例九: 

题目: 

(c语言)作业讲解_第13张图片

 答案:

#include
//将所有的可能性都穷举出来,然后符合条件的返回值为1,相加为1说明两个中只有一个是对的
//不能用||判断,这样不能排除两个条件都为真的情况
int main()
{
	int a, b, c, d,e;
	for (a = 1; a <= 5; a++)
	{
		for (b = 1; b <= 5; b++)
		{
			for (c = 1; c <= 5; c++)
			{
				for (d = 1; d <= 5; d++)
				{
					for (e = 1; e <= 5; e++)
					{
						if (((b==2)+(a==3)==1)&&((b==2)+(e==4)==1)&&((c==1)+(d==2)==1)&&((c==5)+(d==3)==1)&&((e==4)+(a==1)==1))
						{
							if (a*b*c*d*e==120)
							{
								printf("a=%d b=%d c=%d d=%d e=%d\n", a, b, c, d, e);
							}
						}
					}
				}
			}
		}
	}
	return 0;
}

 例十:

题目: 

(c语言)作业讲解_第14张图片

答案: 

#include
int main()
{
	char killer;
	for (killer = 'a'; killer <= 'd'; killer++)    //穷举法
	{
		if ((killer != 'a') + (killer == 'c') + (killer == 'd') + (killer != 'd') == 3)
		{
			printf("killer为%c",killer);
		}
	}
	return 0;
}

 例十一:

题目: 

(c语言)作业讲解_第15张图片

答案: 

#include	//杨辉三角
int main()
{
	int i, j;
	int z = 11;
	int arr[10][10] = {0};
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j < 10; j++)
		{
			arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];   //观察其规律即可
			if (j == 0 || i == j)
			{
				arr[i][j] = 1;
			}
		}
	}
	for (i = 0; i < 10; i++)
	{
		int u = z;
			for (z; z > 0; z--)
			{
				printf(" ");
			}
			z = u - 1;
			for (j = 0; j <= i; j++)
			{
				printf(" %d ", arr[i][j]);
			}
		printf("\n");
	}
	return 0;
}

例十二:

题目: 

(c语言)作业讲解_第16张图片

答案: 

A

free释放掉指针内容后,指针变量的值不会进行处理 

例十三:

题目: 

 (c语言)作业讲解_第17张图片

答案: 

C

字符串赋值时,赋值的是其首元素的地址 

例十四:

题目: 

(c语言)作业讲解_第18张图片

答案: 

 C

数组指针是指向数组的指针

指针数组是存放指针的数组

例十五:

题目: 

(c语言)作业讲解_第19张图片

答案: 

 C

例十六: 

题目: 

(c语言)作业讲解_第20张图片

答案: 

例十七: 

题目: 

(c语言)作业讲解_第21张图片

答案: 

例十八: 

题目: 

(c语言)作业讲解_第22张图片

答案: 

例十九: 

题目: 

(c语言)作业讲解_第23张图片

答案: 

 D

例二十: 

题目: 

(c语言)作业讲解_第24张图片

答案: 

例二十一: 

题目: 

(c语言)作业讲解_第25张图片

答案: 

例二十一: 

题目: 

(c语言)作业讲解_第26张图片

(c语言)作业讲解_第27张图片

答案: 

str1和str2是在不同存储空间内字符串的首地址,所以不相同

str3和str4都是字符串的首元素地址,故相等

例二十二: 

题目:

(c语言)作业讲解_第28张图片

答案: 

例二十三: 

题目:

(c语言)作业讲解_第29张图片

答案: 

解法1:

#include		//左旋函数
#include
void left_turn(char arr[], int x)
{
	int i;
	int lenth = strlen(arr);
	x %= lenth;   //简化循环次数
	for(i=0;i

解法2:

(c语言)作业讲解_第30张图片

#include		//左旋函数
#include
void reverse(char* left, char* right)  //交换函数
{
	while (left < right)
	{
		char t = *left;
		*left = *right;
		*right = t;
		left++;
		right--;
	}
}
void left_turn(char arr[], int x)
{
	int len = strlen(arr);
	x %= len;
	reverse(arr,arr+x-1);  //交换前一部分
	reverse(arr+x,arr+len-1);	//交换后一部分
	reverse(arr,arr+len-1);	//交换整体
}
int main()
{
	char arr[] = "ABCD";
	int x;
	scanf("%d", &x);//左旋的次数
	left_turn(arr, x);
	printf("%s", arr);
	return 0;
}

例二十四: 

题目:

(c语言)作业讲解_第31张图片

答案: 

(c语言)作业讲解_第32张图片

#include
int find_num(int arr[3][3], int r, int c, int k)   //r为矩阵的行数,c为矩阵的列数
{
	int x = 0;
	int y = c - 1;
	while (x<=r-1&&y>=0)
	{
		if (k > arr[x][y])  //如果查找的数大于一行的最大数,则比较下一行的最大数
		{
			x++;
		}
		else if (k < arr[x][y])//如果查找的数小于一行的最大数,则比较后一列的数
		{
			y--;
		}
		else
		{
            printf("行:%d 列:%d",x+1,y+1);
			return 1;	//如果相等则说明找到了,返回1
		}
	}
	return 0;	//没找到返回0
}
int main()
{
	int arr[3][3] = {1,2,3,4,5,6,7,8,9};
	int k = 0;
	scanf("%d",&k);  //需要查找的数
	int ret = find_num(arr,3,3,k);
	if (ret==1)
	{
		printf("查找的数存在\n");
	}
	else
	{
		printf("查找的数不存在\n");
	}
	return 0;
}

例二十五: 

题目:

 (c语言)作业讲解_第33张图片

答案: 

例二十六: 

题目:

(c语言)作业讲解_第34张图片

答案: 

回调函数就是一个通过函数指针调用的函数。

如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。

回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

例二十七: 

题目:

 (c语言)作业讲解_第35张图片

答案: 

#include
#include
int PanDuan_string(char arr1[10], char arr2[10])
{
	int len = (int)strlen(arr1);
	int count = 0;
	for (int j = 0; j < len; j++)
	{
		char c = arr1[0];    //将第一个元素存放在c中
		for (int i = 0; i < len - 1; i++)
		{
			arr1[i] = arr1[i + 1];
		}
		arr1[len - 1] = c;
		if (strcmp(arr1,arr2)==0)  //如果相等则返回1
		{
			return 1;
		}
	}
	return 0;   //遍历结束没有相等的说明没找到,返回0
}
int main()
{
	char arr1[10]="ABCDE";
	char arr2[10] = "CDEAB";
	int p=PanDuan_string(arr1,arr2);
	if (p == 1)
	{
		printf("是由旋转得到\n");
	}
	else
	{
		printf("不是由旋转得到\n");
	}
	return 0;
}

(c语言)作业讲解_第36张图片

例二十八: 

题目:

(c语言)作业讲解_第37张图片

答案: 

数组名为数组的首元素地址,该数组的元素为字符串,字符串赋值的为字符串的首元素地址,故该数组的数组名为二维指针。​​​​​​​

例二十九: 

题目:

 (c语言)作业讲解_第38张图片

答案: 

二维数组的元素为一维数组,故二维数组的元素名为数组指针。

例三十: 

题目:

 (c语言)作业讲解_第39张图片

答案: 

 B

例三十一: 

题目:

(c语言)作业讲解_第40张图片

答案: 

#include
int main()
{
	int m, n,i,j;
	int arr[10][10];
	scanf("%d %d",&m,&n);
	for (i = 0; i < m; i++)
	{
		for (j = 0; j < n; j++)
		{
			scanf("%d",&arr[i][j]);
		}
	}
	printf("\n");
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < m; j++)
		{
			printf("%d ", arr[j][i]);
		}
		printf("\n");
	}
	return 0;
}

(c语言)作业讲解_第41张图片

例三十二: 

题目:

(c语言)作业讲解_第42张图片

答案: 

#include
int main()
{
	int m,i,j;
	int z = 0;
	int arr[10][10];
	scanf("%d",&m);
	for (i = 0; i < m; i++)
	{
		for (j = 0; j < m; j++)
		{
			scanf("%d",&arr[i][j]);
		}
	}
	for (i = 0; i < m; i++)
	{
		for (j = 0; j < m; j++)
		{
			if (i > j && arr[i][j] != 0)
			{
				z = 1;
			}
		}
	}
	if (z == 1)
	{
		printf("NO\n");
	}
	else
	{
		printf("YES\n");
	}
	return 0;
}

(c语言)作业讲解_第43张图片

例三十三: 

题目:

(c语言)作业讲解_第44张图片

答案: 

#include
int main()
{
	int i,k;
	int a = 0, b = 0;
	int arr[50];
	scanf("%d",&k);
	if (k < 3)
	{
		printf("输入数据较少\n");
		return 0;
	}
	for (i = 0; i < k; i++)
	{
		scanf("%d",&arr[i]);
	}
	for (i = 0; i =arr[i + 1])
		{
			a = 1;
		}
		else if (arr[i] < arr[i + 1])
		{
			b = 1;
		}
	}
	if ((a+b)<=1)
	{
		printf("sorted\n");
	}
	else
	{
		printf("unsorted\n");
	}
	return 0;
}

(c语言)作业讲解_第45张图片​​​​​​​

你可能感兴趣的:(c语言,c语言,算法,笔记)