C语言程序设计填空题及答案复习用
导读:在程序填空题中,已经给出了程序的主干,读者首先要理解程序的思路,再选择正确的内容填入空白处,使程序完成既定的功能。这类习题的设计就是要引导读者逐步掌握编程的方法。本节习题的难度适中,可能有些典型的程序在课堂上已经有所接触,读者一定要独立完成它,这样就可以逐步提高自己的编程能力。在程序设计语言学习的中期,读者对程序设计已经有了初步的了解,而自己编写程序又不知从何处入手,此时解答此类题目可以避免盲目性,从而提高学习的效率。
【3.1】下面程序的功能是不用第三个变量,实现两个数的对调操作。
#include
main()
{ int a,b;
scanf("%d%d",&a,&b);
printf("a=%d,b=%d\n",a,b);
a= ①;
b= ②;
a= ③;
printf("a=%d,b=%d\n",a,b);
}
【3.2】下面程序的功能是根据近似公式:π2/6≈
1/12+1/22+1/32+ …… +1/n2,求π值。
#include
double pi(long n)
{ double s=0.0;
long i;
for(i=1;i<=n;i++)
s=s+ ①;
return( ②);
}
【3.3】下面的程序的功能是求一维数组中的最小元素。findmin(int *s,int t,int *k)
{ int p;
for(p=0,*k=p;p if(s[p] ①;} main() { int a[10],i,*k=&i; for(i=0;i<10;i++) scanf("%d",&a[i]); findmin(a,10,k); printf("%d,%d\n",*k,a[*k]); } 【3.4】下面程序的功能是计算1-3+5-7+ …… -99+101 的值。 main() { int i,t=1,s=0; for(i=1;i<=101;i+=2) { ①t=t* i; s=s+t; ②;t>0?t=-1:1; } printf("%d\n",s); } 【3.5】有以下程序段: s=1.0; for(k=1;k<=n;k++) s=s+1.0/(k*(k+1)); printf("%f\n",s); 填空完成下述程序,使之与上述程序的功能完全相同。 s=0.0; ①; k=0; do { s=s+d; ②; d=1.0/(k*(k+1)); }while( ③); printf("%f\n",s); 【3.6】下面程序的功能是从键盘上输入若干学生的学习 成绩,统计并输出最高成绩和最低成绩,当输入为负数 时结束输入。 main() { float x,amax,amin; scanf("%f",&x); amax=x; amin=x; while( ①) { if(x>amax) amax=x; if( ②) amin=x; scanf("%f",&x); } printf("\namax=%f\namin=%f\n",amax,amin); } 【3.7】下面程序的功能是将形参x的值转换为二进制 数,所得的二进制数放在一个一维数组中返回,二进制 数的最低位放在下标为0的元素中。 fun(int x,int b[]) { int k=0,r; do { r=x% ①; b[k++]=r; x/= ②; }while(x); } 【3.8】下面程序的功能是输出1到100之间每位数的 乘积大于每位数的和的数。例如数字26,数位上数字的 乘积12大于数字之和8。 main() { int n,k=1,s=0,m; for(n=1;n<=100;n++) { k=1; s=0; ①; while( ②) { k*=m%10; s+=m%10; ③; } if(k>s) printf("%d",n); } } 【3.9】下面程序的功能是统计用0至9之间的不同的数字组成的三位数的个数。 main() { int i,j,k,count=0; for(i=1;i<=9;i++) for(j=0;j<=9;j++) if( ①) continue; else for(k=0;k<=9;k++) if( ②) count++; printf("%d",count); } 【3.10】下面程序的功能是输出100以内的个位数为6、且能被3整除的所有数。 main() { int i,j; for(i=0;①;i++) { j=i*10+6; if( ②) countinue; printf("%d",j); } } 【3.11】下面程序的功能是用辗转相除法求两个正整数m和n的最大公约数。 hcf(int m,int n) { int r; if(m { r=m; ①; n=r; } r=m%n; while( ②) { m=n; n=r; r=m%n; } ③; } 【3.12】下面程序的功能是使用冒泡法对输入的10个 浮点数从小到大进行排序。排好序的10个数分两行输 出。程序如下: #include main() { ①; int i,j; printf("Input 10 numbers please\n"); for(i=0;②;i++ ) scanf("%f", &a[i]); printf("\n"); for(i=2;③;i++ ) for(j=0;④;j++ ) if( ⑤) { x=a[j]; ⑥; a[j+1]=x; } printf("The sorted 10 numbers;\n"); for(i=0;⑦;i++ ) { if( ⑧) printf("\n"); printf("%f\t",a[i]); } printf("\n"); } 【3.13】下面程序的功能是读入20个整数,统计非负 数个数,并计算非负数之和。 #include "stdio.h" main() { int i,a[20],s,count; s=count=0; for(i=0;i<20;i++ ) scanf("%d", ①); for(i=0;i<20;i++) { if(a[i]<0) ②; s+=a[i]; count++; } printf("s=%d\t count=%d\n",s,count); } 【3.14】下面程序的功能是删除字符串s中的空格。 #include main() { char *s="Beijing ligong daxue"; int i,j; for(i=j=0;s[i]!='\0';i++) if(s[i]!= ' ') ①; else ②; s[j]= '\0'; printf("%s",s); } 【3.15】下面程序的功能是将字符串s中所有的字符'c' 删除。请选择填空。 #include main( ) { char s[80]; int i,j; gets(s); for(i=j=0;s[i]!= '\0';i++ ) if(s[i]!= 'c') ①; s[j]= '\0'; puts(s); } 【3.16】下面程序的功能是输出两个字符串中对应相等的字符。请选择填空。 #include char x[]="programming"; char y[]="Fortran"; main() { int i=0; while(x[i]!= '\0' && y[i]!= '\0') if(x[i]==y[i]) printf("%c", ①); else i++; } 【3.17】下面程序的功能是将字符串s中的每个字符按升序的规则插到数组a中, 字符串a已排好序。 #include main() { char a[20]="cehiknqtw"; char s[]="fbla"; int i,k,j; for(k=0;s[k]!= '\0';k++ ) { j=0; while(s[k]>=a[j] && a[j]!= '\0' ) j++; for( ①) ②; a[j]=s[k]; } puts(a); } 【3.18】下面程序的功能是对键盘输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的ASCII码之差。例如:输入的两个字符串分别为"abcdefg"和"abceef",则输出为-1。 #include main() { char str1[100],str2[100],c; int i,s; printf("Enter string 1: ");gets(str1); printf("Enter string 2: ");gets(str2); i=0; while((str1[i] == str2[i] && str1[i]!= ①)) i++; s= ②; printf("%d\n", s); } 【3.19】下面的函数expand在将字符串s复制到字符 串t时,将其中的换行符和制表符转换为可见的转义字 符表示,即用'\n'表示换行符,用'\t'表示制表符。 expand(char s[],char t[]) { int i,j; for(i=j=0;s[i]!= '\0';i++ ) switch (s[i]) { case '\n': t[ ①] = ②; t[j++] = 'n'; break; case '\t': t[ ③] = ④; t[j++] = 't'; break; default: t[ ⑤] = s[i]; break; } t[j] = ⑥; } 【3.20】下面的函数index(char s[], char t[])检查字符 串s中是否包含字符串t,若包含,则返回t在s中的开 始位置(下标值),否则送回-1。 index(char s[], char t[]) { int i,j,k; for(i=0;s[i]!= '\0';i++ ) { for(j=i,k=0;①&& s[j]==t[k];j++,k++) ; if( ②) return (i); } return(-1); } n 【3.21】下面程序的功能是计算S= k! 。 k=0 long fun(int n) { int i; long s; for(i=1;i ①;i++) s*=i; return( ②); } main() { int k,n; long s; scanf("%d",&n); s= ③; for(k=0;k<=n;k++) s+= ④; printf("%ld\n",s); } 【3.22】下面程序的功能是显示具有n个元素的数组s 中的最大元素。 #define N 20 main() { int i,a[N]; for(i=0;i scanf("%d",&a[i]); printf("%d\n", ①); } fmax(int s[],int n) { int k,p; for(p=0,k=p;p if(s[p]>s[k]) ②; return(k); } 【3.23】下面程序的功能是由键盘输入n,求满足下述条件的x、y: nx和ny的末3位数字相同,且x≠y,x、y、n均为自然数,并使x+y为最小。 #include pow3(int n,int x) { int i, last; for(last=1,i=1;i<=x;i++ ) last= ①; return(last); } main() { int x,n,min,flag=1; scanf("%d", &n); for(min=2;flag;min++) for(x=1;x if( ②&& pow3(n,x)==pow3(n,min-x)) { printf("x=%d,y=%d\n", x, min-x ); ③; } } 【3.24】下面的程序是用递归算法求a的平方根。求平方根的迭代公式如下: #include double mysqrt( double a, double x0 ) { double x1, y; x1 = ①; if( fabs(x1-x0)>0.00001 ) y = mysqrt( ②); else y = x1;return( y ); } main() { double x; printf("Enter x: "); scanf("%lf", &x); printf("The sqrt of %lf=%lf\n", x, mysqrt( x, 1.0) ); } 【3.25】以下程序是计算学生的年龄。已知第一位最小 的学生年龄为10岁,其余学生的年龄一个比一个大2 岁,求第5个学生的年龄。 #include age( int n ) { int c; if( n==1 ) c=10; else c= ①; return(c); } main() { int n=5; printf("age:%d\n", ②); } 【3.26】下面的函数sum(int n)完成计算1~n的累加 和。 sum(int n) { if(n<=0) printf("data error\n"); if(n==1) ①; else ②; } 【3.27】下面的函数是一个求阶乘的递归调用函数。 facto(int n) { if( n == 1 ) ①; else return( ②); } 【3.28】组合问题,由组合的基本性质可知: (1) C(m,n)=C(n-m,n) (2) C(m,n+1)=C(m,n)+C(m-1,n) 公式(2)是一个递归公式,一直到满足C(1,n)=n为止。 当n<2*m时,可先用公式(1) 进行简化,填写程序中的 空白,使程序可以正确运行。 #include"stdio.h" main() { int m,n; printf("Input m,n="); scanf("%d%d", &m, &n); printf("The combination numbeers is %d\n", combin(m,n)); } combin( int m, int n) { int com; if( n<2*m ) m=n-m; if( m==0 ) com=1; else if(m==1) ①; else ②; return(com); } 【3.29】下列函数是求一个字符串str的长度。 ?????? int strlen( char *str ) ??????{ if( ①) return (0); ?? ???? else return ( ②); } 【3.30】用递归实现将输入小于32768的整数按逆序输 出。如输入12345,则输出54321。 #include"stdio.h" main() { int n; printf("Input n : "); scanf("%d", ①); r(n); printf("\n"); } r( int m ) { printf("%d", ②); m = ③; if( ④) ⑤; } 【3.31】输入n值,输出高度为n的等边三角形。例如当n=4时的图形如下: * *** ***** ******* #include void prt( char c, int n ) { if( n>0 ) { printf( "%c", c ); ①; } } main() { int i, n; scanf("%d", &n); for( i=1;i<=n;i++ ) { ②; ③; printf("\n"); } } 【3.32】下面的函数实现N层嵌套平方根的计算。double y(double x, int n) { if( n==0 ) return(0); else return ( sqrt(x+( ①)) );} 【3.33】函数revstr(s)将字符串s置逆,如输入的实参 s为字符串"abcde",则返回时s 为字符串"edcba"。 递归程序如下: revstr( char *s ) { char *p=s, c; while(*p) p++; ①; if(s { c=*s; *s=*p; ②; revstr(s+1); ③; } } 如下是由非递归实现的revstr(s)函数: revstr (s) char *s; { char *p=s, c; while( *p ) p++; ④; while( s { c=*s; ⑤= *p; *p-- = c; } } 【3.34】下面函数用递归调用的方法,将str中存放的 长度为n的字符串反转过来,例如原来是"ABCDE",反 序为"EDCBA"。 void invent(char *str,int n) { char t; t=*str;*str=*(str+n-1);*(str+n-1)=t;if( n>2 ) invent ( ①,n-2); else ②; } 【3.35】从键盘上输入10个整数,程序按降序完成从 大到小的排序。 #include int array[10]; sort( int *p, int *q ) { int *max, *s; if( ①) return; max=p;for( s=p+1;s<=q;s++) if( *s > *max ) ②;swap( ③); sort( ④);} swap( int *x, int *y ) { int temp; temp=*x; *x=*y; *y=temp; } main() { int i;printf("Enter data :\n");for( i=0;i<10; i++) scanf("%d", &array[i]);sort( ⑤); printf("Output:"); for( i=0;i<10;i++) printf("%d ", array[i]); } 【3.36】下面函数的功能是将一个整数存放到一个数组 中。存放时按逆序存放。例如:483存放成"384"。 #include void convert(char *a, int n) { int i; if((i=n/10) !=0 ) convert( ①, i ); *a = ②; } char str[10]= " "; main() { int number; scanf("%d", &number); convert( str, number ); puts(str); } 【3.37】下面程序的功能是实现数组元素中值的逆转。#include main() { int i,n=10,a[10]={1,2,3,4,5,6,7,8,9,10}; invert(a,n-1); for(i=0;i<10;i++) printf("%4d",a[i]); printf("\n"); } invert(int *s,int num) { int *t,k; t=s+num; while( ①) { k=*s; *s=*t; *t=k; ②; ③; } } 【3.38】下面程序通过指向整型的指针将数组a[3][4] 的内容按3行×4列的格式输出,请给printf( )填入适当的参数,使之通过指针p将数组元素按要求输出。#include int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}, *p=a;main() { int i,j; for(i=0;i<3;i++ ) { for(j=0;j<4;j++ ) printf("%4d ", ①);} } 【3.39】下面程序的功能是:从键盘上输入一行字符, 存入一个字符数组中,然后输出该字符串。 #include main ( ) { char str[81], *sptr; int i; for(i=0;i<80;i++ ) { str[i]=getchar( ); if(str[i]== '\n') break; } str[i]= ①; sptr=str; while( *sptr ) putchar( *sptr ②); } 【3.40】下面函数的功能是将字符变量的值插入已经按 ASCII码值从小到大排好序的字符串中。 void fun(char *w,char x,int *n) { int i,p=0; while(x>w[p]) ①; for(i=*n;i>=p;i--) ②; w[p]=x; ++*n; } 【3.41】下面程序的功能是从键盘上输入两个字符串, 对两个字符串分别排序;然后将它们合并,合并后的字 符串按ASCII码值从小到大排序,并删去相同的字符。 #include strmerge(a,b,c) /* 将已排好序的字符串a、b合并 到c */ char *a,*b,*c; { char t,*w; w=c; while( *a!= '\0' ①*b!='\0' ) { t= ②?*a++:*b<*a ? *b++ : ( ③);/* 将*a、*b的 小者存入t */ if( *w ④'\0' ) *w=t; else if( t ⑤*w) *++w=t;/* 将与*w不相同的t存入 w */ } while( *a != '\0' ) /* 以下将a或b中剩下的字符存入 w */ if( *a != *w ) *++w=*a++; else a++; while( *b != '\0') if( *b != *w ) *++w=*b++; else b++; *++w = ⑥; } strsort( char *s ) /* 将字符串s中的字符排序*/ { int i,j,n; char t,*w; ⑦; for( n=0;*w != '\0';⑧) w++; for( i=0;i for( j=i+1;j if( s[i]>s[j] ) { ⑨} } main( ) { char s1[100],s2[100],s3[200]; printf("\nPlease Input First String:"); scanf("%s",s1); printf("\nPlease Input Second String:"); scanf("%s",s2); strsort(s1); strsort(s2); ⑩= '\0'; strmerge(s1,s2,s3); printf("\nResult:%s",s3); } 【3.42】已知某数列前两项为2和3,其后继项根据前面最后两项的乘积,按下列规则生成: ①若乘积为一位数,则该乘积即为数列的后继项; ②若乘积为二位数,则该乘积的十位上的数字和个位上的数字依次作为数列的两个后继项。 下面的程序输出该数列的前N项及它们的和,其中,函数sum(n,pa) 返回数列的前N项和,并将生成的前N 项存入首指针为pa的数组中,程序中规定输入的N值必须大于2,且不超过给定的常数值MAXNUM。 例如:若输入N的值为10,则程序输出如下内容:sum(10)=44 2 3 6 1 8 8 6 4 2 4 #include "stdio.h" #define MAXNUM 100 int sum(n, pa) int n, *pa; { int count, total, temp; *pa = 2; ①=3; total=5; count=2; while( count++ { temp = *(pa-1) * *pa; if( temp<10 ) { total += temp; *(++pa) = temp; } else { ②= temp/10; total += *pa; if( count { count ++;pa++; ③= temp%10; total += *pa;} } } ④; } main() { int n, *p, *q, num[MAXNUM]; do { printf("Input N=? (2 scanf("%d", &n); }while( ⑤); printf("\nsum(%d)=%d\n", n, sum(n, num)); for( p=num, q = ⑥;p printf("%4d", *p); printf("\n"); } 【3.43】下面程序的功能是输入学生的姓名和成绩,然 后输出。 #include struct stuinf { char name[20];/* 学生姓名*/ int score;/* 学生成绩*/ } stu, *p; main ( ) { p=&stu; printf("Enter name:"); gets( ①); printf("Enter score: "); scanf("%d",②); printf("Output: %s, %d\n",③,④); } 【3.44】下面程序的功能是按学生的姓名查询其成绩排 名和平均成绩。查询时可连续进行,直到输入0时才结 束。 ?? #include #include #define NUM 4 ? struct student ? { int rank; char *name; float score; ????????}; ???????? ①stu[ ]={ 3,"liming",89.3, ???????? 4,"zhanghua",78.2, ???????? 1,"anli",95.1, ???????? 2,"wangqi",90.6 }; ????????main() ????????{ char str[10]; ???????? int i; ???????? do { printf("Enter a name"); ???????? scanf("%s",str); ???????? for( i=0;i ???????? if( ②) ???????? { printf("Name :%8s\n",stu[i].name); ???????? printf("Rank :%3d\n",stu[i].rank); ???????? printf("Average :%5.1f\n",stu[i].score); ???????? ③; ???????? } ???????? if( i>=NUM ) printf("Not found\n"); ???????? }while( strcmp(str,"0")!=0 ); ????????} 【3.45】下面程序的功能是从终 端上输入5个人的年龄、性别和 姓名,然后输出。 #include "stdio.h" struct man { char name[20]; unsigned age; char sex[7]; }; main ( ) { struct man person[5]; data_in(person,5); data_out(person,5); } data_in(struct man *p, int n ) { struct man *q = ①; for( ;p { printf( "age:sex:name" ); scanf("%u%s", &p->age, p->sex); ②; } } data_out( struct man *p, int n ) { struct man *q = __③__; for( ;p printf("%s;%u;%s\n", p->name, p->age, p->sex); } 【3.46】输入N个整数,储存输入的数及对应的序号,并将输入的数按从小到大的顺序进行排列。要求:当两个整数相等时,整数的排列顺序由输入的先后次序决定。例如:输入的第3个整数为5,第7个整数也为5,则将先输入的整数5排在后输入的整数5的前面。程序如下: #include "stdio.h" #define N 10 struct { int no; int num; } array[N]; main( ) { int i,j,num; for( i=0;i { printf("enter No. %d:",i); scanf("%d",&num); for( ①;j>=0&&array[j].num ②num;③) array[j+1]=array[j]; array[ ④].num=num; array[ ⑤].no=i; } for( i=0;i printf("%d=%d,%d\n",i,array[i].num, array[i].no); } 【3.47】以下程序的功能是:读入一行字符(如:a、...y、 z),按输入时的逆序建立一个链接式的结点序列,即先输 入的位于链表尾(如下图),然后再按输入的相反顺序 输出,并释放全部结点。 #include main( ) { struct node { char info; struct node *link; } *top,*p; char c; top=NULL; while((c= getchar( )) ①) { p=(struct node *)malloc(sizeof(struct node)); p->info=c; p->link=top; top=p; } while( top ) { ②; top=top->link; putchar(p->info); free(p); } } 【3.48】下面函数将指针p2所指向的线性链表,串接 到p1所指向的链表的末端。假定p1所指向的链表非空。 #define NULL 0 struct link { float a; struct link *next; }; concatenate ( p1,p2 ) struct list *p1,*p2; { if( p1->next==NULL ) p1->next=p2; else concatenate( ①,p2); } 【3.49】下面程序的功能是从键盘输入一个字符串,然 后反序输出输入的字符串。 #include struct node { char data; struct node *link; }*head; main() { char ch; struct node *p; head = NULL; while(( ch=getchar())!='\n' ) { p = (struct node *)malloc(sizeof(struct node));p->data = ch; p->link = ①; head = ②; } ③; while( p!=NULL ) { printf("%c ", p->data); p = p->link; } } 【3.50】下面程序的功能是从键盘上顺序输入整数,直到输入的整数小于0时才停止输入。然后反序输出这些整数。 #include struct data { int x; struct data *link; }*p; input() { int num; struct data *q; printf("Enter data:"); scanf("%d", &num); if( num<0 ) ①; q = ②; q->x = num; q->link = p; p=q; ③; } main() { printf("Enter data until data<0:\n"); p=NULL;input(); printf("Output:"); while( ④) { printf("%d\n", p->x); ⑤; } } 【3.51】下面函数的功能是创建一个带有头结点的链表, 将头结点返回给主调函数。链表用于储存学生的学号和 成绩。新产生的结点总是位于链表的尾部。 struct student { long num; int score; struct student *next; }; struct student *creat() { struct student *head=NULL,*tail; long num;int a; tail= ①malloc(LEN); do { scanf("%ld,%d",&num,&a); if(num!=0) { if(head==NULL) head=tail; else ②; tail->num=num;tail->score=a; tail->next=(struct student *)malloc(LEN); } else tail->next=NULL; }while(num!=0); return( ③); } 【3.52】下面create函数的功能是建立一个带头结点的 单向链表,新产生的结点总是插入在链表的末尾。单向 链表的头指针作为函数值返回。 #include #define LEN sizeof(struct student) struct student { long num; int score; struct student *next; }; struct student *creat() { struct student *head=NULL,*tail; long num; int a; tail=( ①)malloc(LEN); do { scanf("%ld,%d",&num,&a); if(num!=0) { if(head==NULL) head=tail; else tail=tail->next; tail->num=num; tail->score=a; tail->next=( ②)malloc(LEN); } else tail->next=NULL; }while(num!=0); ③; } 【3.53】下面程序的功能是统计文件中的字符的个数。 #include main() { long num=0; ①*fp; if((fp=fopen("fname.dat", "r"))==NULL) { printf("Can't open the file! "); exit(0); } while( ②) { fgetc(fp); num++; } printf("num=%d\n",num); fclose(fp); } 【3.54】下面程序的功能是把从键盘输入的文件(用@ 作为文件结束标志)复制到一个名为second.txt的新文件中。 #include FILE *fp; main() { char ch; if((fp=fopen( ①))==NULL) exit(0); while((ch=getchar())!='@') fputc(ch,fp); ②; } 【3.55】下面程序的功能是将磁盘上的一个文件复制到另一个文件中,两个文件名在命令行中给出(假定给定的文件名无误)。 #include main(int argc,char *argv[]) { FILE &f1,*f2; if(argc< ①) { printf("The command line error! "); exit(0); } f1=fopen(argv[1], "r"); f2=fopen(arhv[2], "w"); while( ②) fputs(fgetc(f1), ③); ④;⑤; } 【3.56】下面程序的功能是根据命令行参数分别实现一 个正整数的累加或阶乘。例如:如果可执行文件的文件 名是sm,则执行该程序时输入:"sm + 10",可以实现 10的累加;输入:"sm - 10",可以实现求10的阶乘。 #include #include main (int argc,char *argv[]) { int n; void sum(),mult(); void (*funcp)(); n=atoi(argv[2]); if(argc!=3 || n<=0) dispform( ); switch ( ①) { case '+': funcp=sum; break; case '-': funcp=mult; break; default: dispform( ); } ②; } void sum(int m) { int i,s=0; for(i=1;i ③; printf("sum=%d\n",s); } void mult(int m) { long int i, s=1; for(i=1;i<=m;i++ ) s *= i; printf("mult= %ld\n";s); } dispform( ) { printf ("usage:sm n(+/!) (n>0)\n"); exit (0); } 【3.57】下面程序的功能是键盘上输入一个字符串,把 该字符串中的小写字母转换为大写字母,输出到文件 test.txt中,然后从该文件读出字符串并显示出来。 #include main() { char str[100]; int i=0; FILE *fp; if((fp=fopen("test.txt", ①))==NULL) { printf("Can't open the file.\n"); exit(0); } printf("Input a string:\n"); gets(str); while(str[i]) { if(str[i]>= 'a'&&str[i]<= 'z') str[i]= ②; fputc(str[i],fp); i++; } fclose(fp); fp=fopen("test.txt", ③); fgets(str,strlen(str)+1,fp); printf("%s\n",str); fclose(fp); } 【3.58】下面程序的功能是将从终端上读入的10个整 数以二进制方式写入名为"bi.dat"的新文件中。 #include FILE *fp; main() { int i, j; if(( fp=fopen( ①, "wb" )) == NULL ) exit (0); for( i=0;i<10;i++ ) { scanf("%d", &j ); fwrite( ②, sizeof(int), 1, ③); } fclose( fp); } 【3.59】以字符流形式读入一个文件,从文件中检索出六种C语言的关键字,并统计、输出每种关键字在文件中出现的次数。本程序中规定:单词是一个以空格或'\t'、'\n'结束的字符串。 #include #include FILE *cp; char fname[20], buf[100]; int num; struct key { char word[10]; int count; }keyword[]={ "if", 0, "char", 0, "int", 0, "else", 0, "while", 0, "return", 0}; char *getword (FILE *fp) { int i=0; char c; while((c=getc(fp)) != EOF && (c==' '||c=='\t'||c=='\n')) ; if( c==EOF ) return (NULL) ; else buf[i++]=c; while((c = ①&& c!= ' ' && c!= '\t' && c!= '\n' ) buf[i++] = c; buf[i]= '\0';return(buf); } lookup(char *p) { int i; char *q, *s; for(i=0;i { q = ②; s=p; while( *s && (*s==*q) ) { ③ } if( ④) { keyword[i].count++; break; } } return; } main() { int i; char *word; printf("Input file name:"); scanf("%s", fname); if((cp=fopen(fname, "r")) ==NULL ) { printf("File open error: %s\n", fname); exit(0); } num = sizeof(keyword) / sizeof(struct key); while( ⑤) lookup(word); fclose(cp); for(i=0;i printf("keyword:%-20scount=%d\n",keyword[i].w ord,keyword[i].count); } 【3.60】下面程序的功能是从键盘接受姓名(例如:输 入"ZHANG SAN"),在文件"try.dat"中查找,若文件 中已经存入了刚输入的姓名,则显示提示信息;若文件 中没有刚输入的姓名,则将该姓名存入文件。要求:⑴ 若磁盘文件"try.dat",已存在,则要保留文件中原来的 信息;若文件"try.dat"不存在,则在磁盘上建立一个新 文件;⑵当输入的姓名为空时(长度为0),结束程序。 #include main() { FILE *fp; int flag; char name[30], data[30]; if((fp=fopen("try.dat", ①))==NULL ) { printf("Open file error\n"); exit(0); } do { printf("Enter name:"); gets(name); if( strlen(name)==0 ) break; strcat(name, "\n"); ②; flag=1; while( flag && (fgets(data, 30, fp) ③) ) if( strcmp(data, name) == 0 ) ④; if( flag ) fputs(name, fp); else printf("\tData enter error !\n"); } while( ⑤); fclose(fp); } C语言程序设计 一、选择题(共40分,每小题2分) 1、以下叙述不正确的是(D) A、一个C源程序可由一个或多个函数组成 B、一个C源程序必须包含一个main函数 C、C程序的基本组成单位是函数 D、在C程序中,注释说明只能位于一条语句的后面 2、下列四个选项中,是不合法的用户标识符的选项是(B) A、abc B、12AC C、sun D、A 3、设有语句inta=4;则执行了语句a+=a-=a*a后,变量a的值是(A) A、-24 B、0 C、4 D、16 4、下列运算符中优先级最高的是(B) A、< B、+ C、&& D、== 5、在C语言中,运算对象必须是整型数的运算符是(A) A、% B、/ C、%和/ D、+ 6、以下关于运算符的优先顺序的描述正确的是(C) A、关系运算符<算术运算符<赋值运算符<逻辑与运算符 B、逻辑与运算符<关系运算符<算术运算符<赋值运算符 C、赋值运算符<逻辑与运算符<关系运算符<算术运算符 D、算术运算符<关系运算符<赋值运算符<逻辑与运算符 7、在C语言中,如果下面的变量都是int类型,则输出的结果是(C) sum=pad=5;pAd=sum++,pAd++,++pAd; printf(“%d\n”,pad); A、7 B、6 C、5 D、4 8、x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是(B) A、INPUTx、y、z; B、scanf(“%d%d%d”,&x,&y,&z); C、scanf(“%d%d%d”,x,y,z); D、read(“%d%d%d”,&x,&y,&z); 9、假定从键盘输入23456<回车>,下面程序的输出结果是:(C)voidmain() {intm,n; scanf(“%2d%3d”,&m,&n); printf(“m=%dn=%d\n”,m,n); } A、m=23n=45 B、m=234n=56 C、m=23n=456 D、语句有错误 10、若运行时,给变量x输入12,则以下程序的运行结果是(A)main() {intx,y; scanf(“%d”,&x); y=x>12?x+10:x-12; printf(“%d\n”,y); } A、0B、22C、12D、10 11、C语言中while和do-while循环的主要区别(A) A、do-while的循环体至少执行一次 B、while的循环控制条件比do-while的循环控制条件严格 C、do-while允许从外部转到循环体内 D、do-while的循环体不能是复合语句 12、以下对二维数组的正确说明的语句是(C) A、inta[3][] B、floata(3,4) C、doublea[3][4] D、floata(3)(4) 13、以下程序的输出结果是(C) main() C语言常见复习题及参考答案 一、选择题 1.下述标识符中,()是合法的用户标识符。 A.A#C B.getch C.void D.ab* 2.在C语言中,字符型数据在内存中是以()形式存放的。 A.原码 B.BCD码 C.反码 D.ASCII码 3.以下选项中不合法的用户标识符是()。 A.abc.c B.file C.Main D.PRONTF 4.以下选项中不合法的用户标识符是()。 A.123 B.printf C.Anbsp; D.Dim 5.可以在C语言程序中用做用户标识符的一组标识符是()。 A.void B.as-b3 C.for D.2c define -123 -abc Do WORD If cas SIG 6.在以下各组标识符中,合法的用户标识符是(1)、(2)、(3)。 (1)A.001 B.table_1 C.0_t D.k% Int t*.1 W10 point (2)A.Fast_ B.void C.pbl D. Fast+Big abs fabs beep (3)A.xy_ B.longdouble C.*p D.CHAR 变量1 signed history Float 7.()是构成C语言的基本单位。 A.函数 B.过程 C.子程序 D.子例程 8.若有说明:char s1='\067';char s2="1";char s3='1';则s1中(1),s2中(2),s3中(3)。 (1).A.包含3个字符 B.包含2个字符 C.包含1个字符 D.无定值,说明不合法 (2).A.包含1个字符 B.包含2个字符 C.包含3个字符 D.无定值,说明不合法 (3).A.包含1个字符 B.包含2个字符 C.包含3个字符 D.无定值,说明不合法 9.若x为int型变量,则执行以下语句后,x的值为 x=6; x+=x-=x*x A.36 B.-60 C.60 D.-24 10.在C语言中,char 型数据在内存中是以()形式存储的。 A.原码 B.补码 C.ASCII码 D.反码 11.以下运算符中优先级最低的算符为(),优先级最高的为()。 A.&& B.& C.|= D.|| E.?: F.!= 12.若有运算符>、*=、<<、%、sizeof,则它们按优先级(由低至高)的正确排列顺序为 A.*= << > % sizeof B.<< *= > % sizeof C.*= > << sizeof % D.*= > << % sizeof 13.若有以下类型说明语句 char w; int x; float y; double z; 则表达式w*x+z-y 的结果是()类型。 A.float B.char C.int D.double 14.若w,x,y,z 均为int 型变量,则执行下面的语句后, w=(1), x=(2), y=(3), z=(4)。 w=5; x=4; y=w++*w++*w++; z=--x*=--x*--x; 程序填空题 导读:在程序填空题中,已经给出了程序的主干,读者首先要理解程序的思路,再选择正确的内容填入空白处,使程序完成既定的功能。这类习题的设计就是要引导读者逐步掌握编程的方法。本节习题的难度适中,可能有些典型的程序在课堂上已经有所接触,读者一定要独立完成它,这样就可以逐步提高自己的编程能力。在程序设计语言学习的中期,读者对程序设计已经有了初步的了解,而自己编写程序又不知从何处入手,此时解答此类题目可以避免盲目性,从而提高学习的效率。 【】下面程序的功能是不用第三个变量,实现两个数的对调操作。#include <> main() { int a,b; scanf("%d%d",&a,&b); printf("a=%d,b=%d\n",a,b); a= ①; b= ②; a= ③; printf("a=%d,b=%d\n",a,b); } 【】下面程序的功能是根据近似公式:π2/6≈ 1/12+1/22+1/32+ …… +1/n2,求π值。 #include <> double pi(long n) { double s=; long i; for(i=1;i<=n;i++) s=s+ ①; return( ②); } 【】下面的程序的功能是求一维数组中的最小元素。 findmin(int *s,int t,int *k) { int p; for(p=0,*k=p;p 二、填空题 1、C语言中对文件读写之前必须先打开文件,文件的打开是通过调用________函数来实现。 答案: 1:fopen#fopen()#fopen() 知识点:知识点/基本理论/C11文件/C11_2文件函数 2、C语言中文件操作结束节后,必须关闭文件。而且关闭文件是通过调用__________函数来实现。 答案: 1:fclose#fclose()#fclose() 知识点:知识点/基本理论/C11文件/C11_2文件函数 3、字符串函数________用于从指定的磁盘文件中读出一个字符串。 答案: 1:fgets#fgets() 知识点:知识点/基本理论/C11文件/C11_2文件函数 4、字符串函数___________用于把一个字符串写入指定的磁盘文件中。 答案: 1:fputs#fputs() 知识点:知识点/基本理论/C11文件/C11_2文件函数 5、字符读写函数____________是用于从磁盘文件中读出一个字符。 答案: 1:fgetc#fgetc()#getc#getc() 知识点:知识点/基本理论/C11文件/C11_2文件函数 6、字符读写函数____________是用于把一个字符写入磁盘文件。 答案: 1:fputc#fputc()#putc#putc() 知识点:知识点/基本理论/C11文件/C11_2文件函数 7、共用体类型变量的定义关键字是________。 答案: 1:union 知识点:知识点/基本理论/C10共用体与枚举类型 8、定义枚举类型时采用的关键字是__________。 答案: 1:enum 知识点:知识点/基本理论/C10共用体与枚举类型 9、在C语言中,从参数的形式看,函数可以分为两类:无参函数和____________函数。 答案: 1:有参 知识点:知识点/基本理论/C6函数与编译预处理/C62函数分类、调用及返回值T 10、在C语言中,函数的返回值是由___________语句传递的。 答案: 1:return#return() 知识点:知识点/基本理论/C6函数与编译预处理/C62函数分类、调用及返回值T 11、在C语言中,按函数在程序中出现的位置可分为以下三种调用方式:函数语句、函数表达式和函数 __________。 答案: 1:参数 知识点:知识点/基本理论/C6函数与编译预处理/C62函数分类、调用及返回值T 12、在C语言中,在调用一个函数的过程中又出现__________或间接地调用该函数本身,这一现象称为函数的递归调用。 答案: 1:直接 知识点:知识点/基本理论/C6函数与编译预处理/C62函数分类、调用及返回值T 13、在C语言中,若确实不要求返回函数值,则应将函数定义为___________类型。 答案: 1:void 知识点:知识点/基本理论/C6函数与编译预处理/C62函数分类、调用及返回值T 14、在C语言中,假使X为基本整型变量,如果我们采用printf("格式控制",X)格式输出X,那么"格式控制"具体表示为"__"。 第一章基础知识 一.填空 1. 每个C程序都必须有且仅有一个________ 函数。 2. C语言程序开发到执行通常要经过6个阶段即编辑、预处理、________、链接、加载和执行。 3. 软件是程序,以及______、使用和维护所需要的所有文档。 4. 国标中规定:“计算机程序是按照具体要求产生的适合于计算机处理的_________”。 5. 程序设计语言按照书写形式,以及思维方式的不同一般分为低级语言和________两大类。 6. C语言是由________组成的。 7. C语言的函数可分为主函数main、标准库函数和_________。 8. 一个函数是由两部分组成的,即:________和函数体。 9. 编译是将C语言所编写的源程序________成机器代码,也称为建立目标代码程序的过程。 程序是由某种程序设计语言编制出来,体现了编程者的控制思想和对计算机执行操作 的要求。不同的任务功能,就会需求不同的软件程序,如:控制计算机本身软硬件协调工作,并使其设备充分发挥效力,方便用户使用的系统软件程序,称为操作系统;而为办公自动化(OA)、管理信息系统(MIS)、人工智能、电子商务、网络互联等等应用而开发的软件程序,统称为_________。 11. 机器语言是以__________形式表示的机器基本指令的集合,是计算机系统唯一不需要翻译可以直接识别和执行的程序设计语言。 12. 与机器语言相比,使用汇编语言来编写程序可以用_______来表示指令的操作码和操作对 象,也可以用标号和符号来代替地址、常量和变量。 13. 在编译程序之前,凡以____开头的代码行都先由预处理程序预处理。 14. C程序的执行均是由执行_________开始。 15. 函数体即为包含在{}内的部分。它分为________和为完成功能任务由若干个C 语句 组成的执行部分。 16. C语言程序中一条简单语句是以________字符作为结束符的。 17. C语言是结构化、________的程序设计语言。 C语言程序设计 期末考试试题及其答案 一、单项选择题(本大题共20题,每题2 分,共40分) 1、以下不是C语言的特点的是( ) A、C语言简洁、紧凑 B、能够编制出功能复杂的程序 C、C语言可以直接对硬件进行操作 D、C语言移植性好 2、以下不正确的C语言标识符是( ) A、ABC B、abc C、a_bc D、ab.c 3、一个C语言程序是由( ) A、一个主程序和若干子程序组成 B、函数组成 C、若干过程组成 D、若干子程序组成 4、一个算法应该具有“确定性”等5个特性,对另外4个特性的描述中错误的是( ) A、有零个或多个输入 B、有零个或多个输出 C、有穷性 D、可行性 5、设变量a是整型,f是实型,i是双精度型,则表达式10+‘a’+i*f值的数据类型为( ) A、int B、float C、double D、不确定 6、在C语言中,char型数据在内存中的存储形式是( ) A、补码 B、反码 C、源码 D、ASCII码 7、有如下程序,输入数据:12345M678<cR>后( #include 指针 一单项选择题(每题2分,共40分) 1 以下叙述中错误的是_B__。 A 在程序中凡是以“#”开始的语句行都是预处理命令行 B 预处理命令行的最后不能以分号表示结束 C #define MAX是合法的宏定义命令行 D C程序对预处理命令行的处理是在程序执行的过程中进行的 2 若程序中有宏定义行:#define N 100 ,则以下叙述中正确的是__B_。 A 宏定义行中定义了标识符N的值为整数100 B 在编译程序对C源程序进行预处理时用100替换标识符N C 对C源程序进行编译时用100替换标识符N D 在运行时用100替换标识符 3 若有如下宏定义: #define N 2 #define y(n) ((N+1)*n) 则执行下列语句:z=4*(N+y(5));后的结果是_B__。 A 语句有错误 B z值为68 C z值为60 D z值为180 4 以下程序运行后的输出结果是_A__。 #define F(X,Y) (X)*(Y) main() { int a=3,b=4; printf("%d\n",F(a++,b++)); } A 12 B 15 C 16 D 20 5 以下程序运行后的输出结果是_C__。 #define f(x) (x*x) main() { int i1,i2; i1=f(8)/f(4); i2=f(4+4)/f(2+2); printf("%d,%d\n",i1,i2); } A 64,28 B 4,4 C 4,3 D 64,64 6 若已定义a为int型变量,则__D_是对指针变量p的正确说明和初始化。 A int p=&a; B int *p=a; C int *p=*a; D int *p=&a; 7 已知下列说明语句: static int a[]={2,4,6,8} static int *p[]={a,a+1,a+2,a+3}; int **q; q=p; 则表达式**(q+2)的值是_A__。 A 6 B 2 C 4 D 8 8 下面是一个初始化指针的语句:int *px=&a;,其中指针变量的名字应该__C_。 A *px B a C px D &a 9 若指针px为空指针,则_B__。。 1、在考生目录下,给定程序FILL1、C的功能就是: 计算正整数num的各位上的数字之积。 例如,若输入:252,则输出应该就是:20。 若输入:202,则输出应该就是:0。 程序有两个空(1)、(2)需要补充完整。并将程序调试出所需的结果。 注意:不要随意改动程序,不得增行或删行,也不得更 改程序的结构! #include 面向对象程序设计期末综合练习二(填空题) 填空题 1.C++ 语言是在 _________语言的基础上发展起来的。 2.C++ 语言的编译单位是扩展名为 __________的 __________文件。 3.行尾使用注释的开始标记符为 __________ 。 4.多行注释的开始标记符和结束标记符分别为__________ 和 __________。 5.用于输出表达式值的标准输出流对象是_________。 6.用于从键盘上为变量输入值的标准输入流对象是________。 7.一个完整程序中必须有一个名为 ________的函数。 8.一个函数的函数体就是一条 _________语句。 9.当执行 cin 语句时,从键盘上输入每个数据后必须接着输入一个________符,然后才能继续输入下一个数据。 10.在 C++程序中包含一个头文件或程序文件的预编译命令为__________。 11.程序中的预处理命令是指以______字符开头的命令。 12.一条表达式语句必须以 ______ 作为结束符。 13.在#include 命令中所包含的头文件,可以是系统定义的头文件,也可以是 ________定义的头文件。 14.使用 #include 命令可以包含一个头文件,也可以包含一个______文件。 15.一个函数定义由 ________和 ________两部分组成。 16.若一个函数的定义处于调用它的函数之前,则在程序开始可以省去该函数的______语句。 17. C++头文件和源程序文件的扩展名分别为______和 ______。 18.程序文件的编译错误分为 ________和 ________两类。 19.当使用 _______保留字作为函数类型时,该函数不返回任何值。 20.当函数参数表用 ______保留字表示时,则表示该参数表为空。 21 .从一条函数原型语句“int fun1(void);”可知,该函数的返回类型为______,该函数带有______ 个参数。 22.当执行 cout 语句输出 endl 数据项时,将使 C++显示输出屏幕上的光标从当前位置移动到 ________的开始位置。 23.假定 x=5,y=6,则表达式 x++*++y 的值为 __________ 。 24.假定 x=5,y=6,则表达式x--*--y的值为__________。 25.假定 x=5,y=6,则执行表达式 y*=x++ 计算后, x 和 y 的值分别为 __________和 __________ 。 26.假定 x=5,y=6,则执行表达式 y+=x-- 计算后, x 和 y 的值分别为 __________和 __________ 。 27.C++ 常数 0x145 对应的十进制值为 __________。 28.C++ 常数 0345 对应的十进制值为 __________ 。 29.十进制常数 245 对应的十六进制的 C++表示为 __________。 30.十进制常数 245 对应的八进制的 C++表示为 __________ 。 31.signed char类型的值域范围是________至__________之间的整数。 32.int和float类型的数据分别占用_________和__________个字节。 33.float和double类型的数据分别占用_________和________个字节。 34.bool和char类型的数据分别占用_________和________个字节。 35.unsigned short int和int类型的长度分别为_________和________。 1 给定程序的功能是:求二分之一的圆面积,函数通过形参得到圆的半径,函数返回二分之一的圆面积(注:圆面积公式为:S r π=2,在程序中定义的变量名要与公式的变量相同)。 例如,输入圆的半径值:19.527,输出为:s=598.949991。 2 请补充main 函数,该函数的功能是:计算两个自然数n 和m(m<10000)之间所有数的和(n 和m 从键盘输入)。 例如,当n=1,m=100时 ,sum=5050; 当 n=100,m=1000 时,sum=495550。 3 给定程序的功能是:判断字符ch 是否与串str 中的某个字符相同,若相同什么也不做,若不同则插在串的最后。 4 请补充函数fun,该函数的功能是:把ASCII 码为偶数的字符从字符串str 中删除,结果仍然保存在字符串str 中,字符串str 从键盘输入,其长度作为参数传入函数fun 。 例如,输入"abcdef",输出"ace"。 5 请补充函数fun,该函数的功能是:判断某一个年份是否为闰年。 例如,1900年不是闰年,2004是闰年。 6 请补充函数fun,函数fun 的功能是求n 的阶乘。 7 请补充函数fun,该函数的功能是:整除x 且是偶数的数,把这些数保存在数组bb 中,并按从大到小的顺序输出。 例如当x=20时,依次输出:20 10 4 2。 8 请补充函数fun,它的功能是:计算并输出n(包括n)以内所有能被3或7整除的自然数的倒数之和。 例如,在主函数中从键盘给n 输入30后,输出为:s=1.226323。 9 请补充main 函数,该函数的功能是:计算每个学生成绩的平均分,并把结果保存在数组 bb 中 。 例 如 ,当 score[N][M]={{83.5,82,86,65,67},{80, 91.5 ,84,99,95},{90.5,95,86,95,97}}时,三个学生的平均分为76.7,89.9,92.7。 10 请补充函数fun(char*s),该函数的功能是:把字符串中的内容逆置。 例如,字符串中原有的字符串为abcde,则调用该函数后,串中的内容为edcba 。 11 请补充main 函数,该函数的功能是:输出一个N N ?矩阵,要求非周边元素赋值0,周边元素赋值1。 12 请补充main 函数,该函数的功能是:从键盘输入一个字符串及一个指定字符,然后把这个字符及其后面的所有字符全部删除。结果仍然保存在原串中。 例如,输入"abcdef",指定字符为"e",则输出"abcd"。 13 请补充main 函数,该函数的功能是:从键盘输入3个整数,然后找出最大的数并输出。 例如,输入12,45,43,最大值为45。 14 函数fun 的功能是:从三个形参a 、b 、c 中找出中间的数,作为函数值返回。 例如,当a=3,b=5,c=4时,中间的数为4。 15 函数fun 的功能是:统计长整数n 的各位上出现数字1、2、3的次数,并用外部(全局)变量c1、c2、c3返回主函数。 例如,当n=123114350时,结果应该为:c1=3 c2=1 c3=2。 16 请补充main 函数,该函数的功能是:打印出1 1000中满足个位数字的立方等于其本身所有数。 本题的结果为:1 64 125 216 729 17 请补充main 函数,该函数的功能是:打印出满足个位的数字、十位上的数字和百位上的数字都相等的所有三位数。 本题的结果为: 111 222 333 444 555 666 777 888 999。 18 请补充main 函数。该函数的功能是:求1 100(不包括100)以内所有素数的平均值。 程序运行后的结果为42.40。 19 请补充函数fun,该函数的功能是:求一维数组x[N]的平均值,并对所得结果进行四舍五入(保留两位小数)。 例如,当x[10]={15.6,19.9,16.7,15.2,18.3,12.1,15.5,11.0,10.0,16.0},结果为:avg=15.030000。 20 请补充函数fun,该函数的功能是:把一个整数转换成字符串,并倒序保存在字符数组str 中。例如,当 n=13572468 时,str="86427531"。 21 请补充函数fun,该函数的功能是:将字符串tt 中的大写字母都改为对应的小写字母,其他字符不变。例如,若输入"Are you come from Sichuan?",则输出"are you come from sichuan?"。 22 请补充main 函数,该函数的功能是:从键盘输入一个长整数,如果这个数是负数,则取它的绝对值,并显示出来。例如,输入:-3847652,结果为:3847652。 23 请补充main 函数,该函数的功能是:从键 盘输入若干字符放到一个字符数组中,当按回车键时结束输入,最后输出这个字符数组中的所有字符。 24 请补充main 函数,该函数的功能是求方程ax 2+bx+c=0的两个实数根。方程的系数a 、b 、c 从键盘输入,如果判别式(disc=b 2-4ac)小于0,则要求重新输入a 、b 、c 的值。 例如,当a=1,b=2,c=1时,方程的两个根分别是x1=-1.00,x2=-1.00。 25 请补充main 函数,该函数的功能是:从键盘输入两个字符串并分别保存在字符数组str1和str2中,用字符串str2替换字符串str1前面的所有字符。注意:str2的长度不大于str1,否则需要重新输入。 例如,如果输入str1="abced",str2="fk",则输出"fkced"。 26 给定程序中,函数fun 的功能是:将形参指针所指结构体数组中的三个元素按num 成员进行升序排列。 27 给定程序中,函数fun 的功能是:把形参s 所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动 (注:字符串的长度不小于2)。 例如,形参s 所指的字符串为:abcdefgh,执行结果为:ahcbedgf 。 28 给定程序的功能是:分别统计字符串中大写字母和小写字母的个数。 例如,给字符串ss 输入:AaaaBBbl23CCccccd,则输出结果应为:upper=5,lower=9。 29 请补充main 函数,该函数的功能是:先以只写方式打开文件"out29.dat",再把字符串str 中的字符保存到这个磁盘文件中。 30 请补充main 函数,该函数的功能是:把文本文件B 中的内容追加到文本文件A 的内容之后。 例如,文件B 的内容为"I m ten.",文件A 的内容为"I m a student!",追加之后文件A 的内容为"I m a student ! I m ten."。 31 请补充main 函数,该函数的功能是:求n!。 例如,7!=5040。 32 请补允函数fun,该函数的功能是:计算并输出下列多项式的值。 111 S =1+ + ++ 1+2 1+2+3 1+2+3+ 例如,若主函数从键盘给n 输入50后,则输出为S=1.960784。 33 1. 一条简单语句是以________字符作为结束符的,一条复合语句是分别以 ________字符和________字符作为开始符和结束符的。 2. 任何一个C++程序至少且只能包含一个________函数,且程序总是从这个函数开始执行,不论这个函数的位置如何。一个函数定义由________和________两部分组成。 3. C++头文件和源程序文件的扩展名分别为________和________。 4. cout与操作符_______配合使用才能显示输出,cin与操作符_____配合使用才能实现输入。 5. 数据类型int,char,bool,float,double, int * 等的类型长度分别为________、________、________、________、________和________。 6. 数值常量46、0173和0x62对应的十进制值分别为________、________和________。 7. 字符串”It\’s\40a\40C++programe!”中包含有__________个字符。 8. 若x=5,y=10,则计算y*=++x表达式后,x和y的值分别为________和 ________。 9. 若x=25,则计算y=x--表达式后,x和y的值分别为________和________。 10. 假定x和ch分别为int型和char型,则sizeof(x)和sizeof(ch)的值分别为________和________。 11. 假定x=64,y=88,则x<<2和y>>2的值分别为________和________。 12. 假定x是一个逻辑量,则x&&true的值与________的值相同,x||false的值也与________的值相同。 13. 假定x是一个逻辑量,则x&&!x和x||!x的值分别为________和________。 14. 假定x=10,则表达式x<=10?20:30的值为________。 15. 表达式sqrt(81)和pow(6,3)的值分别为______________和 ______________。 16. 数学算式(1+x)sin48°和axbex+1对应的算术表达式分别为________和 ________。 17. 逻辑表达式:a>=x||b>2*y+10的相反式为:________。 18. 在嵌套的if语句中,每个else关键字与它前面最接近的________关键字相配套。 19. 在for语句中,假定循环体被执行次数为n,则<表达式1>共被计算________次,<表达式2>共被计算________次,<表达式3>共被计算________次。20. 执行for和while循环时,每次是先进行________的判断,然后再执行 ________,执行do循环时则相反。 一、填空共219题 第1题题号:422 设有以下结构类型说明和变量定义,则变量a在内存所占字节数是【1】 . Struct stud { char num[6]; int s[4]; double ave; } a,*p; 答案: 1). 22 第2题题号:533 设x和y均为int型变量,则以下for循环中的scanf语句最多可执行的次数是【1】. for (x=0,y=0;y!=123&&x<3;x++) scanf ("%d",&y); 答案: 1). 3 第3题题号:496 静态变量和外部变量的初始化是在【1】阶段完成的,而自动变量的赋值是 在【2】时进行的. 答案: 1). 编译 2). 函数调用 第4题题号:96 已知a=13,b=6, a&b的十进制数值为【1】. 答案: 1). 4 第5题题号:398 程序段int k=10; while(k=0) k=k-1循环体语句执行【1】次. 答案: 1). 0 第6题题号:651 设w=5;w+= -2;则w的值为【1】. 答案: 1). 3 第7题题号:258 下面程序段的输出结果是【1】. int a=12; a=a&0377;pritnf("%d\n",a); 答案: 1). 12 第8题题号:457 设a,b,c,t为整型变量,初值为a=3,b=4,c=5,执行完语句t=!(a+b)+c-1&&b+c/2 后,t的值是【1】. 答案: 1). 1 第9题题号:402 设a取二进制数00101101,若想通过a^b运算使a的高4位取反,低4位不变,则b的 二进制数是【1】. 答案: 1). 11110000 第10题题号:311 若所用变量均已正确定义,则执行下面程序段后的值是【1】. for(i=0 ; i<2 ; i++ ) printf("YES"); printf("\n"); 答案: 1). YESYES 导出题库试题(1~100) 共计104道试题 一、程序填空答案(104题) 【程序填空】 1功能:求两个非负整数的最大公约数和最小公倍数。 【1】r != 0 或r 【2】r=m%n 或r=m-m/n*n 【3】n 【4】gcd,lcm 或n,lcm 2功能:下面的程序是求1!+3!+5!+……+n!的和。 【1】s=0 【2】i+=2 或i=i+2 或i++,i++ 【3】j<=i 或i>=j 或jj 【4】f= f * j 3功能:将一个字符串中下标为m的字符开始的全部字符复制成为另 一个字符串。 【1】p1= str1 + m 【2】*p2++=*p1++ 或*(p2++)=*(p1++) 或*p2=*p1,p2++,p1++ 或*p2=*p1++,p2++ 或*p2++=*p1,p1++ 【3】*p2='\0' 或*p2=0 或*p2=NULL【4】strcopy(str1,str2,m) 4功能:以下程序是用选择法对10个整数按升序排序。 【1】#define N 10 【2】k=I 【3】j 三、程序填空题 导读:在程序填空题中,已经给出了程序的主干,读者首先要理解程序的思路,再选择正确的内容填入空白处,使程序完成既定的功能。这类习题的设计就是要引导读者逐步掌握编程的方法。本节习题的难度适中,可能有些典型的程序在课堂上已经有所接触,读者一定要独立完成它,这样就可以逐步提高自己的编程能力。在程序设计语言学习的中期,读者对程序设计已经有了初步的了解,而自己编写程序又不知从何处入手,此时解答此类题目可以避免盲目性,从而提高学习的效率。 【3.1】下面程序的功能是不用第三个变量,实现两个数的对调操作。 #include 【3.2】下面程序的功能是根据近似公式:π2/6≈ 1/12+1/22+1/32+ …… +1/n2,求π值。 #include 一.填空 1. 每个C程序都必须有且仅有一个________ 函数。 2. C语言程序开发到执行通常要经过6个阶段即编辑、预处理、________、链接、加载和执行。 3. 软件是程序,以及______、使用和维护所需要的所有文档。 4. 国标中规定:“计算机程序是按照具体要求产生的适合于计算机处理的_________”。 5. 程序设计语言按照书写形式,以及思维方式的不同一般分为低级语言和________两大类。 6. C语言是由________组成的。 7. C语言的函数可分为主函数main、标准库函数和_________。 8. 一个函数是由两部分组成的,即:________和函数体。 9. 编译是将C语言所编写的源程序________成机器代码,也称为建立目标代码程序的过程。 10. 程序是由某种程序设计语言编制出来,体现了编程者的控制思想和对计算机执行操作 的要求。不同的任务功能,就会需求不同的软件程序,如:控制计算机本身软硬件协调工作,并使其设备充分发挥效力,方便用户使用的系统软件程序,称为操作系统;而为办公自动化(OA)、管理信息系统(MIS)、人工智能、电子商务、网络互联等等应用而开发的软件程序,统称为_________。 11. 机器语言是以__________形式表示的机器基本指令的集合,是计算机系统唯一不需要翻译可以直接识别和执行的程序设计语言。 12. 与机器语言相比,使用汇编语言来编写程序可以用_______来表示指令的操作码和操作对 象,也可以用标号和符号来代替地址、常量和变量。 13. 在编译程序之前,凡以____开头的代码行都先由预处理程序预处理。 14. C程序的执行均是由执行_________开始。 15. 函数体即为包含在{}内的部分。它分为________和为完成功能任务由若干个C 语句 组成的执行部分。 16. C语言程序中一条简单语句是以________字符作为结束符的。 17. C语言是结构化、________的程序设计语言。 18. 由于计算机硬件不能直接识别高级语言中的语句,因此,必须经过“_______程序”,将用高级语言编写的程序翻译成计算机硬件所能识别的机器语言程序方可执行。 19. 用高级语言编写的程序需翻译成计算机硬件所能识别的机器语言程序方可执行。所以 说,用高级语言进行程序设计,其编程效率高,方便易用,但_______没有低级语言高。 20.C语言程序设计试题及答案
C语言常见复习题(选择填空)及参考答案
C语言程序设计程序填空题库及答案
C语言题库(填空题部分)
C语言程序设计试题集
C语言程序设计期末考试试题(含答案)
C语言程序设计习题集(3)
C语言填空题
C语言程序设计期末练习填空题.docx
2011__C语言上机填空题
C语言填空题以及答案
大学计算机C语言程序设计(填空题)
c语言程序填空题
c语言程序填空题完整
C语言程序设计试题集与答案解析