C语言基础习题50例(八)36-40

简介: 文章目录习题36习题37习题38习题39习题40

习题36

求100之内的素数。

实现思路:

使用函数实现,并循环遍历依次判断。

代码如下:

#include <stdio.h>
#include <math.h>
 int main(){
  int isPrime(int n);
  int i, count = 0;
  for(i = 2; i < 101; i++){
    if(isPrime(i)){
      count++;
      printf("%5d", i);
      if(count % 5 == 0){
        printf("\n");
      }
    }
  }
    return 0;
}
int isPrime(int n){
  int i, prime = 1;
  for(i = 2; i <= sqrt(n); i++){
    if(n % i == 0){
      prime = 0;
      break;
    }
  }
  return prime;
}

打印:

2    3    5    7   11
   13   17   19   23   29
   31   37   41   43   47
   53   59   61   67   71
   73   79   83   89   97

习题37

对10个数进行排序。

实现思路:

可使用冒泡法或其他方法对数进行排序,一般都需要经过交换过程。

代码如下:

#include <stdio.h>
 int main(){
  void sort(int ua[], int l);
  int i, unsorted_list[] = {12, 54, 81, 3, 72, 47, 99, 32, 41, 62}, *p;
  printf("Unsorted:\n");
  for(i = 0; i < 10; i++){
    printf("%d ", unsorted_list[i]);
  }
  p = unsorted_list;
  int length = sizeof(unsorted_list) / sizeof(unsorted_list[0]);
  sort(p, length);
  printf("\nAfter sorted:\n");
  for(i = 0; i < 10; i++){
    printf("%d ", unsorted_list[i]);
  }
    return 0;
}
void sort(int ua[], int l){
  int i, j, temp;
  for(i = l - 2; i >= 0; i--){
    for(j = 0; j <= i; j++){
      if(ua[j] > ua[j + 1]){
        temp = ua[j];
        ua[j] = ua[j + 1];
        ua[j + 1] = temp;
      }
    }
  }
}


打印:

Unsorted:
12 54 81 3 72 47 99 32 41 62
After sorted:
3 12 32 41 47 54 62 72 81 99

习题38

求一个3*3矩阵对角线元素之和。

实现思路:

利用双重for循环控制输入二维数组,再将i和j相同的数组元素累加后输出。

代码如下:

#include <stdio.h>
 int main(){
  int a[3][3] = {0}, i, j, sum = 0;
  printf("Please input the 9 numbers:\n");
  for(i = 0; i < 3; i++){
    for(j = 0; j < 3; j++){
      scanf("%d", &a[i][j]);
    }
  }
  for(i = 0; i < 3; i++){
    for(j = 0; j < 3; j++){
      if(i == j){
        sum += a[i][j];
      }
    }
  }
  printf("Sum = %d\n", sum);
    return 0;
}

打印:

Please input the 9 numbers:
1 2 3 4 5 6 7 8 9
Sum = 15
• 1
• 2
• 3
• 4

习题39

有一个已经排好序的数组

现输入一个数,要求插入后该数组还是有序的。

实现思路:

先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。

代码如下:

#include <stdio.h>
 int main(){
  int a[11] = {1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 0}, num, i, j;
  printf("Please input the number to insert:\n");
  scanf("%d", &num);
  if(num >= a[9]){
    a[10] = num;
  }else{
    i = 9;
    while(a[i] > num){
      i--;
    }
    for(j = 10; j > i + 1; j--){
      a[j] = a[j - 1];
    }
    a[i + 1] = num;
  }
  for(i = 0; i < 11; i++){
    printf("%d ", a[i]);
  }
    return 0;
}

打印:

Please input the number to insert:
50
1 4 9 16 25 36 49 50 64 81 100
• 1
• 2
• 3

习题40

将一个数组逆序输出。

实现思路:

将数组均分成两半,用前后对应位置的元素交互即可。

也可以通过两个数组,前后位置的元素交换。

代码如下:

#include <stdio.h>
#define N 10
 int main(){
  int a[N] = {1, 4, 9, 16, 25, 36, 49, 64, 81, 100}, num, i, j, temp;
  printf("Normal order:\n");
    for(i = 0; i < 10; i++){
    printf("%d ", a[i]);
  }
  for(i = 0; i < N / 2; i++){
    temp = a[i];
    a[i] = a[ N - 1 - i];
    a[ N - 1 - i] = temp;
  }
  printf("\nReversed order:\n");
    for(i = 0; i < 10; i++){
    printf("%d ", a[i]);
  }
    return 0;
}

打印:

Normal order:
1 4 9 16 25 36 49 64 81 100
Reversed order:
100 81 64 49 36 25 16 9 4 1
相关文章
TU^
|
6月前
|
存储 C语言
C语言习题~day35
C语言习题~day35
TU^
31 1
|
4月前
|
机器学习/深度学习 C语言
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
要保持最小的步数,每一次汉诺塔问题(无论是最初还是递归过程中的),如果此时初始柱盘子数为偶数,我们第一步是把最上面的盘子移动到中转柱,如果为奇数,我们第一步则是将其移动到目标柱。
96 0
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
TU^
|
6月前
|
编译器 C语言
C语言习题~day31
C语言习题~day31
TU^
24 2
TU^
|
6月前
|
算法 程序员 C语言
C语言习题~day36
C语言习题~day36
TU^
43 1
TU^
|
6月前
|
存储 C语言
C语言习题~day34
C语言习题~day34
TU^
34 1
TU^
|
6月前
|
算法 C语言
C语言习题~day33
C语言习题~day33
TU^
30 1
TU^
|
6月前
|
C语言
C语言习题~day32
C语言习题~day32
TU^
19 1
TU^
|
6月前
|
C语言
C语言习题~day30
C语言习题~day30
TU^
24 1
TU^
|
6月前
|
自然语言处理 C语言 C++
C语言习题~day29
C语言习题~day29
TU^
25 1
TU^
|
6月前
|
存储 C语言
C语言习题~day28
C语言习题~day28
TU^
21 1