当前位置: 首页 > article >正文

(c语言进阶)作业讲解

例一:

题目:

答案: 

#include<stdio.h>
#include<math.h>
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;
}

 

例二: 

题目: 

答案: 

#include<stdio.h>
#include<math.h>
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;
}

例三: 

题目: 

答案: 

#include<stdio.h>
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);
}

 

例四: 

题目: 

 

答案: 

 D

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

例五: 

题目: 

 

答案: 

 C

#include<stdio.h>
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
}

 

例六: 

题目: 

 

答案: 

A

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

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

a大端存储:00 00 12 34

a小端存储:34 12 00 00 

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

例七: 

题目: 

 

答案: 

 C

#include<stdio.h>
#include<string.h>
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;
}

 例八:

题目: 

答案: 

 D

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

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

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

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

例九: 

题目: 

 答案:

#include<stdio.h>
//将所有的可能性都穷举出来,然后符合条件的返回值为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;
}

 例十:

题目: 

答案: 

#include<stdio.h>
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;
}

 例十一:

题目: 

答案: 

#include<stdio.h>	//杨辉三角
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;
}

例十二:

题目: 

答案: 

A

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

例十三:

题目: 

 

答案: 

C

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

例十四:

题目: 

答案: 

 C

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

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

例十五:

题目: 

答案: 

 C

例十六: 

题目: 

答案: 

例十七: 

题目: 

答案: 

例十八: 

题目: 

答案: 

例十九: 

题目: 

答案: 

 D

例二十: 

题目: 

答案: 

例二十一: 

题目: 

答案: 

例二十一: 

题目: 

答案: 

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

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

例二十二: 

题目:

答案: 

例二十三: 

题目:

答案: 

解法1:

#include<stdio.h>		//左旋函数
#include<math.h>
void left_turn(char arr[], int x)
{
	int i;
	int lenth = strlen(arr);
	x %= lenth;   //简化循环次数
	for(i=0;i<x;i++)
	{
		char c = arr[0];	//将首元素取出来
		for(int j=0;j<lenth-1;j++)
		{
			arr[j] = arr[j + 1];    //之后的元素向前移
		}
		arr[lenth-1] = c;	//第一个元素放在最后
	}
}
int main()
{
	char arr[] = "ABCD";
	int x;
	scanf("%d", &x);//左旋的次数
	left_turn(arr, x);
	printf("%s", arr);
	return 0;
}

解法2:

#include<stdio.h>		//左旋函数
#include<math.h>
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;
}

例二十四: 

题目:

答案: 

#include<stdio.h>
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;
}

例二十五: 

题目:

 

答案: 

例二十六: 

题目:

答案: 

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

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

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

例二十七: 

题目:

 

答案: 

#include<stdio.h>
#include<string.h>
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;
}

例二十八: 

题目:

答案: 

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

例二十九: 

题目:

 

答案: 

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

例三十: 

题目:

 

答案: 

 B

例三十一: 

题目:

答案: 

#include<stdio.h>
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;
}

例三十二: 

题目:

答案: 

#include<stdio.h>
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;
}

例三十三: 

题目:

答案: 

#include<stdio.h>
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 <k-1; i++)
	{
		if (arr[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;
}

​​​​​​​


http://www.kler.cn/a/156296.html

相关文章:

  • 【Java语言】String类
  • 执行flink sql连接clickhouse库
  • 软件工程师简历(精选篇)
  • Scala学习记录,case class,迭代器
  • QQ 小程序已发布,但无法被搜索的解决方案
  • MySQL与Oracle对比及区别
  • Docker pull 命令
  • 网件R8500 trojan
  • 技术前沿丨Teranode如何实现无限扩容
  • 36、红外遥控(外部中断)
  • 数据库事务的隔离级别
  • PyQt实战 创建一个PyQt5项目
  • 【算法】滑动窗口题单——5.多指针滑动窗口⭐
  • LabVIEW通过编程将图形类控件的X轴显示为时间戳
  • easyrecovery2024绿色版中文语言电脑数据恢复工具
  • 网络层之SDN基本概念、路由算法和路由协议
  • java的弱引用、软引用和虚引用
  • Ubuntu Server 20.04.6安装Anaconda3
  • javascript中的过滤操作
  • 11月推荐阅读的12篇大语言模型相关论文
  • 无需服务器,无需魔法,拥有一个微信机器人就是这么简单
  • 数学建模-数据新动能驱动中国经济增长的统计研究-基于数字产业化和产业数字化的经济贡献测度
  • 性能测试常见面试题
  • 网络细节核心笔记
  • Android监听用户的截屏、投屏、录屏行为
  • Google Guava 反射工具使用详解