1.求奇数分之一序列前N项和
本题要求编写程序,计算序列 1 + 1/3 + 1/5 + ... 的前N项之和。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。
输入样例:
23
输出样例:
sum = 2.549541
1. #include <stdio.h> 2. 3. int main(void) { 4. double sum = 0, n, x = 1; 5. scanf("%lf", &n); //输入double类型变量。要用%lf 6. for (int i = 1; i <= n; i++) 7. { 8. sum += 1.0 / x; 9. x += 2; 10. } 11. printf("sum = %.6lf", sum); //限制长度 12. return 0; 13. }
2.求简单交错序列前N项和
本题要求编写程序,计算序列 1 - 1/4 + 1/7 - 1/10 + ... 的前N项之和。
输入格式:
输入在一行中给出一个正整数N。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后三位。题目保证计算结果不超过双精度范围。
输入样例:
10
输出样例:
sum = 0.819
1. #include <stdio.h> 2. #include <math.h> 3. 4. int main(void) { 5. int n, flag = 1, x = 1; 6. double sum = 0, an = 0; 7. 8. 9. scanf("%d", &n); 10. for (int i = 1; i <= n; i++) { 11. an = pow(-1, (i + 1)) * 1.0 / x; 12. sum += an; 13. x += 3; 14. } 15. printf("sum = %.3lf", sum); 16. 17. return 0; 18. }
1、2两题非常简单,能看懂公式,只要用C语言描述出来即可
3.找出最小值
本题要求编写程序,找出给定一系列整数中的最小值。
输入格式:
输入在一行中首先给出一个正整数n,之后是n个整数,其间以空格分隔。
输出格式:
在一行中按照“min = 最小值”的格式输出n个整数中的最小值。
输入样例:
4 -2 -123 100 0
输出样例:
min = -123
1. #include <stdio.h> 2. 3. int main(void) { 4. int n, t = 0; 5. scanf("%d", &n); 6. int a[n + 1]; 7. for (int i = 0; i < n; i++) 8. scanf("%d", &a[i]); 9. 10. if (n == 1) 11. printf("min = %d", a[0]); 12. else { 13. for (int i = 1; i <= n; i++) 14. if (t > a[i]) { 15. t = a[i] ^ t; 16. a[i] = a[i] ^ t; 17. t = a[i] ^ t; 18. } 19. printf("min = %d", t); 20. 21. } 22. return 0; 23. }
t = a[i] ^ t;
a[i] = a[i] ^ t;
t = a[i] ^ t;
可能有同学疑惑最后一层if语句中这三条语句是什么意思
这是不使用第三个变量的情况先,交换两个数的方法!使用异或的位运算
4.求整数的位数及各位数字之和
对于给定的正整数N,求它的位数及其各位数字之和。
输入格式:
输入在一行中给出一个不超过109的正整数N。
输出格式:
在一行中输出N的位数及其各位数字之和,中间用一个空格隔开。
输入样例:
321
输出样例:
3 6
cnt是计数变量,sum是各位数字之和的变量
1. #include <stdio.h> 2. 3. int main() { 4. int n = 0, cnt = 0, sum = 0; 5. scanf("%d", &n); 6. 7. while (1) { 8. cnt++; 9. sum += n % 10; 10. n = n / 10; //这三条语句要注意先后顺序的 11. 12. if (n == 0) 13. break; 14. } 15. 16. printf("%d %d", cnt, sum); 17. return 0; 18. }
5.跟奥巴马一起画方块
美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!
输入格式:
输入在一行中给出正方形边长N(3≤N≤21)和组成正方形边的某种字符C,间隔一个空格。
输出格式:
输出由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。
输入样例:
10 a
输出样例:
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
1. #include <stdio.h> 2. 3. int main() { 4. int N, i, j; 5. char c; 6. scanf("%d %c", &N, &c); 7. 8. if (N >= 3 && N <= 21) { 9. for (i = 1; i <= (N + 1) / 2; i++) { //行是列的50% 10. for (j = 1; j <= N; j++) { //列 11. printf("%c", c); 12. } 13. printf("\n"); 14. } 15. } 16. 17. return 0; 18. }
6.判断一个数是否为素数
所谓素数,是指除了1和其本身外,不能被其它任何整数整除的正整数,2是最小的素数。
现在,用户输入一个整数,判断它是否为素数。
输入格式:
一个整数N(N为int型)。
输出格式:
如果N是素数,输出N is a prime. 否则,输出N is not a prime. 注意:输出的是N所代表的具体数值。
输入样例1:
7
输出样例1:
7 is a prime.
输入样例2:
28
输出样例2:
28 is not a prime.
输入样例3:
1
输出样例3:
1 is not a prime.
输入样例4:
-11
输出样例4:
-11 is not a prime.
思路
1. #include <stdio.h> 2. #include <math.h> 3. 4. int main() { 5. int m, k, i; 6. scanf("%d", &m); 7. 8. k = sqrt(m); 9. for (i = 2; i <= k; i++) { 10. if (m % i == 0) 11. break; 12. } 13. 14. if (m >= 2) { 15. 16. if (i > k) 17. printf("%d is a prime.", m); 18. else 19. printf("%d is not a prime.", m); 20. } else 21. printf("%d is not a prime.", m); 22. 23. return 0; 24. }
7.辗转相除法求最大公约数
用辗转相除法求两个正整数的最大公约数。
输入格式:
输入在一行中给出2个正整数,其间以逗号分隔。
输出格式:
在一行中按照格式“gcd =最大公约数”顺序输出两个整数的最大公约数。
输入样例:
15,20
输出样例:
gcd=5
1. #include <stdio.h> 2. 3. int main() { 4. int m, n, r; 5. scanf("%d,%d", &m, &n); 6. if (m < n) { 7. m = m ^ n; 8. n = m ^ n; 9. m = m ^ n; 10. } 11. r = m % n; 12. while (r != 0) { 13. m = n; 14. n = r; 15. r = m % n; 16. } 17. printf("gcd=%d", n); 18. }
8.统计学生平均成绩与及格人数
本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内。
输入格式:
输入在第一行中给出非负整数N,即学生人数。第二行给出N个非负整数,即这N位学生的成绩,其间以空格分隔。
输出格式:
按照以下格式输出:
average = 成绩均值
count = 及格人数
其中平均值精确到小数点后一位。
输入样例:
5
77 54 92 73 60
输出样例:
average = 71.2
count = 4
1. #include <stdio.h> 2. 3. int main() { 4. int r, count = 0; //人数 5. scanf("%d", &r); 6. int i, n; 7. float average = 0, sum; 8. for (i = 1; i <= r; i++) { 9. scanf("%d", &n); 10. sum += n; 11. if (n >= 60) 12. count++; 13. } 14. if (r == 0) { 15. printf("average = %.1f\n", average); 16. printf("count = %d\n", count); 17. } else { 18. average = sum / r; 19. printf("average = %.1f\n", average); 20. printf("count = %d\n", count); 21. } 22. 23. return 0; 24. }
9.求最大值及其下标
本题要求编写程序,找出给定的n个数中的最大值及其对应的最小下标(下标从0开始)。
输入格式:
输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。
输出格式:
在一行中输出最大值及最大值的最小下标,中间用一个空格分开。
输入样例:
6
2 8 10 1 9 10
输出样例:
10 2
1. #include <stdio.h> 2. 3. int main() { 4. int n, i = 0, k; 5. scanf("%d", &n); 6. 7. if (n > 1 && n <= 10) { 8. int a[n]; 9. for (i = 0; i < n; i++) 10. scanf("%d", &a[i]); 11. 12. k = 0; 13. for (i = 1; i < n; i++) { 14. 15. if (a[i] > a[k]) 16. k = i; 17. 18. } 19. printf("%d %d", a[k], k); 20. } 21. return 0; 22. }
10.找二维数组中最大数及所在行列号
求任意的一个m×m矩阵的最大数及其所在的行列数
输入格式:
从键盘输入m(2<=m<=20)及矩阵元素(只考虑int型)。
输出格式:
输出数组中最大数及最大数所在行、列
输入样例:
3
8 6 2
5 7 1
4 9 5
输出样例:
max=9,i=2,j=1
1. #include <stdio.h> 2. 3. int main(void) { 4. int m, i, j; 5. int c, d, t = 0; //t是交换变量,cd是下标 6. scanf("%d", &m); 7. int a[m][m]; 8. 9. for (i = 0; i < m; i++) { //输入二维数组 10. for (j = 0; j < m; j++) { 11. scanf("%d", &a[i][j]); 12. } 13. } 14. 15. for (i = 0; i < m; i++) { 16. for (j = 0; j < m; j++) { 17. if (a[i][j] > t) { 18. t = a[i][j]; 19. c = i; //记录下标 20. d = j; 21. } 22. 23. } 24. } 25. printf("max=%d,i=%d,j=%d", t, c, d); 26. 27. // for (i = 0; i < m; i++) { 28. // for (j = 0; j < m; j++) { 29. // printf("%d", a[i][j]); 30. // } 31. // } 32. 33. return 0; 34. }