c语言-期中21题

c语言-期中21题
晓嘿君豆包进行总结—1 班和 2 班的课程资料围绕 C 语言编程展开,涵盖选择语句、循环语句的使用,以及各类算法问题的求解,包含大量练习题与示例代码。以下是 1 班和 2 班都学过的题目内容及答案:
判断整数相关特性
判断整数能否被 3 和 5 整除:输入一个整数,判断它是否能同时被 3 和 5 整除。
cint n;
scanf("%d", &n);
if(n % 3 == 0 && n % 5 == 0) {
printf("YES");
} else {
printf("NO");
}判断整数正负及零:输入一个整数,判断其是正数、负数还是零。
cint n;
scanf("%d", &n);
if(n > 0) {
printf("positive");
} else if(n == 0) {
printf("zero");
} else {
printf("negative");
}
求整数绝对值或相反数:输入一个数,输出它的绝对值(浮点型版本)或相反数(整型版本)。
浮点型求绝对值
cdouble n;
scanf("%lf", &n);
if(n >= 0) {
printf("%f", n);
} else {
printf("%.2f", -n);
}整型求相反数
cint a;
scanf("%d", &a);
if(a >= 0) {
printf("%d", a);
} else {
printf("%d", -a);
}
判断字符 ASCII 码奇偶性:输入一个字符,判断其 ASCII 码值是奇数还是偶数。
cchar c;
int v;
scanf("%c", &c);
v = (int)c;
if(v % 2!= 0) {
printf("YES");
} else {
printf("NO");
}比较并输出数值
输出三个数中的最大值:输入三个数,输出其中的最大值。
cfloat a, b, c, m;
scanf("%f%f%f", &a, &b, &c);
m = a > b? a : b;
m = m > c? m : c;
printf("%.2f", m);对三个整数排序输出:输入三个整数,按从大到小的顺序输出。
cint a, b, c, t;
scanf("%d %d %d", &a, &b, &c);
if(a < b) {
t = a;
a = b;
b = t;
}
if(a < c) {
t = a;
a = c;
c = t;
}
if(b < c) {
t = b;
b = c;
c = t;
}
printf("%d %d %d", a, b, c);
成绩等第判断:输入一个学生的成绩,根据成绩输出对应的等第(90 分(含)至 100 分为 A,80 分(含)至 90 分为 B ,70 分(含)至 80 分为 C ,60 分(含)至 70 分为 D ,60 分以下为 E)。
cfloat fenshu;
scanf("%f", &fenshu);
if(fenshu >= 90) {
printf("A");
} else if(fenshu >= 80 && fenshu < 90) {
printf("B");
} else if(fenshu >= 70 && fenshu < 80) {
printf("C");
} else if(fenshu >= 60 && fenshu < 70) {
printf("D");
} else {
printf("E");
}根据温度选择着装:输入温度,根据不同温度范围输出相应着装(如温度大于等于 20 度穿短袖,15 - 20 度穿长袖等)。以温度范围 “大于等于 20 度穿短袖,15 - 20 度穿长袖,10 - 15 度穿毛衣,10 度以下穿羽绒服” 为例:
cfloat t;
scanf("%f", &t);
if(t >= 20) {
printf("我就穿短袖\n");
} else if(t >= 15 && t < 20) {
printf("我就穿长袖\n");
} else if(t >= 10 && t < 15) {
printf("我就穿毛衣\n");
} else {
printf("我就穿羽绒服\n");
}统计及格人数与平均分:输入 0 - 100 以内的 10 个分数,统计及格人数(分数大于等于 60)和及格同学的平均分。
cfloat score, sum = 0;
int i = 1, k = 0;
while(i <= 10) {
scanf("%f", &score);
if(score >= 60) {
k++;
sum += score;
}
i++;
}
printf("k=%d,average=%f", k, sum / k);统计不同分数段学生情况:输入 10 个从 0 到 100 之间的分数,分别统计成绩优良(大于等于 80 分)、及格(大于等于 60 分且小于 80 分)、不及格(小于 60 分)的学生数和平均分。
cfloat score, sum = 0, sum1 = 0, sum2 = 0;
int i = 1, k = 0, m = 0, l = 0;
while(i <= 10) {
scanf("%f", &score);
if(score >= 80) {
k++;
sum += score;
}
if(60 <= score && score < 80) {
m++;
sum1 += score;
}
if(score < 60) {
l++;
sum2 += score;
}
i++;
}
printf("k=%d,average=%f", k, sum / k);
printf("m=%d,average=%f", m, sum1 / m);
printf("l=%d,average=%f", l, sum2 / l);计算特定倍数的整数和
计算 1 - 100 中 3 或 7 的倍数的整数和:找出 1 - 100 之间是 3 的倍数或 7 的倍数的整数,并统计其个数,按每行 10 个输出这些整数。
cint i = 1, sum = 0;
while(i <= 100) {
if(i % 3 == 0 || i % 7 == 0) {
printf("%d ", i);
sum++;
if(sum % 10 == 0) {
printf("\n");
}
}
i++;
}
printf("\n%d", sum);计算 m 到 n 之间奇数的和:计算非负整数 m 到 n(包括 m 和 n)之间的所有奇数的和,其中 m 不大于 n,且 n 不大于 300。
cint m, n, p = 0;
scanf("%d %d", &m, &n);
while(m <= n) {
if(m % 2!= 0) {
p += m;
}
m++;
}
printf("%d", p);
计算整数因数相关值:输入一个正整数,求出它所有的因数(不包括本身)并输出,统计因数个数,并求出所有因数之和。
cint n, sum = 0, k = 0;
scanf("%d", &n);
int i = 1;
while(i < n) {
if(n % i == 0) {
k++;
sum += i;
}
i++;
}
printf("因数的个数是%d,因数的和是%d", k, sum);统计特定数字出现次数:给定 n(1 < n < 100)个正整数,其中每个数都大于等于 1,小于等于 10。统计这 n 个数中 1、5 和 10 出现的次数。
cint n, s, i = 0, k = 0, j = 0, m = 0;
scanf("%d", &n);
while(i < n) {
scanf("%d", &s);
if(s == 1) {
k++;
} else if(s == 5) {
j++;
} else if(s == 10) {
m++;
}
i++;
}
printf("1的数量是:%d , 5的数量是:%d, 10的数量是:%d", k, j, m);查找特定四位数:在所有的四位数中,找出满足个位数上的数字减去千位数上的数字,再减去百位数上的数字,再减去十位数上的数字的结果大于零的四位数,并统计其个数。
cint i = 1000, n, ge, shi, bai, qian, number = 0;
while(i <= 9999) {
n = i;
ge = n % 10;
n /= 10;
shi = n % 10;
n /= 10;
bai = n % 10;
n /= 10;
qian = n % 10;
if(ge - shi - bai - qian > 0) {
printf("%d ", i);
number++;
}
i++;
}
printf("\n number=%d ", number);查找水仙花数:输出所有的水仙花数(一个三位数,其各位数字立方和等于该数本身),并统计水仙花数的个数。
cint i = 100, n, ge, shi, bai, number = 0;
while(i <= 999) {
n = i;
ge = n % 10;
n /= 10;
shi = n % 10;
n /= 10;
bai = n % 10;
if(ge * ge * ge + shi * shi * shi + bai * bai * bai == i) {
printf("%d ", i);
number++;
}
i++;
}
printf("\n number=%d ", number);查找回文数:输出大于 100 小于 200 中所有三位数中的回文数(个位与百位相同),并统计回文数的个数。
cint i = 100, n, ge, shi, bai, number = 0;
while(i <= 200) {
n = i;
ge = n % 10;
n /= 10;
shi = n % 10;
n /= 10;
bai = n % 10;
if(ge == bai) {
printf("%d ", i);
number++;
}
i++;
}
printf("\n number=%d ", number);统计字符类型个数:输入 10 个字符,分别统计其中英文字母、空格、数字和其它字符的个数。
cint i = 1;
char c;
int zimu = 0, kongge = 0, shuzi = 0, qita = 0;
while(i <= 10) {
scanf("%c", &c);
if((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
zimu++;
} else if(c =='') {
kongge++;
} else if(c >= '0' && c <= '9') {
shuzi++;
} else {
qita++;
}
i++;
}
printf("%d %d %d %d", zimu, kongge, shuzi, qita);计算数列和相关问题
计算数列和并找特定值:计算 sum = 1 + 2 + 3 +… + n,求当 sum 第一次超过 100 时 n 的值,并输出 n 和 sum。
cint i = 0, sum = 0;
while(sum <= 100) {
i++;
sum += i;
}
printf("sum=%d,i=%d\n", sum, i);计算特定数列和:计算 1 - 1/2 + 1/3 - 1/4 +… + 1/10 的和。
cfloat sum = 0, fuhao = 1;
int i;
for(i = 1; i <= 10; i++) {
sum += fuhao * 1.0 / i;
fuhao = -fuhao;
}
printf("%.3f", sum);
求最大公因数和最小公倍数:输入两个正整数 m 和 n,求它们的最大公因数和最小公倍数。
cint m, n, min, max;
scanf("%d%d", &m, &n);
// 找最大公因数
min = m >= n? n : m;
for(int i = min; i >= 1; i--) {
if(m % i == 0 && n % i == 0) {
printf("%d就是%d,%d的最大公因数\n", i, m, n);
break;
}
}
// 找最小公倍数
max = m >= n? m : n;
for(int i = max;; i++) {
if(i % m == 0 && i % n == 0) {
printf("%d就是%d,%d的最小公倍数\n", i, m, n);
break;
}
}解决余数相同问题:已知三个正整数 a,b,c,找到一个大于 1 的整数 x,将其作为除数分别除 a,b,c,得到的余数相同,求 x 的最小值。例如输入 300、262、205,输出 19。
cint a, b, c, i;
scanf("%d%d%d", &a, &b, &c);
if(a > b) {
i = a;
} else {
i = b;
}
if(c > i) {
i = c;
}
for(int k = 2; k <= i; k++) {
if(a % k == b % k && b % k == c % k) {
printf("%d", k);
break;
}
}求整数序列最值:输入一些整数(不超过 1000),求出它们的最小值、最大值。
cint n, number, max, min;
scanf("%d", &n);
scanf("%d", &number);
max = number;
min = number;
for(int i = 1; i <= n - 1; i++) {
scanf("%d", &number);
if(max < number) {
max = number;
}
if(min > number) {
min = number;
}
}
printf("最大值%d", max);
printf("最小值%d", min);角谷猜想实现:对于任意一个正整数,如果是奇数,则乘 3 加 1,如果是偶数,则除以 2,将经过处理得到 1 的过程输出来。
cint a;
scanf("%d", &a);
while(a!= 1) {
if(a % 2 == 0) {
a /= 2;
} else {
a = a * 3 + 1;
}
printf("%d ", a);
}分离整数各位数字:给定一个整数 n(1≤n≤100000000),从个位开始分离出它的每一位数字,按从低位到高位的顺序依次输出。
cint i, n;
scanf("%d", &i);
n = i;
while(n!= 0) {
printf("%d ", n % 10);
n /= 1