C语言程序设计概述
C语言程序设计概述
1.算法的描述有哪些基本方法?
2.C语言程序的基本结构是怎样的?举一个例子说明。
3.C语言有什么特点?
4.指出合法与不合法的标识符命名。
ABl2 leed_3 a*b2 8stu D.K.Jon EF3_3
PAS if XYZ43K2 ave#xy 762 #_DT5 C.D
5.说明下列Turbo C热键的功能。
F2 F10 F4 Ctrl+F9 Alt+F5
6.在Turbo C方式下输入并运行下列程序,记录下运行结果。
(1)main( )
{printf(″**************************\n″)
printf(″welcome you \n″)
printf(″very good \n″)
printf(″**************************\n″)
}
(2) main( )
{int a,b,c,t;
printf(″please input three numbers;″);
Scanf(″%d,%d,%d″,&a,&b,&c);
T=max(max(a,b),c) ;
printf(″max number is:%d\n″,t);
}
int max(int x,int y)
{ int z;
if ( x>y) z=x;
else z=y;
return(z);
}
7.一个C程序是由若干个函数构成的,其中有且只能有一个函数。8.在Turbo C环境下进行程序调试时,可以使用Run下拉菜单的命令或按键转到用户屏幕查看程序运行结果。
9.C语言对标识符与关键字有些什么规定?
10.C源程序输入后是如何进行保存的?
第2章C语言的基本数据类型与表达式
1.指出下列常数中哪些是符合C语法规定的。
′\′′101′″\″ e3 019 0x1e ″ab\n″ 1.e5
(2+3)e(4-2) 5.2e2.5
2.请找出下列程序中的错误,改正后写出程序运行结果。
(1)void main( )
{ int x,y=z=5,aver;
x=7
AVER=(x+y+z)/3
printf(″AVER=%d\n″,aver)
}
(2)void main( )
{char c1=′a′; c2=′b′; c3=′c′;
int a=3.5 ,b=′A′
printf(″a=%db=\′%c\′\″end\″n″,a,b) ;
printf(″a%cb%c\bc%c\tabc\n″,c1,c2,c3);
}
3.写出下列赋值的结果,表格中写了数值的是要将它赋给其他类型的变量,将所有的
4.写出程序运行结果。
(1) void main( )
{ int i,j;
i=8,j=10;
printf(″%d,%d,%d,%d\n″,i,j,++i,j++);
}
(2)main ( )
{int =1,b=2,c=3;
printf(″%d,%d,%d,%d\n″,a=b=c,a=b= = c,a= = (b=c),a= =(b= =c)) ;
}
(3)main( )
{ int a=10,b=20,c=30,d;
d=++a<=10 || b一一>=20 || c++;
printf(″%d,%d,%d,%d\n″,a,b,c,d);
}
5.写出下面表达式的值(设a=l0,b=4,c=5,d=1,x=2.5,y=3.5)
(1) a%=(b%=3)
(2) a+=a一=a*=a
(3) (float)(a+c)/2+(int)x%(int)y
(4) a*=b+c
(5) ++a—c+b++
(6) ++a—c+++b
(7) a
(8) a+b,18+(b=4)*3,(a/b,a%b)
(9) x+a%3*(int)(x+y)%2/4+sizeof(int)
(10) a
(11) b++= =0
(12) a*=b=c=2
(13) a=b= =c
6.下列每组表达式中,被执行后结果完全等价的是哪些(设a、b、m是已被赋值的整型变量)?
(1) m=(a=4,4*5)与m=a=4,4*5
(2) (float)(a/b)与(float)a/b
(3) (int)a+b与(int)(a+b)
(4) m%=2+a*3与m=m%2+a*3
(5) m=1+(a=2)+(b=3)与a=2,b=3,m=1+a+b
7.条件表达式x>0?x:一x的功能是什么?
8.用一个条件表达式描述从a、b、c中找出最大者赋给max。
9.若x为int型变量,则执行以下语句后x的值为( )。
x=6 ;
x+=x一=x*x;
A.36 B一60 C.60 D一24
10.若有以下类型说明语句:
char w;int x;float y;double z;
则表达式w*x+z—y的结果为( )类型。
A.float B.char C.int D.double
1.变量k为float类型,调用函数scanf(″%d″,&k),不能使变量k得到正确数值的原因是。
2.a=1234,b=12,c=34,则执行“printf(″|%3d%3d%-3d|\n″,a,b,c);”后的输出是。
3.设有“int a=255,b=8;”,则“printf(″%x,%o\n″,a,b);”输出是。
4.以下程序输出的是。
void main( )
{
int a1=1,a2=0,a3=2;
printf(″%d,%d,%d″,a1,a1+a2+a3,a3-a1);
}
5.Printf函数中用到格式符%5s,其中5表示输出字符占用5列。如果字符串长度大于5,则按输出;如果字符串长度小于5,则按输出。
6.已定义变量如下:
int a1,a2;
char c1,c2;
若要求输入a1、a2、c1和c2的值,正确的输人函数调用语句是
7.输入两个整型变量a、b的值,输出下列算式以及运算结果。
a+b、a—b、a*b、a/b、(float)a/b、a%b
每个算式占一行。
如a等于10,b等于5,a+b,输出为:
10+5=15
8.输入一个非负数,计算以这个数为半径的圆周长和面积。
9.输人任意一个3位数,将其各位数字反序输出(例如输人123,输出321)。
10.输入任意大小的3个整数,判断其中是否有两个奇数一个偶数。若是则输出YES,不是则输出NOT(要求用条件表达式进行判断,不使用if语句)。
11.求前驱字符和后继字符。输入一个字符,找出它的前驱字符和后继字符,并按ASCII 码值,按从大到小的顺序输出这3个字符及其对应的ASCII码值。
12.输入三角形的边长,求三角形面积(面积=sqrt(s(s—a)(s—b)(s—c)),s=(a+b+c)/2)。
1.设x、t均为int型变量,则执行语句“x=10;t=x&&x>10;”后,t的值为。
2.假定所有变量均已正确定义,则程序段:
int a=0,y=10;
if(a=0) y一一;else if(a>0) y++;
else y+=y;
运行后y的值是。
3.能表述20 4.若有定义语句“int a=25,b=14,c=19;”,则以下语句执行结果是。 if(a<=25&&b<=2&&c) printf(″***a+b=%d,a—b=%d***\n″,a+b,a—b); else printf(″***a=%d,b=%d,c=%d***\n″,a,b,c); 5.假定i和j为int型变量,则执行以下语句后i的值是。 int i=1; switch ( i ) { case 1:{for (j=0;j<9;j++) i+= j;break;} case 2:{for (j=1;j<10;j++) i+= j;break;} case 3:i++; } 6.以下两条if语句可合并成一条if语句,即。 if(a<=b) x=l; else y=2; if(a>b) printf(″*** y=%d\n″,y) ; else printf(″*** x=%d\n″,x); 7.输入两个字符,若这两个字符的序号(ASCIIl码)之差为偶数,则输出它们的后继字符,否则输出它们的前驱字符。 8.输入整数a和b,如果a能被b整除,就输出算式和商,否则输出算式、整数商和余数。 9.输入某个点A的平面坐标(x,y),判断(输出)A点是在圆内、圆外还是在圆周上,其中圆心坐标为(2,2),半径为1。 10.输入年号和月份,输出这一年该月的天数(一个年份,先判断是否闰年)。 11.请将以下语句改写成switch语句(a>0) 。 if (a<30) m=1; else if(a<40) m=2; else if(a<50) m=3; eIse if(a<60) m=4; else m=5; 12.有一函数: x-1 -5 y= x x=0 x+1 0 编写一程序。要求输入x的值,输出y的值。分别用不嵌套的if语句,嵌套的if语句,switch语句编写。 第5章 循环结构程序设计 1.输入n 个整数.求这n 个数之中的偶数平均值.并输出。 2 .输入一串字符.直到输人一个星号(*)为止。统汁(输出)其中的字母个数和数字字符个数。 3.从键盘输入一个正整数n ,计算该数的各位数字之和并输出。例如,输人数是5246,则计算5+2+4+6=17并输出。 4.输入一个字符串,将其中的大写字母改为小写字母.小写字母改为大写字母。然后输出。 5.设某县2000年工业总产值为200亿元.如果该县预计平均年工业总产值增长率为4 .5%,那么多少年后该县年工业总产值将超500亿元? 6.输出l ~999中能被3整除,而且至少有一位数字是5的所有数字。 7.求爱因斯坦数学题。有一条长阶,若每步跨2阶,则最后剩1阶;若每步跨3阶,则最后剩2阶;若每步跨5阶,则最后剩4阶;若每步跨6阶,则最后剩5阶;若每步跨7阶,最后正好一阶不剩。 8.输入一个3位数,判断是否是一个“水仙花数”。水仙花数是指3位数的各位数字的立方和等于这个3位数本身。例如,153=l*1*l+5*5*5+3*3*3 9. 计算斐波那契分数序列前n 项之和(n 是某个常数.斐波那契分数序列为: 12,23,35,58,813,13 21, ... 10.输入一个正整数.各输出n 行的正(倒)三角形宝塔图案。 11.输出九儿乘法表。 12.输人一串字符,直到输入一个星号为止,统计(输出)其中的正整数和负整数个数以及所有正整数的平均值和所有负整数的平均值, 13.一个整数等于该数所有因子之和,则称该数是一个完数。例如,6和28都是完数。因为6=1+2+3,28=1+2+4+7+14。输出3位数中所有的完数。 14.编写程序,按下列公式计算e 的值(精度为l e 一6)。 ! 1...!31!21!111n e +++++= 15.用二分法求方程2x3一4x2+3x=0在(一l0,10)附近的根(二分法:先找到a、b,使f(a)、f(b)异号,说明在区间(a,b)内一定有零点,然后求f[(a+b)/2],现在假设f(a)<0,(b)>0,a 第6章 函数与编译预处理 1.写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输人。 2.编写一个函数,由参数传入一个字符串,统计此字串中字母、数字和其他字符的个数,在主函数中输入字符串并显示统计结果。 3.按照第5章第8题的要求编写判断水仙花数的函数,从主函数输入正整数n ,在主函数中调用判断水仙花数的函数,找出n 以内所有的水仙花数。 4.定义一个宏,实现将两个数互换,并写出程序,输入两个数作为使用参数,并显示结果。 5.已知二阶Fibonacci 数列: 0 若n=0 Fib(n)= 1 若n=1 Fib(n 一1)+Fib(n 一2) 其他情况 定义递归函数求Fib(n)。 6.定义函数求F= (n+m)!+n!,m 、n 均为任意正整数。要求使用递归调用。 7.定义一个函数完成第5章第11题的功能。 8.如果有两个数,每一个数的所有约数(除了它本身以外)的和正好等于对方,则称这两个数为互满数,求出30 000以内所有的互满数,并显示输出,求一个数它的所有约数(除了它本身以外)的和,用函数实现。 9.编写以下函数:①输入职工的姓名和职工号;②按职工号由小到大排序,姓名顺序也随之调整;③输入一个职工号,找出该职工的姓名。在主函数中调用这些函数。 10.设计程序完成下列计算。 已知 ) 3,2.3(),3.2() ,(+-++= n x f n x f n x f y 其中 )0()! 2()1(...!4!21),(242≥-+++-=n n x x x n x f n n 当x=5.6,n=7时,求y 。 要求通过嵌套调用完成计算。 第7章数组 1.以下各题中,选择一个正确的答案。 (1)能正确对一维数组a中所有元素进行初始化的是( ) A.int a[5]={ } B.int a[]={0} C.int a[5]=0,0,0,0,0 D.int a[5]={0} (2)有说明int k=3,a[10]; 则下列可以正确引用数组元素的表达式是( )。 A.a[k] B a[10] C.a[1.3] D.a[3*5] (3)有定义int d[ ][3]={1,2,3,4,5,6}; 执行语句printf(″%c″,d[1][0]+′A′); 结果是( )。 A.A B.B C.D D.E (4)有定义char c=′A′,ch[20]={′a′,′b′,′c′,′\0′,′d′,′\0′}; 若执行printf(″%s″,ch); 结果为( )。 A.′abc′’B.abc C.abcd D.abc\0d (5)对数组进行初始化char carr[]={′s′,′t′,′u′,′d′,′e′,′n′,′t′},barr[ ]=″student";则正确的是( )。 A.carr与barr长度相同B.carr比barr长 C.carr与barr相同D.carr比barr短 2.阅读下列程序,写出程序的执行结果。 (1)#include #include void main( ) {int i,j,temp,d[4][4]={{1,2,3,4},{5,6,7,8},{4,3,2,1},{1,2, 3,4}} ; for (i=0;i<4;i++) for (j=0;j if(d [ i ][ j ]>d [ j ] [ i ]) d [ j ] [ i ]= d [ i ][ j ]; for (i=0;i<4;i++) {printf(″\n″); for(j=0;j<4;j++) if(j>=i ) printf(″%6d″,d [ i ][ j ]) ; else printf(″%6c″,' '); } } (2)若输入十进制数3291时,下列程序输出为: #include void main( ) { int i,d,m,n; char s[ 8 ]; scanf(″%d″,&n) ; i=0;/*i是用来存放转换后的字符的数组元素下标*/ do{ m=n/8; d=n%8; s[ i ]=’0’+d; i++; n=m; }while(n!=0) ; for (i一一;i>=0;i一一) /*反向输出字符*/ putchar(s[ i ]); 3.程序填空。在处填写合适的语句,完善下列程序。 (1)从键盘输入一个数,将其插入到一个升序数组中,保持数组仍然按升序排列。 #include void main( ) { int data,temp,k; static int a[9]={-10,2,4,8,10,15,25,50}; printf(″\nEnter a data:″) ; scanf(″%d″,&data); ; for (k=8;;k一一)