C-程序设计习题集.doc_第1页
C-程序设计习题集.doc_第2页
C-程序设计习题集.doc_第3页
C-程序设计习题集.doc_第4页
C-程序设计习题集.doc_第5页
已阅读5页,还剩127页未读 继续免费阅读

下载本文档

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

文档简介

惠州学院计算机科学系内部资料不得网络公开否则千里追寻!联系电话:68193第一章 C语言概述1 (1)C程序的基本单位_.(2)在C语言中,格式化输入操作是由库函数_来完成的,格式化输出操作是由库函数_完成的.解:(1)函数 (2)scanf printf2 生成并运行C程序都需要执行那些步骤_、_、_、_等基本步骤解:编辑、编译、连接、运行3 以下叙述正确的是_. A 在C程序中,main函数必须位于程序的最前面 B C程序的每一行只能写一条语句 C C语言本身没有没有输入、输出语句 D 在对一个C程序进行编译的过程中,可发现注释中的拼写错误解:C4 以下叙述不正确的是_ A 一个C源程序可由一个或多个函数组成 B 一个C源程序必须包含一个main函数 C C程序的基本单位是函数 D 在C语言程序中,注释说明只能位于一条语句的后面解:D5 编写一个C程序,输出以下信息*How are you? *程序如下: main()printf(*n);printf( How are you ?n);printf(*n); 6 编写一个程序,从键盘上输入a,b两个值,并输出他们的和。 程序如下: main()int a,b,c;printf(请输入两个数a,b:n);scanf(%d%d,&a,&b);c=a+b;printf(a+b=%dn,c);第二章 数据类型、运算符和表达式1 C语言中的标识符只能由三种字符组成,他们是_、_、_。 解:字母、数字、下滑线2 C语言所提供的基本数据类型包括:_、_、_ 解:整型、浮点型、字符型3 在C语言中实型变量分为两类型包括:_、_ 解:单精度型、双精度型4 (1)若a是int 型变量,求表达式(a=3*4,a*2),a+3的值 (2)有int x,y,z;且x=3,y=4,z=5,求表达式(x&y)=(x|z)的值 (3)有int x,y,z;且x=3,y=4,z=5,求表达式!(a+b)+c-1&b+c/2的值 解:(1)27 (2)1 (3)15 若有代数式3ae/bc,则它的C语言表达式的写法解:3*a*e/(b*c)6 若w,x,y,z,m均为int型变量,w=1,x=2,y=3,z=4,则连续执行下面3条语句后,求出m的值(1)m=(wx)?w:x;(2)m=(my)?m:y;(3)m=(mb)+(b!=c)|(a+b)&(b-c)(3)a+-b+(+c)解:(1) 1 (2) 1 (3) 132 C语言对嵌套的if语句的规定是:else总是与_配对(A)与之前最近的if(B)第一个if(C)缩进位置相同的if(D)与之前最近的且尚未配对的if解:D3 下列关于switch语句和break语句说法正确的是_(A)break语句是switch中的一部分(B)在switch语句中可以根据需要使用或不使用break语句(C)在switch 语句中必须使用break语句解:B4 从键盘上输入3个数x,y,z,输出三个数中最大的数程序如下: main()int x,y,z;int m,n;printf(请输入3个数n);scanf(%d%d%d,&x,&y,&z);if(xy)m=x;elsem=y;if(mz)n=m;elsen=z;printf(最大值n=%dn,n);5、 从键盘输入3个数,并按从大到小的顺序进行输出程序如下:main()int x,y,z;int c;printf(请输入3个数n);scanf(%d%d%d,&x,&y,&z);if(yz)c=y;y=z;z=c; if(xz) c=x;x=z;z=c; if(xy)c=x;x=y;y=c;printf(%d,%d,%dn,x,y,z);6、 从键盘上任意输入一个数,判断这个数是否是3的倍数,是输出“YES”,否输出“NO”。程序如下: main()int x;printf(请输入1个数n);scanf(%d,&x);if(x%3=0)printf(YESn);elseprintf(NOn); 7、 有一个函数 x x=0y= x+1 0 x15写一段程序输出x,y。程序如下:main()int x,y;printf(清从键盘上输入一个数:n);scanf(%d,&x);if(x0)&(x15)y=x-5;printf(%d,%dn,x,y);8输入一个字符,如果它是大写字母,则把它变成小写字母,如果它是小写字母,则把它变成大写字母,其他字符不便 程序如下:main ()char ch;printf(请输入一个字符n);scanf(%c,&ch);if(ch=A&ch=a&ch=z)ch=ch-32;printf(%cn,ch);9、执行下面的程序,并写出运行结果 程序如下:main() int x=2,y=2,z=2; y=x+z;x=x+y;printf(“%d,”,xy?y:x);printf(“%d,”,x=85&score=70&score=60&score=0&score60)temp=3;switch(temp)case 0: grade=A;break;case 1: grade=B;break;case 2: grade=C;break;case 3: grade=D;printf(score=%d,grade=%cn,score,grade);循 环1、 输入一批整数,以0为结束,输出其中最大值 解题思路:此题是要求我们求出最大值,由于输入的次数没有限制,所以说我们是不能使用for循环的,在这种情况下建议大家用while循环来解,只要把结束循环条件写出,即输入数据不能为零,然后循环体即比较依次输入的数据的大小即可 #include main() int x,max; printf(“input numbers, last one is 0:n”); scanf(“%d”,&x); max=x; while(x) printf(“please continue input the data:n”); scanf(“%d”,&x); if(maxx) max=x;printf(“max=%dn”,max);2、编程打印输出以下图形*答案:#include main()int i,j,k;char space= ;for(i=0;i=5;i+)for(j=1;j=i;j+)printf(%c,space);for(k=0;k=5;k+)printf(%c,*);printf(n);3小孩买了一些梨,当即吃了一半,还不够,又多吃了一个.第二天早上又将余下的梨吃了一半,又多吃了一个.以后每天早上都吃了前一天的一半,并又多吃一个.到第十八天只有一个梨了.问小孩共买了多少梨?程序分析 本题采用的是一种重要的计算方法,即”倒推法”.知道最后一天的梨数,可以一天一天倒推到第一天的梨的个数. 假第n天的梨为Xn,它的前一天的梨数为Xn-1,那么Xn应该等于它前一天的梨数Xn-1减去”吃掉一半再吃一个”,即减去(Xn-1)/2+1)#include main() long x,y; x=1; y=18;while(y0) x=2*(x+1 y-;printf(“x=%ldn”,x);4、编写一个程序,对输入的任意正整数n,打印输出集合(0,1,n-1)的所有集合。输入为3时,输出是:010,120,21,20,1,2#include main() int m=1,n,i,j,k; printf(input n:); scanf(%d,&n);for(i=1;i=n;i+) m=m*2; /*计算m,使m=2的n次方*/m-;for(i=0;i=m;i+) printf(); j=i;k=0; while(j!=0) if(j%2!=0) printf(%5d,k);/*当j是奇数时打印k的值*/ k+;j/=2;printf();5、某人岁数的3次方是四位数,4次方是六位数,且知此人岁数的3次方和4次方用遍了09十个数字。编写一个程序求此人的岁数#include void main() int age=10,flag10,i,m,found; while(age21) for(i=0;i0;) flagm%10=1; m=m/10; m=age*age*age*age; for(;m0;) flagm%10=1; m=m/10; found=1;for(i=0;i10;i+)if(flagi=0) found=0; break;if(found=1) break; age+;printf(此人岁数=%dn,age); 7本程序演示一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?程序分析在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。请看具体分析:源程序#include math.hmain()long int i,x,y,z;for (i=1;i100000;i+) x=sqrt(i+100); /*x为加上100后开方后的结果*/y=sqrt(i+268); /*y为再加上168后开方后的结果*/if(x*x=i+100&y*y=i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/printf(n%ldn,i);8本程序演示输出9*9口诀。程序分析分行与列考虑,共9行9列,i控制行,j控制列。源程序#include stdio.hmain()int i,j,result;printf(n);for (i=1;i10;i+) for(j=1;j10;j+)result=i*j;printf(%d*%d=%-3d,i,j,result);/*-3d表示左对齐,占3位*/printf(n);/*每一行后换行*/9本程序演示将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。程序分析对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。(2)如果nk,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。源程序main()int n,i;printf(nplease input a number:n);scanf(%d,&n);printf(%d=,n);for(i=2;i=a&c=A&c=0&c=9)digit+;elseothers+;printf(all in all:char=%d space=%d digit=%d others=%dn,letters,space,digit,others);11输入一行字符,将大小写字母互换#include main() char c; printf(“input one character:n”); scanf(“%c”,&c); while(c!=#) if(c=a&c=A&c=Z) printf(“%c”,c+32); printf(“continue input :”); scanf(“%c”,&c);11本程序演示输入两个正整数m和n,求其最大公约数和最小公倍数。源程序main()int a,b,num1,num2,temp;printf(please input two numbers:n);scanf(%d,%d,&num1,&num2);if(num1 temp=num1;num1=num2;num2=temp;a=num1;b=num2;while(b!=0)/*利用辗除法,直到b为0为止*/temp=a%b;a=b;b=temp;printf(gongyueshu:%dn,a);printf(gongbeishu:%dn,num1*num2/a);12本程序演示求100之内的素数源程序#include #include math.h#define N 101main()int i,j,line,aN;for(i=2;iN;i+) ai=i;for(i=2;isqrt(N);i+)for(j=i+1;jN;j+)if(ai!=0&aj!=0)if(aj%ai=0)aj=0;printf(n);for(i=2,line=0;iN;i+)if(ai!=0)printf(%5d,ai);line+;if(line=10)printf(n);line=0;13 将一个整元换零钱问题.把1元兑换成1分,2分和5分的硬币,共有多少种不同换法,编写求解此问题的程序.#include main() int I,m,n,flat=0; n=1; printf(“n 1cent coin,2 cent coin,5 cent coinn”); for(i=0;i=100;i+) for(m=0;m=(100-i)/2;m+) n=(100-i-m*2)/5; if(i+m*2+n*5=100) printf(“%-4d%-4d%-4dn”,I,m,n);flag+=1;if(flag=0) printf(“No answer”);else printf(“total of method %d”,flag);14 这是一个进行猜数字的交互应用程序,程序运行后自动产生一个别1100的随机数,游戏开始程序产生所猜数字,并给出响应,游戏者根据程序响应再猜数字,最后得出答案.#include #include /*应用random函数和randomize函数 */#include /*应用toupper函数 */main() int count, /*猜数次数 */number, /* 随机被猜数 */guess; /* 所猜数字 */ char yes=Y;printf(“n Now let us play the game.n Guess the number:”);while(toupper(yes)=Y) count=0;randomize(); number=random(100)+1; /*产生随机数*/ do do printf(“n input an integer number (1100):”); scanf(“%d”,&guess); while(!(guess=1&guess=100); if(guessnumber)printf(“n Your answer is High,try again:”); /*交互信息 *./count+;if(count=15) printf(“n This is the %d times!Think it hard next!”); exit(0); /*15 次退出*/while(!(guess=number); /* 等值判断*/if(count=7) printf(“n you have got it in %d times.n”,count); printf(“n congratulations!”);else printf(“n you got it in %d times.n”,count ); printf(“n I bet yu can do it better”);printf(“n Next ?(Y/N):”); /*重新开始游戏*/scanf(“%c”,&yes);15 公鸡一只,值五钱,母鸡一只,值三钱,雏鸡三只值一钱,用百钱习百鸡,问公鸡,母鸡,雏鸡各几只?程序分析 设公鸡,母鸡, 雏鸡各为x、y、z只。可以得到不定方程:5x+3y+z/3=100;程序 main() int x,y,z;for(x=0;x=20;x+) for(y0;y=34;y+) z=100-x-y;if(z%3=0)&(5*x+3*y+z/3)=100)printf(“cock=%dt hen=%dt chicken=%dn”,x,y,z);数组1、用输入的方式给一维数组初始化,其长度为10,并求出它们的总和和其中最大的值。程序分析 这是在一维数组里面用的最频繁的一个程序,对于一个存储类型完全相同的集合来说,来区分它的每个元素只能用下标来标识,所以对于重复赋值得用循环来使用,这一点是必须注意的。#include main() int a10; int i=0,sum=0,max; printf(“please input the array:n”); for(i=0;i10;i+) scanf(“%d”,&ai); max=a0; for(i=0;i10;i+) sum+=ai; if(maxai) max=ai;printf(“max=%d,sum=%d”,max,sum); 2本程序演示实现矩阵(3行3列)的转置(即行列互换)。程序分析这题的关键在于进行列下标转换的算法,由矩阵的对称性我们不难看出在进行列互换时aij在好是与aji互换,因而只要我位让程序走完矩阵的左上角即可(用for(i=0;i2;i+)再套for(j=i+1;j3;j+)来完成左上角的走动。*/源程序#include #include /*int fun(int array33) int i,j,t;for(i=0;i2;i+)for(j=i+1;j3;j+)t=arrayij;arrayij=arrayji;arrayji=t;*/main() int i,j;int array33;printf(“please input the array:n”);for(i=0;i=2;i+) /二维数组的输入要用双层循环来控制,第一个for用来for(j=0;j=2;j+) scanf(“%d”,&aij);clrscr();for(i=0;i3;i+)for(j=0;j3;j+)printf(%7d,arrayij);printf(n);/fun(array);for(i=0;i2;i+)for(j=i+1;j3;j+)t=arrayij;arrayij=arrayji;arrayji=t;printf(Converted array:n);for(i=0;i3;i+)for(j=0;j3;j+)printf(%7d,arrayij);printf(n);3、将一个无符号整数转换为二进制表示存入字符数组中程序分析 将一个无符号整数转化为二进制,首先是将进行对2进行取余的操作,即全部转化为0、1两个数字全部存入数组中,但此时只是简单的存放,要将其输出之前还必须按转化原则从低到高的输出。所以必须要逆序存放。最后输出main() char bin20; unsigned n,i=0;int j,temp; printf(please input a data:n); scanf(%u,&n); /输入一个无符号的整数 do /循环将输入的数据对2进行取余操作,再将其转化为字符存入数组bin中 bini+=n%2+0; while(n/=2)!=0); bini=0; for(i=0,j=strlen(bin)-1;i=j;i+,j-) /逆序存放,即从低位到高位的存放 temp=bini; bini=binj; binj=temp; for(i=0;i=strlen(bin)-1;i+) /输出字符 printf(%c,bini);4、用排序法对个数进行由小到大的排序本程序演示对10个数进行排序程序分析可以利用选择法,即从后9个比较过程中,选择一个最小的与第一个元素交换,下次类推,即用第二个元素与后8个进行比较,并进行交换。 源程序#define N 10main()int i,j,min,tem,aN;/*input data*/printf(please input ten num:n);for(i=0;iN;i+) /此循环是输入数组中的十个元素printf(a%d=,i);scanf(%d,&ai);printf(n);for(i=0;iN;i+)printf(%5d,ai);printf(n);/*sort ten num*/for(i=0;iN-1;i+) /进行排序,设定一个标识min=i;for(j=i+1;jaj) min=j;tem=ai;ai=amin;amin=tem;/*output data*/printf(After sorted n);for(i=0;iN;i+)printf(%5d,ai);5、已知两个矩阵,分别为3*2,2*2,求出相乘后的矩陈,并将其存入另一个数组中#include #include main()int a32,b22;int i,j,k,s,c32;printf(please input array a:n);for(i=0;i=2;i+) for(j=0;j=1;j+) scanf(%d,&aij);printf(please input array b:n);for(i=0;i=1;i+) for(j=0;j=1;j+) scanf(%d,&bij); s=0;for(i=0;i3;i+) for(j=0;j2;j+) for(k=0;k2;k+) s+=aik*bkj; cij=s; for(i=0;i3;i+) for(j=0;j2;j+) printf(%6d,cij); printf(n); 6、输入二维数组a36,求出其中最小值和最大值和其对应的行列位置,并求出这十八个数的平均数#include #include main()int a36;int i,j;printf(please input array a:n);for(i=0;i=2;i+) for(j=0;j=6;j+) scanf(%d,&aij);for(i=0;i=2;i+) for(j=0;jmax) max=aij; row=I;col=j;if(aijmin) min=aij; row=I;col=j;s+=aij;ave=s/18;printf(“%d”,ave);7、有十个数存入一维数组中,它们存放的顺序是由小到大的,现需要查出其中的某个元素,并指出它的位置。若无,则相应打印输出信息。程序分析 此题要求数据按从小到大的顺序存放,所以第一步必须满足这一题意,有两种方法,第一种是即一开始就给它赋初始值,但这种方法非常局限.第二种方法是通过循环判断来输入,推荐使用这种. 接下来就是查找,对于一个存放有顺序的数组来说,我们可以采取二分法来查找,设定一个标志点,如果我们要查找的数大于这个标志点的话,就从这个标志点以后查找,这样就把前面的给省了,如果小于标志点,则只要查找前面的的一部分,循环查找就行了. #include main() int I,j,number,top,bottom,mid,loca,aN,flag=1,sign=1;char c;printf(“please input a data:n”);scanf(“%d”,&a0);i=1;while(i=ai-1) i+;else printf(“data error!input again:n”);printf(“n”);for(i=0;iN;i+) printf(“%4d”,ai);printf(“n”);flag=1;while(flag) printf(“input the number you want to look for:n”); scanf(“%d”,&number); loca=0; top=0; bottom=N-1;if(numberaN-1) loca=-1;while(sign=1)&(top=bottom) mid=(bottom+top)/2; if(number=amid) loca=mid; printf(“Find %d,its position is %dn”,number,loca+1); sign=0;else if(numberamid) bottom=mid-1;else top=mid+1;if(sign=1|loca=-1) printf(“%d is not foundn”,number);printf(“continue or not (Y/N)?”);scanf(“%c”,&c); flag=0;8、任意输入一个字符串a,然后将与字符d相等的所有元素的下标分别存放到整型数组b中。#include main()char a80;int I,b80,c=0;printf(“please input a string:n”);scanf(“%s”,a);for(i=0;ai!=0;i+) if(ai=d) bc=I;c+;for(i=0;ic;i+) printf(“%3d”,bi);9、输入多个学生的姓名,按升序输出#include #include #idefine student 5main() char namestudent20;char str80;int I,j,k,num;num=0;for(i=0;i19) i-; continue;strcpy(namei,str);num+;for(j=1;j=num-1;j+) k=num-j; for(i=0;i0)k=I;if(k!=num-j) strcpy(str,namek); strcpy(namek,namenum-j);strcpy(namenum-j,str);for(i=0;inum;i+) printf(“%dth:%sn”,i+1;namei);10、在二维数组a中选出各行最大的元素组成一个一维数组b。a=( 3 16 87 65 4 32 11 108 10 25 12 37)b=(87 108 37)本题的编程思路是,在数组A的每一行中寻找最大的元素,找到之后把该值赋予数组B相应的元素即可。程序如下:main() int a4=3,16,87,65,4,32,11,108,10,25,12,27; int b3,i,j,l; for(i=0;i=2;i+) l=ai0;for(j=1;jl) l=aij;bi=l; printf(narray a:n); for(i=0;i=2;i+) for(j=0;j=3;j+)printf(%5d,aij);printf(n); printf(narray b:n); for(i=0;i=2;i+) printf(%5d,bi); printf(n);程序中第一个for语句中又嵌套了一个for语句组成了双重循环。外循环控制逐行处理,并把每行的第0列元素赋予l。进入内循环后,把l与后面各列元素比较,并把比l大者赋予l。内循环结束时l 即为该行最大的元素,然后把l值赋予bi。等外循环全部完成时,数组b中已装入了a各行中的最大值。后面的两个 for语句分别输出数组a和数组b。11、本程序演示输入100个整型数据,找出其中的最大值并显示出来。源程序#include stdio.h main()int butt100,i,Max;for (i=0;i100;i+)scanf(%d,&butti);Max=butt0;for(i=0;i100;i+) if(Maxbutti)Max=butti;printf(您输入的最大值为%d,Max);12、请编写函数fun,函数的功能是:在字符串中所有数字字符前加一个$字符。例如,输入:A1B23CD45,则输出为:A$1B$2$3CD$4$5。程序分析该题用while()循环来控制原字符串从头走到尾,在走动过程中判断是当前字符是否是数字,若是则在新串中先连一个$然后再连原字符,否则直接连原字符。一定要注意指针和下标的变化。最后要把新串拷贝到s所指的地址中,注意不能用s=a;若用了,则实参数组还是原字符串。源程序#include void fun( char *s)char a100;int i=0;while(*s)if(*s=0&*s=9) ai+=$;ai+=*s+;else ai+=*s+; a=0;strcpy(s,a);main() char s80;printf(enter a string:);scanf(%s, s);fun(s);printf(the result: %sn, s);13、编写程序,实现功能是:实现两个字符串的连接(不使用库函数strcat)。例如,分别输入下面两个字符串:Firs

温馨提示

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

评论

0/150

提交评论