c语言上机练习.docx
《c语言上机练习.docx》由会员分享,可在线阅读,更多相关《c语言上机练习.docx(38页珍藏版)》请在冰豆网上搜索。
c语言上机练习
第一次上机练习(首次)
1.阅读以下程序,说出其功能和运算结果(输入5↙)。
#include
intmain()
{
intn;
intfactorial(intn);
scanf("%d",&n);
printf("%d\n",factorial(n));
return0;
}
intfactorial(intn)
{
inti,fact=1;
for(i=1;i<=n;i++)
fact=fact*i;
returnfact;
}
答案:
120求n的阶乘。
2.改正下列程序中的错误,在屏幕上显示“WelcometoYou!
”。
#include
intmian()
{
printf("WelcometoYou!
\n")
return0;
}
答案:
2行main
4行末尾少分号
3.编写程序在屏幕上显示以下内容:
Programmingisfun.
AndProgramminginCisevenmorefun!
答案:
#include
intmain()
{
printf("Programmingisfun.\nAndProgramminginCisevenmorefun!
\n");
return0;
}
4.编写程序输出以下图案:
****
***
**
*
答案:
#include
voidmain()
{
printf("****\n");
printf("***\n");
printf("**\n");
printf("*\n");
}
5.编写程序,计算并在屏幕上显示10~20的平方值。
答案:
#include
voidmain()
{
inti;
for(i=10;i<=20;i++)
printf("%d的平方值为%d\n",i,i*i);
}
将以上作业上传至ftp:
//10.4.4.126/
第二次上机练习(顺序)
1.假设m是一个三位数,则写出将m的个位,十位,百位反序而成的一个三位数(例如:
123反序为321,个位数不等于0)的程序。
答案:
#include
voidmain()
{inta,b,c,m,n;
printf("请输入m:
\n");
scanf("%d",&m);
a=m/100;
b=(m-a*100)/10;
c=m%10;
n=c*100+b*10+a;
printf("%d的反序数为%d\n",m,n);
}
2.若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=‘a’,c2=’b’。
想得到以下的输出格式和结果,请写出程序(包括定义变量类型和设计输出)。
a=3b=4c=5
x=1.200000,y=2.400000,z=-3.600000
x+y=3.60y+z=-1.20z+x=-2.40
u=51274n=128765
c1=’a’or97(ASCII)
c2=’b’or98(ASCII)
答案:
#include
voidmain()
{inta=3,b=4,c=5;
floatx=1.2,y=2.4,z=-3.6;
unsignedu=51274;
longn=128765;
charc1='a',c2='b';
printf("a=%2db=%2dc=%2d\n",a,b,c);
printf("x=%f,y=%f,z=%f\n",x,y,z);
printf("x+y=%5.2fy+z=%5.2fz+x=%5.2f\n",x+y,y+z,z+x);
printf("u=%6un=%7ld\n",u,n);
printf("c1='%c'or%d(ASCII)\n",c1,c1);
printf("c2='%c'or%d(ASCII)\n",c2,c2);
}
3.设圆半径r=1.5,圆柱高h=3,求圆周长,圆面积,圆球表面积,圆球体积,圆柱体积。
用scanf输入数据,输出计算结果;输出时要求有文字说明,取小数点后2位数字,请编写程序。
答案:
#include
voidmain()
{
floatr,h,s1,s2,s3,s4,s5;
scanf("%f",&r);
scanf("%f",&h);
s1=2*r*3.14;
s2=r*r*3.14;
s3=4*s2;
s4=4/3.*s2*r;
s5=s2*h;
printf("圆周长s1=%.2f\n",s1);
printf("圆面积s2=%.2f\n",s2);
printf("圆球表面积s3=%.2f\n",s3);
printf("圆球体积s4=%.2f\n",s4);
printf("圆柱体积s5=%.2f\n",s5);
}
4.编程序:
用getchar函数读入两个字符给c1,c2,然后分别用putchar和printf函数输出这两个字符。
并思考以下问题:
(1)变量c1,c2应定义为字符型或整型?
或两者皆可?
(2)要求输出C1和C2值的ASCII码,应如何处理?
用putchar函数还是printf函数?
(3)整型变量与字符型变量是否在任何情况下都可以互相替代?
如:
charc1,c2与intc1,c2
是否无条件地等价?
答案:
#include
voidmain()
{
charc1,c2;
c1=getchar();
c2=getchar();
putchar(c1);
putchar(c2);
printf("c1=%c\n",c1);
printf("c2=%c\n",c2);
}
第三次上机练习(if语句)
1.若输入4,程序运行结果为【1】,若输入-4,运行结果为【2】,若输入10,运行结果为【3】。
#include
main()
{intx,y;
scanf("%d",&x);
if(x<1)
{y=x;
printf("x=%d,y=x=%d\n",x,y);
}
elseif(x<10)
{y=2*x-1;
printf("x=%d,y=2*x-1=%d\n",x,y);
}
else
{y=3*x-11;
printf("x=%d,y=3*x-11=%d\n",x,y);
}
}
答案:
【1】x=4,y=2*x-1=7
【2】x=-4,y=x=-4
【3】x=10,y=3*x-11=19
2.当输入19,2,21时下列程序运行的结果是( )。
#include
main()
{inta,b,c,max;
printf("pleasescanthreenumbera,b,c:
\n");
scanf("%d,%d,%d",&a,&b,&c);
max=a;
if(max
if(maxprintf("maxis:
%d",max);
}
答案:
maxis:
21
3.摊论个卖西瓜,以西瓜的重量论价。
10斤以上的每斤0.3元,8斤以上的每斤0.4元,6斤以上的每斤0.5元,4斤以上的每斤0.7元,4斤以下的每斤0.8元,从键盘输入西瓜的重量和顾客所付钱数,输出应付款和应找钱数。
答案:
#include
voidmain()
{floatw,pay,total,balance,price;
printf("请输入西瓜的重量:
");scanf("%f",&w);
if(w>=10)price=0.3;
elseif(w>=8)price=0.4;
elseif(w>=6)price=0.5;
elseif(w>=4)price=0.7;
elseprice=0.8;
total=price*w;
printf("应付款%.2f,请输入实付款:
",total);
scanf("%f",&pay);printf("找零:
%.2f元\n",pay-total);
}
4.根据输入的三角形的三边,判断是否能组成三角形,若可以则输出它的面积和三角形的类型(仅区分直角三角形和一般三角形,构成三角形的充要条件是:
任意两边之和大于第三边或两边之差的绝对值小于第三边)。
答案:
#include
#include
voidmain()
{inta,b,c;floatp,s;
printf("请输入三角形的三边长a,b,c:
\n");
scanf("%d,%d,%d",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a)
{
printf("该三角形为:
");
if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a)
printf("直角三角形\n");
elseprintf("普通三角形\n");
p=(a+b+c)/.2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
printf("其面积s=%.2f\n",s);
}
elseprintf("不能构成三角形");
}
第四次上机练习(switch语句)
1.当运行以下程序时,从键盘键入China#(代表回车),则下面程序的运行结果是 。
#include
voidmain()
{
intv1=0,v2=0;charch;
for(;(ch=getchar())!
=‘#’;)
switch(ch)
{
case‘a’:
case‘h’:
default:
v1++;
case‘o’:
v2++;
}
printf(“%d,%d\n”,v1,v2);
}
答案:
5,5
2.编写程序完成任意两个数的+,-,*,/运算,要求从键盘输入四个运算符之一和任意两个数,输出运算结果。
答案:
#include
voidmain()
{
floatv1,v2,v3;charch;
scanf("%f%f%c",&v1,&v2,&ch);
switch(ch)
{
case'+':
v3=v1+v2;break;
case'-':
v3=v1-v2;break;
case'*':
v3=v1*v2;break;
case'/':
v3=v1/v2;break;
}
printf("%f\n",v3);
}
3.给出一百分制成绩,要求输出成绩等级’A’、’B’、’C’、’D’、’E’。
90分以上为’A’,80~89分为’B’,70~79分为’C’,60~69分为’D’,60分以下为’E’。
答案:
#include
voidmain()
{
intv1;charch;
scanf("%d",&v1);
switch(v1/10)
{
case10:
case9:
ch='A';break;
case8:
ch='B';break;
case7:
ch='C';break;
case6:
ch='D';break;
default:
ch='E';
}
printf("%c\n",ch);
}
4.(选作题)给定一个日期,输出这个日期是该年的第几天(输入的数据格式为YYYYMMDD,确保输入的数据有效)。
答案:
#include
voidmain()
{longdate;
inti,num,days=0,year,month,day;
printf("请输入日期,格式为YYYYMMDD:
\n");
scanf("%ld",&date);
year=date/10000;month=(date-10000*year)/100;day=date%100;
for(i=1;i{switch(i)
{case1:
case3:
case5:
case7:
case8:
case10:
case12:
num=31;break;
case4:
case6:
case9:
case11:
num=30;break;
case2:
if((year%4==0&&year%100!
=0)||year%400==0)num=29;elsenum=28;
}
days=days+num;
}
days=days+day;
printf("%d年%d月%d日是该年的第%d天。
\n",year,month,day,days);
}
第五次上机练习(循环)
1.下面程序的运行结果是 。
#include
voidmain()
{inti,k=0;
for(i=1;;i++)
{k++;
while(k
{k++;
if(k%3==0)gotoloop;}
}
loop:
printf(“%d,%d”,i,k);
}
答案:
2,3
2.下面程序的运行结果是 。
#include
voidmain()
{inti,j,k=19;
while(i=k-1)
{k-=3;
if(k%5==0){i++;continue;}
elseif(k<5)break;
i++;
}
printf(“i=%d,k=%d\n”,i,k);
}
答案:
i=6,k=4
3.下列程序的输出为 。
#include
voidmain()
{inti,j,k=0,m=0;
for(i=0;i<2;i++)
{for(j=0;j<3;j++)k++;k-=j;}
m=i+j;
printf("k=%d,m=%d\n",k,m);
}
答案:
k=0,m=5
4.找出1~99之间满足以下条件的数:
该数的平方对于10的余数等于该数本身,或者该数的平方对于100的余数等于该数本身。
答案:
#include
voidmain()
{inti;
for(i=1;i<100;i++)
if(i*i%10==i||i*i%100==i)
printf("i=%d\n",i);
}
5.求100~499之间的所有水仙花数,即各位数字的立方和恰好等于该数本身的数。
答案:
#include
voidmain()
{inti,a,b,c;
for(i=100;i<500;i++)
{a=i/100;
b=(i-a*100)/10;
c=i%10;
if(i==a*a*a+b*b*b+c*c*c)
printf("i=%d\n",i);
}
}
6.编写一个程序,输出菱形图案,第一行为一个字母A,第二行为三个字母B,依此类推,第n行为2n-1个相应的字母,以后每行字母个数递减。
n由键盘输入。
答案:
#include
voidmain()
{intn,i,j,space,star;charch='A';
scanf("%d",&n);
for(i=1;i<=2*n-1;i++)
{if(i<=n){space=n-i;star=2*i-1;}
else{space=i-n;star=2*n-1-(i-n)*2;}
for(j=1;j<=space;j++)
printf("");
for(j=1;j<=star;j++)
printf("%c",ch);
printf("\n");
ch++;
}
}
第六次上机练习(一维数组)
1.下面程序的运行结果是 。
#include
voidmain()
{
intn[3],i,j,k;
for(i=0;i<3;i++)n[i]=0;
k=2;
for(i=0;ifor(j=0;jn[j]=n[i]+1;
printf(“%d\n”,n[1]);
}
答案:
3
2.阅读程序,写出程序运行结果。
#include
#define MAX 100
voidmain()
{ int f[MAX],i,j,k=2,m=5;
for(i=0;i<=m;i++)
f[i]=1;
f[k-1]=2;
for(i=k;i<=m;i++)
for(j=i-k;j<=i-1;j++)
f[i]+=f[j];
printf("%d%5d%5d\n",k,m,f[m]);
}
答案:
2520
3.从键盘输入若干整数(数据个数应少于50),其值在0至4的范围内,用-1作为输入结束的标志。
统计每个整数的个数。
试编程。
答案:
#include
voidmain()
{intn[5]={0},x,i;
scanf("%d",&x);
while(x!
=-1)
{n[x]++;
scanf("%d",&x);
}
for(i=0;i<5;i++)
printf("%d\n",n[i]);
}
4.设计一个程序,将上学期本队学员高数课程的考试成绩排序,并给出每一个学员的名次。
(如果有并列第一,则取消第二名,以此类推)
答案:
#include
#defineMAX100
voidmain()
{ints[MAX],num[MAX],sort[MAX],i,j,n,t;
scanf("%d",&n);
for(i=0;i{num[i]=sort[i]=i+1;
scanf("%d",&s[i]);
}
for(i=0;ifor(j=i+1;jif(s[i]
{
t=s[i];s[i]=s[j];s[j]=t;
t=num[i];num[i]=num[j];num[j]=t;
}
for(i=1;iif(s[i]==s[i-1])sort[i]=sort[i-1];
for(i=0;iprintf("第%d名,学号:
%d,成绩:
%d\n",sort[i],num[i],s[i]);
}
第七次上机练习(二维数组)
1.下面程序可求出矩阵a的两条对角线上的元素之和。
请填空。
#include
voidmain()
{
inta[3][3]={1,3,6,7,9,11,14,15,17},sum1=0,sum2=0,i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(i==j)sum1=sum1+a[i][j];
for(i=0;i<3;i++)
for(【1】;【2】;j--)
if((i+j)==2)sum2=sum2+a[i][j];
printf(“sum1=%d,sum2=%d\n”,sum1,sum2);
}
答案:
【1】j=2
【2】j>=0
2.已知以下矩阵:
=
×
下面程序的功能是求出Y1,Y2,Y3,Y4的值。
请填空。
#include
voidmain()
{
floata[4][4]={{1,-0.2,0,0},{-0.8,1,-0.2,-0.2},
{0,-0.8,1,-0.2},{0,-0.8,-0.8,1}};
floatx[4]={1,1,1,1},y[4];
inti,j,k;
for(i=0;i<4;i++)
{
y[i]=0;
for(j=0;j<4;j++)
【1】
}
for(k=0;k<4;k++)
printf(“\nY[%d]=%-6.2f”,k+1,【2】);
}
答案:
【1】y[i]+=a[i][j]*x[j];
【2】y[k]
3.编程求具有4行4列数据的二维数组每一列元素之和并将其放入该列的第五行上。
输出第五行元素。
答案:
#include
voidmain()
{
floata[5][4]={0};
inti,j,k;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%f",&a[i][j]);
for(k=0;k<4;k++)
for(i=0;i<4;i++)
a[4][k]+=a[i][k];
for(j=0;j<4;j++)
printf("\na[5][%d]=%-6.2f",j+1,a[4][j]);
}
4.找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。
也可以没有鞍点。
(用常规算法做的时候,要求数据不能相同)
答案:
#include
voidmain()
{
floata[4][4]={13,2,3,1,5,6,7,8,9,10,11,12,4,14,15,16};
inti,j,k,flag=0,row,max;
for(i=0;i<4;i++)
{
max=a[i][0];row=0;
for(j=0;j<4;j++)
if(maxfor(k=0;k<4;k++)
if(max>a[k][row])break;
if(k==4){flag=1;printf("a[%d][%d]=%d是鞍点\n",i+1,row+1,max);}
}
if(flag==0)printf("无鞍点");
}
第八次上机练习(字符数组)
1.运行以下程序时,如果从键盘上输入:
ab<回车>
c<回车>
def<回车>
则输出结果为(答案:
C)。
#include"stdio.h"
#de