
计算机编程基础
-
2023年2月16日发(作者:)计算机程序设计基础(c语言)习题编程题
1
计算机程序设计基础(C语言)
编程练习题及参考答案
1.输入2个整数,求两数的平方和并输出。
#include
main()
{intta,b,s;
printf(\"pleaseinputa,b:n\");
scanf(\"%d%d”,&a,&b);
s=a*a+b*b;
printf(\"theresultis%dn\",s);
}
2.输入一个圆半径(r)当r>=0时,计算并输出圆的面积和周长,否则,输出提示信息。
#include
#definePI3.14
main()
{floatr,s,l;
printf(\"pleaseinputr:n\");
scanf(\"%f”,&r);
if(r>=0)
{s=pi*r*r;
l=2*i*r;
printf(\"theareais%fn\",s);
printf(\"thecircumferenceis%fn\",l);}
else
printf(\"inputerror!n\");
}
3、函数y=f(x)可表示为:
2x+1(x<0)
y=0(x=0)
2x-1(x>0)
编程实现输入一个x值,输出y值。
main()
{intx,y;
scanf(“%d”,&x);
If(x<0)y=2*x+1;
If(x>0)y=2*x-1;
If(x==0)y=0;
printf(“%d”,y);}
计算机程序设计基础(c语言)习题编程题
2
4、编写一个程序,从4个整数中找出最小的数,并显示此数。
main()
{inta,b,c,d,t;
scanf(“%d,%d,%d,%d”,&a,&b,&c,&d);
if(a>b)
{t=a;a=b;b=t;}
if(a>c)
{t=a;a=c;c=t;}
if(a>d)
{t=a;a=d;d=t;}
printf(“min=%dn”,a);
}
5.有一函数当x0时,y=3,当x=0时y=5,编程,从键盘输入一个x值,
输出y值。
main()
{intx,y;
scanf(\"%d\",&x);
if(x<0)y=1;
elseif(x==0)y=5;
elsey=3;
printf(\"x=%d,y=%dn\",x,y);}
6.从键盘输入两个数,求出其最大值(要求使用函数完成求最大值,并在主函数中调用该函数)
main()
{floatmax(floatx,floaty);
floata,b,m;
scanf(\"%f,%f\",&a,&b);
m=max(a,b);
printf(\"Maxis%fn\",m);
}
floatmax(floatx,floaty)
{
floattemp;
if(x {temp=x; x=y; y=temp; } return(x); } 计算机程序设计基础(c语言)习题编程题 3 7、从键盘输入你和你朋友的年龄,编成判断谁的年龄最大,并打印最大者的年龄。 #include main() {intyourAge,hisAge; printf(\"Pleaseenteryourage:\"); scanf(\"%d\",&yourAge);/*输入你的年龄yourAge*/ printf(\"Pleaseenteryourfriend\'sage:\"); scanf(\"%d\",&hisAge);/*输入你朋友的年龄hisAge*/ if(yourAge>=hisAge) { printf(\"Youareolder!Yourageis=%dn\",yourAge); } if(hisAge>yourAge) { printf(\"Yourfriendisolder!HisAgeageis=%dn\",hisAge); }} 8、键盘输入2个加数,再输入答案,如果正确,显示“right”,否则显示“error” #include“stdio.h” main() {inta,b,c; printf(“pleaseinputaandbn”); scanf(%d,%d”,&a,&b); printf(“pleaseinputtheanswerfora+bn”); scanf(%d”,&c); if(c==a+b) printf(“rightn”); else printf(“errorn”); } 9.编一程序每个月根据每个月上网时间计算上网费用,计算方法如下: 小时 小时 小时 元每小时 元每小时 元 费用 50 5010 10 5.2 3 30 要求当输入每月上网小时数,显示该月总的上网费用(6分) main() {inthour; floatfee; printf(“pleaseinputhour:n”); 计算机程序设计基础(c语言)习题编程题 4 scanf(“%d”,&hour); if(hour<=10) fee=30; elseif(hour>=10&&hour<=50) fee=3*hour; elsefee=hour*2.5; printf(“Thetotalfeeis%f”,fee); } 10.神州行用户无月租费,话费每分钟0.6元,全球通用户月租费50元,话费每分钟0.4元。 输入一个月的通话时间,分别计算出两种方式的费用,判断哪一种合适。 main() {floata,x,y; printf(“n请输入您的话费:”); scanf(“%f,”,&a); x=0.6*a; y=50+0.4*a; printf(“神州行话费为:%fn”,x); printf(“全球通话费为:%fn”,y); if(x>=y) printf(“建议使用全球通”); elseprintf(“建议使用神州行); } 11.个人所得税计算,应纳税款的计算公式如下: 收入税率 收入<=1000元部分0% 2000元>=收入>1000元的部分5% 3000元>=收入>2000元的部分10% 6000元>=收入>3000元的部分15% 收入>6000元的部分20% 输入某人的收入,计算出应纳税额及实际得到的报酬。(7分) (如需连续计算多个人的纳税情况,直到输入负数为止,程序应如何改进?试写出程序) #include“stdio.h” main() { intgrade; floatincome,tax,money; printf(“pleaseinputyourincomen”); scanf(“%f”,&income); 计算机程序设计基础(c语言)习题编程题 5 if(income<0) printf(“theinputiserror”); else {grade=(int)income/1000; switch(grade) {case0:tax=0;break; case1:tax=(income-1000)*0.05;break; case2:tax=50+(income-2000)*0.1;break; case3: case4: case5:tax=150+(income-3000)*0.15;break; default:tax=600+(income-6000)*0.2; } money=income-tax; printf(“ntax=%f,money=%f”,tax,money); } } 12.从键盘上输入一个百分制成绩score,按下列原则输出其等级:score≥90,等级为A; 80≤score<90,等级为B;70≤score<80,等级为C;60≤score<70,等级为D;score<60, 等级为E。 #include main() { intdata; chargrade; printf(\"Pleaseenterthescore:\"); scanf(\"%d”,&data); switch(data/10) {case10: case9:grade=’A’;break; case8:grade=’B’;break; case7:grade=’C’;break; case6:grade=’D’;break; default:grade=’E’; } printf(\"thegradeis%c”,grade); } *13.编程设计一个简单的计算器程序。从键盘输入2个操作数,1个运算符,当运算符为加(+)、 减(-)、乘(*)、除(/)时,输出计算结果 计算机程序设计基础(c语言)习题编程题 6 #include main() {intdata1,data2;/*定义两个操作符*/ charop;/*定义运算符*/ printf(\"Pleaseentertheexpression:\"); scanf(\"%d%c%d\",&data1,&op,&data2);/*输入运算表达式*/ switch(op)/*根据输入的运算符确定要执行的运算*/ {case\'+\':/*处理加法*/ printf(\"%d+%d=%dn\",data1,data2,data1+data2); break; case\'-\':/*处理减法*/ printf(\"%d-%d=%dn\",data1,data2,data1-data2); break; case\'*\':/*处理乘法*/ printf(\"%d*%d=%dn\",data1,data2,data1*data2); break; case\'/\':/*处理除法*/ if(0==data2)/*为避免出现溢出错误,检验除数是否为0*/ printf(\"Divisionbyzero!n\"); else printf(\"%d/%d=%dn\",data1,data2,data1/data2); break; default: printf(\"Unknownoperator!n\"); } } 14.从键盘输入10个整数,统计其中正数、负数和零的个数,并在屏幕上输出。 main() {inta[10],i,p=0,n=0,z=0; printf(“pleaseinputnumber”); for(i=0;i<10;i++) {scanf(“%d,”,&a[i]); if(a[i]>0) p++; elseif(a[i]<0) n++; elsez++} printf(“正数:%5d,负数:%5d,零:%5dn”,p,n,z); } } 计算机程序设计基础(c语言)习题编程题 7 15、编程序实现求1-200之间的所有数的乘积并输出。 #include main() {inti,sum=1 for(i=1;i<200i=i+1) sum=sum*i; printf(“thesumofoddis:%d”,sum); } 16.从键盘上输入10个数,求其平均值。 main() { inta[10],i,s=0; floatave;; for(i=0;i<10;i++) scanf(“%d”,&a[i]); for(i=0;i<10;i++) sum+=a[i]; ave=(float)sum/10; printf(\"ave=%fn\",ave); } 17、编程序实现求1-1000之间的所有奇数的和并输出。 #include main() {inti,sum=0; for(i=1;i<1000;i=i+2) sum=sum+i; printf(“thesumofoddis:%d”,sum); } 18.有一个分数序列:2/1,3/2,5/3,8/5,13/8,21/13…… 编程求这个序列的前20项之和。 main() { inti,t,n=20; floata=2,b=1,s=0; for(i=1;i<=n;i++) {s=s+a/b; t=a; a=a+b; 计算机程序设计基础(c语言)习题编程题 8 b=t; } printf(\"sum=%9.6f\",s); } 19.用数组实现以下功能:输入5个学生成绩,而后求出这些成绩的平均值并显示出来。 main() {floata[5],i; floats=0; for(i=0;i<5;i++) scanf(“%f”,&a[i]); for(i=0;i<5;I++) s=s+a[i]; printf(“result=%f”,s/5); } *20、用循环的方法构造一个5行5列的二维数组,使主对角线上的变量为1,其它为0,并将 数组中所有项按行按列显示出来。 main() {inta[5][5],i,j,s=0; for(i=0;I<5;i++) for(j=0;j<5;j++) if(i==j)a[i][j]=1; elsea[i][j]=0; for(i=0;i<5;i++) for(j=0;j<5;j++) {if(j==0)printf(“n”); printf(“%d”,a[i][j]); } } 21.求一个3×3矩阵对角线元素之和。从键盘输入矩阵元素的值并输出和的值. main() {inta[3][3],sum=0; inti,j; printf(\"Enterdata:n\"); for(i=0;i<3;i++) for(j=0;j<3;j++) scanf(\"%d\",&a[i][j]); for(i=0;i<3;i++) sum=sum+a[i][i]; printf(\"sum=%d\",sum); } 计算机程序设计基础(c语言)习题编程题 9 22.输入n的值,n代表行数,输出如图所示的图形。(6分) * *** ***** *******(此图为n=4时的输出结果) #include main() {inti,j,k; for(i=1;i<=4;i++)/*控制行数*/ {for(k=1;k<=(2*i-1);k++)/*控制每行输出的*号个数*/ {printf(\"*\");} printf(\"n\");}}/*输出一行后换行*/ 23、从键盘输入30名学生的成绩数据,求其中的最高分、最低分和平均分。 (提示:用数组存放成绩数据) #include #defineM30 main() {floatscore[M],max,min,aver; inti; printf(“pleaseinputscore:n”); for(i=0;i scanf(“%f”,&score[i]); max=score[0]; min=score[0]; aver=score[0]; for(i=1;i {if(max if(min>score[i])min=score[i]; aver+=score[i]; } printf(“max=%f,min=%f,aver=%f”,max,min,aver/M); } 24.从键盘输入某班学生某门课的成绩及其学号(班级人数最多40人,具体人数由键盘输入), 输出该班最高分和最低分及其学生学号;并输出该班该课程的总分和平均分。请编写程序。 #include #defineARR_SIZE40 main() {floatscore[ARR_SIZE],maxScore,minScore,sum; 计算机程序设计基础(c语言)习题编程题 10 intn,i; longmaxNum,minNum,num[ARR_SIZE]; printf(\"Pleaseentertotalnumber:\"); scanf(\"%d\",&n); printf(\"Pleaseenterthenumberandscore:n\"); for(i=0;i scanf(\"%ld%f\",&num[i],&score[i]); maxScore=score[0];minScore=score[0]; maxNum=num[0];minNum=num[0]; sum=score[0]; for(i=1;i {if(score[i]>maxScore) {maxScore=score[i]; maxNum=num[i]; } elseif(score[i] {minScore=score[i]; minNum=num[i]; } sum=sum+score[i]; } printf(\"maxScore=%.0f,maxNum=%ldn\",maxScore,maxNum); printf(\"minScore=%.0f,minNum=%ldn\",minScore,minNum); printf(\"sum=%.1f,average=%.1fn\",sum,sum/n); } *25.将一个有5个元素的数组中的值(整数)按逆序重新存放。 例:原来顺序为:8、6、5、4、1,要求改为1、4、5、6、8 defineN5 main() {inta[N],I,temp; printf(“enterarraya:n”); for(I=0;I scanf(“%d”,$a[i]); for(I=0;I 计算机程序设计基础(c语言)习题编程题 11 {temp=a[i]; a[i]=a[N-I-1]; a[N-I-1]=temp; } printf(“nNow,arraya:n”); for(I=0;I printf(“%4d”,a[i]); printf(“n”); } *26.从键盘上输入一个2*3的矩阵,将其转置后形成3*2的矩阵输出。 main() {inta[2][3],b[3][2],i,j; for(i=0;i<2;i++) for(j=0;j<3;j++) scanf(“%d”,&a[i][j]); for(i=0;i<3;i++) for(j=0;j<2;j++) b[i][j]=a[j][i]; for(i=0;i<3;i++) {for(j=0;j<2;j++) printf(\"%5d\",b[i][j]); printf(\"n”); } } *27.编写两个函数分别求两个整数的最小公倍数和最大公约数,用主函数调用这两个函数并输 出结果。两个整数由键盘输入。 #include\"stdio.h\" mingb(x,y) intx,y; {intz,i,t; z=1; i=1; if(x>y) {t=x;x=y;y=t;} while(z<=x*y) { z=i*y; if((z%x==0)&&(z%y==0))break; i++; 计算机程序设计基础(c语言)习题编程题 12 } return(z); } maxgy(x,y) intx,y; {intz,t; if(x>y) {t=x;x=y;y=t;} z=x; while(z>1) {if((x%z==0)&&(y%z==0))break; z--; } return(z); } main() { inta,b,c; charch; printf(\"nmingb(1)/maxgy(2)?\"); ch=getchar(); printf(\"ninput:\"); scanf(\"%d,%d\",&a,&b); if(ch==\'1\')c=mingb(a,b); elseif(ch=\'2\')c=maxgy(a,b); printf(\"theresultis%d\",c); getch(); } *28.输入一个3*3矩阵,求出其转置矩阵,并求出两个矩阵的和. main() { inta[3][3]; intb[3][3]; intc[3][3] inti,j; printf(“pleaseinput6numbers!”) for(i=1;i<3;i++) for(j=1;j<3;j++) { scanf(“%d”,&a[i][j]); 计算机程序设计基础(c语言)习题编程题 13 b[j][i]=a[i][j]; } for(i=1;i<3;i++) for(j=1;j<3;j++) { c[i][j]=a[i][j]+b[i][j]; } for(i=1;i<3;i++) for(j=1;j<3;j++) { printf(“%d”,a[i][j]); } } 29、从键盘输入10名学生的成绩数据,按成绩从高到低的顺序排列并输出。(提示:用数组存 放成绩数据) main() {inta[10]; inti,j,temp; printf(\"inputscore:n\"); for(i=0;i<10;i++) scanf(\"%d\",&a[i]); printf(\"n\"); for(i=1;i<10;i++) for(j=0;j<9;j++) if(a[j] {temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } for(i=0;i<10;i++) printf(\"%d,\",a[i]); } 30.定义一个5行3列的数组,从键盘输入各数组元素的值,计算各数组元素之和。 #include main() {inti,j,a[5][3]; printf(“Enterdata:n”); for(i=0;i<5;i++) for(j=0;j<3;j++) scanf(“%d”,&a[i][j]); 计算机程序设计基础(c语言)习题编程题 14 for(i=0;i<5;i++) for(j=0;j<3;j++) sum=sum+a[i][j]; printf(“sum=%5dn”,sum); } 31、编写程序,交换两个数组中的对应元素。 #include #defineN20 main() {inta[N],b[N],i,j,temp; printf(“pleaseinputa:n”); for(i=0;i scanf(“%d”,&a[i]); printf(“pleaseinputb:n”); for(j=0;j scanf(“%d”,&b[i]); for(i=0;i {temp=a[i]; a[i]=b[i]; b[i]=temp; } for(j=0;j printf(“%d,”,a[j]); printf(“n”); for(j=0;j printf(“%d,”,b[j]); } *32、从键盘上输入一个4*3的整型数组,找出数组中的最小值及其在数组中的下标。 #include main() {inta[4][3],i,j,min,m,n; printf(\"Pleaseenterdata:\"); for(i=0;i<4;i++) for(j=0;j<3;j++) scanf(“%d”,&a[i][j]); min=a[0][0]; m=0;n=0; for(i=0;i<4;i++) for(j=0;j<3;j++) if(a[i][j] 计算机程序设计基础(c语言)习题编程题 15 {min=a[i][j]; m=i; n=j; } printf(\"theminis%dn,min); printf(\"posionis%d%dn,m,n); } 33.编程实现如下功能:从键盘输入一行字符,统计其中大写英文字符,小写英文字符和其他 字符的个数。 #include #include #defineARR_SIZE80 main() { charstr[ARR_SIZE]; intlen,i,letter=0,digit=0,space=0,others=0; printf(\"Pleaseinputastring:\"); gets(str); len=strlen(str); for(i=0;i {if(str[i]>=\'a\'&&str[i]=\'A\'&&str[i]<=\'Z\') letter++;/*统计英文字符*/ elseif(str[i]>=\'0\'&&str[i]<=\'9\') digit++;/*统计数字字符*/ else others++;/*统计其它字符的个数*/ } printf(\"Englishcharacter:%dn\",letter); printf(\"digitcharacter:%dn\",digit); printf(\"othercharacter:%dn\",others); } *34.编程实现如下功能: 1)在主函数中,实现从键盘输入10名学生某门课的成绩,保存在一维数组中;调用排序函 数;对排序后的数组中的元素按从高到低打印输出。 2)编写排序函数,使用数组名做函数参数,实现对该成绩的排序。 #include #defineARR_SIZE40 voidSort(floatscore[],longnum[],intn); 计算机程序设计基础(c语言)习题编程题 16 main() {floatscore[ARR_SIZE]; intn,i; longnum[ARR_SIZE]; printf(\"Pleaseentertotalnumber:\"); scanf(\"%d\",&n); printf(\"Pleaseenterthenumberandscore:n\"); for(i=0;i { scanf(\"%ld%f\",&num[i],&score[i]); } Sort(score,num,n); printf(\"Sortedresults:n\"); for(i=0;i {printf(\"%ldt%4.0fn\",num[i],score[i]); } } voidSort(floatscore[],longnum[],intn) {inti,j; floattemp1; longtemp2; for(i=0;i {for(j=i+1;j {if(score[j]>score[i]) {temp1=score[j]; score[j]=score[i]; score[i]=temp1; /*交换学号*/ temp2=num[j]; num[j]=num[i]; num[i]=temp2; } } } } *35.编程实现如下功能: 实现从键盘输入两个字符串,分别存入两个不同的字符数组中;将两个字符串连接为一个 字符串,并打印输出连接后的整个字符。 #include #include 计算机程序设计基础(c语言)习题编程题 17 #defineARR_SIZE80 voidMyStrcat(chardstStr[],charsrcStr[]); main() {chars[ARR_SIZE],t[ARR_SIZE]; printf(\"Pleaseentersourcestring:\"); gets(s); printf(\"Pleaseenterdestinationstring:\"); gets(t); MyStrcat(s,t); printf(\"Theconcatenatestringis:\"); puts(s); } voidMyStrcat(chardstStr[],charsrcStr[]) {inti=0,j; while(dstStr[i]!=\'0\'){ i++; } for(j=0;srcStr[j]!=\'0\';j++,i++) { dstStr[i]=srcStr[j]; } dstStr[i]=\'0\'; } *36、猜数游戏。系统随机产生一个整数,通过键盘输入数据猜数,猜对为止,并要求统计猜的 次数。 注:rand()函数可以产生0~32767间的正整数,程序中需包含stdlib.h。 #include #include main() { intmagic; intguess; intcounter; magic=rand()%100+1; counter=0; do{ printf(\"Pleaseguessamagicnumber:\"); scanf(\"%d\",&guess); counter++; 计算机程序设计基础(c语言)习题编程题 18 if(guess>magic) printf(\"Wrong!Toohigh!n\"); elseif(guess printf(\"Wrong!Toolow!n\"); }while(guess!=magic); printf(\"Right!n\"); printf(\"counter=%dn\",counter); } 37.输入两个整数,利用指针变量作为函数参数,编程实现两数互换功能,并将交换后的数据 重新输出。 #include voidSwap(int*x,int*y); main() {inta,b; printf(\"Pleaseentera,b:\"); scanf(\"%d,%d\",&a,&b); printf(\"Beforeswap:a=%d,b=%dn\",a,b); Swap(&a,&b); printf(\"Afterswap:a=%d,b=%dn\",a,b); } voidSwap(int*x,int*y) { inttemp; temp=*x; *x=*y; *y=temp;} 38.随机输入若干个学生的体重,以输入负数或零结束,分别求最重和最轻的体重,并计算平 均体重。 #include main() {intn=0; floatweight,max=0,min=10,sum=0,ave; printf(“pleaseinputtheweight:”); scanf(“%f”,&weight); while(weight>0) {sum=weight+sum; n++; if(weight min=weight; 计算机程序设计基础(c语言)习题编程题 19 elseif(weight>max) max=weight; scanf(“%f”,&weight);} if(n>0) {ave=sum/n; printf(\"maxweight=%fn\",max); printf(\"minweight=%fn\",min); printf(\"ave=%fn\",ave); elseprintf(\"NOVALIDDATA”); } 39.输入m,k的值,编程求下面表达式的值:(要求编写一个求阶乘的函数,调用函数实现本 题) )!( ! km k p #include unsignedlongFactorial(unsignedintnumber); main() {unsignedintm,k; doublep; printf(\"Pleaseinputm,k:\"); scanf(\"%u,%u\",&m,&k); p=(double)Factorial(k)/Factorial(m-k); printf(\"p=%fn\",p); } unsignedlongFactorial(unsignedintnumber) {unsignedlongi,result=1; for(i=2;i<=number;i++) result*=i; returnresult; } *40.编写程序,其中自定义一函数,用来判断一个整数是否为素数,主函数输入一个数,输 出是否为素数。 #include intIsPrimeNumber(intnumber) {inti; if(number<=1) return0; for(i=2;i 计算机程序设计基础(c语言)习题编程题 20 {if((number%i)==0) return0;} return1;} main() {intn; printf(“Pleaseinputn:”); scanf(“%d”,&n); if(IsPrimeNumber(n)) printf(“n%disaPrimeNumber”,n); elseprintf(“n%disnotaPrimeNumber”,n);}