Python123第六章答案(自写,仅供参考) By:肇院伟烨
前言
1、代码自己写的,不是标准答案,仅供参考。
2、建议看懂后自己另外写而不是复制粘贴。
3、点击目录可以转跳
文章目录
第五章
第1题
#include<stdio.h>
int main()
{
int number,pd=1,sum;
char ch;
scanf("%d",&sum);
while(1)
{
scanf("%c",&ch);
if (ch == '=')
{
break;
}
else
{
scanf("%d", &number);
if (ch == '+')
sum = sum+number;
if (ch == '-')
sum = sum-number;
if (ch == '*')
sum = sum*number;
if (ch == '%')
{
printf("ERROR");
pd = 0;
}
if (ch == '/')
{
if (number == 0)
{
printf("ERROR");
pd = 0;
}
else
{
sum = sum / number;
}
}
}
}
if(pd==1)
printf("%d", sum);
return 0;
}
第2题
#include<stdio.h>
int main()
{
int i,count=0;
char str[50];
gets(str);
for(i=0;str[i]!='\0';i++)
{
if((str[i]==' '&&str[i+1]!='\0')||(str[i]!='\0'&&str[i+1]=='\0'))
count++;
}
printf("%d",count);
return 0;
}
第3题
#include <stdio.h>
#include <string.h>
void StringCount(char s[]);
int main()
{
char str[100];
gets(str);
StringCount(str);
return 0;
}
void StringCount(char s[])
{
int i, letter = 0, blank = 0, digit = 0, other = 0;
for(i=0;s[i]!='\0';i++)
{
if ('a' <= s[i] && s[i] <= 'z' || 'A' <= s[i] && s[i] <= 'Z')
letter++;
else if (s[i] == ' '|| s[i] == '\n')
blank++;
else if ('0' <= s[i] && s[i] <= '9')
digit++;
else
other++;
}
printf("letter = %d, blank = %d, digit = %d, other = %d", letter, blank, digit, other);
}
第4题
#include <stdio.h>
int fn(int a, int n);
int SumA(int a, int n);
int main()
{
int a, n;
scanf("%d %d", &a, &n);
printf("fn(%d, %d) = %d\n", a, n, fn(a, n));
printf("s = %d\n", SumA(a, n));
return 0;
}
int fn(int a, int n)
{
int i,b;
b = 0;
for (i = 1; i <= n; i++)
{
b = b * 10 + a;
}
return b;
}
int SumA(int a, int n)
{
int sum=0, j;
for (j = 1; j <= n; j++)
{
sum += fn(a, j);
}
return sum;
}
第5题
#include <stdio.h>
int factorsum(int number);
void PrintPN(int m, int n);
int arr[40] = {0};
int main()
{
int m, n;
scanf("%d %d", &m, &n);
if (factorsum(m) == m) printf("%d is a perfect number\n", m);
if (factorsum(n) == n) printf("%d is a perfect number\n", n);
PrintPN(m, n);
return 0;
}
int factorsum(int number)
{
int i, j = 0, sum = 0;
if (number == 1)
{
return 1;
}
else
{
for (i = 1; i < number; i++)
{
if (number % i == 0)
{
arr[j] = i;
sum += i;
j++;
}
}
arr[j] = 1024;
return sum;
}
}
void PrintPN(int m, int n)
{
int i, j = 0, count = 0,k;
for (i = m; i <= n; i++)
{
if (factorsum(i) == i)
{
if (i == 1)
{
printf("1 = 1");
printf("\n");
count = 1;
}
else
{
printf("%d =", i);
while (arr[j] != 1024)
{
printf(" %d", arr[j]);
if(arr[j+1]!=1024)
printf(" +");
j++;
}
j = 0;
count++;
printf("\n");
}
}
}
if (count == 0)
printf("No perfect number");
}
第6题
int fib(int n);
void PrintFN(int m, int n);
int main()
{
int m, n, t;
scanf("%d %d %d", &m, &n, &t);
printf("fib(%d) = %d\n", t, fib(t));
PrintFN(m, n);
return 0;
}
int fib(int n)
{
int a,b,i=2;
a = b = 1;
while(1)
{
a = a + b;
i++;
if (i == n)
return a;
b = a + b;
i++;
if (i == n)
return b;
}
}
void PrintFN(int m, int n)
{
int a, b, i = 2,j=0;
a = b = 1;
while(1)
{
a = a + b;
if (m <= a && a <= n)
{
printf("%d", a);
j++;
if(a+b<n)
printf(" ");
}
b = a + b;
if (m <= b && b <= n)
{
printf("%d", b);
j++;
if(a+b<n)
printf(" ");
}
else if (b > n)
break;
}
if(j==0)
printf("No Fibonacci number");
}
第7题
#include <stdio.h>
#include <math.h>
int prime(int p);
void Goldbach(int n);
int main()
{
int a,b,m, n, i, cnt;
scanf("%d %d", &a, &b);
m = a < b ? a : b;
n = a < b ? b : a;
//测试用例中m不一定小于n
if (prime(m) != 0)
printf("%d is a prime number\n", m);
if (m < 6)
m = 6;
if (m % 2)
m++;
cnt = 0;
for (i = m; i <= n; i += 2)
{
Goldbach(i);
cnt++;
if (cnt % 5)
printf(", ");
else
printf("\n");
}
return 0;
}
//main函数是题目已经给出的
int prime(int p)
{
int i, result = 1;//这里result用于判断,1代表是,0代表不是
if (p <= 1)//因为 1 不是素数要排除 1 。
{
return 0;
}
else
{
for (i = 2; i < p; i++)
{
if (p % i == 0)//能被2到这个数的开方加一的数整除就让判断值presult变0表示不是素数 。
{
result = 0;
break;//但凡有一个数可以整除就不是素数,可以停止循环 。
}
}
if (result == 0)
return 0;
else
return 1;
}
}
void Goldbach(int n)
{
int p, q;
//用穷举法找符合n=p+q的p和q
for (p = 1; p <= n; p++)
{
q = n - p;
if((prime(p)==1&&prime(q)==1)&&n==p+q)//这里显示报错;“=”左操作数必须为左值
{
printf("%d=%d+%d", n, p, q);
break;//因为是要最小的p,找到一个就跳出循环
}
}
}
第8题
#include <stdio.h>
int w = 0;
int reverse(int number);
int main()
{
int n;
scanf("%d", &n);
printf("%d\n", reverse(n));
return 0;
}
int reverse(int number)
{
if (number / 10 == 0)
{
return w * 10 + number;
}
else
{
w = w * 10 + number % 10;
return reverse(number / 10);
}
}
第9题
#include <stdio.h>
int fn(int a, int n);
int SumA(int a, int n);
int main()
{
int a, n;
scanf("%d %d", &a, &n);
printf("fn(%d, %d) = %d\n", a, n, fn(a, n));
printf("s = %d\n", SumA(a, n));
return 0;
}
int fn(int a, int n)
{
int i,b;
b = 0;
for (i = 1; i <= n; i++)
{
b = b * 10 + a;
}
return b;
}
int SumA(int a, int n)
{
int sum=0, j;
for (j = 1; j <= n; j++)
{
sum += fn(a, j);
}
return sum;
}
第10题
#include <stdio.h>
int w = 0;
int reverse(int number);
int main()
{
int n;
scanf("%d", &n);
printf("%d\n", reverse(n));
return 0;
}
int reverse(int number)
{
if (number / 10 == 0)
{
return w * 10 + number;
}
else
{
w = w * 10 + number % 10;
return reverse(number / 10);
}
}
第11题
#include <stdio.h>
#include <math.h>
int prime(int p);
void Goldbach(int n);
int main()
{
int a,b,m, n, i, cnt;
scanf("%d %d", &a, &b);
m = a < b ? a : b;
n = a < b ? b : a;
if (m < 6)
m = 6;
if (m % 2)
m++;
cnt = 0;
for (i = m; i <= n; i += 2)
{
Goldbach(i);
cnt++;
if (cnt % 5)
printf(", ");
else
printf("\n");
}
return 0;
}
//main函数是题目已经给出的
int prime(int p)
{
int i, result = 1;//这里result用于判断,1代表是,0代表不是
if (p <= 1)//因为 1 不是素数要排除 1 。
{
return 0;
}
else
{
for (i = 2; i < p; i++)
{
if (p % i == 0)//能被2到这个数的开方加一的数整除就让判断值presult变0表示不是素数 。
{
result = 0;
break;//但凡有一个数可以整除就不是素数,可以停止循环 。
}
}
if (result == 0)
return 0;
else
return 1;
}
}
void Goldbach(int n)
{
int p, q;
//用穷举法找符合n=p+q的p和q
for (p = 1; p <= n; p++)
{
q = n - p;
if((prime(p)==1&&prime(q)==1)&&n==p+q)//这里显示报错;“=”左操作数必须为左值
{
printf("%d=%d+%d", n, p, q);
break;//因为是要最小的p,找到一个就跳出循环
}
}
}
第12题
#include <stdio.h>
int fn(int a, int n);
int SumA(int a, int n);
int main()
{
int a, n;
scanf("%d %d", &a, &n);
printf("fn(%d, %d) = %d\n", a, n, fn(a, n));
printf("s = %d\n", SumA(a, n));
return 0;
}
int fn(int a, int n)
{
int i,b;
b = 0;
for (i = 1; i <= n; i++)
{
b = b * 10 + a;
}
return b;
}
int SumA(int a, int n)
{
int sum=0, j;
for (j = 1; j <= n; j++)
{
sum += fn(a, j);
}
return sum;
}
第13题
#include <stdio.h>
#include <string.h>
void StringCount(char s[]);
int main()
{
char str[100];
gets(str);
StringCount(str);
return 0;
}
void StringCount(char s[])
{
int i, letter = 0, blank = 0, digit = 0, other = 0;
for(i=0;s[i]!='\0';i++)
{
if ('a' <= s[i] && s[i] <= 'z' || 'A' <= s[i] && s[i] <= 'Z')
letter++;
else if (s[i] == ' '|| s[i] == '\n')
blank++;
else if ('0' <= s[i] && s[i] <= '9')
digit++;
else
other++;
}
printf("letter = %d, blank = %d, digit = %d, other = %d", letter, blank, digit, other);
}