华中师范大学高级语言程序设计C编程题库20220801.doc

编写一个求出找出所有水仙花数的程序,判断一个数是否是水仙花数由子函数完成,输出由主函数完成。

若一个三位正整数,若它的所有数字立方和等于该数本身,则为水仙花数。

例如 153=13+53+33

请帮忙给出正确答案和分析,谢谢!


水仙花数是指一个三位数中各个位数的立方和等于该数本身。例如:153=13+53+33是 153=1的3次方+5的3次方+3的3次方。

#include <stdiio.h>

mian()

{

    int i,l,k,n;

    printf("请输入水仙花数:\n");//输入水仙花数

    for(i=100;i<1000;i++)/*水仙花数是三位数,所以是从100开始,截止到999,也就是小于1000*/

        {

            l=i/100;/*求出百位数上的数字*/

            k=i/10%10;/*求出十位数的数字*/

            n=i%10;/*求出个位数上的数字*/

            if(l*100+k*10+n==l*l*l+k*k*k+n*n*n)/*判断水仙花数是否相等*/

            {

                printf("%-6d",n);/*宽度是6,当宽度不足6的时候,会补齐空格*/

            }

        }

    printf("\n");/*回车,下一行*/

}


编写程序maxprog完成如下要求:从键盘输入15个数,然后找出其中的最大的数和最小的数,将它们输出到屏幕上(其中最大数和最小数分别定义变量名为max和min)。


正确答案:步骤1:单击工具栏的[新建]按钮打开[新建]对话框在[文件类型]区中选择“程序”再单击[新建文件]。 步骤2:在程序编辑框里输入: SET TALK OFF CLEAR INPUT "请输入第1个数:" TO a STORE a TO max min FOR i=2 TO 15 INPUT "请输入第"+RIGHT(STR(i)2)+"个数:" TO a IF maxa max=a ENDIF IF min>a min=a ENDIF ENDFOR ? "最大值"max ? "最小值"min 步骤3:单击工具栏上的[保存]按钮将程序名命名为“maxprog”关闭命令窗口即可完成操作。
步骤1:单击工具栏的[新建]按钮,打开[新建]对话框,在[文件类型]区中选择“程序”,再单击[新建文件]。 步骤2:在程序编辑框里输入: SET TALK OFF CLEAR INPUT "请输入第1个数:" TO a STORE a TO max, min FOR i=2 TO 15 INPUT "请输入第"+RIGHT(STR(i),2)+"个数:" TO a IF maxa max=a ENDIF IF min>a min=a ENDIF ENDFOR ? "最大值",max ? "最小值",min 步骤3:单击工具栏上的[保存]按钮,将程序名命名为“maxprog”,关闭命令窗口即可完成操作。


( 9 ) 下面的程序执行时 , 可以从键盘输入一个正整数 , 然后把该数的每位数字按逆序输出 。 例如 : 输入 7685 ,则输出 5867 ,输入 1000 ,则输出 0001 。请填空。

Private Sub Command1_Click()

Dim x As Integer

x=InputBox( “ 请输入一个正整数 ” )

While x>_ _[11] ___

Print x Mod 10;

x=x\10

Wend

Print__ [12] __

End Sub


正确答案:


在考生文件夹下有“db4.mdb”数据库。

创建实现求“水仙花数”的模块“模块1”,实现求“水仙花数”并用消息框输出。“水仙花数”是指一个三位数,其各位数字的立方和恰好等于该数的本身。例如 153=1*1*1+5*5*5+3*3*3。要求:“水仙花数”用DO While循环实现。运行该模块的结果如图所示。


正确答案:


请编写函数countValue(),它的功能是:求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根s,并作为函数值返回,最后结果s输出到文件OUT11.DAT中。

例如,若n为1000时,函数值应为s=153.909064。

注意:部分源程序已给出。

请勿改动主函数main()和输入输出函数progReadWrite()的内容。

试题程序:

include<conio.h>

include<math.h>

include<stdio.h>

double countValue(int n)

{

}

main ( )

{

clrscr();

printf ("自然数之和的平方根=%f\n", countValue(lO00)) ;

pregReadWrite();

}

pregReadWrite()

{

FILE *wf;

int i, n;

float s;

wf = fepen("OUT11.DAT", "w");

s = ceuntValue(1000);

fprintf(wf, "%f\n", s);

fclese(wf);

}


正确答案:double countValue(int n) { double xy=0.0; int i; for(i=1;in;i++) if(i%3==0 && i%7==0) xy+=i; /*求n以内(不包括n)同时能被3与7整除的所有自然数之和*/ xy=sqrt((double)xy); /*再对总和求平方根*/ return xy; }
double countValue(int n) { double xy=0.0; int i; for(i=1;in;i++) if(i%3==0 && i%7==0) xy+=i; /*求n以内(不包括n)同时能被3与7整除的所有自然数之和*/ xy=sqrt((double)xy); /*再对总和求平方根*/ return xy; } 解析:本题的解题思路是:利用一个for循环依次从n个自然数当中取数,对当前取出的数进行条件判断。判断条件为:既能被3整除同时也能被7整除,因此,用“&&”运算符来连接两个条件表达式,当某数满足判断条件时,就把该数累加到变量xy中(xy的初始值为0.0),当所有满足条件的数都被找完后,对累加求得的变量xy的值进行求平方根的计算,并把所求得的结果作为函数值返回。


“高级语言程序设计”编程题库1. 从键盘输入3个整数,求其中的最大数和最小数,并输出结果。2. 从键盘上输入一个3*3的整数矩阵,求其各行的平均值并输出,输出时保留两位小数。3. 输出x2的值,x取值从0到10。4. 从键盘上输入一个3*4的整数矩阵,要求输出其最大元素的值,以及它的行号和列号。5.编写一个程序从键盘输入10个数,要求输出其中最小的。6.编写一个函数根据以下公式计算s,计算结果作为函数值返回;n通过形参传入。 s= 7.输出1000年(包括1000年)到1999年之间的所有闰年,要求每三个一行,分行输出。8. 编写程序打印所有的“水仙花数”。“水仙花数”指一个三位数,其各位数字立方和等于该数本身,例如153是一个“水仙花数”,因为 153111333555。9.编写一个程序,输入一个3位数的正整数,然后反向输出对应的数。如:123,则输出321。参考答案:#include void main()int i,s=0,j;scanf(%d,&i);if(i=100&i=999) j=i%10;s=s+j; j=(i-j)/10%10;s=s*10+j;j=i/100;s=s*10+j;printf(the inverse number is %d,s);elseprintf(input erroe!);10. 从键盘输入10名学生的C语言成绩存入一维数组内,编写程序计算10名学生的最高分、平均分和及格人数。参考答案:#include void main()int i,score10,max,min;float ave;for(i=0;i10;i+)scanf(%d,&scorei);max=score0;min=score0;ave=score0;for(i=1;imax)max=scorei;if(scoreimin)min=scorei;ave=ave+scorei;ave=ave/10.0;printf(max=%d,min=%d,ave=%f,max,min,ave);11. 编写一个程序,判断用户输入的字符是否是数字,若是数字,则输出“a numerical character”,否则输出“other character”。参考答案:#include void main()char ch;ch=getchar();if(ch=0&ch=9)printf(a numerical character);elseprintf(other character);12. 从键盘输入12个数存入二维数组a34中,编写程序求出最大元素的值及它所在的行号和列号。参考答案:#include void main()int i,j,a34,max,index_i,index_j;for(i=0;i3;i+)for(j=0;j4;j+) scanf(%d,&aij);max=a00;index_i=0;index_j=0;for(i=0;i3;i+)for(j=0;jmax)max=aij;index_i=i;index_j=j;printf(max=%d,index_x=%d,index_y=%d,max,index_i,index_j);13打印所有的“水仙花数”,所谓“水仙花数”是指一个三位正整数,其各位数字的立方和等于该数本身。参考答案:#include void main() int i, j, k, n; printf (result is: ); for (n = 100; n 1000; n+) i = n / 100; j = (n - i *100) / 10; k = n % 10; if (n = i*i*i + j*j*j + k*k*k) printf (%d , n); printf (n);利用函数将给定的33二维数组转置。参考答案:#include stdio.h void convert(int array33)int i,j,k;for(i=0;i3;i+)for(j=i+1;j3;j+)k=arrayij;arrayij=arrayji;arrayji=k;void main() int i,j;int a33=1,2,3,4,5,6,7,8,9;printf(转换前:n);for(i=0;i3;i+)for(j=0;j3;j+)printf(t%d,aij);printf(n);convert(a);printf(n转换后:n);for(i=0;i3;i+)for(j=0;j3;j+)printf(t%d,aij);printf(n);编程输入a、b、c的值后,输出一元二次方程ax2+bx+c=0的解。参考答案:#include #include void main( ) float a, b, c,d, x1, x2; printf(input a,b,c: ); scanf(%f%f%f, &a, &b, &c); d = sqrt(b * b - 4 * a *c); x1 = (-b + d) / (2 * a); x2 = (-b - d) / (2 * a); printf(x1 = %.2f x2 = %.2fn, x1, x2);从键盘上输入任意两个数和一个运算符(+、-、*、/),根据输入的运算符对两个数计算,并输出结果。参考答案:#include void main() float a, b; int tag = 0; char ch; float result; printf(input two number: ); scanf(%f%f, &a, &b); fflush(stdin); printf(input arithmetic lable(+ - * /): ); scanf(%c, &ch); switch(ch) case +: result = a + b; break; case -: result = a - b; break; case *: result = a * b; break; case /: if (!b) printf(divisor is zero!n); tag = 1; else result = a / b; break; default: printf(illegal arithmetic lablen); tag = 1; if (!tag) printf(%.2f %c %.2f = %.2、fn, a, ch, b, result);编写输入一个字符串,计算其中空格的个数。 采用二维数组输入多个学生五门课的成绩,分别求出每个学生的平均成绩和每门课的成绩。编写程序,逆转字符串。 编写程序,统计一个英语文本中的英语单词个数。21. 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方5的三次方3的三次方。参考答案:#include “stdio.h”void main()int i,j,k,n;for(i=1;i=9;i+)for(j=0;j=9;j+)for(k=0;k=9;k+)if(i*i、*i+j*j*j+k*k*k=i*100+j*10+k)n=i*100+j*10+k;printf(n=%dn,n);22有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13.求出这个数列的前20项之和。参考答案:#include stdio.hmain()int n,t,number=20;float a=2,b=1,s=0;for(n=1;n=number;n+)s=s+a/b;t=a;a=a+b;b=t;printf(sum is %9.6fn,s);23找出101200中所有的素数。参考答案:#include #include int isprimer(int n)int

编写程序,一个数如果刚好与它所有的因子之和相等,则称该数为“完数”,如:6=1+2+ 3,则6就是一个完数。求5~500之间的完数的个数。


正确答案:程序代码如下: CLEAR SET TALK OFF gs=0 FOR i=5 to 500 yzh=0 FOR j=1 to INT (i/2) IF i&j=0 yzh= yzh+j ENDIF ENDFOR IF yzh=i gs=gs+1 ENDIF ENDPOR ? Gs
程序代码如下: CLEAR SET TALK OFF gs=0 FOR i=5 to 500 yzh=0 FOR j=1 to INT (i/2) IF i&j=0 yzh= yzh+j ENDIF ENDFOR IF yzh=i gs=gs+1 ENDIF ENDPOR ? Gs


下面的程序执行时,可以从键盘输入一个正整数,然后把该数的每位数字按逆序输出。例如:输入7685,则输出5 8 6 7;输人1000,则输出0 0 0 1。请填空。 Private Sub Command1_Click Dim x As Integer X=InputBox(“请输入一个正整数”) While x> 【11】 Print x Mod 10; x=x\10 Wend Print 【12】 End Sub


正确答案:
void Base::fun ; virtual display==0;


程序PROGl.G的功能是:寻找并输出ll至999之间的数m,它满足m、m2和m3均为回文数。所谓回文数是指其各位数字左右对称的整数,例如l21,676,94249等。满足上述条件的数如m=11,m2=121,m3=1331皆为回文数。请考生编制函数int JsValue(long m)实现此功能,如果是回文数,则函数返回l,反之则返回0。最后把结果输出到文件out.dat中。 注意:部分源程序存放在test.c文件中。 请勿改动主函数main。


正确答案:
【审题关键句】回文数字。
【解题思路】
①定义长整型变量i、n,并分别赋给初值m、0(m的值等于主函数中m循环变量的值)。
②当变量i的值非零时,即m值不为0时,把n乘以l0加上i除以l0所得的余数的和赋给变量n,把i除以l0所得的商,赋给变量i。实现对整数i各位上的数字进行逆序排列。
③当退出while循环时,判断n是否等于m,如果两者相等,则说明参数m是回文,返回l,否则,不是回文,返回0。
【参考答案】


以下程序的功能是输出1至100之间每位数的乘积大于每位数的和的数,例如对于数字 12,有1*2<1+2,故不输出该数:对于27,有2*7>2+7,故输出该数。请填空。

include<iostream.h>

void main()

{

int n,k=1,s=o,m;

for (n=1:n<=100:n++=

{

k=1;s=0;

_____,

while( )

{

k*=m%10;s+=m%10;

(3) ;


正确答案:m-n m m/=10
m-n m m/=10


下面程序的功能是:从输入的正整数中选3个数进行输出,要求这些数都是2的倍数,请填空。


正确答案:

更多 “华中师范大学高级语言程序设计C编程题库20220801.doc” 相关考题
考题 问答题所谓“降序数”是指一个自然数的低位数字不大于高位数字的数。例如:64,55,321都认为是降序数,但是623不是降序数。一位数字被认为是降序数。编一个程序,输入一个数,判定它是否为降序数。该程序是循环执行的,当输入的数为0时,则退出程序运行。正确答案:inti,j,m,n;boolpos;while(true){n=-1;while(n<=0){if(n==0)return;Console.WriteLine("请输入一个正整数或者0:");n=int.Parse(Console.ReadLine());}if(n<10)pos=true;else{m=n;i=0;pos=true;while(m>0){j=m%10;m=m/10;if(i>j){pos=false;break;}i=j;}}if(pos)Console.WriteLine("{0}是降序数。",n);elseConsole.WriteLine("{0}不是降序数。",n);}解析:暂无解析

考题 所谓“回文数”是指读一个自然数,从正方向读和反方向读,结果是一样的。例如:646,1551,891232198都认为是回文数。编一个程序,输入一个正整数,判定它是否为回文数。当输入的数为0时,则退出程序,否则继续循环执行程序。正确答案:ints,k;inti,j;int[]a=newint[20];boolpos;while(true){s=-1;while(s<0){Console.Write("请输入一个正整数或者只按一个数字0:");s=int.Parse(Console.ReadLine());if(s==0)return;}k=s;pos=true;i=-1;while(k>0){i++;a[i]=k%10;k=k/10;}//注意:数组a的长度为(i+1)for(j=0;j<(i+1)/2;j++)if(a[j]!=a[i-j]){pos=false;break;}if(pos)Console.WriteLine("{0}是回文数。",s);elseConsole.WriteLine("{0}不是回文数。",s);}

考题 如图所示的算法流程图,执行情况为()。A.输入三个数,输出其中的最小数B.输入三个数,输出其中的中间数C.输入三个数,输出其中的最大数D.输入三个数,输出其中的第一个数答案:C解析:本程序的执行过程为:首先输入三个数X,Y,Z;然后X与Y进行比较,如果X>=Y成立,则向后执行,否则,将Y赋值给X,此时X中存放X与Y中的大数;再次X与Z进行比较,如果X>=Z,则直接输出最大数X,否则,将Z赋值给X,此时X存放X、Y、Z中的最大数,输出X,即最大数。

考题 编一个程序,打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如,153=1*1*1+5*5*5+3*3*3,所以153是“水仙花数”。正确答案:inta,i,j,k;for(a=100;a<=999;a++){i=a%10;k=a/100;j=a%100/10;if(a==Math.Pow(i,3)+Math.Pow(j,3)+Math.Pow(k,3))Console.WriteLine("{0}是水仙花数",a);

考题 问答题编一个程序,输入一个整数,使用ifelse语句,如果该数大于0,则加上100,否则加上500,输出结果。正确答案:inti,j;Console.WriteLine("请输入一个整数");i=int.Parse(Console.ReadLine());if(i>0){j=i+100;Console.WriteLine("{0}>0,最后结果是{1}",i,j);}else{j=i+500;Console.WriteLine("{0}<0,最后结果是{1}",i,j);解析:暂无解析

考题 问答题编一个程序,输入一个正整数n,把它转换为二进制数,并输出。提示:应该利用数组。正确答案:int[]a=newint[80];inti,j,n=0;while(n<=0){Console.WriteLine("请输入一个正整数:");n=int.Parse(Console.ReadLine());}i=0;Console.Write("/n正整数{0}转换为二进制数:",n);while(n>0){a[++i]=n%2;n=n/2;}for(j=i;j>0;j--)Console.Write(a[j]);Console.WriteLine();解析:暂无解析

考题 所谓“降序数”是指一个自然数的低位数字不大于高位数字的数。例如:64,55,321都认为是降序数,但是623不是降序数。一位数字被认为是降序数。编一个程序,输入一个数,判定它是否为降序数。该程序是循环执行的,当输入的数为0时,则退出程序运行。正确答案:inti,j,m,n;boolpos;while(true){n=-1;while(n<=0){if(n==0)return;Console.WriteLine("请输入一个正整数或者0:");n=int.Parse(Console.ReadLine());}if(n<10)pos=true;else{m=n;i=0;pos=true;while(m>0){j=m%10;m=m/10;if(i>j){pos=false;break;}i=j;}}if(pos)Console.WriteLine("{0}是降序数。",n);elseConsole.WriteLine("{0}不是降序数。",n);}

考题 SET TALK OFF CLEAR C=""零壹贰叁肆伍陆柒捌玖"" INPUT ""N="" TO N ? N,""-->""+ SUBSTR(C,2*N+1,2) SET TALK ON 程序的功能是()A、从键盘输入一个数值(0~9),输出其对应的数字B、从键盘输入一个数值(0~9),输出其对应的中文大写数字(零~玖)C、从键盘输入一个中文大写数字(零~玖),输出其对应的数字(0~9)D、从键盘输入一个中文大写数字(零~玖),输出其对应的中文大写数字(零~玖)正确答案:B

考题 编写一个程序,要求用while循环语句,打印1到100的正整数,每行打印5个数,每列右对齐。正确答案:inti=1;while(i<=100){Console.Write("{0,10:d1}",i);if(i%5==0)Console.WriteLine();i++;

考题 编一个程序,输入一个正整数n,把它转换为二进制数,并输出。提示:应该利用数组。正确答案:int[]a=newint[80];inti,j,n=0;while(n<=0){Console.WriteLine("请输入一个正整数:");n=int.Parse(Console.ReadLine());}i=0;Console.Write("/n正整数{0}转换为二进制数:",n);while(n>0){a[++i]=n%2;n=n/2;}for(j=i;j>0;j--)Console.Write(a[j]);Console.WriteLine();