专栏首页Corley的开发笔记C语言经典习题100例(八)36-40

C语言经典习题100例(八)36-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

习题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

习题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

图解Python数据结构与算法-实战篇

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C语言经典习题100例(五)21-25

    实现思路: 方式一——分成两部分: 先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重for循环,第一层控制行,第二层控制列。 代码如下:

    cutercorley
  • C语言经典习题100例(七)31-35

    实现思路: 使用switch语句,如果第1个字母一样,则判断用情况语句或if语句判断第2个字母。 也可以使用条件判断语句,实现相近。

    cutercorley
  • C语言经典习题100例(三)11-15

    实现思路: 从第1个月起,兔子对数分别为1、1、2、3、5、8、13、21…,显然是斐波拉契数列。

    cutercorley
  • acmer之路(3)四月第一周日志

    这一周加入了院足球队,好久都没有感受到在赛场上奔腾的感觉了。不过正好赶上清明,因此也算有充足的时间来码代码。这个月一共码了20题,排名终于冲进了四万名。

    用户2145057
  • Contest100000569 – 《算法笔记》2.5小节——C/C++快速入门->数组

    Time Limit: 1 Sec Memory Limit: 12 MB Submit: 3559 Solved: 2146 Description ...

    lollipop72
  • C Retina

    用户2965768
  • codeForces #575 div3

    A - Three Piles of Candies 题意:就是给了三堆糖,两个人,每人哪一堆,然后第三堆用来补充,最终要达到两个人的糖的数量一样多。 思路...

    用户7727433
  • 从零开始学算法:高精度计算

    前言:由于计算机运算是有模运算,数据范围的表示有一定限制,如整型int(C++中int 与long相同)表达范围是(-2^31~2^31-1),unsigned...

    Angel_Kitty
  • C语言经典程序

    其中最后一列和最后一行分别放每个学生的平均成绩、每门课程的平均成绩及班级总平均分。*/

    木尤
  • 长沙理工新生赛

    https://ac.nowcoder.com/acm/contest/3530/A

    AngelNH

扫码关注云+社区

领取腾讯云代金券