给出一组数据,输出改组整数最大值。
出现错误需要改正:
- 数组输入:在
scanf("%d", &a)
这行,你应该传入数组的元素下标,如&a[i]
,而不是&a
,否则会导致错误。- 循环问题:在
for (int i = 1; i < n; i++)
和for (int j = 1; j < n; j++)
中,i++
和j++
应该移除,因为你已经在for
循环头部更新了i
和j
,再进行自增会导致逻辑错误。- 冒泡排序的比较和交换问题:在
if (a[i++] > a[j++])
这里,i++
和j++
会导致索引问题,应直接使用i
和j
。同时,if
后面不应该有多余的分号;
,它会导致逻辑错误。正确的应该是if (a[i] > a[j])
。
#include <stdio.h>
int main() {
printf("请输入数组的大小和元素,用空格隔开:");
int a[100]; // 假设最多输入100个数
int n;
// 读取数组的大小
scanf("%d", &n);
// 读取数组的元素
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
// 使用冒泡排序来排序数组
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (a[j] > a[j + 1]) {
// 交换a[j]和a[j+1]
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
// 输出最大的元素,排序后最大值在数组的最后
printf("最大值是:%d\n", a[n - 1]);
return 0;
}
判断正整数位数:
提示:
使用函数log10(n),求出n的以10为底的对数,这个对数的整数部分,就是n的科学计数法中的指数,这个整数加1就是n的位数。
#include <stdio.h>
#include <math.h>
int main() {
int n;
// 输入不多于5位的正整数
printf("请输入一个不多于5位的正整数:");
scanf("%d", &n);
// 确保输入的数字是正数且不超过5位
if (n <= 0 || n > 99999) {
printf("输入无效,请确保输入的是一个不多于5位的正整数。\n");
return 1;
}
// 使用log10函数计算位数
int digits = (int)log10(n) + 1;
// 输出位数
printf("%d\n", digits);
return 0;
}
比较3个ASCII数* (直接用ascii来比较)
#include <stdio.h>
int main() {
// 定义三个字符变量
char ch1, ch2, ch3;
// 读取输入的三个字符
scanf("%c %c %c", &ch1, &ch2, &ch3);
// 比较字符的ASCII值,找出最大值
if (ch1 >= ch2 && ch1 >= ch3) {
printf("%c\n", ch1);
} else if (ch2 >= ch1 && ch2 >= ch3) {
printf("%c\n", ch2);
} else {
printf("%c\n", ch3);
}
return 0;
}