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



《C语言程序设计填空题及答案复习用》由会员分享,可在线阅读,更多相关《C语言程序设计填空题及答案复习用(12页珍藏版)》请在装配图网上搜索。
1、导读:在程序填空题中,已经给出了程序的主干,读者首先要理解程序的思路, 再选择正确的内容填入空白处,使程序完成既定的功能。这类习题的设计就是 要引导读者逐步掌握编程的方法。本节习题的难度适中,可能有些典型的程序 在课堂上已经有所接触,读者一定要独立完成它,这样就可以逐步提高自己的 编程能力。在程序设计语言学习的中期,读者对程序设计已经有了初步的了解, 而自己编写程序又不知从何处入手,此时解答此类题目可以避免盲目性,从而 提高学习的效率。
【3.1】下面程序的功能是不用第三个变量,实现两个数 的对调操作。
#include
2、nf("%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+ ……+l/n2,求 n 值。
#include
3、ndmin(int *s,int t,int *k)
{ int p;
for(p=0,*k=p;p 4、
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】下面程序的功能是从键盘上输入若干学生的学习 成绩,统计并输出最高成绩和最低成绩,当输入为负数 时结束输入。
5、
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% ① 6、 ;
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()
{ 7、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 8、 和n的最大公约数。
hcf(int m,int n)
{ int r;
if(m 9、]);
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 10、,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 11、se ② ; s[j]= '\0'; printf("%s",s);
}
[3.15]下面程序的功能是将字符串s中所有的字符'c' 删除。请选择填空。
#include 12、r 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 13、[j] && a[j]!= '\0' ) j++; for( ① )
② ; a[j]=s[k];
puts(a);
}
【3.18】下面程序的功能是对键盘输入的两个字符串进 行比较,然后输出两个字符串中第一个不相同字符的 ASCII码之差。例如:输入的两个字符串分别为"abcdefg" 和"abceef",则输出为T。
#include 14、"); 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++ 15、] = '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]; 16、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 中的最大元 17、素。
#define N 20
main()
{ int i,a[N]; for(i=0;i 18、) { 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 19、e 20、龄为10岁,其余学生的年龄一个比一个大2岁, 求第 5个学生的年龄。
#include 21、函数。 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) ;
prin 22、tf("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(re turn (0); else ret②Tn);(
}
【3.30】用递归实现将输入小于32768 的整数 23、按逆序输 出。如输入 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 时的图形如下:
*
***
*i* *i* *i* *i* *i* *i* *i*
#include 24、( 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 25、置逆,如输入的实参 s为字符串"abcde",则返回时s为字符串"edcba"。递 归程序如下:
revstr( char *s )
{ char *p=s, c;
while(*p) p++;
① ;
if(s
26、【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 27、 *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()
{inti; printf("Enterdata:\n"); for(i=0; i<10; i++)
scanf("%d", &array[i]); sort( ⑤ ); printf("Output:"); for( i=0; i<10; i 28、++) printf("%d ", array[i]);
}
【3.36】下面函数的功能是将一个整数存放到一个数组 中。存放时按逆序存放。例如:483 存放成"384"。 #include 29、3.37】下面程序的功能是实现数组元素中值的逆转。 #include 30、3行x 4列的格式输出,请给printf()填入适 当的参数,使之通过指针p将数组元素按要求输出。
#include 31、tr[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--) ② ;
32、
w[p]=x;
++*n;
}
【3.41】下面程序的功能是从键盘上输入两个字符串, 对两个字符串分别排序;然后将它们合并,合并后的字 符串按 ASCII 码值从小到大排序,并删去相同的字符。 #include 33、*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 34、.43】下面程序的功能是输入学生的姓名和成绩,然
for( n=0;*w != '\0'; ⑧ )
{ int count, total, temp;
后输出。
w++;
*pa = 2;
#include 35、)
} stu, *p;
}
{ temp = *(pa-1) * *pa;
main ( )
main( )
if( temp<10 )
{ p=&stu;
{ char s1[100], s2[100], s3[200];
{ total += temp;
printf("Enter name:") ;
printf("\nPlease Input First String:");
*(++pa) = temp;
gets( ① );
scanf("%s",s1);
}
printf("Enter score: ");
printf("\nPlease I 36、nput Second String:");
else
scanf("%d", ② ) ;
scanf("%s",s2);
{ ② = temp/10;
printf("Output: %s, %d\n", ③ , ④ ) ;
strsort(s1);
total += *pa;
}
strsort(s2);
if( count 37、束。
printf("\nResult:%s",s3);
total += *pa;
•• #include 38、at score;
下面的程序输出该数列的前N项及它们的和,其中,函
{ int n, *p, *q, num[MAXNUM];
• }
数sum(n,pa)返回数列的前N项和,并将生成的前N项
do
① stu[ ] = { 3, ""liming", 89.3,
存入首指针为pa的数组中,程序中规定输入的N值必须
{ printf("Input N=? (2 39、10,则程序输出如下内容:
}while( ⑤ ) ;
,""wangqi", 90.6
sum(10)=44
printf("\nsum(%d)=%d\n", n, sum(n, num));
};
2 3 6 1 8 8 6 4 2 4
for( p=num, q = ⑥ ; p 40、•••• do
if( i〉=NUM ) printf("Not found\n")并将输入的数按从小到大的顺序进行排列。要求:当两
{ printf("Enter a name");
•••••••• sc,ansft(r")%;s" •••••••• ;foir<(NUiM=;0 i++ )
②)if(
{ printf("Name , :%ts\ii]'.name);
•••••••• printf("Rank,:s%t3ud[\in]".rank); printf ("Average :%5.1f\n", stu[i].score);
③ ;
••••••••, 41、} iiiiiiii }while( st,rc"m0p"()s!t=r0 ) iiiiiiii}
【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(structman *p, int n ) { struct man *q = ① ; 42、 for( ; p 43、5排在后输入的整数5的前面。程序如下: #include "stdio.h"
#define N 10
struct
{ int no; int num;
} array[N] ; main( )
{ int i , j, num;
for( i=0; i 44、( i=0; i 45、ar( )) ① ) { 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所指向的线性链表,串接到 pl所指向的链表的末端。假定pl所指向的链表非空。 #define NULL 0 struct link
{ float a;
struct link *next;
};
整数。
int score;
46、concatenate ( p1,p2 )
#include 47、= ① malloc(LEN);
}
{ int num;
do
struct data *q;
{ scanf("%ld,%d",&num,&a);
【3.49】下面程序的功能是从键盘输入一个字符串,然
printf("Enter data:");
if(num!=0)
后反序输出输入的字符串。
scanf("%d", &num);
{ if(head==NULL) head=tail;
#include 48、
{ char data;
q =②;
tail->next=(struct student *)malloc(LEN);
struct node *link;
q->x = num;
}
}*head;
q->link = p;
else tail->next=NULL;
main()
p=q;
}while(num!=0);
{ char ch;
③;
return( ③ );
struct node *p;
}
}
head = NULL;
main()
while(( ch=getchar())!='\n' )
{ printf("Ent 49、er data until data<0:\n");
【3.52】下面 create 函数的功能是建立一个带头结点的
{ p = (struct node *)malloc(sizeof(struct node));
p=NULL;
单向链表,新产生的结点总是插入在链表的末尾。单向
p->data = ch;
input();
链表的头指针作为函数值返回。
p->link = ① ;
printf("Output:");
#include 50、)
}
{ printf("%d\n", p->x);
struct 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;
成绩 51、。新产生的结点总是位于链表的尾部。
long num;
【3.50】下面程序的功能是从键盘上顺序输入整数,直
struct student
int a;
到输入的整数小于0 时才停止输入。然后反序输出这些
{ long num;
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); 52、
}
else tail->next=NULL; }while(num!=0);
③ ;
}
【3.53】下面程序的功能是统计文件中的字符的个数。 #include 53、的功能是把从键盘输入的文件(用 @ 作为文件结束标志)复制到一个名为 second.txt 的新文 件中。
#include 54、)
{ 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 - 1 0 " ,可以实现求1 0的阶乘。 55、 #include 56、s=0; for(i=1 ;i 57、stdio.h>
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", 58、③ ); fgets(str,strlen(str)+1,fp); printf("%s\n",str); fclose(fp);
}
【3.58】下面程序的功能是将从终端上读入的10 个整数
以二进制方式写入名为"bi.da t"的新文件中。
#include 59、;
} fclose( fp);
}
【3.59】以字符流形式读入一个文件,从文件中检索出 六种C语言的关键字,并统计、输出每种关键字在文件 中出现的次数。本程序中规定:单词是一个以空格或
'\ t'、’\n'结束的字符串。
#include 60、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 61、 ;
char *q, *s; for(i=0;i 62、 exit(0);
}
num = sizeof(keyword) / sizeof(struct key); while( ⑤ )
lookup(word); fclose(cp); for(i=0; i 63、若 磁盘文件"try.dat",已存在,则要保留文件中原来的信
息;若文件"try. dat"不存在,则在磁盘上建立一个新文 件;⑵当输入的姓名为空时(长度为0),结束程序。 ^include〈stdio. h>
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=l;
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);
name, p->age,,p->sex);
}
【3.46】输入N个整数,储存输入的数及对应的序号 个整数相等时,整数的排列顺序由输入的先后次序决定。 例如:输入的第3 个整数为5,第7 个整数也为5,则将 先输入的整数
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。