printf("input error!"); else
{copystr(str1,str2,m);
printf("result:%s\n",str2);
} return 0; }
void copystr(char *p1,char *p2,int m)
{int n;
厦门大学公共课 《C语言程序设计》 教材习题答案
第三章 结构化程序设计
一、思考题
1、顺序结构的语句有哪些?
表达式语句,空语句,复合语句
2、从程序控制的角度看,复合语句是单一的语句吗?
是
3、C语言中的语句有哪几类?C语句与其他语言中的语句有哪些异同?
表达式语句,空语句,复合语句,控制语句。C语言与其他语言的语句类型基本相同,只是语法有所区别。
4、怎样区分表达式和表达式语句?C语言为什么要设表达式语句?什么时候用表达式,什么时候用表达式语句?
在C语言中,只要在任何表达式的结尾加上分号“;”就构成了表达式语句。表达式语句使C语言更加灵活。当我们使用表达式语句时一般只关心它的作用而不关心该表达式的值。如puts("hello");这个表达式语句,我们关心的是输出hello这个结果而不是puts函数的返回值。
5、C语言的输入输出功能是表达式语句吗,为什么?
是,因为输入输出功能是函数调用语句。
二、选择题
1、以下符合C语言语法的赋值表达式是B)d=9+e,f=d+9
2、下面程序运行时的输出结果是D)a=8
main(){
int a=5;
printf(“a=%d\n”,++a+2); }
3、putchar函数可以向终端输出一个D)字符或字符变量值
4、运行以下程序时,从键盘输入25,13,10(回车),则输出结果是A)a1+a2+a3=48 main() {
int a1,a2,a3;
scanf(“%d,%d,%d”,&a1,&a2,&a3); }
5、若有以下定义和语句 char c1=‟b‟,c2=‟e‟; printf(“%d,%c\n”,c2-c1,c2-„a‟+‟A‟); 则输出结果是B)3,E
6、下面程序的执行结果是A)10 main(){
int a,b;
a=20;b=10;
a+=a+b;
a-=a-b;
printf(“%d\n”,a); }
7、使下列程序输出”123,456,78”,由键盘输出数据,正确的输入是C)123,45678
int i,j,k;
scanf(“%d,%3d%d”,&i,&j,&k); 主讲教师:林子雨
第1页/共4页 厦门大学公共课 《C语言程序设计》 教材习题答案
第三章 结构化程序设计
printf(“%d,%d,%d\n”,i,j,k);
三、编程题
1、若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) #include
void main() { int a=3,b=4,c=5; double x=1.2,y=2.4,z=-3.6; long u=51274,n=128765; char c1='a',c2='b'; printf("a=%d b=%d c=%d\n",a,b,c); printf("x=%lf,y=%lf,z=%lf\n",x,y,z); printf("x+y=%.2f y+z=%.2f z+x=%.2f\n",x+y,y+z,z+x); printf("u=%ld n=%ld\n",u,n); printf("c1=\'%c\'or%d\(ascii\)\n",c1,c1); printf("c2=\'%c\'or%d\(ascii\)\n",c2,c2); }
2、请写出下面程序的输出结果 main(){ int a=5,b=7; float x=67.8564,y=-789.124; char c=’a’; long n=1234567; unsigned u=65535; printf(“%d%d\n”,a,b); printf(“%3d%3d\n”,a,b); printf(“%f,%f\n”,x,y); printf(“%-10f,%10f\n”,x,y); printf(“8.2f,%8.2f,%.4f,%.4f,%3f,%3f\n”,x,y,x,y,x,y); printf(“%e,%10.2e\n”,x,y); printf(“%c,%d,%o,%x\n”,c,c,c,c); printf(“%ld,%lo,%x\n”,n,n,n); printf(“%u,%o,%x,%d\n”,u,u,u,u); printf(“%s,%5.3s\n”,”computer”,”computer”); } 57 主讲教师:林子雨
厦门大学公共课 《C语言程序设计》 教材习题答案
第三章 结构化程序设计
5 7 67.856400,-789.124023 67.856400 ,-789.124023 8.2f,
67.86,-789.1240,67.8564,-789.124023,67.856400 6.785640e+001,-7.89e+002 a,97,141,61 1234567,4553207,12d687 65535,177777,ffff,65535 computer, com
3、用下面的scanf函数输入数据,使a=10,b=20,c1=’a’,c2='a',x=1.5.,y=-3.75,z=67.8,请问在键盘上如何输入数据?
scanf(“%5d%5d%c%c%f%f%*f,%f”,&a,&b,&c1,&c2,&x,&y,&z); 0001000020aa1.5 -3.75 1,67.8 4. 设圆球半径为r=2.5,求圆球表面积、圆球体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后两位数字。请编程序。 #include#define PI 3.14 main() { float r,s,v; printf("输入半径:"); scanf("%f",&r); s=4*PI*r*r; v=4.0/3*PI*r*r*r; printf("圆球面积是:%.2f\n",s); printf("圆球体积是:%.2f\n",v); } 5.输入一个华氏温度,根据公式为c=5/9(f-32)计算并输出摄氏温度,输出时要求有文字说明,取2位小数。请编程序。 #includemain() { float f,c; printf("输入华氏温度:"); scanf("%f",&f); c=5.0/9*(f-32); printf("摄氏温度是:%f",c); } 6.输入三角形的三边长,求三角形面积。请编程序。 #include#includemain() { float a,b,c,s,area; 主讲教师:林子雨
第3页/共4页 厦门大学公共课 《C语言程序设计》 教材习题答案
第三章 结构化程序设计
} 7.编写一个能引起short型变量溢出的程序。 #includemain() { short a; a=21344211; printf("a=21344211,溢出后a=%d\n",a); } 8.编写一个程序,显示下列10个转义字符:\a,\b,\n,\r,\t,\v,\',",\,\? #includemain() { printf("\a,\b,
,\r,,\v,',",\,?"); } 9.编写一个程序,输入一个小写字母,输出其对应的大写字母。 #includemain() { char a,A; printf("输入一个小写字母,将输出一个相应大写字母:"); a=getchar(); A=a+'A'-'a'; putchar(A); putchar('\n'); } printf("输入三角形的三条边长:"); scanf("%f%f%f",&a,&b,&c); if(a+b>c&&a+c>b&&b+c>a) { //海伦公式
s=1.0/2*(a+b+c); area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("面积是:%f",area); } else printf("该三角形不存在!"); 主讲教师:林子雨
第4页/共4页
此答案为自己所出,若有不对之处请谅解,并希望能留言
单选题(共60题,每题1分,共60分) 1. 下列符号串中,属于C语言合法标识符的个数为(B)。
_1_2_3,a-b-c,float,9cd,a3b4
A:1
B:2
C:3
D:4 2. 下列能为字符变量 a 赋值的是:char a= (C)。
A:'ab'
B:"a"
C:'\0'
D:"\0" 3. 在下列字符序列中,合法的标识符是(B)。
A:P12.a
B:stud_100
C:$water.1
D:88sum 4. 下列用于printf函数的控制字符常量中,代表tab
的字符常量是(B)。
A:'\b'
B:'\t'
C:'\r'
D:'\f' 5. 下列用于printf函数的控制字符常量中,代表退格的字符常量是(A)。
A:'\b'
B:'\t'
C:'\r'
D:'\n' 6. 如有以下程序:unsigned int a=6; int b=-20; char c; c=(a+b>6); 则c的值为(C)。(int转换为unsigned )
A:6
B:-14
C:1
D:0 7. 关于C语言,以下不正确的叙述是(B)。
A:在C语言程序设计中,逗号运算符的优先级最低
B:在C语言程序设计中,var和VAR是两个相
同的变量
C:C语言也支持重载
D:此处的两个语句int a; a=-13.06;在程序编译中将会提示出错 8. 若有定义: int a=2,*p; float x=1, y=2; char e=‘w’;
则以下用法不正确的是(B)。
A:printf("%c",e+a);
B:p=&x;
C:a *=y+x;
D:x=y=e; 9. int x=20; printf("%d\n",~x); 以上程序片段的输出是(B)。
A:235
B:-21
C:-20
D:-11 10. 在C语言中,要求运算数必须是整型的运算符是(D)。
A:/
B:++
C:!=
D:% 11. 若有定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是(结果保留两位小数)(A)。
A:2.50
B:2.75
C:3.50
D:0.00 12. 以下运算符中优先级最低的是(C)。
A:&&(第三)
B:&(第一)
C:||(第四)
D:|(第二)
13. 设有定义语句:char c1=1,c2=1;,则以下表达式中值为零的是(A)。
A:c1^c2
B:c1&c2
C:~c2
D:c1|c2 14. 以下程序的输出结果是
#include void main() {
unsigned char a,b;
a=0x0a|3;
b=0x0a&3;
printf("%d %d\n",a,b); } (B)。
A:2 11
B:11 2
C:7 13
D:13 7 15. 如果int i = 4, 则printf("%d", -i-- )结果是__,i的值是。(A)
A:-4 3
B:-3 3
C:-3 4
D:-4 4 16. 若x=2,y=3则x&y的结果是(B)。
A:1
B:2
C:3
的输出
D:5 17. 下列程序的输出是(B)。 main() {int x; printf("%d\n",(x=3*5,x*2,x+10));}
A:15
B:25
C:30
D:40 18. 若x,i,j和k都是int型变量,则计算下面表达式后,x的值为(C)。 x=(i=4,j=16,k=32)
A:4
B:16
C:32
D:其他值
19. 假设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是(B)。
A:7
B:8
C:6
D:2
20. 以下程序运行后的输出结果是(A)。 main() {int a,b; a=50;b=90; printf("%d\n",(a,b)); }
A:90
B:50 90
C:50
D:其他
21. 以下程序的运行结果是(A)。 void main() {
int a=4; char ch=‘a’;
printf( "%d\n",(a&2)&&(ch>‘A’));}
A:0
B:1
C:2
D:3 22. 以下程序的输出是(D)。 #include
main( )
{ int i,j=4;
for(i=j; i<=2*j; i++) switch (i/j) { case 0 :
case 1: printf("*"); break;
case 2: printf("#"); break; } }
A:*###
B:**##
C:***#
D:****# 23. 有如下程序片段: int i = 0; while(i++ <= 2); printf("%d", i--); 则正确的执行结果是 (C)。
A:2
B:3
C:4
D:以上都不是 24. 有以下程序段 main() { int i=1,sum=0,n;
scanf(“%d”,&n); do { i+=2; sum+=i ; }while(i!=n); printf(“%d”,sum); } 若使程序的输出值为15,则应该从键盘输入的n的值是 (D)。
A:1
B:3
C:5
D:7 25. 以下程序的输出是(A)。
#includevoid fun(int *p) {
int a=10;
p=&a;
++a; } void main() {
int a=5;
fun(&a);
printf("%d\n",a); }
A:5
B:6
C:10
D:11 26. 以下关于函数的说法中正确的是 (C)。
A:定义函数时,形参类型说明可放在函数体内
B:return语句后边的值不能为表达式
C:如果函数类型与返回值类型不一致,以函数类型为准
D:如果形参与实参的类型不一致,以实参为准
27. 已知有定义:int *p(); 则以下说法正确的是 (C)。
A:指向int型的指针变量
B:int型的指针数组
C:一个函数,该函数的返回值是指向int型的指针变量
D:一个指向函数的指针变量,该函数的返回值为int型
28. 若有如下程序: void s(char *m,int n) {
*m=*m+3;n=n+3;
printf("%c,%c,",*m,n); } void main() {
char p=‘b’,q=‘B’;
s(&q,p);
printf("%c,%c\n",p,q); }则程序运行后的输出结果是 (A)。
A:E,e,b,E
B:e,E,b,F
C:E,e,e,E
D:e,E,b,E 29. C语言规定函数返回值的类型由 (A)。
A:在定义时所指定的函数类型所决定
B:调用该函数时的主调函数类型所决定
C:return语句中的表达式类型所决定
D:调用该函数时系统临时决定
30. 要在c语言中求正弦30度的值,可以调用库函数,可用格式为 (D)。
A:sin(30)
B:sin(30.0)
C:sin((double)30)
D:sin(3.1415/6) 31. 在C语言程序设计中,简单变量作为实参时,它和对应形参之间的数据的传递方式是 (B)。
A:地址传递
B:单向值传递
C:由实参传给形参,再由形参传给实参
D:由用户指定传递方式 32. 以下程序的输出为(C)。 int a=2; int f(int *a)
{
return(*a)++; } void main() {
int s=0;
{int a=5;
s+=f(&a);
}
s+=f(&a);
printf("%d %d\n",a,s); }
A:2 7
B:2 10
C:3 7
D:3 11 33. 以下程序输出结果是(D)。 #include int *fun() { int a[4],k; for(k=0;k<4;k++)a[k]=k;
return(a); } void main() { int *p,j; p=NULL; p=fun(); for(j=0;j<4;j++){printf("%d\n",*p);p++;} }
A:输出0 0 0 0
B:输出0 1 2 3
C:输出1 1 1 1
D:输出不确定值 34. 以下程序的运行结果是(D)。 void fun(int *n) {
static int m=2;
*n*=m-1; m+=2; } void main() {
static int m=1;
int i;
for(i=1;i<4;i++)
fun(&m);
printf("%d\n",m); }
A:8
B:10
C:11
D:15 35. 下面对typedef的叙述中不正确的是 (B)。
A:用typedef可以定义各种类型名,但不能用来定义变量
B:typedef和#define都是在预编译时处理的
C:用typedef只是将已存在的类型用一个新的标识符来代表
D:使用typedef有利于程序的通用和移植 36. 要使用内存分配函数malloc,需要引入的头文件是 (BC)。
A:stdio.h
B:stdlib.h
C:malloc.h
D:memory.h
37. 以下宏定义中,不会引起二义性的宏个数为(A)。 1)#define POWER(x) x*x 2) #define POWER(x) (x)*(x) 3) #define POWER(x) (x*x) 4) #define POWER(x) ((x)*(x))(没有二义性)
A:1个
B:2个
C:3个
D:4个
38. 若有二维数组定义语句:int a[4][5]; 则下面对元素a[2][3]不正确的引用方式是(B)。
A:*(&a[2][3])
B:*(a+5*2+3) 可以换为(&a[0][0]+5*2+3)
C:*(a[2]+3)
D:*(*(a+2)+3) 39. 若二维数组定义为a[m][n],则在a[i][j]之前的元素个数为 (B)。(不知怎么下面是m,应该是n把,不清楚!!)
A:j*m+i
B:i*m+j
C:i*m+j-1
D:j*m+i-1
40. 有字符数组a[10]={‘A’,‘\0’}和b[10]={‘B’},则以下正确的输出语句是 (D)。
A:puts(a,b);
B:printf("%s %s\n",a[],b[]);
C:putchar(a,b);
D:puts(a);puts(b); 41. 下列程序的输出结果是(D)。 #include #include void main() {
char p1[20]="abcd",p2[20]="ABCD";
char str[50]="xyz";
strcpy(str+2,strcat(p1+2,p2+1));
printf("%s\n",str); }
A:xyabcAB
B:abcABz
C:Ababcz
D:xycdBCD 42. 以下程序执行后输出结果是(C)。 void main()
{
char a[]="movie",b[10]="movie";
printf("%d %d\n",sizeof(a),sizeof(b)); }
A:5 5
B:6 6
C:6 10
D:10 10 43. 以下程序的输出结果是(A)。 void main() {
char *p[10]={"abc","aabdfg","dcdbe","abbd","cd"};
printf("%d\n",strlen(p[4])); }
A:2
B:3
C:4
D:编译出错 44. 已知有以下的说明,
int a[]={8,1,2,5,0,4,7,6,3,9}; 那么a[*(a+a[3])]的值为 (B)。
A:5
B:0
C:4
D:7 45. 以下程序输出结果是(B)。 #include main() {
int a[2][2]={1,2,3,4},(*p)[2];
p=a;
p++;
printf("%d\n",**p ); }
A:2
B:3
C:4
D:以上都不对
46. 设char ch,str[4],*strp;,则正确的赋值语句是 (C)。
A:ch="CBA";
B:str="CBA";
C:strp="CBA";
D:*strp="CBA"; 47. 下面程序的运行结果是(C)。 #include #include fun(char *w,int n) {char t,*s1,*s2; s1=w;s2=w+n-1; while(s1A:7654321
B:1714171
C:1711717
D:7177171 48. 以下程序的输出是( C)。 #include
main(){ char a[]="language",*p; p=a; while(*p!=‘u’){ printf("%c",*p-‘u’+‘U’);p++;} }
A:LANGUAGE
B:language
C:LANG
D:LANGuage 49. struct s1 {
char a[3];
int num; }t={‘a’,‘b’,‘x’,4},*p; p=&t; 则输出为x的语句是(B)。
A:printf(“%c\n”,p->t.a[2]);
B:printf(“%c\n”,(*p).a[2])
C:printf(“%c\n”,p->a[3]);
D:printf(“%c\n”,(*p).t.a[2]);
50. 以下程序的输出是(D )。 #include main(){
struct st
{int x;
int y;
}cnum[2]={1,3,2,7};
printf("%d\n",cnum[0].y/cnum[0].x*cnum[1].x); }
A:0
B:1
C:3
D:6 51. 以下对age的非法引用是(B)。 struct student {int age;
int num; }stu1,*p; p=&stu1;
A:stu1.age
B:student.age
C:p->age
D:(*p).age 52. 以下程序的输出是(B )。 #include union myun {struct {int x,y,z;}u; int k; }a; void main() {a.u.x=4;a.u.y=5;a.u.z=6; a.k=0; printf("%d\n",a.u.y); }
A:4
B:5
C:6
D:0 53. 若要用fopen函数打开一个二进制文件,该文件要既能读也能写,当文件不存在时新建文件,则文件打开方式字符串应是(C )。
A:"ab+"
B:"rb+"
C:"wb+"
D:"ab" 54. 若执行fopen函数时发生错误,则函数的返回值是 (B)。
A:地址值
B:0
C:1
D:EOF 55. 要打开文件c:\user\text.txt用于追加数据,正确的语句是(C)。
A:fp=fopen("c:\turboc2\abc.txt","r");
B:fp=fopen("c:urboc2\abc.txt","r");
C:fp=fopen("c:urboc2\abc.txt","a+");
D:fp=fopen("c:\turboc2\abc.txt","a+"); 56. 在执行fopen函数时,ferror函数的初值是 (D )。
A:TRUE
B:-1
C:1
D:0
57. #include main() {
char * s1="Hello",*s2="Beijing";
FILE *pf=fopen("abc.dat","wb+");
fwrite(s2,7,1,pf);
fseek(pf,-1,SEEK_CUR);
fwrite(s1,5,1,pf);
fclose(pf); } 以上程序执行后,文件abc.dat中的内容为 (C)。
A:Hellong
B:Beijing Hello
C:BeijinHello
D:Hello 58. 若fp为文件指针,且文件已正确打开,i为整型数据,以下语句的输出结果是(B)。 fseek(fp,0,SEEK_END); i=ftell(fp); printf("i=%d\n",i);
A:fp所指的文件记录长度
B:fp所指的文件长度,以字节为单位
C:fp所指的文件长度,以比特为单位
D:fp所指的文件当前位置,以字节为单位 59. 函数调用语句:fseek(fp,-20L,2);的含义是 (C )。
A:将文件位置指针移到距离文件头20个字节处
B:将文件位置指针从当前位置向后移动20个字节
C:将文件位置指针从文件末尾处后退20个字节
D:将文件位置指针移到离当前位置20个字节处
60. 若将文件指针的读写位置指针移动到距离文件头200个字节的位置,对应正确的操作是 (A)。
A:fseek ( fp, 200, SEEK_SET )
B:fseek ( fp, 200, SEEK_CUR )
C:fseek ( fp, 200, SEEK_END )
D:ftell ( 200 )
六、编程题参考答案
1.编程,统计在所输入的50个实数中有多少个正数、多少个负数、多少个零。 #include "stdio.h" #define N 50 void main() { float x; unsigned int s1,s2,s3,i; s1=s2=s3=0; for(i=1;i<=N;i++) { scanf("%f",&x); if(x<0) s1++; else if(x==0) s2++; else s3++; } printf("负数%u个,零%u个,正数%u个\n",s1,s2,s3); }
2. 编程,计算并输出方程 X2+Y2=1989 的所有整数解。 #include "stdio.h" void main() { int x,y; for(x=-45;x<=45;x++) { y=-45; while(y<=45) { if(x*x+y*y==1989) printf("%d*%d+%d*%d=%d\n",x,x,y,y,1989); y++; } } }
3.编程,输入一个10进制正整数,然后输出它所对应的八进制、十六进制数。 #include "stdio.h" void main() { unsigned int x; printf("请输入一个十进制正整数:"); scanf("%u",&x); printf("%d=八进制数 %o=十六进制数%x\n",x,x,x); }
4.编程,找出1000以内的所有完数,并输出其因子。 #include "stdio.h" void main() { int i,j,s=1; for(i=1;i<=1000;i++,s=1) { for(j=2;j<=i/2;j++) if(i%j==0) s+=j; // 求 i的因子和
if(s==i) { printf("%d=1",i); // 如果i 是完数则输出其各因子
for(j=2;j<=i/2;j++) if(i%j==0) printf("+%d",j); printf("\n"); } } }
5. 输入一个正整数,输出它的所有质数因子。 #include "stdio.h" void main() { int m,i=2; printf("请输入一个整数:"); scanf("%d",&m); while(m!=1) if(m%i==0){ printf("%d ",i); m/=i; } else i++; printf("\n"); }
6. 输入20个整数,输出其中能被数组中其它元素整除的那些数组元素。 #include "stdio.h" #define N 20 void main() { int a[N],i,j; for(i=0;i7. 输入两个数组(数组元素个数自定),输出在两个数组中都出现的元素。 #include "stdio.h" #define NA 6 #define NB 8 void main() { float a[NA],b[NB]; int i,j; for(i=0;i8. 输入两个数组(数组元素个数自定),输出在两个数组中都不出现的元素。 #include "stdio.h" #define NA 6 #define NB 8 void main() { float a[NA],b[NB]; int i,j; for(i=0;i9.编程,将字符数组S2中的全部字符拷贝到字符数组S1中。 #include "stdio.h" void main() { char s1[20],s2[]="Good morning!"; int i=0; while((s1[i++]=s2[i])!='\0'); printf("%s\n",s1); }
10.给定年份year,判别该年份是否闰年(定义一个宏以判别该年份是否闰年)。 #include #define f(year) year%4==0&&year%100!=0||year%400==0 void main() { int y; printf("请输入年份:"); scanf("%d",&y); if(f(y)) printf("%d 年为闰年\n",y); else printf("%d 年不是闰年\n",y); }
11.输入一行小写字母后,或输出原文,或将字母变成其下一字母(a变成b、b变成c、„、x变成y、y变成z、z变成a)输出,用条件编译方法实现以上选择。 #include #define MAX 80 #define SWITCH 1 void main() { char str[MAX]; int i=0; printf("请输入文本行:\n"); scanf("%s",str); #if(SWITCH) while(str[i]!='\0') if(str[i]>='a'&&str[i]<='z') if(str[i]=='z')str[i]='a'; else str[i]++; i++; #endif printf("%s\n",str); }
12. 编写函数,处理n行n列维数组:将每一行的元素同除以该行上绝对值最大的元素。
#include "stdio.h" #include "math.h" void div(float** a,int n) { int i,j; float x; for(i=0;ifabs(x)) x=*(*(a+i)+j); for(j=0;j{ float b[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int i,j; float* c[3]; for(i=0;i<3;i++) c[i]=b[i]; div(c,3); for(i=0;i<3;i++) { for(j=0;j<3;j++) printf("%f ",b[i][j]); printf("\n"); } }
13. 编写函数,求任意阶多项式 a0+a1X+a2X2+...+anXn 的值并返回多项式的值。 #include "stdio.h" float f1(float* a,float x,int n) { int i; float t=1,y=0; for(i=0;i14. 设计一个函数,使给出一个数的原码,能得到该数的补码。
#include // 假定sizeof(int)为2;
unsigned int getbit(unsigned int value) //第1位为0表示数的原码,
{ if(value>>15) return (value^0x7fff)+1; //其补码即其原码;若value else return value; //右移15位后为1,表示value是负数的原码,负数
} //的补码为原码按位取反(第1位不变)后加1。
void main() { unsigned int y=0x800c,k; k=getbit(y); printf("%x\n",k); }
15. 编写函数,求m行、n列的二维数组全体元素中负数的个数。 #include int sum(float **a,int m,int n) { int i,j; int y=0; for(i=0;i{ float b[2][3]={{-1,2,-3},{4,-5,-6}}; int i; float* c[2]; for(i=0;i<2;i++) c[i]=b[i]; printf("%d\n",sum(c,2,3)); } 16. 编写函数,返回在一个整数组中出现次数最多的数及其出现次数。 #include void fun(float *a,int n,int *k,float *x) { int i,j,y; *k=0; for(i=0;i*k) { *k=y; *x=*(a+i); } } return; } void main() // 函数引用示例
{ float c[10]={0,4,2,4,3,2,4,-3,1.5,7.6},t; int m; fun(c,10,&m,&t); // 若说明float *t; int *m; printf("元素%f出现次数为%d\n",t,m); // 引用为 fun(c,10,m,t) 将
} // 产生悬挂指针的错误,即t、m不只指向确定的存储单元。
17.编一个程序,打入月份号,输出该月的英文月名,要求用指针数组处理。 #include void main() { char *month_name[12]={"January","February","March","April", "May", "June","July","August","September","October", "Novenber","December"}; int n; printf("请输入月份号:"); scanf("%d",&n); if(n<1||n>12) printf("月份号输入错误!\n"); else printf("%d月的英文表示是%s\n",n,month_name[n-1]); }
18.编写递归函数,将输入的以“?”结束的字符串按与输入相反的顺序输出。 #include void pline() { char ch; if((ch=getchar())!='?') { pline(); putchar(ch); } return; } void main() // 函数引用示例 { pline(); printf("\n"); }
19. 编写函数,在n个元素的一维数组中,统计比相邻元素大的数组元素个数并将统计数返回(不考虑a[0]和a[n-1]),要求以指针变量而不是数组名作参数。 #include int num(float *x,int n) { int i,k=0; for(i=1;i*(x+i-1)&&*(x+i)>*(x+i+1)) k++; return k; } void main() // 函数引用示例
{ float a[10]={1,3,4,2,6,7,12,5,9,8}; printf("%d\n",num(a,10)); }
20. 编写函数,在n个元素的一维数组中,找出最大值、最小值并传送到调用函数。
#include void num(float *b,int n,float *max,float *min) { *max=*b; *min=*b; for(int i=1;i*max) *max=*(b+i); if(*(b+i)
{ float a[10]={1,3,4,2,6,7,12,5,9,8},x,y; num(a,10,&x,&y); printf("最大值为%f,最小值为%f。\n",x,y); }
21. 编写一个函数,统计m行n列二维数组中有多少个正数、多少个负数,多少个零,并
返回统计结果。
#include void sub(float** a,int m,int n,int *fs,int *lin,int *zs) { int i,j; *fs=*lin=*zs=0; for(i=0;i{ float b[5][3]={{-1,5,2},{3,0,-2},{0,-3,5}, {4,7,-8},{3,4,5}},*c[5]; int i,k1,k2,k3; for(i=0;i<5;i++) c[i]=b[i]; sub(c,5,3,&k1,&k2,&k3); printf("负数%d个,零%d个,正数%d个。\n",k1,k2,k3); }
22. 编写函数,在给定的一行以'.'结束的字符中,找出最长的单词并输出。 #include void find(char *str) { char *p1,*p2,*p3; int k1=0,k2=0; // k1为最长串的长度,初值为0。
p1=p2=p3=str; // p3指向最长串首字符,p1指向当前处理串首字符,
while(*p2!='.') // p2为移动指针,*p2为空格表示查找到单词尾部。
if(*p2!=' ') { k2++; p2++; } else if(k2>k1) { p3=p1; p1=++p2; k1=k2; k2=0; } else { k2=0; p1=++p2; } for(k2=0;k2<=k1;k2++) printf("%c",*(p3+k2)); printf("\n"); return; } void main() // 函数引用示例 { char a[40]; int i=0; while((a[i++]=getchar())!='.'); find(a); }
23. 编写函数print,打印一个学生的成绩数组,该数组中有若干个学生的数据记录,每个记录包括num,name,score[3]。 #include struct student { char num[7],name[9];int score[3]; }; // 尾部分号不得遗漏
void print(struct student* s,int n) { int i; // 运算符'*'、'&'的优先级均低于运算符'.' for(i=0;iprintf("%s %s %4d%4d%4d\n",(*(s+i)).num,(*(s+i)).name,
(*(s+i)).score[0],(*(s+i)).score[1],(*(s+i)).score[2]); return; } void main() { struct student t[4]; int i; for(i=0;i<4;i++)
scanf("%s%s%d%d%d",&t[i].num,&t[i].name,&t[i].score[0], &t[i].score[1],&t[i].score[2]); print(t,4); } 24. 把文本文件d1.dat复制到文本文件d2.dat中,要求仅复制d1.dat中的英文字符。
#include void main() { FILE *fpd1,*fpd2; char ch; fpd1=fopen("d1.dat","r"); fpd2=fopen("d2.dat","w"); while(fscanf(fpd1,"%c",&ch)!=EOF) if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z') fprintf(fpd2,"%c",ch); fclose(fpd1); fclose(fpd2); }
25. 编程,把文本文件d1.dat复制到d2.dat(其中空格字符不复制)。 #include void main() { FILE *fpd1,*fpd2; char ch; fpd1=fopen("d1.dat","r"); fpd2=fopen("d2.dat","w"); while(fscanf(fpd1,"%c",&ch)!=EOF) if(ch!=' ') fprintf(fpd2,"%c",ch); fclose(fpd1); fclose(fpd2); }
26. 编程,把文本文件d1.dat复制到d2.dat(其中大写英文字母要转换为小写字母)。
#include void main() { FILE *fpd1,*fpd2; char ch; fpd1=fopen("d1.dat","r"); fpd2=fopen("d2.dat","w"); while(fscanf(fpd1,"%c",&ch)!=EOF) { if(ch>='A'&&ch<='Z') ch=ch+32; fprintf(fpd2,"%c",ch); } fclose(fpd1); fclose(fpd2); }
27. 把文本文件d1.dat复制到文本文件d2.dat中,要求仅复制d1.dat中除英文字符和数字以外的其它内容。 #include void main() { FILE *fpd1,*fpd2; char ch; fpd1=fopen("d1.dat","r"); fpd2=fopen("d2.dat","w"); while(fscanf(fpd1,"%c",&ch)!=EOF)
if(!(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z'||ch>='0'&&ch<='9')) fprintf(fpd2,"%c",ch); fclose(fpd1); fclose(fpd2); }
28. 求出1至100之间的素数(只能被1和自身整除的数)并顺序写入文件su.dat。
#include #include void main() { FILE *fp; int i,j,k=2; fp=fopen("su.dat","w"); fprintf(fp,"%4d%4d",2,3); for(i=5;i<100;i=i+2) { for(j=3;j<=sqrt(i);j=j+2) if(i%j==0) break; if(j>sqrt(i)) { fprintf(fp,"%4d",i); k++; if(k%10==0) fprintf(fp,"\n"); } } fclose(fp); }
29.磁盘文件a1和a2,各自存放一个已按字母顺序排好的字符串,编程合并二个文件到a3 文件中,合并后仍保持字母顺序。 #include #include void main() { FILE *fp1,*fp2,*fp3; int i,j,k; char c1,c2; fp1=fopen("a1","r"); fp2=fopen("a2","r"); // 首先从文件a
1、a2中各读入一个字符分别送入变量c
1、c2,下面将作
// 循环比较,直到读到文件尾标志为止。
fp3=fopen("a3","w"); c1=fgetc(fp1); c2=fgetc(fp2); do { if(c130.顺序文件C.DAT每个记录包含学号(8位字符)和成绩(三位整数)两个数据项。从文件读入学生成绩,将大于或等于60分的学生成绩再形成一个新的文件SCORE60.DAT保存在A盘上,并显示出学生总人数、平均成绩和及格人数。 #include #include void main() { FILE *fp1,*fp2; char s[9]; int x,zrs=0,pjcj=0,jgrs=0; fp1=fopen("c.dat","r"); fp2=fopen("a:score60.dat","w"); fscanf(fp1,"%s%d",s,&x); do { zrs++; pjcj+=x; if(x>=60) { jgrs++; fprintf(fp2,"%s %d\n",s,x); } fscanf(fp1,"%s%d",s,&x); } while(!feof(fp1)); printf("总人数:%d 平均成绩:%d 及格人数:%d\n",zrs,pjcj/zrs,jgrs); fclose(fp1); fclose(fp2); } 31.程序清单:
typedef int datatype; typedef struct node {datatype data; struct node *next; }linklist; „„
INVERT(linklist *head) {linklisk *p,*q; p=head->next; if(p!=NULL) {head->next=NULL; do {q=p->next; p->next=head->next; head->next=p; p=q; } while(p!=NULL); } } 32.程序清单:
PURGE(linklist *head) {linklist *p,*q; q=head->next; if(q==NULL)return; p=q->next; while(p!=NULL) if(p->data==q->data) {q=p->next; free(p); p=q->next; } else {q=p; p=p->next; } }
33、程序清单: #include main() {static char x[]=”computer”; char *p; for(p=x;p34、#include #include main() {int m; char str[80],str2[80]; printf(“input a string:\n”); gets(str2); printf(“intput m:\n); scanf(“%d”,&m); if(strlen(str2)35、程序清单:
float search(float (pointer)[4],int n) {float *pt; pt=*(pointer+n); return(pt); }
36、Main() {int score[][4]={{60,76,80,90},{45,86,57,90},{58,95,80,71},{78,50,60,85}}; int (*p)[4],j,k,flag; p=score; for(j=0,j<4;j++) if(*(*(p+j)+k)<60)flag=1; if(flag==1) {printf(“NO.%dis fail,svoreare:\n”,j); for(k=0,;k<4;k++) printf(“%5d”, *(*(p+j)+k);
printf(“\n”); } }
37、程序清单: main() {int b[16],x,k,r,I; printf(“enter a integer :\n”): scanf(“%d”,&x);
printf(%6d’s binary number is:\n”,x); k=-1; do {r=x%2; k++; *(b+k; x/=2; }while(x!=0 for(I=k;I>=0;I--) printf(“%d”,*(b+i) printf(“\n”); } 38、float p(int n,int x) {flaot t,t1,t2; if(n==0)return(1); else if(n==1) return(x); else {t1=(2*n-1)*x*(p((n-1),x)); t2=(n-1)*p((n-2),x); t=(t1-t2)/n); return(t); }}
39、main() {int a[5][5],I,j,k=0,m,n; m=n/2+1; for(I=0,I=I;j--) {k++;a[n-I-1][j]=k;} for(j=n-2-I;j>=I+1;j--) {k++;a[I][j];}} for(I=0;Imain() {int m[16],n,I,t,count=0; long a,k; printf(“result is:\n”); for(n=10;n<200;n++) {k=0; t=1; a=n*n; for(I=1;a!=0;I++) {m[I]=a%10; a/=10; } for(;I>1;I--) {k+=m[I-1]*t; t=t*10; } if(k==n*n) printf(“%2d:%10d%10d\n”,++count,n,N*n); }}
41、
void convert(char *a,int n) {int I; if((I=n/10)!=0) convert(a+1,i); *a=n%10+’0’; }
42、#include main() {FILE *fp; char str[100],fikename[10]; int I=0; if((fp=fopen(“upper.txt”,”w”))==NULL) {printf(“can not open file\n”); exit(0); } printf(“enter a string:\n”); gets(str); while(str[I]!=’!’)
{if(str[I]>=’a’&&str[I]<=’z’) str[I]=str[I]-32; fputc(str[I],fp); I++; } fclose(fp); }
43、#include “stdio.h” FILE *fp; main() {int p=0,n=0,z=0,temp; fp=fopen(“number.dat”,”r”); if(fp==NULL) printf(“file not found\n”); else {while(!feof(fp)) {fscanf(fp,”%d”,&temp); if(temp>0) p++; else if(temp<0) n++; else z++; } fclose(fp); printf(“posive:%3d,negtive:%3d,zero:%3d\n:,p,n,z); } }
44、main() {unsigned rightrot(unsigned a,int n)
unsigned int m,b;
int n;
printf(“enter mand n:”);
scanf(%x,%d”,&m,&n);
printf(“m=%x,n=%d\n”,m,n);
b=rightrot(m,n);
printf(“b=%x\n”,b); } unsigned rightrot(unsigned a,int n) {int rb; while(n0) {rb=(a&1)<>1; a=a|rb; } return a; }
45、解:PX(X,N)=X-X2+X3-X4+„„+(-1)N-1XN =X*(1- X-X2+X3-X4+„„+(-1)N-1XN-1 =X*(1-PX(X,N-1) 程序清单:
double px(double x,int n) {if(n==1) return x; else return(x*(1-px(x,n-1)); }
46、程序清单:
double opwer1(double x,int n) {if(n==0) return 1; else return(x*power1(x,n-1); }
47、Printfn(int n) {if(n=0&&n<=9) printf(“%d”,n); else {printf(“%d”,x%10); printn(x/10); } }
48、程序清单: t(int n) {int m; printf(“%d”,x%10); m=x/10; if(m>0) r(m); }
49、程序清单:
int ack(int m,int n) {if(m==0) return (n+1); else if(n==0) return(ack(m-1,1); else return(ack(m-1,ack(m,n-1))); } 50、Void intobin(int x) {if(x/2>0) intobin(x/2); printf(“%d”,x%2); }
51、Void intobin(int x) {if(x/8>0) intobin(x/8); printf(“%d”,x%8); }
52、Void intobin(int x) { if(x/16>0) intobin(x/16); printf(“%c”,(x%16>=9)?x%16+55:x%16+48); }
53、Main() {int x; printf(“enter a number:\n”);
scanf(“%d”,&x); if(x!=0) {if(x>0) { x=x%2; if(x) printf(“this number is a plus odd number\n”); else printf(“this number is a plus even number\n”); } else { x=x%2; if(x) printf(“this number is a plus odd number\n”); else printf(“this number is a plus even number\n”); } else printf(“this number is zero\n”); }
54、Main() {int x,y,max; printf(“please input two number:\n”);
scanf(“%d,%d”,&x,&y); if(a>b) max=a; else max=b; printf(“max=%d”,max); }
55、Main() {int j; for(j=999;j>=100;j--) if(555555%j==0) break; printf(“%d”,j); }
56、Main() {int I,count,j,sum; sum=count=0; for(I=0;I<10;I++) {printf(“input ingter:\n); scanf(“%d”,&j); if(j<0) continue; count++; sum=sum+j; } if(count) printf(“plus number:%d,average value :%.2f”,count,1.0*sum/count); else printf(“plus number:0,average value :0”); }
57、Main() {int year; printf(“%d”,&year); if(year<0) printf(“year is not a yaer\n”): else if((year%4==0&&year%100!=0)||year%400==0) printf(“year is leap year!\n”); else printf(“year is not leap year!\n”); }
58、main() {int n,j,k; printf(“input n:\n”);
scanf(“%d”,&n); for(j=0;jprintf(“\n”); } }
59、main() {int n,I,j,k; printf(“input n:\n”);
scanf(“%d”,&n); for(I=0;Iprintf(“\n”); } } 60、Main() { int I; float sum=1; for(I=2;I<=1000;I++) sum=sum+1.0/I; printf(“%f”,sum); } 6
1、Mypower(float x,int n) {int I; float po=1; for(I=1,I<=n;I++) po=po*x; printf(“%f”,po); } 6