C语言程序设计填空题及答案复习用

上传人:s****a 文档编号:183704511 上传时间:2023-01-31 格式:DOCX 页数:13 大小:40.68KB
收藏 版权申诉 举报 下载
C语言程序设计填空题及答案复习用_第1页
第1页 / 共13页
C语言程序设计填空题及答案复习用_第2页
第2页 / 共13页
C语言程序设计填空题及答案复习用_第3页
第3页 / 共13页
资源描述:

《C语言程序设计填空题及答案复习用》由会员分享,可在线阅读,更多相关《C语言程序设计填空题及答案复习用(13页珍藏版)》请在装配图网上搜索。

1、导读:在程序填空题中,已经给出了程序的主干,读者首先要理解程序的思路, 再选择正确的内容填入空白处,使程序完成既定的功能。这类习题的设计就是 要引导读者逐步掌握编程的方法。本节习题的难度适中,可能有些典型的程序 在课堂上已经有所接触,读者一定要独立完成它,这样就可以逐步提高自己的 编程能力。在程序设计语言学习的中期,读者对程序设计已经有了初步的了解, 而自己编写程序又不知从何处入手,此时解答此类题目可以避免盲目性,从而 提高学习的效率。【3.1】下面程序的功能是不用第三个变量,实现两个数 的对调操作。#include main() int a,b;scanf(%d%d”,&a,&b);prin

2、tf(a=%d,b=%dn”,a,b);a=;b=;a=;printf(a=%d,b=%dn”,a,b);【3.2】下面程序的功能是根据近似公式:兀2/6 1/12+1/22+1/32+ +1/n2,求 n 值。#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) ;main() int a10,i,*k=&i;f

3、or(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; i0?t=-1:1;printf(%dn”,s);【3.5】有以下程序段:s=1.0;for(k=1;kamax) amax=x;if( ) amin=x;scanf(%f”,&x);printf(namax=%fnamin=%fn”,amax,amin);【3.7】下面程序的功能是将形参x的值转换为二进制数, 所得的二进制数放在一

4、个一维数组中返回,二进制数的 最低位放在下标为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() int n,k=1,s=0,m;for(n=1;ns)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()c

5、ontinue;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(mn) r=m;n=r;r=m%n;while( ) m=n;n=r;r=m%n; ;【3.12】下面程序的功能是使用冒泡法对输入的10个浮 点

6、数从小到大进行排序。排好序的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+ )if() 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

7、 stdio.h”main() 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 main() 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中所

8、有的字符c 删除。请选择填空。#includemain( ) char s80;int i,j;tj=;gets(s);puts(a);for(i=j=0; si!=,0; i+ )【3.20】下面的函数index(char s, char t)检查字if(si!=,c,);【3.18】下面程序的功能是对键盘输入的两个字符串进符串s中是否包含字符串t,若包含,则返回t在s中的sj=,0,;行比较,然后输出两个字符串中第一个不相同字符的开始位置(下标值),否则送回-1。puts(s);ASCII码之差。例如:输入的两个字符串分别为abcdefgindex(char s, char t)和abce

9、ef,则输出为T。#include int i,j,k;for(i=0; si!= ,0,; i+ )【3.16】下面程序的功能是输出两个字符串中对应相等main() for(j=i,k=0; & sj=tk; j+,k+);的字符。请选择填空。 char str1100,str2100,c;if( )#include int i,s;return (i);char x=programming”;printf(Enter string 1: ) ; gets(str1);char y=Fortran;printf(Enter string 2: ); gets(str2);return(-1)

10、;main()i=0; int i=0;while(str1i = str2i & str1i!=)nwhile(xi!= ,0, & yi!= ,0,)i+;【3.21】下面程序的功能是计算S= k!。if(xi=yi)s= ;k=0printf(%c, );printf(%dn”, s);long fun(int n)else int i;i+;【3.19】下面的函数expand在将字符串s复制到字符串long s;t时,将其中的换行符和制表符转换为可见的转义字符for(i=1; i ;i+)【3.17】下面程序的功能是将字符串s中的每个字符按表示,即用,n,表示换行符,用,t,表示制表符

11、。s*=i;升序的规则插到数组a中,字符串a已排好序。expand(char s,char t)return();#include int i,j;main()for(i=j=0; si!= ,0,; i+ )main() char a20=cehiknqtw;switch (si) int k,n;char s=fbla; case,n,: t=;long s;int i,k,j;tj+ =,n,;scanf(%d”,&n);for(k=0; sk!= ,0,; k+ )break;s= ; j=0;case ,t,: t=;for(k=0;k=aj & aj!= ,0,)tj+ =,t,;

12、s+= ;j+;break;printf(%ldn,s);for()default: t =si;break;【3.22】下面程序的功能是显示具有n个兀素的数组saj=sk;中的最大兀素。#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);【3.23】下面程序的功能是由键盘输入n,求满足下述条 件的x、y:nx和ny的末3位数字相同,且x手y,x、y、n均为自然 数,并使x+y为最小。

13、#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 ); ; 【3.24】下面的程序是用递归算法求a的平方根。求平方根的迭代公式如下:#include double mysqrt

14、( 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=%lfn”, x, mysqrt( x, 1.0);3.25】以下程序是计算学生的年龄。已知第一位最小 的学生年龄为10岁,其余学生的年龄一个比一个大2岁, 求第5个学生的年龄。#include age( int n ) int c;if( n=1

15、 ) c=10;else c= ;return(c);main() int n=5;printf(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();【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,

16、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;else if(m=1);else ;return(com);【3.29】下列函数是求一个字符串str的长度。int strlen( c

17、har *str )if(return (0);scanf(%d”, &n); c=*s;else retTn);(for( i=1; i2)printf(n);else return ( sqrt(x+();invent (,n-2);else ;r( int m )【3.33】函数revstr(s)将字符串s置逆,如输入的实参 printf(%d”,);s为字符串abcde”,则返回时s为字符串edcba”。递3.35】从键盘上输入10个整数,程序按降序完成从大m =;归程序如下:到小的排序。if()revstr( char *s )#include ; char *p=s, c;int

18、array10;while(*p) p+;sort( int *p, int *q ) int *max, *s;3.31】输入n值,输出高度为n的等边三角形。例如if(sp)if( )当n=4时的图形如下: c=*s;return;*s=*p;max=p; for( s=p+1; s *max )*revstr(s+1);swap();个个个个个个个;sort();#include swap( int *x, int *y ) int temp;void prt( char c, int n )temp=*x; if( n0 )如下是由非递归实现的revstr(s)函数:*x=*y; pri

19、ntf( c,c );revstr (s)*y=temp;char *s; char *p=s, c;main()while( *p ) p+; int i; printf(Enter data :n) ; for( i=0; i10;main();i+) int i, n;while( sp )scanf(%d”, &arrayi); sort( );printf(Output:);for( i=0; i10; i+) printf(%d ”, arrayi);【3.36】下面函数的功能是将一个整数存放到一个数组 中。存放时按逆序存放。例如:483存放成384o #include void

20、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);【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

21、*s,int num) int *t,k;t=s+num;while() k=*s;*s=*t;*t=k; ; ;【3.38】下面程序通过指向整型的指针将数组a34 的内容按3行x 4列的格式输出,请给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 ,);【3.39】下面程序的功能是:从键盘上输入一行字符, 存入一个字符数组中,然后输出该字符串。#in

22、clude 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) t=?*a+:*b*a ? *b+ :();/* 将*a、*b 的小者存入t */

23、if( *w 0 ) *w=t;else if( t*w) *+w=t; /*将与*可不相同的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;int n, *pa;【3.43】下面程序的功能是输入学生的姓名和成绩,然for( n=0; *w != 0; ) int coun

24、t, total, temp;后输出。w+;*pa = 2;#include for( i=0; in-1; i+ ) =3;struct stuinffor( j=i+1; jsj)count=2;int score; /* 学生成绩 */while( count+n ) stu, *p; temp = *(pa-1) * *pa;main ( )main()if( temp10 ) p=&stu; char s1100, s2100, s3200; total += temp;printf(Enter name:);printf(nPlease Input First String:);*

25、(+pa) = temp;gets();scanf(%s”, s1);printf(Enter score: );printf(nPlease Input Second String:);elsescanf(%d”,);scanf(%s”, s2);=temp/10;printf(Output: %s, %dn, ,);strsort(s1);total += *pa;strsort(s2);if( countn )【3.44】下面程序的功能是按学生的姓名查询其成绩排=0; count +; pa+;名和平均成绩。查询时可连续进行,直到输入0时才结strmerge(s1, s2, s3);=t

26、emp%10;束。printf(nResult:%s”, s3);total += *pa;#include #include 【3.42】已知某数列前两项为2和3,其后继项根据前面#define NUM 4最后两项的乘积,按下列规则生成:struct student若乘积为一位数,则该乘积即为数列的后继项; int rank若乘积为二位数,则该乘积的十位上的数字和个位上char *name;的数字依次作为数列的两个后继项。main()float score;下面的程序输出该数列的前N项及它们的和,其中,函 int n, *p, *q, numMAXNUM;;数sum(n,pa)返回数列的前N

27、项和,并将生成的前N项do stu = 3, liming, 89.3,存入首指针为pa的数组中,程序中规定输入的N值必须 printf(Input N=? (2N%d):, MAXNUM+1);,zhan4hua, 78.2,大于2,且不超过给定的常数值MAXNUMoscanf(%d”, &n);,anli1, 95.1,例如:若输AN的值为10,则程序输出如下内容:while();;, ;wa;ngq2i ,90.6sum(10)=44printf(nsum(%d)=%dn, n, sum(n, num);2 3 6 1 8 8 6 4 2 4for( p=num, q =; pq; p+

28、 );main()#include stdio.hprintf(%4d, *p); char;str10#define MAXNUM 100printf(n);;;; int iint sum(n, pa); do printf(Enter a name);scanf(%sdata_out( struct man *p, int n )for(NU=0 i+ ) struct man *q = _;)if(for( ; pname,printf(Rank,:3dn.rank);p-age, p-sex);printf (Average :%5.1fn,stui.score);输入的位于链表尾(

29、如下图),然后再按输入的相反顺 序输出,并释放全部结点。例如:输入的第3个整数为5,第7个整数也为5,则将先输入的整数5排在后输入的整数5的前面。程序如下:【3.45】下面程序的功能是从终#include stdio.h端上输入5个人的年龄、性别和#define N 10姓名,然后输出。struct#include stdio.h int no;struct manint num; char name20; arrayN;unsigned age;main( )char sex7; int i, j, num;for( i=0;i=0&arrayj.num num; )data_out(per

30、son,5);arrayj+1=arrayj;array .num=num;data_in(struct man *p, int n )array .no=i; struct man *q = ;for( ; pq; p+ )for( i=0;isex);【3.47】以下程序的功能是:读入一行字符(如:a、. .y、z),按输入时的逆序建立一个链接式的结点序列,即先【3.46】输入N个整数,储存输入的数及对应的序号,if( i=NUM ) printf(Not fpundn)并将输入的数按从小到大的顺序进行排列。要求:当两 while( strcmp(Str0 );个整数相等时,整数的排列顺序

31、由输入的先后次序决定。#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 NUL

32、L 0 struct link float a;struct link *next;;整数。int score;concatenate ( pl, p2 )#include struct student *next;struct list *p1, *p2;struct data; if( p1-next=NULL ) int x;struct student *creat()p1-next=p2;struct data *link; struct student *head=NULL,*tail;else*p;long num; int a;concatenate( ,p2);input()

33、tail= malloc(LEN); int num;do【3.49】下面程序的功能是从键盘输入一个字符串,然struct data *q; printf(Enter data:); scanf(%ld,%d”,&num,&a); if(num!=0)后反序输出输入的字符串。scanf(%d”, &num); if(head=NULL) head=tail;#include if( numnum=num; tail-score=a; char data;q =;tail-next=(struct student *)malloc(LEN);struct node *link;q-x = num

34、;*head;q-link = p;else tail-next=NULL;main()p=q;while(num!=0); char ch;return();struct node *p;head = NULL;while( ch=getchar()!=n)main() printf(Enter data until datadata = ch;input();链表的头指针作为函数值返回。p-link =;printf(Output:);#include head =;while()#define LEN sizeof(struct student) printf(%dn, p-x);str

35、uct student; long num;while( p!=NULL )int score; printf(%c ”, p-data);struct student *next;p = p-link;3.51下面函数的功能是创建一个带有头结点的链表,;struct student *creat()将头结点返回给主调函数。链表用于储存学生的学号和 struct student *head=NULL,*tail;3.50】下面程序的功能是从键盘上顺序输入整数,直成绩。新产生的结点总是位于链表的尾部。 struct studentlong num; int a;到输入的整数小于0时才停止输入。然

36、后反序输出这些 long num;tail=( )malloc(LEN);doFILE *fp; int n; scanf(%ld,%d”,&num,&a);main()void sum(),mult();if(num!=0) char ch;void (*funcp)(); if(head=NULL) head=tail;if(fp=fopen()=NULL)n=atoi(argv2);else tail=tail-next;exit(0);if(argc!=3 | nnum=num;while(ch=getchar()!=)dispform( );tail-score=a;fputc(ch

37、,fp);switch ( )tail-next=( )malloc(LEN); case +: funcp=sum;break;else tail-next=NULL;while(num!=0);3.55】下面程序的功能是将磁盘上的一个文件复制到case -: funcp=mult; break;另一个文件中,两个文件名在命令行中给出(假定给定default: dispform();的文件名无误)。【3.53】下面程序的功能是统计文件中的字符的个数。#include main(int argc,char *argv);#include FILE &f1,*f2;void sum(int m)

38、main()if(argc ) int i,s=0; long num=0; printf(The command line error!”);for(i=1;im;i+ ) *fp;exit(0);if(fp=fopen(fname.dat”, r)=NULL)printf(sum=%dn”,s); printf(Cant open the file!”);f1=fopen(argv1, r);exit(0);f2=fopen(arhv2, w);void mult(int m)while( ) long int i, s=1;while()fputs(fgetc(f1),);for(i=1

39、;i0)n);个正整数的累加或阶乘。例如:如果可执行文件的文件exit (0);名是sm,则执行该程序时输入:sm + 10,可以实现【3.54】下面程序的功能是把从键盘输入的文件(用10的累加;输入:sm - 10,可以实现求10的阶乘。作为文件结束标志)复制到一个名为second.txt的新文#include 【3.57】下面程序的功能是键盘上输入一个字符串,把件中。#include 该字符串中的小写字母转换为大写字母,输出到文件#include main (int argc,char *argv)test.txt中,然后从该文件读出字符串并显示出来。#include main() cha

40、r str100; int i=0; FILE *fp;if(fp=fopen(test.txt”, )=NULL) printf(Cant open the file.n); exit(0); printf(Input a string:n); gets(str); while(stri) if(stri= a&stri= z) stri=; fputc(stri,fp); i+; fclose(fp); fp=fopen(test.txt”,); fgets(str,strlen(str)+1,fp); printf(%sn”,str); fclose(fp); 【3.58】下面程序的功能

41、是将从终端上读入的10个整数 以二进制方式写入名为bi.dat”的新文件中。#include FILE *fp; main() int i, j; if( fp=fopen(,wb ) = NULL ) exit (0); for( i=0; i10; i+ ) scanf(%d”, &j ); fwrite( ,sizeof(int), 1, );fclose( fp);【3.59】以字符流形式读入一个文件,从文件中检索出 六种C语言的关键字,并统计、输出每种关键字在文件 中出现的次数。本程序中规定:单词是一个以空格或 t、n结束的字符串。#include #include FILE *cp

42、;char fname20, buf100;int num;struct key char word10;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 bufi+=c;while(c = & c!= & c!= t & c!= n) bufi+ = c;bufi= 0;r

43、eturn(buf);lookup(char *p) int i;char *q, *s;for(i=0;inum;i+) q =;s=p;while( *s & (*s=*q)if() keywordi.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: %sn, fname); exit(0);num = sizeof(keyword) / sizeof(struc

44、t key); while()lookup(word);fclose(cp);for(i=0;inum;i+)printf(keyword:%-20scount=%dn”,keywordi.word ,keywordi.count);【3.60】下面程序的功能是从键盘接受姓名(例如:输 入ZHANG SAN),在文件”try.dat”中查找,若文件中 已经存入了刚输入的姓名,则显示提示信息;若文件中 没有刚输入的姓名,则将该姓名存入文件。要求:若 磁盘文件try.dat,已存在,则要保留文件中原来的信息;若文件try. dat”不存在,则在磁盘上建立一个新文 件;当输入的姓名为空时(长度为0)

45、,结束程序。 include main() FILE *fp; int flag; char name30, data30;if (fp=fopen(,try. dat,z, )=NULL ) printf(Open file errorn,/); exit (0); do printf(Enter name:);gets(name);if ( strlen(name)=0 ) break;strcat (name, n);flag=l;while( flag & (fgets(data, 30, fp) ) if ( strcmp (data, name) = 0 );if( flag )fputs(name, fp); elseprintf(XtData enter error !n); while (); fclose (fp);

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!