c语言上机练习.doc_第1页
c语言上机练习.doc_第2页
c语言上机练习.doc_第3页
c语言上机练习.doc_第4页
c语言上机练习.doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

。第一次上机练习(首次)1.阅读以下程序,说出其功能和运算结果(输入5)。#include int main( ) int n ;int factorial(int n) ; scanf(%d,&n) ;printf(%dn, factorial(n) ; return 0 ;int factorial(int n) int i, fact=1 ; for(i=1;i=n;i+) fact=fact*i ; return fact ;答案:120 求n的阶乘。2.改正下列程序中的错误,在屏幕上显示“Welcome to You!”。#include int mian( ) printf(Welcome to You!n) return 0 ;答案:2行main4行末尾少分号3.编写程序在屏幕上显示以下内容:Programming is fun.And Programming in C is even more fun!答案:#include int main( ) printf(Programming is fun.nAnd Programming in C is even more fun!n) ;return 0 ;4.编写程序输出以下图案:* * * * * * * * * * 答案:#include void main( ) printf(* * * *n);printf( * * *n);printf( * *n);printf( *n);5.编写程序,计算并在屏幕上显示1020的平方值。答案:#include void main( ) int i;for(i=10;i=20;i+)printf(%d的平方值为%dn,i,i*i);将以上作业上传至26/第二次上机练习(顺序)1 假设m是一个三位数,则写出将m的个位,十位,百位反序而成的一个三位数(例如:123反序为321,个位数不等于0)的程序。答案:#includevoid main() int a,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的反序数为%dn,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= 3 b= 4 c= 5 x=1.200000,y=2.400000,z=-3.600000 x+y= 3.60 y+z=-1.20 z+x=-2.40 u= 51274 n= 128765 c1=a or 97(ASCII) c2=b or 98(ASCII)答案:#includevoid main() int a=3,b=4,c=5; float x=1.2,y=2.4,z=-3.6; unsigned u=51274; long n=128765; char c1=a,c2=b; printf(a=%2d b=%2d c=%2dn,a,b,c); printf(x=%f,y=%f,z=%fn,x,y,z); printf(x+y=%5.2f y+z=%5.2f z+x=%5.2fn,x+y,y+z,z+x); printf(u=%6u n=%7ldn,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位数字,请编写程序。答案:#includevoid main() float r,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=%.2fn,s1); printf(圆面积s2=%.2fn,s2); printf(圆球表面积s3=%.2fn,s3); printf(圆球体积s4=%.2fn,s4); printf(圆柱体积s5=%.2fn,s5);4编程序:用getchar函数读入两个字符给c1,c2,然后分别用putchar和printf函数输出这两个字符。并思考以下问题:(1) 变量c1,c2应定义为字符型或整型?或两者皆可?(2) 要求输出C1和C2值的ASCII码,应如何处理?用putchar函数还是printf函数?(3) 整型变量与字符型变量是否在任何情况下都可以互相替代?如:char c1,c2 与 int c1,c2是否无条件地等价?答案:#includevoid main() char c1,c2; c1=getchar(); c2=getchar(); putchar(c1); putchar(c2); printf(c1=%cn,c1); printf(c2=%cn,c2);第三次上机练习(if语句)1 若输入4,程序运行结果为【 1 】,若输入-4,运行结果为【 2 】,若输入10,运行结果为【 3 】。#includemain() int x,y;scanf(%d,&x);if(x1) y=x;printf(x=%d,y=x=%dn,x,y);else if(x10) y=2*x-1;printf(x=%d,y=2*x-1=%dn,x,y);else y=3*x-11;printf(x=%d,y=3*x-11=%dn,x,y);答案:【 1 】x=4, y=2*x-1=7【 2 】x=-4, y=x=-4【 3 】x=10, y=3*x-11=192 当输入19,2,21时下列程序运行的结果是()。#includemain()int a,b,c,max;printf(please scan three number a,b,c:n);scanf(%d,%d,%d,&a,&b,&c);max=a;if(maxb)max=b;if(maxc)max=c;printf(max is:%d,max);答案:max is :213摊论个卖西瓜,以西瓜的重量论价。10斤以上的每斤0.3元,8斤以上的每斤0.4元,6斤以上的每斤0.5元,4斤以上的每斤0.7元,4斤以下的每斤0.8元,从键盘输入西瓜的重量和顾客所付钱数,输出应付款和应找钱数。答案:#includevoid main() float w,pay,total,balance,price; printf(请输入西瓜的重量:); scanf(%f, &w); if(w=10) price=0.3; else if(w=8) price=0.4; else if(w=6) price=0.5; else if(w=4) price=0.7; else price=0.8; total=price*w; printf(应付款%.2f,请输入实付款:,total); scanf(%f, &pay); printf(找零:%.2f元n,pay-total);4根据输入的三角形的三边,判断是否能组成三角形,若可以则输出它的面积和三角形的类型(仅区分直角三角形和一般三角形,构成三角形的充要条件是:任意两边之和大于第三边或两边之差的绝对值小于第三边)。答案:#include#includevoid main() int a,b,c;float p,s; printf(请输入三角形的三边长a,b,c:n); scanf(%d,%d,%d, &a,&b,&c); if(a+bc&a+cb&b+ca) printf(该三角形为:); if(a*a+b*b=c*c|a*a+c*c=b*b|b*b+c*c=a*a) printf(直角三角形n);else printf(普通三角形n);p=(a+b+c)/.2;s=sqrt(p*(p-a)*(p-b)*(p-c); printf(其面积s=%.2fn,s); else printf(不能构成三角形);第四次上机练习(switch语句)1 当运行以下程序时,从键盘键入China#(代表回车),则下面程序的运行结果是。#include void main()int v1=0,v2=0; char ch;for ( ; (ch=getchar()!=#; )switch(ch)case a:case h:default: v1+;case o: v2+;printf(“%d,%dn”,v1,v2);答案:5,52编写程序完成任意两个数的+,-,*,/运算,要求从键盘输入四个运算符之一和任意两个数,输出运算结果。答案:#include void main()float v1,v2,v3; char ch;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(%fn,v3);3给出一百分制成绩,要求输出成绩等级A、B、C、D、E。90分以上为A,8089分为B,7079分为C,6069分为D,60分以下为E。答案:#include void main()int v1; char ch;scanf(%d,&v1);switch(v1/10)case 10:case 9:ch=A;break;case 8:ch=B;break;case 7:ch=C;break;case 6:ch=D;break;default: ch=E;printf(%cn,ch);4(选作题)给定一个日期,输出这个日期是该年的第几天(输入的数据格式为YYYYMMDD,确保输入的数据有效)。答案:#includevoid main( ) long date; int i,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;imonth;i+) switch(i) case 1:case 3:case 5:case 7:case 8:case 10:case 12: num=31;break; case 4:case 6:case 9:case 11: num=30;break;case 2: if(year%4=0 & year%100!=0) | year%400=0 )num=29; else num=28; days=days+num; days=days+day;printf(%d年%d月%d日是该年的第%d天。n,year,month, day,days);第五次上机练习(循环)1下面程序的运行结果是。#include void main()int i,k=0;for(i=1;i+)k+;while(ki*i)k+;if(k%3=0) goto loop;loop: printf(“%d,%d”,i,k);答案:2,32下面程序的运行结果是。#include void main()int i,j,k=19;while(i=k-1)k-=3;if(k%5=0) i+; continue; else if(k5) break; i+;printf(“i=%d,k=%dn”,i,k);答案:i=6,k=43下列程序的输出为。#includevoid main()int i,j,k=0,m=0;for(i=0;i2;i+) for(j=0;j3;j+)k+;k-=j; m=i+j; printf(k=%d,m=%dn,k,m);答案:k=0,m=54找出199之间满足以下条件的数:该数的平方对于10的余数等于该数本身,或者该数的平方对于100的余数等于该数本身。答案:#includevoid main()int i;for(i=1;i100;i+)if(i*i%10=i|i*i%100=i) printf(i=%dn,i);5求100499之间的所有水仙花数,即各位数字的立方和恰好等于该数本身的数。答案:#includevoid main()int i,a,b,c;for(i=100;i500;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=%dn,i);6编写一个程序,输出菱形图案,第一行为一个字母A,第二行为三个字母B,依此类推,第n行为2n-1个相应的字母,以后每行字母个数递减。n由键盘输入。答案:#includevoid main()int n,i,j,space,star;char ch=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 void main() int n3,i,j,k; for(i=0;i3;i+) ni=0; k=2; for(i=0;ik;i+) for(j=0;jk;j+) nj=ni+1; printf(“%dn”,n1);答案:32阅读程序,写出程序运行结果。#include #define MAX100void main()intfMAX,i,j,k=2,m=5;for(i=0;i=m;i+)fi=1;fk-1=2;for(i=k;i=m;i+)for(j=i-k;j=i-1;j+)fi+=fj;printf(%d%5d%5dn,k,m,fm); 答案:2 5 203从键盘输入若干整数(数据个数应少于50),其值在0至4的范围内,用-1作为输入结束的标志。统计每个整数的个数。试编程。答案:#include void main() int n5=0,x,i; scanf(%d,&x); while(x!=-1) nx+; scanf(%d,&x);for(i=0;i5;i+) printf(%dn,ni);4设计一个程序,将上学期本队学员高数课程的考试成绩排序,并给出每一个学员的名次。(如果有并列第一,则取消第二名,以此类推)答案:#include #define MAX 100void main() int sMAX,numMAX,sortMAX,i,j,n,t; scanf(%d,&n); for(i=0;in;i+) numi=sorti=i+1; scanf(%d,&si); for(i=0;in-1;i+) for(j=i+1;jn;j+) if(sisj) t=si;si=sj;sj=t; t=numi;numi=numj;numj=t; for(i=1;in;i+) if(si=si-1)sorti=sorti-1; for(i=0;in;i+) printf(第%d名,学号:%d,成绩:%dn,sorti,numi,si); 第七次上机练习(二维数组)1下面程序可求出矩阵a的两条对角线上的元素之和。请填空。 #includevoid main()int a33=1,3,6,7,9,11,14,15,17,sum1=0,sum2=0,i,j;for(i=0;i3;i+)for(j=0;j3;j+)if(i=j) sum1=sum1+aij;for(i=0;i=02已知以下矩阵:下面程序的功能是求出Y1,Y2,Y3,Y4的值。请填空。 #includevoid main()float a44=1,-0.2,0,0,-0.8,1,-0.2,-0.2, 0,-0.8,1,-0.2,0,-0.8,-0.8,1;float x4=1,1,1,1,y4;int i,j,k;for(i=0;i4;i+)yi=0;for(j=0;j4;j+)【1】for(k=0;k4;k+)printf(“nY%d=%-6.2f”,k+1,【2】);答案:【1】yi+=aij*xj;【2】yk3编程求具有4行4列数据的二维数组每一列元素之和并将其放入该列的第五行上。输出第五行元素。答案:#includevoid main()float a54=0;int i,j,k;for(i=0;i4;i+)for(j=0;j4;j+)scanf(%f,&aij);for(k=0;k4;k+) for(i=0;i4;i+)a4k+=aik;for(j=0;j4;j+)printf(na5%d=%-6.2f,j+1,a4j);4找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。也可以没有鞍点。(用常规算法做的时候,要求数据不能相同)答案:#includevoid main()float a44=13,2,3,1,5,6,7,8,9,10,11,12,4,14,15,16;int i,j,k,flag=0,row,max;for(i=0;i4;i+) max=ai0;row=0;for(j=0;j4;j+)if(maxaij)max=aij;row=j;for(k=0;kakrow)break;if(k=4)flag=1;printf(a%d%d=%d是鞍点n,i+1,row+1,max);if(flag=0)printf(无鞍点);第八次上机练习(字符数组)1运行以下程序时,如果从键盘上输入:abcdef则输出结果为(答案:C )。#include stdio.h#define N 6void main() char cN;int i=0;for(;iN;ci=getchar(),i+);for(i=0;iN;i+) putchar(ci); printf(n); Aa Ba Cab Dabcdef b b c c c d d d e f2给出下列程序的运行结果:# include string.h#include stdio.hvoid main() char str81,str181; int k=1,i=1,j; int flag=0; gets(str); str10=str0; while(stri!=0) for(j=0;jk;j+) if(stri=str1j) flag = 1;if(flag !=1) str1k+=stri; i+; for(i=0;ik;i+) printf(%3c,str1i);运行时输入:abcbaccba答案: a b c3从键盘输入两个字符串a和b,要求不用库函数strcat把串b的前五个字符连接到串a中;如果b的长度小于5,则把b中的所有元素都连接到a中。试编程。答案:#include stdio.hvoid main() char a81,b81; int i=0,j=0; gets(a);gets(b); while(ai!=0)i+; while(bj!=0&j5) ai+=bj+; ai=0; puts(a);4通过键盘输入三行英文文字,编写程序将输入的三行文字输出,要求输出结果中不允许包含大写字母(输出时如遇到大写字母则将其转换为小写)。答案:#include stdio.hvoid main() char a380; int i,j; for(i=0;i3;i+) gets(ai); for(i=0;i=A&aij=Z?aij+32:aij); printf(n); 第九次上机练习(变量作函数的参数)1.若输入一个整数10,以下程序的运行结果是。#include sub(int a)int c;c=a%2;return c;void main()int a,e10,c,i=0;printf(“输入一整数n”);scanf(“%d”,&a);while(a!=0)c=sub(a);a=a/2;ei=c;i+;for(;i0;i-) printf(“%d”,ei-1);答案:10102. 以下程序的功能是应用下面的近似公式计算e的n次方。函数f1用来计算每项分子的值,函数f2用来计算每项分母的值。请编写f1和f2函数。(前20项的和)float f2(int n)float f1(int x,int n) #includevoid main()float exp=1.0;int n,x;printf(“Input a number:”);scanf(“%d”,&x);printf(“%dn”,x);exp=exp+x;for(n=2;n=19;n+)exp=exp+f1(x,n)/f2(n);printf(“nThe is exp(%d)=%8.4fn”,x,exp);运行结果:Input a number:3 The is exp(3)=20.0855答案:float f2(int n) float w=1;int i; for(i=2;i=n;i+) w=w*i; return(w);float f1(int x,int n) float w=x;int i; for(i=2;i=n;i+) w=w*x; return(w);第十次上机练习(数组作函数的参数)1. 函数del的作用是删除有序数组a中的指定元素x。已有调用语句n=del(a,n,x);其中实参n为删除前数组元素的个数,赋值号左边的n为删除后数组元素的个数。请填空。#includedel(int a,int n,int x)int p,i;p=0;while(x=ap&pn) 【1】;for(i=p-1;in;i+) 【2】;n=n-1;return n;void main()int a6=1,2,3,4,5,6,n=6,x=3,i;n=del(a,n,x);for(i=0;in;i+) printf(%d ,ai);答案:【1】p+【2】ai=ai+12. 从键盘输入一个整数(小于等于8位),将其转换成字符串后输出。如:输入1991,输出1991。要求输入和输出在主函数完成,功能的实现在子函数完成。答案:void trans(long n,char str) int i=0,l=n,j,k;while(l=l/10)i+;k=2*i;for(j=0;ji;j+) strk=n%10+48;strk-1=32;n=n/10;k=k-2;strk=n+48; str2*i+1=0; #includevoid main()long m;char ch80; scanf(“%ld”,&m); trans(m,ch); puts(ch);3编写一个函数,对具有 10个整数的数组进行如下操作:从第 n个元素开始到最后一个元素,依次向前移动一个位置,空出的最后一个位置放入第n-1个元素,输出移动后数组的全部元素值。(n的取值110)答案:#includevoid move(int a,int n)int i,p; p=an-1;for(i=n-1;i9;i+) ai=ai+1; a9=p;void main()int a10=1,2,3,4,5,6,7,8,9,10,n=6,i;move(a,n);for(i=0;i10;i+) printf(%d ,ai);第十一次上机练习(变量的存储类型和预处理)1. 以下程序的正确运行结果是。 #include#define MAX 10int aMAX,i;sub2() int aMAX,i,max;max=5;for(i=0;imax;i+) ai=i;sub1()for(i=0;iMAX;i+) ai=i+i; sub3(int a)int i;for(i=0;iMAX;i+) printf(“%d”,ai);printf(“n”); void main()printf(“n”); sub1(); sub3(a); sub2(); sub3(a);答案:012468101214161801246810121416182. 以下程序的正确运行结果是。#include func(int a,int b)static int m=0,i=2;i+=m+1;m=i+a+b;return(m);void main()int k=4,m=1,p;p=func(k,m); printf(“%d,”,p);p=func(k,m); printf(“%dn”,p);答案:8,173阅读程序,说出程序的运行结果 ( )。#include #define ADD(x) x+xvoid main() int m=1,n=2,k=3; int sum=ADD(m+n)*k; printf(sum=%d,sum);答案:sum=104编写一程序,完成学生成绩的输入、查询、排序、插入功能,每个功能完成后都要输出结果。要求:1)在主函数中定义一个数组a11,用以存放学生的成绩,分别调用下面的6个子函数,完成各自功能;2)编写一个函数inputsc(int a),从键盘输入10个学生成绩;3)编写一个函数outputsc(int a,int n),输出n个学生成绩;4)编写一个函数query(int a,int n),查询第n个学生成绩并输出结果;5)编写一个函数sort(int a10),在函数中进行10个学生成绩从高到低排序;6)编写一个函数insert(int a),再输入一个学生的成绩,将此成绩插入到原已排好序的学生成绩数组中;7) 改进上一步的函数为sort1(int a,int n, char style), 将n个学生成绩排序,排序方式根据sort()函数的style参数进行,如style为a按升序排,style为d按降序排。答案:#includevoid main() int a11,n; char style; void inputsc(int a); void outputsc(int a,int n); void query(int a,int n); void sort(int a10); void insert(int a); void sort1(int a,int n, char style); inputsc(a); outputsc(a,10); printf(n请输入被查询学生的序号:n); scanf(%d,&n); query(a,n); sort(a); printf(n排序后的成绩:n); outputsc(a,10); insert(a); printf(n插入后学生成绩:n); outputsc(a,11); printf(n重新排序,输入字母a为按升序排,d为按降序排n); getchar(); scanf(%c,&style); sort1(a,11,style); outputsc(a,11);void inputsc(int a) int i; printf(n请输入10名学生的成绩:nn); for(i=0;i10;i+) scanf(%d,&ai); void outputsc(int a,int n) int i; printf(n输出成绩n); for(i=0;in;i+) printf(%d ,ai); void query(int a,int index) printf(%dn,aindex-1); void sort(int a10) int i ,j,t; for(i=0;i9;i+) for(j=i+1;j10;j+) if(aiaj)t=ai;ai=aj;aj=t;void insert(int a) int i,t,y; printf(n请输入被插入学生的成绩n); scanf(%d,&y); for(i=0;i10;i+) if(aiy)t=ai;ai=y;y=t; ai=y; void sort1(int a,int n, char style) int i ,j,t; for(i=0;in-1;i+) for(j=i+1;jn;j+) if(aiaj)t=ai;ai=aj;aj=t; if(style=a) for(i=0;in/2;i+)t=ai;ai=an-1-i;an-1-i=t; 第十二次上机练习(指针)1. 以下程序的正确运行结果是。int fun(int x,int y ,int *cp,int *dp)*cp=x+y; *dp=x-y;#include void main()int a,b,c,d; a=4;b=3; fun(a,b,&c,&d); printf(%d %d %d %dn,a,b,c,d);答案:4 3 7 12. 以下程序的正确运行结果是。#include void main() int a=2,3,4,5; int s, i, *p; s=1; p=a; for(i=0;i=3;i+) s+=*p+; printf(s=%dn,s);答案:s=153以下程序的正确运行结果是。#include void main() void move(int *); int a33=1,2,3,4,5,6,7,8,9,(*p)3,*p1=*a,i,j; for(;p1*a+9;p1+)printf(%3d,*p1); printf(n); p1=*a; for(i=0;i3;i+) for(j=0;j3;j+)printf(%3d,*(p1+i*3+j); printf(n); p=a; move(p); for(i=0;i3;i+) printf(%3d%3d%3dn,ai0,ai1,ai2);void move(int *pointer)int i,j,t; for(i=0;i2;i+) for(j=i+1;j3;j+) t=*(pointer+3*i+j); *(pointer+3*i+j)=*(pointer+3*j+i); *(pointer+3*j+i)=t; 答案:1 2 3 4 5 6 7 8 91 2 34 5 67 8 91 4 72 5 83 6 94以下程序的正确运行结果是。#include #include void main() char *p1,str120=xyz,str220; p1=abcd;p1+; strcat(str1+1,p1+1); strcpy(str2,str1); printf(%s,str2);答案:xyzcd5输入若干个整数,编写两个函数分别实现:A.对它们按从大到小的顺序排列:sort(int *x, int n)B.对键盘输入的任一整数,能够按已排序好的规律将它插入到合适的位置:insert(int *x, int n, int y) 其中y为欲插入的整数答案:#include void main() void sort(int *x, int n);void insert(int *x, int n, int y);int a20,i, n,y; printf(请输入学生人数:n);scanf(%d,&n);printf(请输入学生成绩:n);for(i=0;in;i+)scanf(%d,&ai); sort(a,n);for(i=0;in;i+) printf(%d ,ai);printf(n请输入被插入学生成绩:n);scanf(%d,&y);insert(a, n, y);f

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论