资源简介 《C语言程序设计》练习题一、单项选择题单项选择题要求从给出的四个备选答案中,选出一个最符合题意的答案。本类习题主要检查对C语言基本概念的掌握情况。在完成习题的过程中,不但要选出正确的答案,而且要清楚不正确的选项错在何处,以加深对概念的理解。对于掌握不准的问题,应该通过上机实验来检验。1.下列四组字符串中都可以用作C语言程序标识符的一组是____。 A) print B) i\am C) Pxq D) str_l _3d one_half My->book Cpp oodb start$it line# pow aBc 3pai His.age while2.C语言程序从main()函数开始执行,所以这个函数要写在____。A) 程序文件的开始 B) 程序文件的最后C) 它所调用的函数的前面 D) 程序文件的任何位置3.下列关于C语言的叙述错误的是____。A) 大写字母和小写字母的意义相同B) 不同类型的变量可以在一个表达式中C) 在赋值表达式中等号(=)左边的变量和右边的值可以是不同类型D) 同一个运算符号在不同的场合可以有不同的含义4.在C语言中,错误的int类型的常数是____。A) 32768 B) 0 C) 037 D) 0xAF5.已知 long i=65539;执行语句printf("%d",i);屏幕显示____。A) 65539 B) -3 C) 3 D) 程序不能执行6.在C语言中,整数-8在内存中的存储形式是____。A) 1111 1111 1111 1000 B) 1000 0000 0000 1000C) 0000 0000 0000 1000 D) 1111 1111 1111 01117.C语言中字符型(char)数据在内存中的存储形式是____。A) 原码 B) 补码 C) 反码 D) ASCII码8.将字符g赋给字符变量c,正确的表达式是____。A) c=\147 B) c="\147" C) c='\147' D) c='0147'9.已知:char a;int b;float c;double d;执行语句"c=a+b+c+d;"后,变量c的数据类型是____。A) int B) char C) float D) double10.温度华氏和摄氏的关系是: C=-(F-32)。已知:float C,F;由华氏求摄氏的正确的赋值表达式是____。A) C=5/9(F-32) B) C=5*(F-32)/9C) C=5/9*(F-32) D) 三个表达式都正确11.逗号表达式"(a=3*5,a*4),a+15"的值是____。A) 15 B) 60 C) 30 D) 不确定12.如果int a=1,b=2,c=3,d=4;则条件表达式"aA) 1 B) 2 C) 3 D) 413.已知int i=10;表达式"20-0<=i<=9"的值是____。A) 0 B) 1 C) 19 D) 2014.使用语句scanf("x=%f,y=%f",&x,&y);输入变量x、y的值(□代表空格),正确的输入是____。A) 1.25,2.4 B) 1.25□2.4 C) x=1.25,y=2.4 D) x=1.25□y=2.415.已知int x=(1,2,3,4);变量x的值是____。A) 1 B) 2 C) 3 D) 416.已知int i=1,j=0;执行下面语句后j的值是____。while(i)switch(i){ case 1: i+=1;j++;break;case 2: i+=2;j++;break;case 3: i+=3;j++;break;default: i--;j++;break;}A) 1 B) 2 C) 3 D) 死循环17.求取满足式 12+22+32+ …… +n2 ≤1000的n,正确的语句是____。A) for(i=1,s=0;(s=s+i*i)<=1000;n=i++) ;B) for(i=1,s=0;(s=s+i*i)<=1000;n=++i) ;C) for(i=1,s=0;(s=s+i*++i)<=1000;n=i) ;D) for(i=1,s=0;(s=s+i*i++)<=1000;n=i) ;18.下面的for语句____。for(x=0,y=10;(y>0)&&(x<4);x++,y-- ) ;A) 是无限循环 B) 循环次数不定 C) 循环执行4次 D) 循环执行3次19.已知 char a[][20]={"Beijing","shanghai","tianjin","chongqing"};语句printf("%c",a[30]);的输出是____。A) <空格> B) n C) 不定 D) 数组定义有误20.对二维数组的正确说明是____。A) int a[][]={1,2,3,4,5,6}; B) int a[2][]={1,2,3,4,5,6};C) int a[][3]={1,2,3,4,5,6}; D) int a[2,3]={1,2,3,4,5,6};21.对字符数组str赋初值,str不能作为字符串使用的一个是____。A) char str[]="shanghai";B) char str[]={"shanghai"};C) char str[9]={'s','h','a','n','g','h','a','i'};D) char str[8]={ 's','h','a','n','g','h','a','i'};22.如果一个变量在整个程序运行期间都存在,但是仅在说明它的函数内是可见的,这个变量的存储类型应该被说明为____。A) 静态变量 B) 动态变量 C) 外部变量 D) 内部变量23.在一个C源程序文件中,若要定义一个只允许在该源文件中所有函数使用的变量,则该变量需要使用的存储类别是____。A) extern B) register C) auto D) static24.定义一个函数实现交换x和y的值,并将结果正确返回。能够实现此功能的是____。A) swapa(int x,int y) B) swapb(int *x,int *y){ int temp; { int temp;temp=x;x=y;y=temp; temp=x;x=y;y=temp;} }C) swapc(int *x,int *y) D) swapd(int *x,int *y){ int temp; { int *temp;temp=*x;*x=*y;*y=temp; temp=x;x=y;y=temp;} }25.在下列结论中,只有一个是错误的,它是____。A) C语言允许函数的递归调用B) C语言中的continue语句,可以通过改变程序的结构而省略C) 有些递归程序是不能用非递归算法实现的D) C语言中不允许在函数中再定义函数26.说明语句"int (*p)( );"的含义是____。A) p是一个指向一维数组的指针变量B) p是指针变量,指向一个整型数据C) p是一个指向函数的指针,该函数的返回值是一个整型D) 以上都不对27.设有说明int (*p)[4];其中的标识符p是____。A) 4个指向整型变量的指针变量B) 指向4个整型变量的函数指针C) 一个指向具有4个整型元素的一维数组的指针D) 具有4个指向整型变量的指针元素的一维指针数组28.已知:char s[10], *p=s,则在下列语句中,错误的语句是____。A) p=s+5; B) s=p+s; C) s[2]=p[4]; D) *p=s[0];29.已知:int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};int (*ptr)[3]=a,*p=a[0];则以下能够正确表示数组元素a[1][2]的表达式是____。A) *(*(a+1)+2) B) *(*(p+5)) C) (*ptr+1)+2 D) *((ptr+1)[2])30.已知:int a[ ]={1,2,3,4,5,6,7,8,9,10,11,12},*p=a;则值为3的表达式是____。A) p+=2,*(p++) B) p+=2,*++p C) p+=2,*p++ D) p+=2,++*p32.函数的功能是交换变量x和y中的值,且通过正确调用返回交换的结果。能正确执行此功能的函数是____。A) funa (int *x, int *y) B) funb (int x, int y){ int *p; { int t;p=x;*x=*y;*y=*p; t=x;x=y;y=t;} }C) func (int *x, int *y) D) func (int *x, int *y){ *x=*y;*y=*x; { *x=*x+*y;*y=*x-*y;*x=*x-*y;} }33.有定义如下:struct sk{ int a;float b;}data ,*p;如果 p=&data;则对于结构变量data的成员a的正确引用是____。A)(*).data.a B) (*p).a C) p->data.a D) p.data.a34.已知:struct st{ int n;struct st *next;};static struct st a[3]={1,&a[1],3,&a[2],5,&a[0]},*p;如果下述语句的显示是2,则对p的赋值是____。printf("%d",++(p->next->n));A) p=&a[0]; B) p=&a[1]; C) p=&a[2]; D) p=&a[3];35.fscanf函数的正确调用形式是____。A) fscanf (文件指针, 格式字符串, 输出列表);B) fscanf (格式字符串, 输出列表, 文件指针);C) fscanf (格式字符串, 文件指针, 输出列表);D) fscanf (文件指针, 格式字符串, 输入列表);36.使用fgetc函数,则打开文件的方式必须是____。A) 只写 B) 追加 C) 读或读/写 D) 参考答案B和C都正确37.已知宏定义#define N 3#define Y(n) ((N+1)*n)执行语句z=2*(N+Y(5+1));后,变量z的值是____。A) 42 B) 48 C) 52 D) 出错38.已知宏定义 #define SQ(x) x*x,执行语句printf("%d",10/SQ(3));后的输出结果是____。A) 1 B) 3 C) 9 D) 10二、 阅读程序题阅读程序对于初学者来说很重要,一方面可以巩固所学的语法知识,另一方面通过阅读别人写好的程序来打开自己的思路,就所谓见多识广。通过阅读理解程序,从给出的四个备选参考答案中,选择程序的正确输出。如果选择有误,就要认真分析原因,是概念方面的错误还是对程序逻辑理解不对,从而加深对语法规则的理解,提高程序设计能力。程序设计语言是开发程序的一个工具,学习语言的目的是为了编写程序来解决实际问题,所以特别提倡通过实际上机来检验备选答案,增强动手能力。1.下面程序的输出结果是____。#include main( ){ int x=10;{ int x=20;printf ("%d,", x);}printf("%d\n", x);}A) 10,20 B) 20,10 C) 10,10 D) 20,202.以下程序的输出结果是____。main( ){ int x=10, y=10; printf("%d %d\n", x――, ――y);}A) 10 10 B) 9 9 C) 9 10 D) 10 93.下面程序可能的输出结果是____。main(){ int a,b;scanf("%2d%3d",&a,&b);printf("a=%d b=%d\n",a,b);}A) a=12 b=34 B) a=123 b=45 C) a=12 b=345 D) 语句右错误4.以下程序段的输出结果是____。int a=10,b=50,c=30;if(a>b)a=b;b=c;c=a;printf("a=%d b=%d c=%d\n",a,b,c);A) a=10 b=50 c=10 B) a=10 b=30 c=10C) a=50 b=30 c=10 D) a=50 b=30 c=505.以下程序的输出结果是____。main(){ int a=0,b=1,c=0,d=20;if(a) d=d-10;else if(!b)if(!c) d=15;else d=25;printf("d=%d\n",d);}A) d=10 B) d=15 C) d=20 D) d=256.下面程序的输出结果为____。main(){ int a=1,b=0;switch(a){ case 1: switch (b){ case 0: printf("**0**"); break;case 1: printf("**1**"); break;}case 2: printf("**2**"); break;}}A) **0** B) **0****2** C) **0****1****2** D) 有语法错误7.以下程序的输出结果是____。main(){ char *s="12134211";int v1=0,v2=0,v3=0,v4=0,k;for(k=0;s[k];k++)switch(s[k]){ case '1': v1++;case '3': v3++;case '2': v2++;default: v4++;}printf("v1=%d, v2=%d, v3=%d, v4=%d\n",v1,v2,v3,v4);}A) v1=4,v2=2,v3=1,v4=1 B) v1=4,v2=9,v3=3,v4=1C) v1=5,v2=8,v3=6,v4=1 D) v1=4,v2=7,v3=5,v4=88.下面程序的输出是____。main(){ int num=0;while(num<=2){ num++;printf("%d\n",num);}}A) 1 B) 1 C) 1 D) 12 2 23 349.从键盘上输入"446755"时,下面程序的输出是____。#include main(){ int c;while((c=getchar())!='\n')switch(c -'2'){ case 0:case 1: putchar(c+4);case 2: putchar(c+4);break;case 3: putchar(c+3);default: putchar(c+2);break;}printf("\n");}A) 888988 B) 668966 C) 88898787 D) 6689878710.下面程序的输出结果是____。main(){ int i,j,x=0;for(i=0;i<2;i++){ x++;for(j=0;j<-3;j++){ if(j%2)continue;x++;}x++;}printf("x=%d\n",x);}A) x=4 B) x=8 C) x=6 D) x=1211.下面程序的输出结果是____。#include main( ){ int n[3][3], i, j;for(i=0;i<3;i++ )for(j=0;j<3;j++ )n[i][j]=i+j;for(i=0;i<2;i++ )for(j=0;j<2;j++ )n[i+1][j+1]+=n[i][j];printf("%d\n", n[i][j]);}A) 14 B) 0 C) 6 D) 不确定12.下面程序的输出结果是____。#include main( ){ int a[4][5]={1,2,4,-4,5,-9,3,6,-3,2,7,8,4};int i,j,n;n=9;i=n/5;j=n-i*5-1;printf("a[%d][%d]=%d\n", i,j,a[i][j]);}A) 6 B) -3 C) 2 D) 不确定13.下面程序的输出结果是____。#include main( ){ char s1[50]={"some string *"},s2[]={"test"};printf("%s\n", strcat(s1,s2));}A) some string * B) testC) some stritest D) some string *test14.下面程序的输出结果是____。#include f(char *s){ char *p=s;while(*p!='\0')p++;return(p-s);}main(){ printf("%d\n",f("ABCDEF"));}A) 3 B) 6 C) 8 D) 015.下面程序的输出结果是____。#include #include main( ){ char str[100] ="How do you do";strcpy( str + strlen(str)/2, "es she");printf("%s\n", str);}A) How do you do B) es sheC) How are you D) How does she16.下面程序的输出结果是____。#include func(int a,int b){ int c;c=a+b;return(c);}main(){ int x=6,y=7,z=8,r;r=func((x--,y++,x+y),z--);printf("%d\n",r);}A) 11 B) 20 C) 21 D) 3117.下面程序的输出结果是____。main(){ int a[]={1,2,3,4,5,6};int *p;p=a;printf("%d ",*p);printf("%d ",*(++p));printf("%d ",*++p);printf("%d ",*(p--));p+=3;printf("%d %d ",*p,*(a+3));}A) 1 2 3 3 5 4 B) 1 2 3 4 5 6 C) 1 2 2 3 4 5 D) 1 2 3 4 4 518.下面程序的输出结果是____。#include main ( ){ int a[]={1, 2, 3, 4, 5} ;int x, y, *p;p=&a[0];x=*(p+2);y=*(p+4);printf("%d,%d,%d\n", *p, x, y);}A) 1,3,5 B) 1,2,3 C) 1,2,4 D) 1,4,519.下面程序的输出结果是____。#include "string.h"fun(char *w,int n){ char t,*s1,*s2;s1=w;s2=w+n-1;while(s1{ t=*s1++;*s1=*s2--;*s2=t;}}main(){ static char *p="1234567";fun(p,strlen(p));printf("%s",p);}A) 7654321 B) 1717171 C) 7171717 D) 171171720.下面程序的输出结果是____。#include char *p = "abcdefghijklmnopq" ;main( ){ int i=0;while( *p++!='e' );printf("%c\n", *p);}A) c B) d C) e D) f21.下面程序的输出结果是____。#include "stdio.h"struct str1{ char c[5];char *s;};main( ){ struct str1 s1[2]={ {"ABCD""EFGH"},{"IJK","LMN"} };struct str2{ struct str1 sr;int d;}s2={"OPQ","RST",32767};struct str1 *p[2];p[0]=&s1[0];p[1]=&s1[1];printf("%s",++p[1]->s); /* ① */printf("%c",s2.sr.c[2]); /* ② */}① A) LMN B) MN C) N D) IJK② A) O B) P C) Q D) R22.以下程序的输出结果是____。struct st{ int x,*y;}*p;int s[]={10,20,30,40};struct st a[]={1,&s[0],2,&s[1],3,&s[2],4,&s[3]};main(){ p=a;printf("%d\n",++(*(++p)->y));}A) 10 B) 11 C) 20 D) 21三、程序填空题在程序填空题中,已经给出了程序的主干,读者首先要理解程序的思路,再选择正确的内容填入空白处,使程序完成既定的功能。这类习题的设计就是要引导读者逐步掌握编程的方法。本节习题的难度适中,可能有些典型的程序在课堂上已经有所接触,读者一定要独立完成它,这样就可以逐步提高自己的编程能力。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);}2.下面的程序的功能是求一维数组中的最小元素。findmin(int *s,int t,int *k){ int p;for(p=0,*k=p;pif(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.下面程序的功能是计算1-3+5-7+ …… -99+101的值。main(){ int i,t=1,s=0;for(i=1;i<=101;i+=2){ ① ;s=s+t;② ;}printf("%d\n",s);}4.下面程序的功能是将形参x的值转换为二进制数,所得的二进制数放在一个一维数组中返回,二进制数的最低位放在下标为0的元素中。fun(int x,int b[]){ int k=0,r;do{ r=x% ① ;b[k++]=r;x/= ② ;}while(x);}5.下面程序的功能是输出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);}}6.下面程序的功能是输出100以内的个位数为6、且能被3整除的所有数。main(){ int i,j;for(i=0; ① ;i++){ j=i*10+6;if( ② ) countinue;printf("%d",j);}}7.下面程序的功能是用辗转相除法求两个正整数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;}③ ;}8.下面程序的功能是删除字符串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);}9.下面程序的功能是显示具有n个元素的数组s中的最大元素。#define N 20main(){ int i,a[N];for(i=0;iscanf("%d",&a[i]);printf("%d\n", ① );}fmax(int s[],int n){ int k,p;for(p=0,k=p;pif(s[p]>s[k]) ② ;return(k);}10.下面的函数是一个求阶乘的递归调用函数。facto(int n){ if( n == 1 ) ① ;else return( ② );}11.用递归实现将输入小于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( ④ )⑤ ;}12.下面函数的功能是将一个整数存放到一个数组中。存放时按逆序存放。例如: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);}四、编写程序题1.编写一个简单计算器程序,输入格式为:data1 op data2。其中data1和data2是参加运算的两个数,op为运算符,它的取值只能是+、-、*、/。2.输入一个正整数,要求以相反的顺序输出该数。例如输入12345,输出位54321。3.编写程序,以字符形式输入一个十六进制数,将其变换为一个十进制整数后输出。4.编写程序,输入一个十进制整数,将其变换为二进制后储存在一个字符数组中。5.编写程序,输出1000以内的所有完数及其因子。所谓完数是指一个整数的值等于它的因子之和,例如6的因子是1、2、3,而6=1+2+3,故6是一个完数。6.编写一个函数实现将字符串str1和字符串str2合并,合并后的字符串按其ASCII码值从小到大进行排序,相同的字符在新字符串中只出现一次。7.编写程序,从键盘输入一行字符串,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件"test"中保存。 展开更多...... 收起↑ 资源预览