c语言程序填空题(1)PDF.pdf
C语言程序设计电子教案页脚内容 1三、程序填空题导读:在程序填空题中,已经给出了程序的主干,读者首先要理解程序的思路,再选择正确的内容填入空白处,使程序完成既定的功能。这类习题的设计就是要引导读者逐步掌握编程的方法。本节习题的难度适中,可能有些典型的程序在课堂上已经有所接触,读者一定要独立完成它,这样就可以逐步提高自己的编程能力。在程序设计语言学习的中期,读者对程序设计已经有了初步的了解,而自己编写程序又不知从何处入手,此时解答此类题目可以避免盲目性,从而提高学习的效率。【3.1】下面程序的功能是不用第三个变量,实现两个数的对调操作。#include main() int a,b;scanf(%d%d,&a,&b) ;printf(a=%d,b=%dn,a,b) ;a= ;b= ;a= ;printf(a=%d,b=%dn,a,b) ; C语言程序设计电子教案页脚内容 2【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 ;pt;p+) if(sps*k) C语言程序设计电子教案页脚内容 3 ; main() int a10,i,*k=&i ;for(i=0;i10;i+) scanf(%d,&ai);findmin(a,10,k) ;printf(%d,%dn,*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) ;s=s+t;C语言程序设计电子教案页脚内容 4 ; printf(%dn,s) ;【3.5】有以下程序段:s=1.0;for(k=1;kamax) amax=x;if( ) amin=x;scanf(%f,&x); C语言程序设计电子教案页脚内容 6printf(namax=%fnamin=%fn,amax,amin) ;【3.7】下面程序的功能是将形参x 的值转换为二进制数,所得的二进制数放在一个一维数组中返回,二进制数的最低位放在下标为0的元素中。fun(int x,int b) int k=0,r ;do r=x% ;bk+=r ;x/= ;while(x);【3.8】下面程序的功能是输出1到 100之间每位数的乘积大于每位数的和的数。例如数字26,数位上数字的乘积 12大于数字之和 8。main() C语言程序设计电子教案页脚内容 7 int n,k=1,s=0,m;for(n=1;ns) printf(%d,n); 【3.9】下面程序的功能是统计用0 至 9之间的不同的数字组成的三位数的个数。C语言程序设计电子教案页脚内容 8main() 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 ;C语言程序设计电子教案页脚内容 9printf(%d,j) ; 【3.11 】下面程序的功能是用辗转相除法求两个正整数m和 n的最大公约数。hcf(int m,int n) int r;if(mn) r=m; ;n=r; r=m%n;while( ) m=n;n=r;C语言程序设计电子教案页脚内容 10r=m%n; ;【3.12】下面程序的功能是使用冒泡法对输入的10个浮点数从小到大进行排序。排好序的10个数分两行输出。程序如下:#include main() ;int i,j;printf(Input 10 numbers pleasen) ;for(i=0; ;i+ ) scanf(%f, &ai);printf(n) ;for(i=2; ;i+ ) for(j=0; ;j+ ) C语言程序设计电子教案页脚内容 11if( ) x=aj; ;aj+1=x; printf(The sorted 10 numbers;n) ;for(i=0; ;i+ ) if( ) printf(n) ;printf(%ft,ai) ; printf(n) ;【3.13】下面程序的功能是读入20个整数,统计非负数个数,并计算非负数之和。#include stdio.h C语言程序设计电子教案页脚内容 12main() int i,a20,s,count ;s=count=0;for(i=0;i20;i+ ) scanf(%d, );for(i=0;i20;i+) if(ai0) ;s+=ai;count+; printf(s=%dt count=%dn,s,count) ;【3.14】下面程序的功能是删除字符串s中的空格。#include C语言程序设计电子教案页脚内容 13main() char *s=Beijing ligong daxue;int i,j;for(i=j=0 ;si!=0 ;i+) if(si!= ) ;else ;sj= 0 ;printf(%s,s);【3.15】下面程序的功能是将字符串s中所有的字符 c删除。请选择填空。#include main( ) char s80 ;int i,j;gets(s) ;C语言程序设计电子教案页脚内容 14for(i=j=0 ;si!= 0 ;i+ ) if(si!= c) ;sj= 0 ;puts(s) ;【3.16】下面程序的功能是输出两个字符串中对应相等的字符。请选择填空。#include char x=programming;char y=Fortran;main() int i=0 ;while(xi!= 0 & yi!= 0) if(xi=yi) printf(%c, );else i+ ;C语言程序设计电子教案页脚内容 15 【3.17】下面程序的功能是将字符串s中的每个字符按升序的规则插到数组a中, 字符串 a 已排好序。#include main() char a20=cehiknqtw;char s=fbla ;int i,k,j ;for(k=0;sk!= 0 ;k+ ) j=0 ;while(sk=aj & aj!= 0 ) j+ ;for( ) ;aj=sk; C语言程序设计电子教案页脚内容 16puts(a) ;【3.18】下面程序的功能是对键盘输入的两个字符串进行比较,然后输出两个字符串中第一个不相同字符的 ASCII 码之差。例如:输入的两个字符串分别为abcdefg和abceef,则输出为 -1。#include main() char str1100,str2100,c;int i,s;printf(Enter string 1: ) ; gets(str1) ;printf(Enter string 2: ); gets(str2) ;i=0;while(str1i = str2i & str1i!= ) i+ ;s= ;printf(%dn, s) ;C语言程序设计电子教案页脚内容 17【3.19】下面的函数 expand在将字符串 s复制到字符串 t 时, 将其中的换行符和制表符转换为可见的转义字符表示,即用 n 表示换行符,用 t 表示制表符。expand(char s,char t) int i,j ;for(i=j=0 ;si!= 0 ;i+ ) switch (si) case n: t = ;tj+ = n ;break;case t: t = ;tj+ = t ;break;default: t = si;break; tj = ;C语言程序设计电子教案页脚内容 18【3.20】下面的函数 index(char s, char t) 检查字符串 s中是否包含字符串t,若包含,则返回 t 在 s中的开始位置(下标值),否则送回-1。index(char s, char t) int i,j,k ;for(i=0;si!= 0 ;i+ ) for(j=i,k=0 ; & sj=tk ;j+,k+) ;if( ) return (i); return(-1) ; n【3.21】下面程序的功能是计算S= k! 。k=0 C语言程序设计电子教案页脚内容 19long 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(%ldn,s) ;C语言程序设计电子教案页脚内容 20【3.22】下面程序的功能是显示具有n个元素的数组 s中的最大元素。#define N 20 main() int i,aN;for(i=0;iN;i+) scanf(%d,&ai);printf(%dn, ); fmax(int s,int n) int k,p;for(p=0,k=p ;psk) ;return(k);C语言程序设计电子教案页脚内容 21【3.23】下面程序的功能是由键盘输入n,求满足下述条件的x、y:nx和 ny的末 3 位数字相同,且 xy,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;xmin & flag;x+ ) if( & pow3(n,x)=pow3(n,min-x) printf(x=%d,y=%dn, x, min-x ) ;C语言程序设计电子教案页脚内容 22 ; 【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() C语言程序设计电子教案页脚内容 23 double x;printf(Enter x: );scanf(%lf, &x);printf(The sqrt of %lf=%lfn, 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;C语言程序设计电子教案页脚内容 24printf(age:%dn, );【3.26】下面的函数 sum(int n) 完成计算 1n的累加和。sum(int n) if(n=0) printf(data errorn) ;if(n=1) ;else ;【3.27】下面的函数是一个求阶乘的递归调用函数。facto(int n) if( n = 1 ) ;else return( );C语言程序设计电子教案页脚内容 25【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为止。当 n2*m 时,可先用公式 (1) 进行简化,填写程序中的空白,使程序可以正确运行。#includestdio.h main() int m,n;printf(Input m,n=) ;scanf(%d%d, &m, &n) ;printf(The combination numbeers is %dn, combin(m,n); combin( int m, int n) int com;if( n2*m ) m=n-m;if( m=0 ) com=1;C语言程序设计电子教案页脚内容 26else if(m=1) ;else ;return(com) ;【3.29】下列函数是求一个字符串str的长度。? int strlen( char *str ) ? if( ) return (0);? ? else return ( );【3.30】用递归实现将输入小于32768的整数按逆序输出。如输入12345 ,则输出 54321 。#includestdio.h main() int n;printf(Input n : );C语言程序设计电子教案页脚内容 27scanf(%d, );r(n);printf(n) ; r( int m ) printf(%d, );m = ;if( ) ;【3.31】输入 n值,输出高度为 n的等边三角形。例如当n=4 时的图形如下:* * * * #include C语言程序设计电子教案页脚内容 28void prt( char c, int n ) if( n0 ) printf( %c, c ); ; main() int i, n;scanf(%d, &n);for( i=1; i=n ; i+ ) ; ;printf(n) ; C语言程序设计电子教案页脚内容 29【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(sp) c=*s;*s=*p ;C语言程序设计电子教案页脚内容 30 ;revstr(s+1) ; ; 如下是由非递归实现的revstr(s) 函数:revstr (s) char *s; char *p=s, c;while( *p ) p+ ; ;while( s2 ) invent ( ,n-2);else ;【3.35】从键盘上输入 10个整数,程序按降序完成从大到小的排序。#include int array10;sort( int *p, int *q ) int *max, *s;if( ) return;C语言程序设计电子教案页脚内容 32max=p; for( s=p+1; 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; i10; i+) scanf(%d, &arrayi); sort( );printf(Output:);for( i=0; i10; i+) printf(%d , arrayi);C语言程序设计电子教案页脚内容 33【3.36】 下面函数的功能是将一个整数存放到一个数组中。存放时按逆序存放。 例如:483存放成 384 。#include void convert(char *a, int n) int i;if(i=n/10) !=0 ) convert( , i );*a = ; char str10= ;main() int number;scanf(%d, &number) ;convert( str, number ) ;puts(str) ;C语言程序设计电子教案页脚内容 34【3.37】下面程序的功能是实现数组元素中值的逆转。#include main() int i,n=10,a10=1,2,3,4,5,6,7,8,9,10 ;invert(a,n-1) ;for(i=0;i10;i+) printf(%4d,ai) ;printf(n) ; invert(int *s,int num) int *t,k ;t=s+num;while( ) k=*s ;*s=*t ;C语言程序设计电子教案页脚内容 35*t=k ; ; ; 【3.38】下面程序通过指向整型的指针将数组a34 的内容按行 列的格式输出,请给printf( )填入适当的参数,使之通过指针p将数组元素按要求输出。#include int a34=1,2,3,4,5,6,7,8,9,10,11,12, *p=a;main() int i,j ;for(i=0;i3;i+ ) for(j=0 ;j4;j+ ) printf(%4d , ); C语言程序设计电子教案页脚内容 36【3.39】下面程序的功能是:从键盘上输入一行字符,存入一个字符数组中,然后输出该字符串。#include main ( ) char str81, *sptr ;int i;for(i=0;iwp) ;for(i=*n ;i=p ;i-) ;wp=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 ) C语言程序设计电子教案页脚内容 38 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; ;C语言程序设计电子教案页脚内容 39for( n=0;*w != 0 ; ) w+ ;for( i=0;in-1;i+ ) for( j=i+1 ;jsj ) main( ) char s1100 ,s2100 ,s3200 ;printf(nPlease Input First String:) ;scanf(%s ,s1) ;printf(nPlease Input Second String:) ;scanf(%s ,s2) ;strsort(s1) ;strsort(s2) ; = 0 ;C语言程序设计电子教案页脚内容 40strmerge(s1 ,s2 ,s3);printf(nResult:%s,s3) ;【3.42】已知某数列前两项为2和 3,其后继项根据前面最后两项的乘积,按下列规则生成: 若乘积为一位数,则该乘积即为数列的后继项; 若乘积为二位数,则该乘积的十位上的数字和个位上的数字依次作为数列的两个后继项。下面的程序输出该数列的前项及它们的和,其中,函数sum(n,pa) 返回数列的前 N项和,并将生成的前 N项存入首指针为 pa的数组中,程序中规定输入的N值必须大于 2, 且不超过给定的常数值MAXNUM。例如:若输入的值为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 ;C语言程序设计电子教案页脚内容 41*pa = 2; =3;total=5;count=2;while( count+n ) temp = *(pa-1) * *pa;if( temp10 ) total += temp;*(+pa) = temp ; else = temp/10;total += *pa ;if( countn ) count +; pa+ ; = temp%10 ;C语言程序设计电子教案页脚内容 42total += *pa ; ; main() int n, *p, *q, numMAXNUM;do printf(Input N=? (2N%d):, MAXNUM+1);scanf(%d, &n);while( );printf(nsum(%d)=%dn, n, sum(n, num);for( p=num, q = ; pq; p+ ) printf(%4d, *p) ;printf(n) ;C语言程序设计电子教案页脚内容 43【3.43】下面程序的功能是输入学生的姓名和成绩,然后输出。#include struct stuinf char name20 ; /* 学生姓名 */ int score ; /* 学生成绩 */ stu, *p;main ( ) p=&stu;printf(Enter name:);gets( );printf(Enter score: ) ;scanf(%d, );printf(Output: %s, %dn, , );C语言程序设计电子教案页脚内容 44【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() C语言程序设计电子教案页脚内容 45? char str10 ;? int i;? do printf(Enter a name);? scanf(%s ,str);? for( i=0;i=NUM ) printf(Not foundn) ;? while( strcmp(str ,0)!=0 ) ;?C语言程序设计电子教案页脚内容 46【3.45】下面程序的功能是从终端上输入个人的年龄、性别和姓名,然后输出。#include stdio.h struct man char name20 ;unsigned age ;char sex7 ;main ( ) struct man person5 ;data_in(person,5) ;data_out(person,5) ; data_in(struct man *p, int n ) struct man *q = ;for( ;page, p-sex) ; ; data_out( struct man *p, int n ) struct man *q = _;for( ;pname, p-age, p-sex) ;【3.46】 输入 N个整数,储存输入的数及对应的序号, 并将输入的数按从小到大的顺序进行排列。要求:当两个整数相等时,整数的排列顺序由输入的先后次序决定。例如:输入的第3 个整数为 5,第 7 个整数也为 5,则将先输入的整数5 排在后输入的整数5的前面。程序如下:#include stdio.h #define N 10 struct int no;int num;C语言程序设计电子教案页脚内容 48 arrayN;main( ) int i,j,num;for( i=0;i=0&arrayj.num num; ) arrayj+1=arrayj;array .num=num;array .no=i; for( i=0;iN;i+ ) printf(%d=%d,%dn ,i,arrayi.num,arrayi.no);【3.47】以下程序的功能是:读入一行字符(如:a、.y、z),按输入时的逆序建立一个链接式的结点序列,即先输入的位于链表尾(如下图),然后再按输入的相反顺序输出,并释放全部结点。C语言程序设计电子教案页脚内容 49#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; C语言程序设计电子教案页脚内容 50while( 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;