计导实验六

mac2025-04-06  10

文章目录

B. 实验5_3_设计函数getDaysG. 实验5_11_设计函数isPerfect与printPerfect

B. 实验5_3_设计函数getDays

运行时间限制: 1000 运行内存限制: 65536 作者: scshuanghai 是否specialjudge: False 题目描述 问题描述: 设计函数int getDays(int year,int month),根据给定的年year和月份month,计算该月的天数并返回。要注意闰年的判断

输入与输出要求: 输入两个整数y,m,即年份与月份。输出该年内该月的天数,占一行。

程序运行效果: Sample 1: 1995 7↙ There are 31 days in month 7 year 1995. Sample 2: 2000 2↙ There are 29 days in month 2 year 2000.

以为不难的一个题,它帮助我首次完全理解闰年的算法。 学会使用随机数验证程序。 以及补插一下运算优先级: 同一优先级的运算符,运算次序由结合方向所决定。 简单记就是:! > 算术运算符 > 关系运算符 > && > || > 赋值运算符

#include<stdio.h> #include<stdlib.h> #include<time.h> int getDays(int year,int month); int main() { int y,m; //srand(time(NULL)); scanf("%d%d",&y,&m); //m=1+rand()%12; //y=rand(); //printf("%d %d\n",y,m); getDays(y,m); return 0; } int getDays(int year,int month) { //四年一闰百年不闰四百年再闰 if(((year%4==0&&year%100!=0)||(year%400==0))&&(month==2))//此处出现优先级问题 ,整个或一定要用小括号括起来,不然会出现下图情况 printf("There are 29 days in month %d year %d.",month,year); else { switch(month)//其实用if也可,用if还不用转行 { case 2:printf("There are 28 days in month %d year %d.",month,year);break; case 1: case 3: case 5: case 7: case 8: case 10: case 12:printf("There are 31 days in month %d year %d.",month,year);break; case 4: case 6: case 9: case 11:printf("There are 30 days in month %d year %d.",month,year);break; } } }

G. 实验5_11_设计函数isPerfect与printPerfect

运行时间限制: 1000 运行内存限制: 65536 作者: scshuanghai 是否specialjudge: False 题目描述 问题描述: 如果一个整数的各因子(包括1但不包括该整数本身)值之和等于该整数,则该整数称为“完全数”(perfect number)。例如,6是一个完全数,因为6=1+2+3。你的任务是设计函数isPerfect和printPerfect,判断并打印出区间[a,b](1<=a<b<=20000)内的所有完全数,并统计完全数的总个数。 isPerfect函数原型:int isPerfect(int n);用于判断正整数n是否为完全数,若是,则返回值为1,否则为0。 printPerfect函数原型:void printPerfect(int n);用于打印出一个完全数n的所有因子,当执行printPerfect(6)时,打印效果为:6=1+2+3。

输入与输出要求: 输入两个正整数a和b,输出区间[a,b]内的所有完全数及完全数的总个数。

程序运行效果: Sample 1: 1 10000↙

6=1+2+3 28=1+2+4+7+14 496=1+2+4+8+16+31+62+124+248 8128=1+2+4+8+16+32+64+127+254+508+1016+2032+4064 The total number is 4. 附上自己的AC代码,但它还是有毛病,比如,gs使用全局变量时,符号有毛病,运行时间有点大了

#include<stdio.h> int total=0; int isPerfect(int n) { int i,sum=0,gs=0; for(i=1;i<n;i++) { if(n%i==0) { sum+=i;gs++; } } //printf("%d\n",gs); if(n==sum) { printPerfect(n,gs);total++; } } int printPerfect(int n,int gs)//设置第二个参数用以控制符号输出 { //printf("%d\n",gs); int i; printf("%d=",n); for(i=1;i<n;i++) { if(n%i==0) { printf("%d",i);//输出加号,与转行? gs--; //printf("%d\n",gs); if(gs==0)printf("\n"); else printf("+"); } } } int main() { int a,b,i; scanf("%d%d",&a,&b); for(i=a;i<=b;i++) { isPerfect(i); } printf("The total number is %d.\n",total); return 0; }

使用全局变量的毛病:

#include<stdio.h> int total=0,gs=0; int isPerfect(int n) { int i,sum=0,gs=0; for(i=1;i<n;i++) { if(n%i==0) { sum+=i;gs++;//n=2,gs==1,//此处,并未确定i就是完全数却把gs加上了,导致后面结果符号错误 } } printf("%d\n",gs);//n=1,gs=0 if(n==sum) { total++; return 1; } else return 0; } int printPerfect(int n)//设置第二个参数用以控制符号输出 { printf("%d\n",gs);// int i; printf("%d=",n); for(i=1;i<n;i++) { if(n%i==0) { printf("%d",i);//输出加号,与转行? gs--; printf("%d\n",gs); if(gs==0)printf("\n"); else printf("+"); } } } int main() { int a,b,i; scanf("%d%d",&a,&b); for(i=a;i<=b;i++) { if(isPerfect(i)==1)printPerfect(i); } printf("The total number is %d.\n",total); return 0; }

关于符号的一种简单方法

void printPerfect(int n) { int i,j=0; for(i=1;i<n;i++) { if(n%i==0) { if(j==0) { printf("%d=%d",n,i); j++; } else if(j!=0) printf("+%d",i); } } printf("\n"); } ———————————————— 版权声明:本文为博主「ヾ Hushつ」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_43911865/article/details/84896734
最新回复(0)