PTA-C语言课程作业--嵌套循环(未完。。。)

7-2 梅森数 (20分)

形如2n−1的素数称为梅森数(Mersenne Number)。例如22−1=3、23−1=7都是梅森数。1722年,双目失明的瑞士数学大师欧拉证明了2
31−1=2147483647是一个素数,堪称当时世界上“已知最大素数”的一个记录。
本题要求编写程序,对任一正整数n(n<20),输出所有不超过2
n −1的梅森数。

输入格式:

输入在一行中给出正整数n(n<20)

输出格式:

按从小到大的顺序输出所有不超过2^n−1的梅森数,每行一个。如果完全没有,则输出“None”。

输入样例:

6

输出样例:

3

7

31

#include<stdio.h>
#include<math.h>
int IsPrime(int num);
int main()
{
	int t,cnt = 0;
	int n;
	scanf("%d",&n);
	for(int i = 1; i <= n ;i ++)
	{
		t = pow(2,i)-1;
		if(IsPrime(t))
		{
			printf("%d\n",t);
			cnt++;
		}
	}
	if(cnt==0)
	{
		printf("None\n");
	}
	return 0;
}
int IsPrime(int num)
{
	int flag = 1;
	if(num==1)	
	flag = 0;
	else
		{
			for(int i = 2; i <= sqrt(num); i++)
			{
			if(num%i==0)   
			flag = 0;
			}
		}
		return flag ;
}
 

梅森数就是素数,这个题首先用一个函数来判断是不是素数,C语言中判断素数的方法有两种

  • 判断一个整数m是否是素数,只需把 m 被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么 m 就是一个素数。

  • 。m 不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~

\sqrt{m}

之间的每一个整数去除就可以了。如果 m 不能被 2 ~

\sqrt{m}

间任一整数整除,m 必定是素数。例如判别 17 是是否为素数,只需使 17 被 2~4 之间的每一个整数去除,由于都不能整除,可以判定 17 是素数。

这个题用了判断是否为素数用了第二种方法。

7-3 打印九九口诀表 (15分)

下面是一个完整的下三角九九口诀表:


本题要求对任意给定的一位正整数N,输出从11到NN的部分口诀表。

输入格式:

输入在一行中给出一个正整数N(1≤N≤9)。

输出格式:

输出下三角N*N部分口诀表,其中等号右边数字占4位、左对齐。

输入样例:

4

输出样例:

1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16

#include <stdio.h>
int main()
{
    int i, j, n;
    scanf("%d", &n);
    for(i = 1; i <= n; i++) {
        for(j = 1; j <= i; j++) {
            printf("%d*%d=%-4d", j, i, i * j);
        }
        printf("\n");
    }
    return 0;
}
 

嵌套循环,C语言的经典题了,第一层循环控制行数,第二层循环控制列数

7-8 查询水果价格 (15分)

首先在屏幕上显示以下菜单:<br/>
[1] apple<br/>
[2] pear<br/>
[3] orange<br/>
[4] grape<br/>
[0] exit<br/>
用户可以输入编号1~4查询对应水果的单价。当连续查询次数超过5次时,程序应自动退出查询;不到5次而用户输入0即退出;输入其他编号,显示价格为0。<br/>

输入格式:<br/>
输入在一行中给出用户连续输入的若干个编号。<br/>

输出格式:<br/>
首先在屏幕上显示菜单。然后对应用户的每个输入,在一行中按格式“price = 价格”输出查询结果,其中价格保留两位小数。当用户连续查询次数超过5次、或主动输入0时,程序结束。<br/>

输入样例1:<br/>
3 -1 0 2<br/>
输出样例1:<br/>
[1] apple<br/>
[2] pear<br/>
[3] orange<br/>
[4] grape<br/>
[0] exit<br/>
price = 4.10<br/>
price = 0.00<br/>
输入样例2:<br/>
1 2 3 3 4 4 5 6 7 8
输出样例2:<br/>
[1] apple<br/>
[2] pear<br/>
[3] orange<br/>
[4] grape<br/>
[0] exit<br/>
price = 3.00<br/>
price = 2.50<br/>
price = 4.10<br/>
price = 4.10<br/>
price = 10.20<br/>


#include <stdio.h>
int main(int argc, char *argv[]) {
	int x,y=0;
	printf("[1] apple\n[2] pear\n[3] orange\n[4] grape\n[0] exit\n");
	while(y<5)
	{
		scanf("%d",&x);
		switch (x) {
			case 1:printf("price = 3.00\n");break;
			case 2:printf("price = 2.50\n");break;
			case 3:printf("price = 4.10\n");break;
			case 4:printf("price = 10.20\n");break;
			case 0:y=5;break;
			default:printf("price = 0.00\n");break;
		}
		y++;
	}
	return 0;
}

代码一看很好理解吧,利用一个while循环,switch语句来匹配相应的语句,每次循环一次都+1,知道不满足循环条件退出。