C语言程序设计填空题及答案复习用
C语言程序设计填空题及
答案复习用
Last revision on 21 December 2020
导读:在程序填空题中,已经给出了程序的主干,读者首先要理解程序的思路,再选择正确的内容填入空白处,使程序完成既定的功能。这类习题的设计就是要引导读者逐步掌握编程的方法。本节习题的难度适中,可能有些典型的程序在课堂上已经有所接触,读者一定要独立完成它,这样就可以逐步提高自己的编程能力。在程序设计语言学习的中期,读者对程序设计已经有了初步的了解,而自己编写程序又不知从何处入手,此时解答此类题目可以避免盲目性,从而提高学习的效率。
【】下面程序的功能是不用第三个变量,实现两个数的对调操作。
#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 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]); } 【】下面程序的功能是计算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>0t=-1:1; } printf("%d\n",s); } 【】有以下程序段: s=; for(k=1;k<=n;k++) s=s+(k*(k+1)); printf("%f\n",s); 填空完成下述程序,使之与上 述程序的功能完全相同。 s=; ①; k=0; do { s=s+d; ②; d=(k*(k+1)); }while( ③ ); printf("%f\n",s); 【】下面程序的功能是从键盘上输入若干学生的学习成绩,统计并输出最高成绩和最低成绩,当输入为负数时结束输入。 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); } 【】下面程序的功能是将形参x的值转换为二进制数,所得的二进制数放在一个一维数组中返回,二进制数的最低位放在下标为0的元素中。 fun(int x,int b[]) { int k=0,r; do { r=x% ①; b[k++]=r; x/= ②; }while(x); } 【】下面程序的功能是输出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); } } 【】下面程序的功能是统计用 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); } 【】下面程序的功能是输出 100以内的个位数为6、且能 被3整除的所有数。 main() { int i,j; for(i=0;①;i++) { j=i*10+6; if( ② ) countinue; printf("%d",j); } } 【】下面程序的功能是用辗转 相除法求两个正整数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; } ③; } 【】下面程序的功能是使用冒泡法对输入的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"); } 【】下面程序的功能是读入20 个整数,统计非负数个数,并 计算非负数之和。 #include "" 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); } 【】下面程序的功能是删除字 符串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); } 【】下面程序的功能是将字符串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); } 【】下面程序的功能是输出两个字符串中对应相等的字符。请选择填空。 #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++; } 【】下面程序的功能是将字符 串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); } 【】下面程序的功能是对键盘 输入的两个字符串进行比较, 然后输出两个字符串中第一个 不相同字符的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); } 【】下面的函数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] = ⑥; } 【】下面的函数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 【】下面程序的功能是计算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); } 【】下面程序的功能是显示具 有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); } 【】下面程序的功能是由键盘 输入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 x++ ) if( ② && pow3(n,x)==pow3(n,min-x)) { printf("x=%d,y=%d\n", x, min-x ); ③; } } 【】下面的程序是用递归算法求a的平方根。求平方根的迭代公式如下: #include <> double mysqrt( double a, double x0 ) { double x1, y; x1 = ①; if( fabs(x1-x0)> ) 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, ); } 【】以下程序是计算学生的年 龄。已知第一位最小的学生年 龄为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", ② ); } 【】下面的函数sum(int n)完 成计算1~n的累加和。 sum(int n) { if(n<=0) printf("data error\n"); if(n==1) ①; else ②; } 【】下面的函数是一个求阶乘 的递归调用函数。 facto(int n) { if( n == 1 ) ①; else return( ② ); } 【】组合问题,由组合的基本 性质可知: (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"" 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); } 【】下列函数是求一个字符串str的长度。?????? int strlen( char *str ) ??????{ if( ① ) return (0);?? ???? else return ( ② );} 【】用递归实现将输入小于32768的整数按逆序输出。如输入12345,则输出54321。 #include"" main() { int n; printf("Input n : "); scanf("%d", ① ); r(n); printf("\n"); } r( int m ) { printf("%d", ② ); m = ③; if( ④ ) ⑤; } 【】输入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"); } } 【】下面的函数实现N层嵌套 平方根的计算。 double y(double x, int n) { if( n==0 ) return(0); else return ( sqrt(x+( ① )) ); } 【】函数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; } } 【】下面函数用递归调用的方法,将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 ②; } 【】从键盘上输入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]); } 【】下面函数的功能是将一个 整数存放到一个数组中。存放 时按逆序存放。例如: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); } 【】下面程序的功能是实现数 组元素中值的逆转。 #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; ②; ③; } } 【】下面程序通过指向整型的指针将数组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 ", ① ); } } 【】下面程序的功能是:从键 盘上输入一行字符,存入一个 字符数组中,然后输出该字符 串。 #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 ② ); } 【】下面函数的功能是将字符 变量的值插入已经按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; } 【】下面程序的功能是从键盘 上输入两个字符串,对两个字 符串分别排序;然后将它们合 并,合并后的字符串按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); } 【】已知某数列前两项为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 "" #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 }while( ⑤ ); printf("\nsum(%d)=%d\n", n, sum(n, num)); for( p=num, q = ⑥; p printf("%4d", *p); printf("\n"); } 【】下面程序的功能是输入学生的姓名和成绩,然后输出。#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" ,③,④ ); } 【】下面程序的功能是按学生 的姓名查询其成绩排名和平均 成绩。查询时可连续进行,直 到输入0时才结束。 ?? #include <> #include <> #define NUM 4 ? struct student ? { int rank; char *name; float score; ????????}; ???????? ① stu[ ]={ 3, "liming",, ???????? 4,"zhanghua",, ???????? 1,"anli",, ???????? 2,"wangqi", }; ????????main() ????????{ char str[10]; ???????? int i; ???????? do { printf("Enter a name"); ???????? scanf("%s",str); ???????? for( i=0;i i++ ) ???????? if( ② ) ???????? { printf("Name :%8s\n", stu[i].name); ???????? printf("Rank :%3d\n", stu[i].rank); ???????? printf("Average :%\n", stu[i].score); ???????? ③; ???????? } ???????? if( i>=NUM ) printf("Not found\n"); ???????? }while( strcmp(str ,"0")!=0 );????????} 【】 下面 程序 的功 能是 从终 端上 输入 5个 人的 年 龄、 性别 和姓 名, 然后 输 出。 #incl ude "" stru ct man { cha r nam e[20] ; unsi gned age ; char sex[ 7];}; mai n ( ) { str uct man pers on[5 ]; data _in(p erso n,5) ; data _out( pers on,5 ); } data _in(s truct man *p, int n ) { str uct man *q = ①; for( ; p ; p++ ) { pri ntf( " age: sex: nam e" ) ; scan f("% u%s ", &p- >age, p- >sex ); ②; } } data _out( stru ct man *p, int n ) { str uct man *q = __③ __; for( ; p ; p++ ) print f("%s ;% u; %s\ n", p- >na me, p- >age, p- >sex ); } 【】输入N个整数,储存输入的数及对应的序号,并将输入的数按从小到大的顺序进行排列。要求:当两个整数相等时,整数的排列顺序由输入的先后次序决定。例如:输入的第3个整数为5,第7个整数也为5,则将先输入的整数5排在后输入的整数5的前面。程序如下: #include "" #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); } 【】以下程序的功能是: 读入一行字符(如: 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); } } 【】下面函数将指针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);} 【】下面程序的功能是从键盘输入一个字符串,然后反序输出输入的字符串。 #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; } } 【】下面程序的功能是从 键盘上顺序输入整数,直 到输入的整数小于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);⑤; } } 【】下面函数的功能是创建一个带有头结点的链表,将头结点返回给主调函数。链表用于储存学生的学号和成绩。新产生的结点总是位于链表的尾部。 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( ③ ); } 【】下面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); ③; } 【】下面程序的功能是统计文件中的字符的个数。#include <> main() { long num=0; ① *fp; if((fp=fopen("", "r"))==NULL) { printf("Can't open the file! "); exit(0); } while( ② ) { fgetc(fp); num++; } printf("num=%d\n",nu m); fclose(fp); } 【】下面程序的功能是把从键盘输入的文件(用 @ 作为文件结束标志)复制到一个名为的新文件中。#include <> FILE *fp; main() { char ch; if((fp=fopen( ① ))==NULL) exit(0); while((ch=getchar())!='@') fputc(ch,fp); ②; } 【】下面程序的功能是将 磁盘上的一个文件复制到 另一个文件中,两个文件 名在命令行中给出(假定 给定的文件名无误)。 #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), ③ ); ④; ⑤; } 【】下面程序的功能是根 据命令行参数分别实现一 个正整数的累加或阶乘。 例如:如果可执行文件的 文件名是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); } 【】下面程序的功能是键 盘上输入一个字符串,把 该字符串中的小写字母转 换为大写字母,输出到文 件中,然后从该文件读出 字符串并显示出来。 #include <> main() { char str[100]; int i=0; FILE *fp; if((fp=fopen("", ① ))==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("", ③ ); fgets(str,strlen(str)+1,fp) ; printf("%s\n",str); fclose(fp); } 【】下面程序的功能是将 从终端上读入的10个整数 以二进制方式写入名为""的 新文件中。 #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); } 【】以字符流形式读入一个文件,从文件中检索出六种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",keywo rd[i].word,keyword[i].co unt); } 【】下面程序的功能是从键盘接受姓名(例如:输入"ZHANG SAN"),在文件""中查找,若文件中已经存入了刚输入的姓名,则显示提示信息;若文件中没有刚输入的姓名,则将该姓名存入文件。要求:⑴若磁盘文件"",已存在,则要保留文件中原来的信息;若文件""不存在,则在磁盘上建立一个新文件; ⑵当输入的姓名为空时(长度为0),结束程序。#include <> main() { FILE *fp; int flag; char name[30], data[30]; if((fp=fopen("", ①))==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 语言程序设计(第三版)习题库 1、设圆半径r=,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf 输入数据,输出计算结果,输出时要求文字说明,取小数点后两位数字。请编程序。 #include<> main(){ floatr,h,C1,Sa,Sb,Va,Vb; scanf(__”%f ”__,&r); scanf(”%d ”,__&h _);; C1=2**r; Sa=*r*r; Sb=4*Sa; Va=4**r*r*r/3; Vb=Sa*h; printf(___”Cl=%.2fSa=%.2fSb=%.2fVa=%.2fVb=%.2f ”,Cl,Sa,Sb,Va,Vb ); } 2、输入一个华氏温度,要求输出摄氏温度。公式为c=5(F-32)/9 输出要求有文字说明,取位2小数。 #include<> main(){ floatF,c; scanf("%f",&F); ____c=5*(F-32)/9______; printf("c=%.2f",c); } 3、有一函数:?? ???≥-<≤-<=10113101121x x x x x x y 写一程序,输入x 值,输出y 值。 #include<> main(){ intx,y; printf("输入x :"); scanf("%d",&x); if(x<1){/*x<1*/ y=x; printf("x=%3d,y=x=%d\n",x,y); }elseif(____x<10_______){/*1≤x-10*/ _____y=2*x-1_______; printf("x=%3d,y=2*x-1=%d\n",x,y); }else{/*x≥10*/ y=3*x-11; printf("x=%3d,y=3*x-11=%d\n",x#include"" main() { intx,y; scanf("%d",&x); if(x<1) {y=x;} elseif(x>=1&&x<10) {y=2*x-1;} else {y=3*x-11;} printf("%d",y); }#include"" main() { intx,y; scanf("%d",&x); if(x<1) {y=x;} elseif(x>=1&&x<10) {y=2*x-1;} else {y=3*x-11;} printf("%d\n",y); }#include"" main() { intx,y; scanf("%d",&x); if(x<1) {y=x;} elseif(x>=1&&x<10) {y=2*x-1;} else {y=3*x-11;} printf("%d",y); }scanf("%d",&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程序都必须有且仅有一个________ 函数。 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语言程序设计 期末考试试题及其答案 一、单项选择题(本大题共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 习题解析与答案 第1章C语言概述 一.简答题 1.概述C语言的主要特点。 【解答】 (1)语言简洁、紧凑,使用方便、灵活。 (2)数据类型丰富,表达能力强。 (3)运算符多样。C语言中的运算符包含的范围非常广泛。 (4)具有结构化的控制语句。如if…else语句、while语句、do while语句、switch 语句、for语句。 (5)允许直接访问物理地址。C语言中含有的位和指针运算,能够直接对内存地址进行访问操作。 (6)所生成的目标代码质量高,可移植性好。 2.构成C语言程序的基本单位是什么?它由哪几部分组成? 【解答】函数是构成C语言程序的基本单位。一个完整的C程序一般由文件包含、宏定义、函数说明、变量和一个或若干个函数组成。 3.C语言程序的运行一般要经过哪几个步骤? 【解答】(1)编辑;(2)编译;(3)连接,生成EXE文件;(4)执行。 二.运行程序写结果 1.输入下面程序并运行。 main() { int a1,a2,x; a1=100; a2=50; x=a1-a2; printf(″x=%d\n″,x); } 【解答】运行结果为:x=50 2.输入下面程序并运行。 main() { int a1,a2,x; a1=10; a2=20; x=a1*a2; printf(″a1=%d,a2=%d\n″,a1,a2); printf(″x=%d\n″,x); } 【解答】运行结果为:a1=10,a2=20 x=200 3.输入下面程序并运行。 #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类型的长度分别为_________和________。 《C语言程序设计》练习及答案 得分评卷人复查人 一、单选题,每小题1分,共60分(将正确答案的序号写在题目的括号中)。 1、结构化程序设计的三种基本控制结构是(D )。 A、主程序、子程序、函数 B、输入、处理、输出 C、调用,返回,转移 D、顺序、选择、循环 2、下列关于C程序变量的叙述, ( D )是错误的。 A、变量名必须由字母或下划线开头。 B、程序中的变量必须在被使用之前定义。 C、不同的基本类型的变量之间可以混合运算。 D、变量的数据类型决定变量的"作用域"。 3、能将C语言编写的源程序转换为目标程序的软件是(C )。 A、编辑程序 B、汇编程序 C、编译程序 D、解释程序 4、以下符号中,合法的用户标识符是( D )。 A、-p B、int C、3ab D、_xt_ 5、以下选项中,与m=n++完全等价的表达式是( C )。 A、m=++n B、m+=n+1 C、m=n, n=n+1 D、n=n+1,m=n 6、若有定义:int aa[8];。则以下表达式中不能代表数组元aa[1]的地址的是(C )。 A、&aa[0]+1 B、&aa[1] C、&aa[0]++ D、aa+1 7、表达式!5&(7+3)&&(4+5)的值是(A)。 A、0 B、1 C、5 D、9 8、以下选项中非法的C语言表达式是(A )。 A、x+1=x+1 B、0<=x<100 C、i=j==0 D、(char)(65+3) 9、在TURBO C中, int类型变量所占字节数是(B )。 A、1 B、2 C、4 D、8 10、C语言中基本的数据类型包括(B)。 A、整型,实型,逻辑型 B、整型,实型,字符型 一、填空共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 C语言程序设计第二版 习题参考答案 Document serial number【LGGKGB-LGG98YT-LGGT8CB-LGUT- C语言程序设计习题参考答案 习题 1 一、判断题 1.在计算机中,小数点和正负号都有专用部件来保存和表示。 2.二进制是由0和1两个数字组成的进制方式。 3.二进制数的逻辑运算是按位进行的,位与位之间没有进位和借位的关系。 4.在整数的二进制表示方法中,0的原码、反码都有两种形式。 5.有符号数有三种表示法:原码、反码和补码。 6.常用字符的ASCII码值从小到大的排列规律是:空格、阿拉伯数字、大写英文字母、小写英文字母。 解:1.F2.T 3.T 4.T 5.T 6.T 二、单选题 1.在计算机中,最适合进行数值加减运算的数值编码是。 A. 原码 B. 反码 C. 补码 D. 移码 2.已知英文小写字母m的ASCII码为十进制数109,则英文小写字母y的ASCII 码为十进制数。 A. 112 B. 120 C. 121 D. 122 3.关于ASCII码,在计算机中的表示方法准确地描述是。 A. 使用8位二进制数,最右边一位为1 B. 使用8位二进制数,最左边一位为1 C. 使用8位二进制数,最右边一位为0 D. 使用8位二进制数,最左边一位为0 4.设在机器字长4位,X=0111B,Y=1011B,则下列逻辑运算中,正确的是 ___________。 A. X∧Y=1000 B. X∨Y=1111 C. X⊕Y=0011 D. ˉY=1000 5.下列叙述中正确的是()。 A.高级语言就是机器语言 B.汇编语言程序、高级语言程序都是计算机程序,但只有机器语言程序才是计算机可以直接识别并执行的程序 C.C语言因为具有汇编语言的一些特性,所以是汇编语言的一种 D.C源程序经过编译、连接,若正确,执行后就能得到正确的运行结果6.用C语言编写的源程序经过编译后,若没有产生编译错误,则系统将()。 A.生成可执行文件B.生成目标文件 C.输出运行结果D.自动保存源文件 7.下列叙述中不正确的是()。 A.main函数在C程序中必须有且只有一个 B. C程序的执行从main函数开始,所以main函数必须放在程序最前面 C. 函数可以带参数,也可以不带参数。 C语言程序设计的试题及答案 C语言程序设计的试题及答案C语言程序设计的试题及答案第一章基础知识 一、填空 1.每个C程序都必须有且仅有一个________函数。 2.C语言程序开发到执行通常要经过6个阶段即编辑、预处理、________、链接、加载和执行。 3.软件是程序,以及______、使用和维护所需要的所有文档。 4.国标中规定:“计算机程序是按照具体要求产生的适合于计算机处理的_________”。 5.程序设计语言按照书写形式,以及思维方式的不同一般分为低级语言和________两大类。 6.C语言是由________组成的。 7.C语言的函数可分为主函数ain、标准库函数和_________。 8.一个函数是由两部分组成的,即:________和函数体。 9.编译是将C语言所编写的源程序________成机器代码,也称为建立目标代码程序的过程。 10.程序是由某种程序设计语言编制出来,体现了编程者的控制思想和对计算机执行操作的要求。不同的任务功能,就会需求不同的软件程序,如:控制计算机本身软硬件协调工作,并使其设备充分发挥效力,方便用户使用的系统软件程序,称为操作系统;而为办公自 动化、管理信息系统、人工智能、电子商务、网络互联等等应用而开发的软件程序,统称为_________。 11.机器语言是以__________形式表示的机器基本指令的集合,是计算机系统唯一不需要翻译可以直接识别和执行的程序设计语言。 12.与机器语言相比,使用汇编语言来编写程序可以用_______来表示指令的操作码和操作对象,也可以用标号和符号来代替地址、常量和变量。 13.在编译程序之前,凡以____开头的代码行都先由预处理程序预处理。 14.C程序的执行均是由执行_________开始。15.函数体即为包含在{}内的部分。它分为________和为完成功能任务由若干个C语句组成的执行部分。 16.C语言程序中一条简单语句是以________字符作为结束符的。 17.C语言是结构化、________的程序设计语言。 18.由于计算机硬件不能直接识别高级语言中的语句,因此,必须经过“_______程序”,将用高级语言编写的程序翻译成计算机硬件所能识别的机器语言程序方可执行。 19.用高级语言编写的程序需翻译成计算机硬件所能识别的机器语言程序方可执行。所以说,用高级语言进行程序设计,其编程效率高,方便易用,但_______没有低级语言高。 20.第一个系统体现结构化程序设计思想的教学工具语言是_______语言。 C 语言程序设计习题答案 习题一 C 语言程序设计概述 一、名词解释 (1)程序P1 (2)程序设计P1 (3)机器语言P1 (4)汇编程序P2 (5)高级语言P2 (6)编译程序P3 (7)解释程序P3 (8)算法P4 (9)结构化的程序设计P9 二、简述题 1. 设计程序时应遵循哪些基本原则?P4 答:正确性、可靠性、简明性、有效性、可维护性、可移植性。 2. 算法的要素是什么?算法具有哪些特点? 答:算法的要素是:操作与控制结构;算法的特点有:有穷性、确定性、有效性、有零个或多个输入、有一个或多个输出。 3. 算法的表示形式有哪几种? 答:算法的表示形式有:自然语言、传统流程图、伪代码、结构化的流程图(N_S 流程图,盒图)。 4. 有哪三种基本结构? 答:三种基本结构是:顺序结构、选择结构和循环结构。 5. 传统流程图与N-S 流程图最大的区别是什么? 答:N-S 流程图去掉了在传统流程图中常用的流程线,使得程序的结构显得更加清晰、简单。 三、用传统流程图、N-S 图分别表示求解以下问题的算法。 1. 有3个数a ,b ,c ,要求按由大到小的顺序把它们输出。 2. 依次将10个数输入,求出其中最大的数 和最小的数并输出。 3. 求1+2+3+…+100的值。 5. 求下列分段函数的值。 6. 求100~200之间的所有素数。 7. 求一元二次方程ax 2+bx+c=0的根。分别考虑d=b 2-4ac 大于0、等于0和小于0三种情况。 四、注释下面C 程序的各个组成部分。 main() /*主函数 */ { /*程序开始 */ int a,k,m; /*定义三个用来存放整数的变量 */ a=10; /*将整数10赋值给变量a */ k=2; /*将整数2赋值给变量k */ m=1; /*将整数1赋值给变量1 */ a=(k+m)*k/(k-m); /*先求出算术表达式的值,并将其赋值给变量a */ printf("%d\n",a); /*在屏幕上打印出变量a 的值 */ } /*程序结束 */ 习题二 数据类型、运算符与表达式 一、选择题 1~10:BCDCB DDBCA 11~20: ADDAA DBADC 21~28: DABAD CDD Y= 3X (X<1) 4X-1 (X=1) 5(X-1)+6 (1 单项选择题 (002) 阅读程序题 (018) 程序填空题 (039) 编写程序题 (070) 一、单项选择题 导读:单项选择题要求从给出的四个备选答案中,选出一个最符合题意的答案。本类习题主要检查对C语言基本概念的掌握情况,读者可根据学习进度选做部分习题。在完成习题的过程中,不但要选出正确的答案,而且要清楚不正确的选项错在何处,以加深对概念的理解。对于掌握不准的问题,应该通过上机实验来检验。 【1.1】以下不正确的C语言标识符是____。 A) int B) a_1_2 C) ab1exe D) _x 【1.2】以下是正确的C语言标识符是____。 A) #define B) _123C) %d D) \n 【1.3】下列四组字符串中都可以用作C语言程序标识符的一组是。 ??? A) print B) i\am C) Pxq D) str_l ??? _3d one_half My->book Cpp ??? oodbs tart$it line# pow ??? aBc 3pai His.age while 【1.4】下面各选项组中,均是C语言关键字的组是。 A) auto,enum,include B) switch,typedef,continue C) signed,union,scanf D) if,struct,type 【1.5】下列不属于C语言关键字的是。 A) default B) register C) enum D) external 【1.6】C语言程序从main()函数开始执行,所以这个函数要写在____。 A) 程序文件的开始B) 程序文件的最后 C) 它所调用的函数的前面D) 程序文件的任何位置 【1.7】下列关于C语言的叙述错误的是____ A) 大写字母和小写字母的意义相同 B) 不同类型的变量可以在一个表达式中 C) 在赋值表达式中等号(=)左边的变量和右边的值可以是不同类型 D) 同一个运算符号在不同的场合可以有不同的含义 【1.8】在C语言中,错误的int类型的常数是。 A) 32768 (超过了范围) B) 0 C) 037 D) 0xAF 【1.9】执行语句printf("%x",-1);屏幕显示____。 A) -1 B) 1 C) –ffff D) ffff 【1.10】已知long i=32768;执行语句printf("%d",i);屏幕显示____。 A) -1 B) -32768C) 1 D) 32768 【1.11】已知long i=65539; 执行语句printf("%d",i);屏幕显示____。 A) 65539 B) -3 C) 3D) 程序不能执行 【1.12】在C语言中,整数-8在内存中的存储形式是。 A) 1111 1111 1111 1000B) 1000 0000 0000 1000 C) 0000 0000 0000 1000 D) 1111 1111 1111 0111 【1.13】C语言中字符型(char)数据在内存中的存储形式是____。 C语言程序设计第三版谭浩强 课后习题答案完整版 第一章 1.5请参照本章例题,编写一个C程序,输出以下信息:************************** V ery Good! ************************** 解: mian() {printf(“**************************”); printf(“\n”); printf(“V ery Good!\n”); printf(“\n”); printf(“**************************”); } 1.6 编写一个程序,输入a、b、c三个值,输出其中最大值。解: mian() {int a,b,c,max; printf(“请输入三个数a,b,c:\n”); scanf(“%d,%d,%d”,&a,&b,&c); max=a; if(max main() { char c1=?C?,c2=?h?,c3=?i?,c4=?n?,c5=?a?; c1+=4; c2+=4; c3+=4; c4+=4; c5+=4; printf("密码是%c%c%c%c%c\n",c1,c2,c3,c4,c5); } 运行结果: 密码是Glmre 3.9求下面算术表达式的值。 (1)x+a%3*(int)(x+y)%2/4 设x=2.5,a=7,y=4.7 (2)(float)(a+b)/2+(int)x%(int)y 设a=2,b=3,x=3.5,y=2.5 (1)2.5 (2)3.5 3.10写出程序运行的结果。 main() {int i,j,m,n; i=8; j=10; m=++i; n=j++; printf(“%d,%d,%d,%d”,i,j,m,n); } 解: 9,11,9,10 3.12 写出下面表达式运算后a的值,设原来a=12。设a和n都已定义为整型变量。 (1)a+=a (2)a-=2 (3)a*=2+3 (4)a/=a+a (5)a%=(n%=2),n的值等于5 (6)a+=a-=a*=a 解: (1) 24 (2) 10 (3) 60 (4) 0 (5) 0 (6) 0 第四章 4.4若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.600_ _y+z=-1.20_ _z+x=-2.40 c1=ˊaˊ_or_97(ASCII) 1、定义一个函数int fun(int a,int b,int c),它的功能是:若a,b,c能构成等边三角形函数返回3,若能构成等腰返回2,一般三角形返回1,若不能构成三角形返回0。 #include <> int fun(int a,int b,int c) { if(a+b>c && b+c>a && a+c>b) { if(a==b && b==c ) return 3; else if(a==b||b==c||a==c) return 2; else return 1; } else return 0; } void main() { int a,b,c,shape; printf("\nInput a,b,c: "); scanf("%d%d%d",&a,&b,&c); printf("\na=%d, b=%d, c=%d\n",a,b,c); shape =fun(a,b,c); printf("\n\nThe shape : %d\n",shape); } 2、编写一个程序,将两个变量的值交换, 例如变量a中的值 原为 3,b中的值原为8,程序运行后 a 中的值为8,b中的值为3。 #include <> void fun(int *x,int *y) { int t; t=*x;*x=*y;*y=t } void main() { int a=3,b=8; printf("%d %d\n",a,b); fun(&a,b); printf("%d %d\n",a,b); } 3、从键盘输入3个数,将最大值放在变量a中,最小值放在变量c中。 例如,输入的数为:55 12 34, 输出结果应当是:a=,b=,c=。 #include <> void fun(float *p,float *q,float *s) { float k; if (*p<*q) { k=*p;*p=*q;*q=k;} if (*q<*s) { k=*s;*s=*p;*p=k;} . 导读:在程序填空题中,已经给出了程序的主干,读者首先要理解程序的思路,再选择正确的内容填入空白处,使程序完成既定的功能。这类习题的设计就是要引导读者逐步掌握编程的方法。本节习题的难度适中,可能有些典型的程序在课堂上已经有所接触,读者一定要独立完成它,这样就可以逐步提高自己的编程能力。在程序设计语言学习的中期,读者对程序设计已经有了初步的了解,而自己编写程序又不知从何处入手,此时解答此类题目可以避免盲目性,从而提高学习的效率。 【3.1】下面程序的功能是不用第三个变量,实现两个数的对调操作。 #include c语言程序设计第五版习 题答案 Prepared on 24 November 2020 习题解析与答案 第1章C语言概述 一.简答题 1.概述C语言的主要特点。 【解答】 (1)语言简洁、紧凑,使用方便、灵活。 (2)数据类型丰富,表达能力强。 (3)运算符多样。C语言中的运算符包含的范围非常广泛。 (4)具有结构化的控制语句。如if…else语句、while语句、dowhile语句、switch语句、for语句。 (5)允许直接访问物理地址。C语言中含有的位和指针运算,能够直接对内存地址进行访问操作。 (6)所生成的目标代码质量高,可移植性好。 2.构成C语言程序的基本单位是什么它由哪几部分组成 【解答】函数是构成C语言程序的基本单位。一个完整的C程序一般由文件包含、宏定义、函数说明、变量和一个或若干个函数组成。 3.C语言程序的运行一般要经过哪几个步骤 【解答】(1)编辑;(2)编译;(3)连接,生成EXE文件;(4)执行。 二.运行程序写结果 1.输入下面程序并运行。 main() { inta1,a2,x; a1=100; a2=50; x=a1-a2; printf(″x=%d\n″,x); } 【解答】运行结果为:x=50 2.输入下面程序并运行。 main() { inta1,a2,x; a1=10; a2=20; x=a1*a2; printf(″a1=%d,a2=%d\n″,a1,a2); printf(″x=%d\n″,x); } 【解答】运行结果为:a1=10,a2=20 x=200 三.编程题 1.参照本章例题,编写一个C程序,用于显示如下信息: ************************* IloveCprograms! ************************* 【分析与提示】 ①要有文件包含语句#include<>。C语言中没有数据的输入、输出等功 能,数据的输入、输出都是通过调用系统提供的库函数scanf和printf 等来实现的。这些函数的说明都包括在文件中。 ②main是主函数的名称。用{}括起来的内容是函数体,函数体由若干 条语句组成,这是计算机要执行的部分,每条语句以分号“;”结束。 ③注意显示的信息有三行,所以要用到换行符“\n”。 参考代码: #include<> main() { printf("************************\n"); printf("IloveCprograms!\n"); printf("************************\n"); } 第2章数据类型及其运算一.简答题 1.C语言中的数据类型主要有哪几类 【解答】短整型(shortint) 整型整型(int) 长整型(longint) 基本类型字符型(char)(float) 实型(浮点型) 双精度(double) 枚举类型(enum) 数组类型C语言程序设计第三版习题库答案
C语言程序设计程序填空题库及答案
C语言程序设计试题集与答案解析
C语言程序设计期末考试试题(含答案)
c语言程序设计第五版习题答案
C语言程序设计期末练习填空题.docx
(完整版)C语言程序设计练习及答案
大学计算机C语言程序设计(填空题)
C语言程序设计第二版习题参考答案
C语言程序设计的试题及答案
C语言程序设计习题答案
C语言程序设计试题集及答案
C语言程序设计第三版谭浩强课后习题答案完整版
C语言程序设计练习题(含程序及参考答案)
(完整word版)C语言程序设计填空题及答案复习用
c语言程序设计第五版习题答案