双非二本编程小白,对编程感兴趣,以此来记录每天的做题。(每日练习3题)
ps:菜鸟小白,如果有说错的地方希望能够和大佬们多多交流!!!
第一题 给定两个整形变量的值,将两个值的内容进行交换。
这里要注意的是要给定一个中间变量(temp),用中间变量对两个整形变量的值进行交换然后再打印。
#include <stdio.h>
int main()
{
int a = 10;
int b = 20;
int temp=0;
temp = a;
a = b;
b = temp;
printf("a=%d b=%d", a, b);
return 0;
}
这个是可以使用中间变量时对两个值进行交换,当不能使用中间变量时我们可以用异或(^)进行实现。异或是不相同时为1,相同时为0。第一次异或a的结果是3,然后第二次3和b的2进行异或得到交换b的值为1,第三次3和1的值进行异或得到交换后a的值为2。
int main()
{
int a = 1;
int b = 2;
a = a^b;
b = a^b;
a = a^b;
printf("交换后的a和b的值:%d %d\n", a, b);
return 0;
}
第二题 求10 个整数中最大值。
我刚开始的想法是对这10个数先进行从大到小的排序,每一个都进行比较然后把较大的数放在左边,一次从大到小排列,最后输出的下标为0的就是最大值,用到了冒泡排序的方法。
int main()
{
int arr[] = { 1, 3,10, 2, 4 ,8,11,15,5,7 };
int i,j;
int temp ;
for (i = 0; i <=9; i++)//外层循环是比较的轮数,数组内有10个数,那么就应该比较10-1=9轮
{
for (j = 0; j <= 9-i; j++)//内层循环比较的是当前一轮的比较次数,例如:第一轮比较9-1=8次,第二轮比较9-2=7次
{
if (arr[j] < arr[j + 1])
{
temp = 0;
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
printf("最大值是:%d\n", arr[0]);
return 0;
}
上面的方法可以但是不是最简便的,其实可以设定一个Max,假设这个Max为最大值这个最大值就是数组的第一个元素,然后依次和剩下的9个元素进行比较,如果比Max大就把大的这个元素和Max进行交换。
int main()
{
int arr[10] = { 0 };
int max = arr[0];
int i = 0;
int k = 0;
for (k = 0; k < 10; k++) {
scanf("%d", &arr[k]);
}
for (i = 1; i < 10; i++)
{
if (arr[i] > max)
max = arr[i];
}
printf("%d\n", max);
return 0;
}
第三题 将三个数按从大到小输出。
也是设定一个中间变量temp,因为是从大到小,所以a>b>c,分别把所有可能出现的情况列举出来(b>a,c>a,c>b),要做到a当中一定存放的是最大的,c中存放的一定是最小的。
int main()
{
int a, b, c;
int temp;
scanf("%d%d%d", &a, &b, &c);
if (b > a)
{
temp = b;
b = a;
a = temp;
}
if (c > a)
{
temp = c;
c = a;
c = temp;
}
if (c > b)
{
temp = c;
c = b;
b = temp;
}
printf("%d %d %d", a, b, c);
return 0;
}