• / 112
  • 下载费用:30 金币  

北理大网络教室C语言编程资料题库'及其内容答案(汇编版).doc

关 键 词:
北理大 网络教室 语言 编程 资料 题库 及其 内容 答案 汇编
资源描述:
''1. Hello world.输入:无输出:Hello world.程序:#includeint main(){printf("Hello world.\n");return 0;}2. Welcome to Beijing.程序:#include int main(){printf("Welcome\n");printf("to\n");printf("Beijing.\n");return 0;}3. 求A+B输入:整数1 整数2输出:整数1+整数2=和程序: #includeint main(){int a,b;scanf("%d",&a);scanf("%d",&b);printf("%d+%d=%d\n",a,b,a+b);return 0;}4. 求 x 的 3次方输入:一个整数。 输出:该整数的 3 次方值。程序: #includeint main(){ int x; scanf("%d",&x); printf("%d\n",x*x*x); return 0;} 5. 学习打印你的第一个图形编写一个小程序,要求输出的是 4 行由*号组成的等腰三角形。程序: #include int main() { printf(" *\n"); printf(" ***\n"); printf(" *****\n"); printf("*******\n"); return 0; }6. 一年级的算术题输入: 接受两个整数,每个整数之间使用空格分隔。例如输入格式为:123 444输出:分别输出按照整型数据进行 +、-、*、/、* 之后的运行结果。程序: #includeint main(){ int a,b; scanf("%d %d",&a,&b); printf("%d+%d=%d\n",a,b,a+b); printf("%d-%d=%d\n",a,b,a-b); printf("%d*%d=%d\n",a,b,a*b); printf("%d/%d=%d\n",a,b,a/b); printf("%d%%%d=%d\n",a,b,a%b); return 0;}7. 求两个变量的最小值输入:两个整型数输出:两个整型值中的最小值程序: #includeint main(){ int a,b; scanf("%d%d",&a,&b); printf("min=%d\n",aint main(){ int a,b,c; scanf("%d%d%d",&a,&b,&c); if(a+b>c&&a+c>b&&b+c>a) { if (a==b&&b==c&&a==c) printf("equilateral triangle.\n"); else if(a==b||a==c||b==c) printf("isoceles triangle.\n"); else printf("triangle.\n"); } else printf("non-triangle.\n"); return 0;}9. 计算圆柱的侧面积及体积输入 :第一行输入圆柱的底面半径 r第二行输入圆柱的高 h 输出:s=< 圆柱的侧面积 >,v=< 圆柱的体积 > 要求 1. 所有变量都定义为双精度类型2. 结果精确到小数点后两位程序: #include#define PI 3.1415926int main(){ double r,h,s,v; scanf("%lf",&r); scanf("%lf",&h); s=2*PI*r*h; v=PI*r*r*h; printf("s=%.2f,v=%.2f\n",s,v); return 0;}10. 计算时钟的夹角背景: 钟面上的时针和分针之间的夹角总是在 0 ~180之间 ( 包括 0 和180 ) 。举例来说,在十二点的时候两针之间的夹角为 0 ,而在六点的时候夹角为180 ,在三点的时候为90 。本题要解决的是计算 12:00 到 11:59 之间任意一个时间的夹角。输入: 每组测试数据包含两个数字:第一个数字代表小时 ( 大于 0 小于等于 12) ,第二个数字代表分 ( 在区间 [0, 59] 上 ) 。 输出: 对应每组测试数据,用常用格式显示时间以及这个时候时针和分针间的最小夹角,精确到小数点后一位。输出格式如下所示。程序: #include#includeint main(){ int h,m; float d1,d2,d; scanf("%d%d",&h,&m); d1=30*(h+m/60.0); d2=m*360/60.0; d=fabs(d1-d2); if(d>180) d=360-d; printf("At %d:%d the angle is %.1f degrees.\n",h,m,d); return 0;}11. 找出最大素数素数是指一个只能被1和它本身整除的数,在数论中占有重要的研究地位,在当代密码学中也被广泛应用。输入:取值范围输出:该范围内的最大素数程序: #include int main() { int n,i,j; scanf("%d",&n); for(i=n;i>=1;i--) { for(j=2;jint main(){long int s=1;int a,n,i=1,t=1;scanf("%d%d",&a,&n);if(n==0)printf("The last 3 numbers is 1.\n");else{for(i=1;i<=n;i++){s=(s*a)%1000;}t=s%1000;if(t>=0&&t<10) printf("The last 3 numbers is 00%d.\n",t);if(t>=10&&t<100)printf("The last 3 numbers is 0%d.\n",t);if(t>=100&&t<1000)printf("The last 3 numbers is %d.\n",t);}return 0;}13. 贪吃的猴子有一只猴子,第一天摘了若干个桃子 ,当即吃了一半,但还觉得不过瘾 ,就又多吃了一个。第2天早上又将剩下的桃子吃掉一半,还是觉得不过瘾,就又多吃了两个。以后每天早上都吃了前一天剩下的一半加天数个(例如,第5天吃了前一天剩下的一般加5个)。到第n天早上再想吃的时候,就只剩下一个桃子了。 输入:天数n输出:第一天的桃子个数程序: #includeint main(){int i,n,amount=1;scanf("%d",&n);for(i=n-1;i>=1;i--)amount=2*(amount+i);printf("The monkey got %d peachs in first day.\n",amount);}14. 黑色星期五在西方,星期五和数字13都代表着坏运气,两个不幸的个体最后结合成超级不幸的一天。所以,不管哪个月的十三日又恰逢星期五就叫“黑色星期五”。输入:年份输出:判断该年是否包含黑色星期五,如包含,给出具体日期程序: #includeint main(){int i,n=0,year,month[12]={0};int a[13]={0,13,44,73,104,134,165,195,226,257,287,318,348};int b[13]={0,13,44,72,103,133,164,194,225,256,286,317,347};scanf("%d",&year);for(i=1;i<13;i++){if ((year%4==0 && year%100!=0)||year%400==0){if((year-1+((year-1)/4)-((year-1)/100)+((year-1)/400)+a[i])%7==5){n++;month[n]=i;}}elseif((year-1+((year-1)/4)-((year-1)/100)+((year-1)/400)+b[i])%7==5){n++;month[n]=i;}}if(n==1){printf("There is %d Black Friday in year %d.\n",n,year);printf("It is:\n");printf("%d/%d/13\n",year,month[1]);}else{printf("There are %d Black Fridays in year %d.\n",n,year);printf("They are:\n");for (i=1;i<=n;i++){printf("%d/%d/13\n",year,month[i]);}}return 0;}15.你会输出一行星号?我们才开始上机,现在需要我们用最简单得办法,在一行中输出N个星号。输入:N值输出:一行中N个星号。程序: #includeint main(){int i,n;scanf("%d",&n); for(i=1;i<=n;i++) printf("*"); printf("\n");}16. 计算SUM的值已知公式:SUM = 1 + 1/2 + 1/3 + 1/4 + ... + 1/n 输入: n 输出: 表达式 sum 的值。结果保留 6 位小数。程序: #includeint main(){int i,n;double sum=0;scanf("%d",&n);for (i=1;i<=n;i++)sum+=1.0/i;printf("sum=%.6lf\n",sum);return 0;}17. 寻找特殊整数请编写一个程序寻找一种特殊整数:一个 n 位的正整数等于其各位数字的n次方之和。例如:407=4×4×4+0×0×0+7×7×7。所以407就是一个特殊数。输入:正整数的位数n(n<=6)。输出: 所有此n位特殊数。每个数占一行。若不存在符合条件的特殊数,则输出提示:“No output.”;若存在,则从小到大进行输出。说明:假设输入为4,在4位整数中,有3个4位的特殊数,则输出格式为(输出中的1111、2222和9999并不是4位特殊数,只是格式样例):111122229999程序: #include#include int main(){ int n,i,j,num,t,s=0,t1,flag=0; scanf("%d",&n); t=pow(10,n-1); for (i=t;i= 0)。输出:打印相应的空心倒三角形。图样参见测试用例。程序:#include #include int main() { int i,j,h; scanf("%d",&h); for (i=1;i<=h;i++) { for(j=1;j#include int main(){int i,j,h;char ch;scanf("%c%d",&ch,&h);for (i=1;i<=h;i++){for(j=1;j<=h-i;j++)printf(" ");printf("%c",ch+i-1);for(j=1;j<=2*i-3;j++)printf(" ");if(i==1) {printf("\n");continue;}printf("%c\n",ch+i-1);}for (i=h+1;i<=2*h-1;i++){for(j=1;j<=i-h;j++)printf(" ");printf("%c",ch+(2*h-1)-i);for(j=1;j<=(2*h-1-i)*2-1;j++)printf(" ");if(i==2*h-1){printf("\n");continue;}printf("%c\n",ch+(2*h-1)-i);}return 0;}20. 空心梯形输入行数 n 和首数字字符,在屏幕上输出由数字围起的高和下底宽度均 n 的空心梯形。 要求:输出的数字是循环的,即输出数字 9 后再输出的数字是 0。输入:行数n 和首字符输出:空心梯形程序: #include#include int main(){int i,j,n,f,t=0;scanf("%d%d",&n,&f);t=f;for(j=1;j<=3*n-2;j++){if(j==3*n-2)printf("%d",t);elseprintf("%d ",t);if(j<(3*n-1)/2){if(t==9) t=0;elset++;}else if(j==(3*n-1)/2&&n%2==0) continue;else{if(t==0) t=9;else t--;}}printf("\n");t=f;for (i=2;i<=n;i++){for (j=1;j<=2*(i-1);j++)printf(" ");if(i==n){for (j=1;j<=(n+1)/2;j++){if(t==9) { t=0;printf("%d ",t);} elseprintf("%d ",++t);}for (j=1;j<=n/2;j++){if(t==0&&n%2!=0) t=9;else if(j==1&&n%2==0){if(j==n/2) printf("%d\n",t);elseprintf("%d ",t); continue;} else t--;if(j==n/2)printf("%d\n",t);elseprintf("%d ",t);}}else{if(t==9) {printf("0");for(j=1;j<=6*n-4*i-3;j++)printf(" ");printf("0\n");t=0;}else{t++;printf("%d",t);for(j=1;j<=6*n-4*i-3;j++)printf(" ");printf("%d\n",t);}}}return 0;}H1:计算通用产品代码(UPC)的校验位(选作)下面是一种计算校验位的方法:首先把第一位、第三位、第五位、第七位、第九位和第十一位数字相加。然后把第二位、第四位、第六位、第八位和第十位数字相加。接着把第一次加法结果乘以3后再加上第二次加法的结果。随后,再把上述结果减去1。减法后的结果除以10取余数。最后,用9减去上一步骤中得到的余数。现在以Morton碘盐为例,第一组数字的加法是0+4+0+0+0+3=7,而第二组数字的加法是2+6+0+1+0=9。把第一组加法值乘以3后再加上第二组加法值得到的结果是30。再减去1,结果变为29。再把这个值除以10取余数为9。9在减去余数结果9,最终值为0。输入:每次输入三行数据,第一行是UPC的第一位数字,第二行是UPC的第一组五位数字,第三行是UPC的第二组五位数字。输出:UPC的校验位程序: #include#includeint main() {int i,j,s1=0,s2=0,t;int a[11];char b[6],c[6];scanf("%d",&a[0]);scanf("%s",b);scanf("%s",c);for (i=0,j=1;i<5;i++,j++)a[j]=b[i]-48;for (i=0,j=6;i<5;i++,j++)a[j]=c[i]-48;for (i=0;i<11;i++){if(i%2==0)s1+=a[i];elses2+=a[i];}t=9-(s1*3+s2-1)%10;printf("%d\n",t);return 0;}H2:数制转换(选作)这个题目会给你两个不同的数字,它们不属于同一进制,要求你计算出当它们分别处于何种进制之中时,两个数字相等。譬如 12 和 5 ,在十进制下它们是不等的,但若 12 使用 3 进制而 5 使用六进制或十进制时,它们的值就是相等的。因此只要选择合适的进制, 12 和 5 就可以是相等的。 程序的输入是两个数字 M 和 N( 其十进制的值不超过 1000000000) ,它们的进制在 2~36 之间。对于十以下的数字,用 0~9 表示,而十以上的数字,则使用大写的 A~Z 表示。 求出分别在 2~36 哪种进制下 M 和 N 相等。若相等则输出相应的进制,若不等则输出错误信息。当然了,对于多种可能成立的情况,找出符合要求的进制最小的一组就行了。信息的格式见测试用例。程序: #includeint main(){ long int pm=0,pn=0,s=0,t=0,w=1,e=1,p=0,q=0;int a[30],b[30];char m[30],n[30];int i,j,g,k,max1=0,max2=0,flag=0;scanf("%s%s",m,n);for(i=0;m[i]!='\0';i++){if(m[i]>='A'&&m[i]<='Z')a[i]=m[i]-55;if(m[i]>='0'&&m[i]<='9')a[i]=m[i]-48;max1=max1<(a[i]+1)?(a[i]+1):max1;max1=max1<2?2:max1;}pm=i;for(j=0;n[j]!=0;j++){if(n[j]>='A'&&n[j]<='Z')b[j]=n[j]-55;if(n[j]>='0'&&n[j]<='9')b[j]=n[j]-48;max2=max2<(b[j]+1)?(b[j]+1):max2;max2=max2<2?2:max2;}pn=j;for(i=max1,j=max2;i<=36&&j<=36; ){ p=0;q=0;w=1;e=1;for(g=pm-1;g>=0;g--){ p+=a[g]*w;w=w*i;}for(k=pn-1;k>=0;k--){ q+=b[k]*e;e=e*j;}if(pq) j++; else { flag=1; printf("%s (base %d) = %s (base %d)\n",m,i,n,j); break; }}if(flag==0) printf("%s is not equal to %s in any base 2..36\n",m,n);return 0;}21. 零钱换整钱 小明手中有一堆硬币,小红手中有若干张10元的整钱。已知 1 角的硬币厚度为 1.8mm,5 角的硬币厚 1.5mm, 1 元的硬币为 2.0mm 。小明和小红一起玩游戏,小红拿出若干张10元的纸币,小明要将 1 角的硬币放成一摞,将 5 角的硬币硬币放成一摞,将 1 元的硬币放成一摞,如果 3 摞硬币一样高,并且金额能够正好小红要求的面值,则双方可以进行交换,否则没有办法交换。输入:小红希望交换几张10元的纸币输出:1 角的数量,5 角的数量,1元的数量程序:三种硬币厚度公倍数:18mm(1角10个共1元,5角12个共6元,1元9个共9元,要想3摞硬币一样高总钱数必须是16元(1+6+9)的公倍数)#include int main() { int n,t,x,y,z;scanf("%d",&n);t=n*10;if(t%16!=0)printf("No change.\n");else{ t=t/16; x=t*10; y=t*12; z=t*9; printf("%d,%d,%d\n",x,y,z);}return 0; }22. 买东西.某商品有A、B、C三种品牌,各品牌的价格各不相同,其中A品牌的价格为每个5元, B品牌为每个3元,而C品牌为每3个1元。如果要用 M 元钱买 N 个该商品,要求每个商品至少买一个,编程求各种品牌各能买多少个。输入:先后输入M(钱数)及N(商品个数)的实际数值输出:所有可能情况下可以购买的3种商品的个数,按A、B、C品牌的顺序输出,用逗号分隔。例如:2,30,68;表示A品牌商品2个、B品牌商品30个、C品牌商品68个。 要求:因为有多个结果,结果的排序按照A品牌的个数从少到多的顺序输出。程序:#include int main() { int i,j,k;float m,n;scanf("%f%f",&m,&n);for(i=1;iint main() { int i,s[10]={0},max=0; for(i=0;i<10;i++){ scanf("%d",&s[i]); if(max#includemain(){int i,j,k,a,b,c,d,m=0,e;for(e=0;e>=0;e++){scanf("%d%d",&i,&j);if((i==0)||(j==0)) break;else if((i>9999||i<1000)||(j>9999||j<1000)) printf("Error\n");else {for(k=i;k<=j;k++){if (k%2==1) continue;a=k/1000;b=(k%1000)/100;c=(k%100)/10;d=k%10;if((((a==b)||(b==c))||(c==d)) ||((d==a)||((a==c)||(d==b)))) continue;printf("%d ",k);m+=1;}printf("\ncounter=%d\n",m); m=0;}}}25.输出字母围起的正方形输入N*N图形正方形的边长N,图形左上角的字母,输出由字母围成的空心正方形。输出的字母是顺时针连续的,且是循环的,即输出字母'Z'后输出字母"A"。注意在两个字母之间有一个空格。程序: #include int main(){ int n,i,j,t; char m; scanf("%d %c",&n,&m); for(i=0;i90)||(m>96&&t>122))t=t-26; if(j==n-1) printf("%c\n",t); else printf("%c ",t); } } else if(i==n-1) { for(j=0;j90)||(m>96&&t>122)) t=t-26; if(j==n-1) printf("%c\n",t); else printf("%c ",t); } } else { for(j=0;j<2*n-1;j++) { if(j==0) { t=m+4*n-4-i; if((m<=90&&t>90)||(m>96&&t>122)) t=t-26; printf("%c",t); } else if(j==2*n-2) { t=m+n-1+i; if((m<=90&&t>90)||(m>96&&t>122)) t=t-26; printf("%c\n",t); } else printf(" "); } } }return 0; }H3:猜数字(选作)有如下一组数字,其中每个数字都在 1 ~ 63 之间, 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 632 3 6 7 10 11 14 15 18 19 22 23 26 27 30 31 34 35 38 39 42 43 46 47 50 51 54 55 58 59 62 634 5 6 7 12 13 14 15 20 21 22 23 28 29 30 31 36 37 38 39 44 45 46 47 52 53 54 55 60 61 62 638 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31 40 41 42 43 44 45 46 47 56 57 58 59 60 61 62 6316 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 6332 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 现在需要编写一个程序,当从键盘输入某数字在且仅在哪几行出现了,该程序可以“猜”出这个数字是几。输入:程序的输入是一串以空白符分开的数字,当输入 0 时表示输入结束。输出:输出猜到的数字。程序:#include int main() { int a[7],m,n=0,i,p=0; for (i=0;i<7;i++) { scanf("%d",&a[i]); n++; if (a[i]==0) { break; } scanf(" "); } for (m=1;m<64;m++) { p=0; for (i=0;i<(n-1);i++) { if (a[i]==1) {if (m==m/2*2){p=1;break;}} if (a[i]==2) {if (m%4!=3&&m%4!=2){p=1;break;}} if (a[i]==3) {if (m%8!=4&&m%8!=5&&m%8!=6&&m%8!=7) {p=1;break;}} if (a[i]==4) {if(m%16!=8&&m%16!=9&&m%16!=10&&m%16!=11&&m%16!=12&&m%16!=13&&m%16!=14&&m%16!=15) {p=1;break;}} if (a[i]==5) {if (m>31&&m<48||m<16) {p=1;break;}} if (a[i]==6) {if (m<32) {p=1;break;}} } if (p==0) {printf("%d\n",m);break;} } return 0; }H4:小蜜蜂(选作)一只小蜜蜂在如下图所示的蜂窝上爬行。它爬行时,只能从一个格爬到相邻的大号格子中。例如,从 1 号格子可以爬到 2 号或者 3 号格子,从 2 号则可以爬到 3 号或者 4 号格子。请问从一个格子 a 爬到一个格子 b 一共有多少种可行的路线。 输入:分别是起始点 a 和终止点 b 的编号。( a 和 b 在 1~100 之间,且 a=10) { l=1; b[i+1]=b[i+1]+1; b[i]=b[i]%10; } } } k=N; while(b[--k]==0){} for(i=k;i>=1;i--) printf("%d",b[i]); printf("\n"); return 0; }#include int main(){long double num1,num2,num3=0;int a=0,b=0,i;scanf("%d %d",&a,&b);num1=1;num2=2;if(b-a==1)printf("1\n");else if(b-a==2)printf("2\n");else{ for(i=3;i<=b-a;i++) { num3=num1+num2; num1=num2; num2=num3; } printf("%.0lf\n",num3);}return 0; }H5.铺地板(选作)背景:你是一名室内装潢工程队的配料员。你的伙伴们喜欢采用“之”字型的方式铺大理石地砖,图案如下:1 2 6 7 15 3 5 8 14 16 4 9 13 17 22 10 12 18 21 23 11 19 20 24 25 学了 C 语言以后,你决定编写一个程序,帮助你的同伴生成这样的图形。输入:方阵N的大小。输出方阵。程序:#include int main() { int i=0,j=0,g,n,t=1; int a[100][100]; scanf("%d",&n); for(g=0;g=0;i++,j--){a[i][j]=t; t++;} } else {for(i=g,j=0;i>=0&&j<=g;i--,j++){a[i][j]=t; t++;} } } for(g=1;g=g;i++,j--){a[i][j]=t; t++;} } else {for(i=n-1,j=g;i>=g&&j int main() { int a[20][20],i,j,n,m=1,l,k=0; scanf("%d",&n); l=n; for(i=1;i<=(n+1)/2;i++) { for(j=0;jint main(void){int i,j,k,l,m,n;scanf("%d",&n);for (i=1;i<=3;i++)for (j=0;j<=9;j++)for (k=0;k<=9;k++)for (l=0;l<=9;l++)for (m=0;m<=9;m++){if ((i*100+j*10+k)%n==0&&(j*100+k*10+l)%n==0&&(k*100+l*10+m)%n==0)printf("%d%d%d%d%d\n",i,j,k,l,m);if (i==3) return 0;}return 0;}H8 邮票组合(选作)背景: 我们寄信都要贴邮票,在邮局有一些小面值的邮票,通过这些小面值邮票中的一张或几张的组合,可以满足不同邮件的不同的邮资。 现在,邮局有4种不同面值的邮票。在每个信封上最多能贴5张邮票,面值可相同,可不同。输入: 四种邮票的面值。输出: 用这四种面值组成的邮资最大的从1开始的一个连续的区间。说明: 如结果为10,则表明使用4张邮票可组合出1、2、3、4、5、6、7、8、9、10这些邮资。名词解释: 邮资:就是你寄东西需要花多少钱。 邮票面额:是由国家发行的具有固定价格的花纸片,被称为邮票。如果你寄东西,邮局称了重量,告诉你要240分。这样你就要贴邮票了。如果现在邮局的邮票有面值为80分、50分、20分和10分的四种,你就可以采用不同的组合得到240的邮资,例如:采用3张80分的可以凑出240分;或者24张10分的凑起来240分也可以。显然不同邮票的组合都可以得到同样一种邮资。程序:#includemain(){int i,j,k,p,a1,a2,a3,a4,m=1,flag;scanf("%d%d%d%d",&a1,&a2,&a3,&a4);A:for(i=0;i<=5;i++){for(j=0;j<=5-i;j++){for(k=0;k<=5-i-j;k++){for(p=0;p<=5-i-j-k;p++){flag=1;if(a1*p+a2*k+a3*j+a4*i==m){flag=0;m++;goto A;}}}}}if(flag==1)printf("The max is %d.\n",m-1);}H9 撞球(选做)一天,丁俊晖编一整天的程序,突然觉得累了,于是便决定在房间内四处走走。他的房间是矩形的,他从电脑开始随便选了一个角度开始行走。由于职业习 惯,丁俊晖走路始终是直线,而且碰到墙以后会反弹,入射角度与出射角度完全相同。丁俊晖会一直行走,直到灵感再次迸发。假设他的行走速度是匀速的,现在, 丁俊晖的母亲想知道他一共休息了多长时间以便提醒他继续工作。 丁俊晖想考考他的母亲,于是他记录了自己碰到墙壁的序列并且告诉了她,你有没有办法能够帮助她计算出小丁所走的路程? 输入输入包括多个测试用例,每个测试用例如下: 第一行包含两个数字 w, l(00) break;}for(i=0;i0) break;}if(m%2==0)d=m*w+(x0-x1)*pow(-1,r);elsed=m*w+w-x0-x1;if(n%2==0)c=n*l+(-y0+y1)*pow(-1,f);elsec=n*l-l+y0+y1;s=sqrt(pow(d,2)+pow(c,2));printf("%.4f\n",s);}H10. 整数问题(选做)请求输出满足以下条件的n位正整数的个数:要求该n位整数的从高位开始前1位可以被1整除,该n位整数前2位可以被2*2整除,该整数前3位可以被3*3整除,该整数前4位可以被4*4整除……。即该整数前k位都可被k平方整除。例如:n=1,则符合条件的1位正整数为1~9,输出答案9。n=2,符合条件的正整数为:12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96,则输出答案22。当n=4时,2432就是一个符合题意的整数。第一位2可以被1整除;前2为24可以被4整除;前3位243可以被9整除;整个4位2432可以被16整除。输入:  n(0<=n<9)输出: 符合该条件的n位正整数的数量(本题目为软件学院2007年保研学生初试上机试题。本题可以不用数组)程序:#include #include main() { static int a[30],b[30],n,t,temp,i,j,k; scanf("%d",&n); for(i=1;i<=n;i++) { t=1; for(j=1;j<30;j++) { for(k=0;k<=9;k++) { b[t]=a[j]*10+k; if(b[t]%(i*i)==0 && b[t]>b[t-1]) t++; } } for(j=1;j<30;j++) {a[j]=b[j];b[j]=0;} t--; } printf("%d\n",t); }26.二年级小学生的题目两个二年级小朋友在一起玩游戏,小明给出一堆不超过两位的正整数和运算要求(+、-、*、/、%),小丽要找出这些整数中的最大值和最小值,然后按照小明的要求算出最大数与最小数进行算术运算的结果。输入:用逗号分隔的不超过两位的正整数序列,及其运算符和等号输出: 最大数 op 最小数=结果程序:#include int main() {int i,a,max=0,min=100,s; char l[100]={0},op; gets(l); for(i=0;;i=i+2) {if(l[i]=='=') break; else {if(l[i]==43||l[i]==45||l[i]==42||l[i]==37||l[i]==47) op=l[i]; else {if(l[i+2]==44) {a=(l[i]-48)*10+l[i+1]-48; i++; } else a=l[i]-48; if(a>=max) {max=a;} if(a<=min) {min=a;} } }} switch(op) {case 43:s=max+min;printf("%d + %d = %d\n",max,min,s);break; case 45:s=max-min;printf("%d - %d = %d\n",max,min,s);break; case 42:s=max*min;printf("%d * %d = %d\n",max,min,s);break; case 37:{if(min==0) {printf("Error!\n");break;} else {s=max%min; printf("%d % %d = %d\n",max,min,s); break;} } case 47:{if(min==0) {printf("Error!\n");break;} else {s=max/min; printf("%d / %d = %d\n",max,min,s); break;} } } }27.等值数列段如果一个数列中的某一段(至少有两个元素)的各元素值均相同,则称之为等值数列段。等值数列段中元素的个数叫做等值数列段的长度。输入:由N个元素组成的整数数列A(其中N<=50)输出:A中长度最大的所有等值数列段的始末位置,如果没有等值数列段,则输出No equal number list.说明:始末位置是指数组下标,即0表示第一个元素。如果有多个同等长度的等值数列,只输出第一个等值数列的起始位置。当在一个LIST中出现两个等长的连续串的时候,我们的答案应该是第一个等长串。程序: #include#include#define N 50#define M 50int main(){char a[N],t;int i,j=0,n,b[M]={0},max=0,min=0,temp;scanf("%d",&n);k:{ gets(a); if((strlen(a)+1)/2!=n) goto k;}t=a[0];b[0]=0;for(i=2;ivoid main(){long int left,p,i,j,k,q,flag[100],n,m;scanf("%d%d",&n,&m);left=n; p=1;for (i=1;i<=n;i++) flag[i]=1;for (i=1;i<=n;i++){q=(m-1)%left+1; j=0; k=p;while (j!=q) {if (flag[k]==1) j++; if (j==q) break;k++;if (k==n+1) k=1;}flag[k]=0; p=k; left--;}printf("The left child is NO %d.\n",k);}29. 组成最大数任意输入一个自然数,输出该自然数的各位数字组成的最大数。例如,输入 1593 ,则输出为 9531 。输入: 自然数 n 输出: 各位数
展开阅读全文
  语墨文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
0条评论

还可以输入200字符

暂无评论,赶快抢占沙发吧。

关于本文
本文标题:北理大网络教室C语言编程资料题库'及其内容答案(汇编版).doc
链接地址:http://www.wenku38.com/p-145397.html

                                            站长QQ:1002732220      手机号:18710392703    


                                                          copyright@ 2008-2020 语墨网站版权所有

                                                             经营许可证编号:蜀ICP备18034126号

网站客服微信
收起
展开