C语言重零开始(习题集)1.doc_第1页
C语言重零开始(习题集)1.doc_第2页
C语言重零开始(习题集)1.doc_第3页
C语言重零开始(习题集)1.doc_第4页
C语言重零开始(习题集)1.doc_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

c语言习题集一、概念题1c 语言的特点是什么?c语言由于它的下述特点,被广泛地应用于各个领域的程序设计中,具有很强的通用性。(1)语言简洁:c语言只有32个关键字,提供了很多语法供程序员尽量简化程序。(2)运算符丰富:共提供了34种运算符。运算符多,运算对象的种类也多。(3)数据类型丰富:提供了整型、实型、字符型、枚举型、数组、结构体、共用体、指针、空等9种以上的数据类型。(4)语法限制不太严格。(5)允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。(6)生成目标代码质量高,程序执行效率高:c的目标代码的效率仅比汇编语言低15%。(7)可移植性好,基本不做修改就能用于各种计算机和各种操作系统。2请描述c语言的基本结构。c语言的结构特点,归纳起来有下面几点。(1)c程序是由一个或多个函数构成的,有且仅有一个主函数(main函数)。(2)无论程序中有多少函数,程序的执行总是从main函数开始的,即main函数是整个程序的入口。(3)函数由函数的首部和函数体两部分组成。首部包含函数类型、函数名、函数形式参数名、形式参数定义;函数体部分包括说明部分和语句部分,是由最外层的大括弧括起的部分。(4)c语言书写格式自由,一行内可以写几条语句,一条语句也可以分写在多行。(5)c语言中使用大括号“”“”来表示程序的结构参次范围,左大括号和右大括号应该配对使用。(6)每条语句和说明的后面必须有一个分号。(7)可以用/*/对程序的任何地方做注释。3编写和运行程序的主要步骤有哪些?编写和运行程序主要有以下步骤:(1)分析讨论问题并定义数据;(2)进行算法的设计。算法的设计过程就是对数据处理步骤的描述过程;(3)写出可供计算机运行的程序,并交给计算机编译运行;4请描述用vc编写和运行程序的主要步骤和具体操作。获得c程序的运行结果需要经过下面几个步骤:(1)新建vc工程;(2)编辑源文件;(3)编译源文件;(4)连接、执行程序;(5)查看结果。二、编程题1 模仿例题编写一个简单程序能够输出下面的图形: * *解:#include main ( )printf( *n); printf( *n); printf( *n);2模仿例题编写简单程序,计算a+b+c的值,并输出。解:main ( ) int a, b, c;a=10;b=20;c=30;printf (“a+b+c=%d”, a+b+c);习题二1. 请在下列标识符中,挑选出可用作c语言用户标识符。void define 3_b3 _123 if for -abc case begin while 2a do sizeof 答: define _123 if for case begin do sizeof2. c语言中的整型数据(int)和数学上的整数完全一样吗,有什么区别,请举例说明。答:两者不完全相同。c语言中整型数据(int)所能表示的范围受存储空间的限制,而数学上的整数无限制。3. 写出定义两个整型变量x、y,并分别赋初始值为10、1000的语句。答:int x=10;long y=1000;4. 将下列程序中的整型常量10用符号常量的形式表示。#include int main()int data10;int i;float average=0;for (i=0; i10; i+) scanf(%d,&datai);average=average+datai;average=average/10; for (i=0; i10; i+) printf(%d ,datai);printf(naverage=%f,average);答:#include #define size 10int main()int datasize;int i;float average=0;for (i=0; i size; i+) scanf(%d,&datai);average=average+datai;average=average/ size; for (i=0; i size; i+) printf(%d ,datai);printf(naverage=%f,average);5. 运行下面两段程序,观察运行结果有什么不同,找出原因。(1) #include int main() int x,y,temp; x=10,y=1000; printf(x=%d,y=%dn,x,y); temp=x; x=y; y=temp; printf(x=%d,y=%dn,x,y);(2)#include int main() int x,y; x=10,y=1000; printf(x=%d,y=%dn,x,y); x=y; y=x; printf(x=%d,y=%dn,x,y);答:(1)结果:x=10,y=1000 x=1000,y=10(2)结果:x=10,y=1000 x=1000,y=1000原因:(2)没有提供暂存变量。交换时避免变量原值被覆盖。6. 将下列数学式子写成c语言表达式。答:(1)1/2(x/y+(1.5+x)/(4*a)(2)1-2*x*x-4*y*y*y7. 假设用变量x、y、z分别表示三条边长,写出判断能否构成三角形的表达式。答:a + b c & a + c b & b + c a8. 假设用变量x、y、z分别表示三角形的三条边,写出判断三角形是否为等边三角形的表达式。答:x=y&y=z9. 假设x,y为两个整型变量,并已赋值,如何判断x能否被y整除。答:(x%y)=010. 运行下面两段程序,输入相同的数据,观察运行结果有什么不同,找出原因。并使用强制类型转换运算实现第二段程序的功能。(1)#include int main() float n; float s; scanf(%f,&n); s=1/n; printf(s=%fn,s);(2)#include int main() int n; float s; scanf(%d,&n); s=1/n; printf(s=%fn,s);答:(1)0.333333(2)0第二种情况为0,是因为操作数的类型为整型,导致除法的操作结果被取整为0。第二种情况修改如下:#include int main() int n; float s; scanf(%d,&n); s=(float)1/n; printf(s=%fn,s);11. 编写程序,输入一个3位整数,依次提取出百位、十位、各位上的信息,并输出。如输入789,则输出7-8-9。答:#include int main(void) int num,a,b,c;scanf(%d,&num);if(num1000)exit(0); a = num%10;b = num%100/10;c = num/100;printf(%d-%d-%d,c,b,a);12. 编写程序,任意输入一个字符,输出它的ascii码。答:int main(void) char c; c=getchar();printf(%c has ascii code %d,c,c);13. 编写程序,任意输入一个字符,输出它在ascii码表中的前一个字符和后一个字符。为方便编程,假设输入的字符不是ascii码表中的第一个字符和最后答:int main(void) char c; c=getchar();printf(%c %c,c-1,c+1);习题三一 写出下面各表达式的值。设 x = 0 , y = 2 , z = - 2 , a = 3 , b = 4 , c = 5 。1 x + y z & b = = c 2 z | b + c & y + z 3 ! x = 0 ) if ( x 0 ) y = 1 ; else y = 0 ; else y = - 1 ; printf ( x = %d , y = %d n , x , y ) ; 结果为:当输入0时: x=0,y=0;当输入1时:x=1,y=1;当输入-1时:x=-1,y=-1(2)main ( ) /*程序2*/ int x , y ; scanf ( %d , & x ) ; y = -1; if ( x != 0 ) if ( x 0 ) y = 1 ; else y = 0 ; printf ( x = %d , y = %d n , x , y ) ; 结果为: 当输入0时:x=0,y=-1;当输入1时:x=1,y=1;当输入-1时:x=-1,y=02、 #include main( ) int i=0; while (i=15) if (+i%3!=2) continue; else printf(%d ,i); printf(n); 结果为:2 5 8 11 143、 #include main( ) int i,j,k=0; for (j=11; j=30; j+) if (k%10=0) printf(n); for (i=2; i=j-1) printf(%dt,j); k+; 结果为:11 13 17 19 23 29三程序填空题。1以下程序输入三个数,按大小次序输出,请填空。main ( ) float a , b , c , t ; scanf ( %f, %f, %f , & a , & b , & c ) ; if ( a b ) t=a; a=b;b=t; if ( a c ) t=a; a=c;c=t ; if ( b c ) t=b; b=c;c=t; printf ( %5、2f , %5、2f , %5、2f , a , b , c ) ; 2以下程序判断某年是否闰年,请填空。main ( )int year , leap ; scanf (%d , &year ) ; if ( year % 4 = = 0 ) if ( year % 100 = = 0 ) if ( year % 400 = = 0 ) leap=1; else leap=0; else leap=1; else leap=0; if ( leap ) printf ( %d is , year ) ; else printf ( %d is not , year ); printf ( a leap year n ) ; 3以下程序求a x 2 + b x + c = 0 的方程的解,请填空。):a = 0 , 不是次方程):b 2 4 a c = 0 ,有两个相等实根):b 2 4 a c 0 ,有两个不等实根):b 2 4 a c 0) x1 = (-b +sqrt (disc)/ (2*a) ; x2 = (-b- sqrt(disc)/(2*a); printf ( has distinct real roots :%8.4fand %8.4fn ,x1,x2) ; else realpart = -b/ (2* a) ; imagpart = sqrt (-disc)/(2*a) ; printf (has complex roots :n) ; printf ( %8.4f + %8.4f i n , realpart , imagpart) ; printf ( %8.4f - %8.4f i n,realpart ,imagpart) ; 4 打印出所有的“水仙花数”;所谓“水仙花数”是指一个3位数,其各位数字立方和为该数本身。例如: 153是一个“水仙花数”,因为:153=13+33+53。main( ) int i ,j , k , n; printf( 水仙花数是:); for (n=100; n1000; n+) i=n/100; j=n/10-i*10; k=n%10 ; if ( n=i*i*i+j*j*j+k*k*k ) printf( %d ,n); 5、 输入一串字符,以?号结束,输出其中小写字母个数和数字个数。#include main( ) char ch; int num1=0,num2=0; ch=getchar( ); while (ch!=?) if ( (ch=a)&(ch=1)&(ch=9)num2+; /* 数字个数加1*/ ch=getchar( ) ; /* 取下一个字符*/ printf(%d,%d,num1,num2); 6、用下面公式求的近似值,直到最后一项的绝对值小于-7为止。在程序空白处填上合适的内容。#define eps 1e-7 #include #include main( ) int s=1; float n,t,pi; for (n=t=1, pi=0 ;fabs(t)=eps; n=n+2,s=s*(-1), t=s/n ) pi=pi+t; pi= 4*pi ; printf(pi=%fn,pi);7、 一球从100米的高度自由落下,每次落地后反跳回原高度的一半,再落下。求它在第10次落地时,共经过多少米?第10次反弹多高?在程序空白处填上合适的内容。main( ) float sn=100.0 ,hn=sn/2; int n; for (n=2; nb)t=a;a=b;b=t;if(ac)t=a;a=c;c=t;if(ad)t=a;a=d;d=t;if(bc)t=b;b=c;c=t;if(bd)t=b;b=d;d=t;if(cd)t=c;c=d;d=t;printf(n排序结果如下:n);printf(%d %d %d %dn,a,b,c,d);2、写一程序判断所输入整数的奇偶性main( ) int i;printf(n请输入一个整数:n);scanf(%dn,&i)if(i/2= =0)printf(%d 是一个偶数!n,i);elseprintf(%d 是一个奇数!n,i);3编程计算下面函数值,要求分别用if和switch语句实现。main( ) /* 用if elseif else语句实现*/ int x,y;printf(请输入x);scanf( %d,&x);if(x1) y=x/2;printf(x=%d, y=x/2=%d n,x,y);else if (x10) y=2*x-1;printf(x=%d, y=2*x-1=%d n,x,y);elsey=-x+11;printf(x=%d, y= -x+11=%d n,x,y);main( ) /*用switch语句实现*/ int x,y,t;printf(请输入x );scanf(%d,&x);if(x1) t=0;else if(x1& d21& d31& d41)h=0;printf(该点的高度为%d, h);5*、输入年、月,输出该月天数。#include stdio.hmain( ) int year,month,day;printf(请输入年,月:);scanf(%d,%d,&year,&month);switch(month)case 1 :case 3 :case 5 :case 7 :case 8 :case 10 :case 12 : day=31; break;case 4 :case 6 :case 9 :case 11 : day=30; break;default : printf(there are not the month);if(month=2) if(year%4=0&year%100!=0)|(year%400=0) day=28; else day=29;printf(%d年,%d月 有%d天,year,month,day);6、输入一位学生的生日并输入当前日期,计算该生的实足年龄。#include stdio.hmain( ) unsigned int birthday,data;int year;printf(请输入学生的生日(到月):n);scanf(%ud,&birthday);printf(请输入当前的日期(到月)n); scanf(%ud,&data);year=data-birthday;year/=100;printf(这个学生的年龄是:%d,year); 7、 编程求fibonacci数列:,的前个数。fibonacci数列定义如下:f1=1 (n=1)f2=1 (n=2)fn=fn-1+fn-2 (n=3)#include stdio.hmain( ) long int f1,f2; int i; f1=1; f2=1;for(i=1;i=20;i+) printf(%12ld %12ld ,f1,f2); if(i%2= =0) printf(n);f1=f1+f2;f2=f2+f1; 8编程判断m是否素数。若是,打印: is a prime;若不是,打印: is not a prime。#include main( ) int m,i,k;scanf(%d,&m);k=sqrt(m);for(i=2;i=k+1) printf(%d is a prime number、n,m);else printf(%d is not a prime number 、n,m);9例:对一段电文进行加密,将电文中的大写字母变为其后的第3个字母。最后的三个字母x,y,z变为a,b,c。#include stdio.hmain( ) char ch;printf(请输入你要加密的电文:n);while(ch=getchar()!=n) if(ch=a&chz&chy)t=x;x=y;y=t;if(xz)t=x;x=z;z=t;if(yz)t=y;y=z;z=t; printf(x=%d,y=%d,z=%d,x,y,z);11*、两个乒乓球对进行比赛,各出3人,甲队为a,b,c 三人,乙队为x,y,z 三人,已抽签决定比赛名单。有人向队员打听比赛的名单,a说他不和x比,c说他不和x,z比,请编程序找出3对赛手的名单。main( ) char i,j,k; /*i是a的对手;j是b的对手;k是c的对手*/ for(i=x;i=z;i+)for(j=x;j=z;j+) if(i!=j)for(k=x;k=z;k+) if(i!=k&j!=k) if(i!=x&k!=x&k!=z) printf(a-%ctb-%ctc-%cn,i,j,k);12*、有一分数序列:2/1, 3/2, 5/3, 8/5, 13/8, 21/13,求这个数列的前20项之和。main( ) int i,t,n=20; float a=2,b=1,s=0;for(i=1;i=n;i+)s=s+a/b;t=a;a=a+b; /*将前一项分子与分母之和作为下一项的分子*/b=t ; /*将前一项的分子作为下一项的分母*/printf(sum=%8、4fn,s);习题四一 阅读程序,写出执行结果。1下面程序的输出结果是: 4 #include f(int a) int b=0; static c=3; a=c+,b+; return ( a );main( ) int a=2, i, k ; for (i=0; i2; i+) k=f (a+); printf(%dn,k);2下面程序的输出结果是: 84 #include int d=1;fun(int p) int d=5; d+=p+; printf(%d,d); main( ) int a=3; fun(a); d+=a+; printf(%dn,d);3、下述程序的运行结果是:yes、 no、 yes、 no、 yes#include #define true 1#define false 0int fun(int num) int answer; if (num%2) answer=true; else answer=false; return answer;void main( ) int i; for(i=1; i6; i+) if (fun(i) =true) printf(yes、); else printf(no、); 二程序填空题。1下面程序的功能是:有n个人坐在一起,问第n个人多少岁?他说比第n-1个人大1岁,依次问下去,每个人总说比他前面的人大1岁,最后问到第一个人,他说是6岁。请问第n个人多少岁?在程序空白处填上合适的内容。 int age(int n) int c; if (n=1) c=6 ; else c=age(n-1)+1; return(c);main( ) int n; scanf(%d, &n); printf(第n个人的岁数是:%dn, age(n) );2下面程序完成“根据半径计算圆面积的功能”, 请填空。#define pi 3.14#define s(r) pi*r*r main( ) float a,area;scanf(%f,&a);area=s(a); printf(r=%f,area=%fn,a,area);3、下面的isprime函数“判断m是否素数,若是,函数返回1,否则返回0”。请填空。#include math.h int isprime( int m ) int i,k; k=sqrt(m); for (i=2;i=k+1) return(1); else return(0); 三编程题1 求圆台的表面积s和体积v。已知,圆台的上半径r1=32.5,下半径r2=40、6,圆台的高h=20.5。参考圆台的表面积s和体积v的计算公式:s=(r12+r22)+ (r1+r2)lv=h(r12+r22+ r1*r2)/3l=sqrt(h2+(r1- r2)2)#include #include #define pi 3.1415#define r1 32.5#define r2 40.6#define h 20.5#define l sqrt(h*h+(r1-r2)*(r1-r2)#define s pi*(r1*r1+r2*r2)+pi*(r1+r2)*l#define v pi*h(r1*r1+r2*r2+r1*r2)/3main( ) printf(%f,%f,s,v); 2 定义一个函数d(n,m),能够完成求整数n的从右数第m个数字的值。例如:d(12345,4)=2。#define n 10#include int dtake(char s,int m) char i; if(strlen(s)m|m=3)#define n 40long int fibo(int n) long f;i f(n= =1|n= =2) return(1);else f=fibo(n-1)+fibo(n-2);return(f);main( )printf(“%ld”,fibo(n);4、 已知f(x,n)=n+(n-1)+(n-2)+1+x 计算 x=5.2, n=10 及 x=12.5 n=20时的f的值。将f定义成函数做(用两种办法:循环方法和递归方法)。方法一:循环的方法#include stdio.h#define n 10#define t 5.2float f(float x,int n) int sum=0,i; for(i=n;i=1;i-) sum=sum+i; return (sum+x);main() float fa=f(t,n);printf(%f,fa);方法二:递归的方法 #include stdio.h#define n 10#define t 5.2float f(float x,int n) int sum=0;if(n=1) return (1+ x);else sum=n+f(x,n-1);return sum;main() float fa=f(t,n);printf( %4、2f,fa);5、 设计一个头文件pri.h,定义整型、实型、字符型的输出格式,在另一个程序文件中包含pri.h,并使用头文件中定义的输出格式输出10, 10.5, a。#define integer(d) printf(%dn,d)#define float(f) prinrf(%fn,f)#define string(s) printf(%sn,s)/*以上为pri.h的内容*/#include pri.hint main(void) int d,num;float f;char s80;printf(choose data format:1-integer,2-float,3-string);scanf(%d&num);switch(num)case 1:printf(input integer:); scanf(%d,&d); integer(d); break; case 2: printf(input float:); scanf(%f,&f); float(f); break; case 3: printf(input string:); scanf(%s,&s); string(s); break;default:printf(input error! );6、 用条件编译方法实现以下功能:输入一个字符,可以任选两种方式输出:一为大写变小写输出;一为小写变大写输出。/*本程序当change为1时,将小写字母转换为大写 当change为0时,将大写字母转换为小写*/#include stdio.h#include string.h#define change 1main( )char c;printf(please input the char:n);c=getchar( );#if( change) if(c=a)&(c=a)&(c=z) c=c+32;#endifprintf(the changed char is %cn,c);main( ) char strn; int i;printf(“input text :n”);gets(str);for(i=0;i=a&stri=a&stri=z) stri+=32;#endifputs(str); 习题五一、 选择填空题1、 以下对一维整型数组a的正确说明的是 d a) int a( 10 ); b) int n=10; an; c ) int n; d) # define size 10 scanf (%d, &n ); int a size ; int a n ; 2、 若有说明 int a10; 则对数组a的元素正确引用的是 d a) a 10 b) a 3.5 c) a ( 5 ) d) a 10-10 3、 以下对一维数组a初始化的语句中正确的是 c a) int a 10 = ( 0,0,0,0,0 ); b) int a 10 = ( );c) int a 5 = 0 ; d) int a 10 = 10*1 ;4、 在下列对二维数组a进行定义的语句中正确的是 c a) int a 3 ; b) float a ( 3, 4 ); c) double a 1 4 ; d) float a ( 3 ) ( 4 );5、 若有说明为int a34;则对数组a的元素的引用非法的是 d a) a 2 2*1 b) a 1 3 c) a 4-2 0 d) a 0 4 6、 以下不能对二维数组a进行正确初始化的语句是 c a) int a 2 3 = 0 ; b) int a 3 = 1, 2 , 0 ; c) int a 2 3 = 1, 2 , 3, 4 , 5, 6 ; d) int a 3 = 1, 2, 3, 4, 5, 6 ;7、 以下程序的输出结果是 a a) 6 b) 8 c) 4 d) 2main( ) int a = 2, 4, 6, 8 , i ; for ( i = 0; i 4; ) a i + = a i + ; printf ( %d n , a 2 );8、 以下程序的输出结果是 c a) 0987654321 b) 4321098765 c) 567890

温馨提示

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

评论

0/150

提交评论