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,知道不满足循环条件退出。