作业5编程题
对称回⽂数是指某数与其平⽅都是回⽂数。例如,n=11时,11*11=121;【提⽰1】编写函数 int huiwen(long n) ,判断 n 是否回⽂数,若是返回 1 ,否则返回 0。回⽂数是指某数与其反序数相等,例如 5、131、1551、345676543。【提⽰2】在 main 函数中遍历 300 以内的数,寻找对称回⽂数并输出。字),函数能输出应给顾客找零⾦额的各种⾯额⼈⺠币的张数,编
·
物联1254 baiyufan
题⽬1:
编写函数求次⽅。其中函数头为 double power(double x, int n) 。在主函数中输⼊ x 、 n 并调⽤该函数求 。
输⼊⽰例(输⼊两个数,第⼀个为整数 n ,第⼆个为浮点数 x ):
3 5
输出⽰例(输出 x 的 n 次⽅,保留两位⼩数):
125.00
#include <stdio.h>
double power(double x,int n);
int main(){
int n;
double x;
printf("请输入n,x:");
scanf("%d %lf",&n,&x);
printf("%.2f",power(x,n));
return 0;
}
double power(double x,int n){
double sum = x;
if(n == 0)return 1.0;
for(int i = 1;i < n;i++){
sum *= x;
}
return sum;
}

题⽬2:
⽤递归函数的⽅法,求解题⽬1.
【提⽰:先列出具体的数学公式,找到对应的 base case ,
general case
, 再套⽤模板。】
输⼊⽰例1(说明:输⼊第⼀个为整数 n ,第⼆个为浮点数 x 。):
3 5
输出⽰例(输出 x 的 n 次⽅,保留两位⼩数):
125.00
#include <stdio.h>
double power(double x, int n) {
if (n == 0) {
return 1.0;
}
return x * power(x, n - 1);
}
int main() {
int n;
double x;
printf("请输入n,x:");
scanf("%d %lf", &n, &x);
printf("%.2f\n", power(x, n));
return 0;
}

题⽬3:
设⼈⺠币的⾯额有(以元为单位):1⾓、2⾓、5⾓、1元、2元、5元、10元、20元、50元。
编写函数 void change(double m,double c); 其中 m 为商品价格(只取⼀位有效数字), c 为顾客付款(只取⼀位有效数
字),函数能输出应给顾客找零⾦额的各种⾯额⼈⺠币的张数,且张数之和为最⼩。
要求在主函数中输⼊商品价格和顾客付款,调⽤函数得到结果。
输出⽰例1:
34.2 100
输出⽰例1:
50元:1
20元:0
10元:1
5元:1
2元:0
1元:0
5⾓:1
2⾓:1
1⾓:1
-----
找零 6 张!
#include <stdio.h>
void change(double m,double c);
int main(){
double m,c;
printf("请输入商品价格m,顾客付款c:");
scanf("%lf %lf",&m,&c);
change(m,c);
return 0;
}
void change(double m, double c) {
int price_jiao = (int)(m * 10 + 0.5);
int pay_jiao = (int)(c * 10 + 0.5);
int change_jiao = pay_jiao - price_jiao;
int denominations[] = {500, 200, 100, 50, 20, 10, 5, 2, 1};
char *names[] = {"50元", "20元", "10元", "5元", "2元", "1元", "5角", "2角", "1角"};
int count[9] = {0};
int total_count = 0;
for (int i = 0; i < 9; i++) {
count[i] = change_jiao / denominations[i];
change_jiao %= denominations[i];
total_count += count[i];
}
for (int i = 0; i < 9; i++) {
printf("%s:%d\n", names[i], count[i]);
}
printf("-----\n");
printf("找零 %d 张!\n", total_count);
}

题⽬4:
学校⾥的“吃货协会”准备搞⼀个聚会,已经知道现有会员 N ⼈,把会员从 1 到 N 编号,其中会⻓的号码是 N 号,凡是和会⻓是⽼朋友的,那么该会员的号码肯定和 N 有⼤于 1 的公约数,否则都是新朋友。
现在会⻓想知道究竟有⼏个新朋友?请你编程序帮会⻓计算出来。
【提⽰1】编写函数 int gcd(int a,int b) ,求 a 和 b 的最⼤公约数。
【提⽰2】编写 main 函数,接收键盘输⼊的 N 的值,寻找 [1,N-1] 区间内的与 N 的最⼤公约数为 1 的数字,输出个数。
输⼊⽰例1( N ):
50
输出⽰例1( [1,N-1] 区间内的与N的最⼤公约数为 1 的数字个数):
20
#include <stdio.h>
int gcd(int a,int b){
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
int main() {
int N;
printf("输入会员N人:");
scanf("%d", &N);
int count = 0;
for (int i = 1; i < N; i++) {
if (gcd(i, N) == 1) {
count++;
}
}
printf("%d\n", count);
return 0;
}

题⽬5:
要求:⽤递归函数判断⼀个⾃然数是否为素数(0表⽰不是,1表⽰是)。
输⼊⽰例1(⼀个⾃然数):
4
输出⽰例1(是否为素数( 0 表⽰不是, 1 表⽰是)):
0
#include <stdio.h>
#include <math.h>
int isPrime(int n, int i) {
if (n < 2) return 0;
if (n == 2) return 1;
if (i > sqrt(n)) return 1;
if (n % i == 0) return 0;
return isPrime(n, i + 1);
}
int main() {
int n;
printf("请输入一个自然数:");
scanf("%d", &n);
printf("%d\n", isPrime(n, 2));
return 0;
}

题⽬6:
要求:⽤递归函数求解下⽅问题。
有5个学⽣坐在⼀起,问第5个学⽣多少岁,他说⽐第4个学⽣⼤2岁。问第4个学⽣岁数,他说⽐第3个学⽣⼤2
岁。问第3个学⽣岁数,他说⽐第2个学⽣⼤2岁。问第2个学⽣岁数,他说⽐第1个学⽣⼤2岁。最后问第1个学⽣,
他说10岁,请问第5个学⽣多⼤。。
输⼊⽰例1:
[⽆输⼊]
输出⽰例1(第 5 个学⽣的年龄):
18
#include <stdio.h>
int age(int n) {
if (n == 1) {
return 10;
} else {
return age(n - 1) + 2;
}
}
int main() {
printf("%d\n", age(5));
return 0;
}

题目七:
编写函数,寻找300以内的所有的对称回⽂数并输出。
回⽂数是指某数与其反序数相等,例如 5、131、1551、345676543。
对称回⽂数是指某数与其平⽅都是回⽂数。例如,n=11时,11*11=121;n=111时,111*111=12321。
【提⽰1】编写函数 int huiwen(long n) ,判断 n 是否回⽂数,若是返回 1 ,否则返回 0 。
【提⽰2】在 main 函数中遍历 300 以内的数,寻找对称回⽂数并输出。
输⼊⽰例: [⽆输⼊]
输出⽰例: 300以内的所有的对称回⽂数: 1 2 3 11 22 101 111 121 202 212
#include <stdio.h>
int huiwen(long n) {
long original = n;
long reversed = 0;
while (n > 0) {
reversed = reversed * 10 + n % 10;
n /= 10;
}
return original == reversed;
}
int main() {
printf("300以内的所有的对称回?数: ");
int first = 1;
for (int n = 1; n <= 300; n++) {
if (huiwen(n) && huiwen((long)n * n)) {
if (!first) {
printf(" ");
}
printf("%d", n);
first = 0;
}
}
printf("\n");
return 0;
}

更多推荐



所有评论(0)