一、单项选择
1、有以下程序B
void fun(int a,int b,int c)
{ a=3;b=4;c=5;}
main()
{
int x=1,y=2;z=3;
fun(x,y,z);
printf(“%d,%d,%d\n”,x,y,z);
}
输出结果是
A. 3,4,5 B. 1,2,3 C. 5,4,3 D. 3,2,1
2、下列叙述错误的是D
A. if语句允许用户选择是否执行某一个操作
B. if~else语句允许用户选择是否执行两个操作中的某一个操作
C. switch语句允许用户选择执行多个操作的某一个操作
D. 多分支选择结构只能使用switch语句实现
3、有以下定义A
int a=013;
int b=15;
则表达式a&b的值为
A.13 B. 1 C.15 D.4
4、下述对C语言字符数组的描述中错误的是C
A. 字符数组可以存放字符串
B. 字符数组中的字符串可以整体输入输出
C. 可以在赋值语句中通过赋值运算符“=”对字符数组整体赋值
D. 不可以用关系运算符对字符数组中的字符串进行比较
5、假定p所指对象的值为28,p+1所指对象的值为62,则*p++的值为A
A.28 B.29 C.62 D.63
6、若用数组名作为函数调用时的实参,则实际上传递给形参的是A
A. 数组首元素的地址 B. 数组元素的个数
C. 数组的第一个元素的值 D. 数组中全部元素的值
7、设有如下定义A
structsk
{inta;float b;}data,*p;
如有p=&data; 则对data中的a域的正确引用是
A. (*p).a B. (*p).data.a C. p.data.a D. p->data.a
8、while(!x)中的!x与下面哪个条件等价B
A. x==0 B. x!=0 C. x==1 D.x!=1
9、设x和y均为逻辑值,则x||y为假的条件是D
A. 其中一个为真 B. 其中一个为假 C. 两者均为真 D. 两者均为假
10、C语言规定为字符串结束标志的是C
A. \n B. \r C. \0 D. \o
11、下列程序的输出是B
main()
{
unsigned a=32765;
a=a+3;
printf(“a=%d\n”,a);
}
A. a=32768 B. a=-32768 C. a=-1 D. a=1
12、执行以下程序段,输出结果为B
main()
{ ints=1,t=1,a=3,b=4;
if(a>0)s++;
if(a>b)t+=s;
else if(a==b)t=5;
else t=s++*2;
printf(“%d\n”,t);
}
A. 3 B. 4 C. 5 D. 6
13、假定a为一数组名,则下面的哪一种表示有错误B
A. a[i] B.*a++ C. *a D. *(a+1)
14、如下列变量均合法定义,则以下合法的赋值表达式是D
A. a=int(3.5) B. 3=a C. ++(a+b) D. a<<=3
15、下面标识符合法的是A
A. a8b B. 3ab C. if D.ok?
16、如存在以下程序,则输出结果为B
char s[]=”\\\12345\\\012”;
printf(“%d\n”,strlen(s));
A.5 B.6 C.7 D.14
17、设有以下说明语句C
struct stu
{ int num;
char xm[10];
float cj;
}s[20];
则数组a所占空间大小为多少字节
A.16 B. 14 C .320 D .280
18、设有以下函数C
f(int i)
{ int j=0;
static int s=1;
return(s++)+(++i)+(++j);
}
main()
{int i;
for(i=0;i<2;i++)printf(“%d”,f(0));
}
A.23 B.35 C.34 D. 24
19、下列叙述正确的是D
A. C语言源程序可以直接在DOS环境中运行
B.Turbo C系统不提供编译和连接C 程序的功能
C.编译C语言源程序得到目标程序可以直接在DOS环境中运行
D.C语言源程序连接得到的可执行程序可以直接在DOS环境中运行
20、下列叙述错误的是D
A.break语句可以使程序从switch语句中跳出来
B.continue 语句是为了结束本次循环,而不是终止整个循环的执行
C.break语句是为了使程序流程跳出循环体,提前结束循环
D.在switch语句中使用continue 和break语句的作用相同
21、下面的哪一个保留字不能作为函数返回类型( B )。
A. long B. auto C. float D. char
22、以下程序的输出结果是( C )。
main()
{intk=017;
printf(“%d,%o,%x\n”,k,k,k);
}
A. 17,17,17 B. 17,21,11 C. 15,17,f D. 15,017,0xf
23、在C语言中,合法的字符常量是( D )。
A. ’\xfg’ B. ’\083’ C. ”\0” D. ’\r’
24、以下程序的输出结果为( B )。
main()
{charx=012;
printf(“%o\n”,x<<2);
}
A. 10 B. 50 C. 40 D. 48
25、若有以下语句,使得a=’a’,d=9,c=’b’,则输入格式正确的是(u 空格,CR为换行符)( C )。
int i;
char a,b;
scanf(“%c%d%c”,&a,&i,&b);
A. au9ub B. a9ub C. a9b D. a CR 9 CR b
26、C语言程序从(D )开始执行。
A. 程序中的第一个语句 B. 程序中的第一个函数
C. 程序中的第一个可执行语句 D. 程序中的main函数
27、有如下程序段,其执行后的输出结果为( B )。
main()
{inti=8;
while(i>1) {–i; printf(“%d”,i–);}
}
A. 753 B. 7531 C. 8642 D. 864
28、假定a为一维数组,pa是指向数组a的指针变量,则访问a[i]的正确方式为(B )。
A. *a+i B. *(pa+i) C. *pa+i D. pa+i
29、以下程序运行后,输出结果为( B )。
main()
{static char s[]=”ABCDEFGH”, *t=”ABCDFGH”;
int i;
for (i=0;s[i]==t[i];i++);
printf(“%d\n”,t[i]-s[i]);}
A. 0 B. 1 C. –1 D. 死循环
30、在下列的数组定义中,哪一个有语法错误( C )。
A. int a[]={1,2,3,4,5}; B. int a[10]={0};
C. int a[][]={0,2,4,6,8}; D. int a[][5]={1,2,3,4,5,6,7};
二、填空题
1、若要在程序中使用标准输入输出库函数时,则必须在程序的开始用#include命令中使用stdio.h头文件。
2、设有语句int a=5;则执行语句a+=a-=a*a;后,变量a的值是-40。
3、数学表达式+2x-3y*(x-y)的c语言表达式是(x+y)/(x-y)+2*x-3*y*(x-y)。
4、假定x和y为double型,则表达式x=3,y=x+x/2的值是500000。
5、在每一个c语言程序中都必须包含有这样一个函数,该函数的函数名为main()。
6、函数是c语言程序的基本单位。
7、设有如下定义
int arr[]={1,2,3,4,5};
int *p=arr;
*(p+2)+=2;
printf(“%d,%d\n”,*p,*(p+2));
则输出结果为1.5 。
8、执行以下程序段后,输出结果为35
main()
{int a[]={1,2,3,4,5,6};
int *p=a+2, *q=0;
q=p+2;
printf(“%d%d\n”,*p,*q);
}
9、有如下程序,则其输出结果为5
main()
int a=3,b=-2,c=5;
if(a<b)
if(b<0) c=0;
else c++;
printf(“%d\n”, c);
}
10、下面程序的运行结果是4
main()
{int x=5,y=3;
printf(“%d”,(x++,++y));
}
11、假定a是一个字符数组名,则元素a[5]的字节地址为a+5。
12、如有以下程序段
union ss
{int i;
char a;
}s;
s.i=512
s.a=2
printf(“%d”,s.i)
则输出结果为514。
13、以下程序段的输出结果是AB348
#include “string.h”
main()
{char *p,*q,s[80]=”ABCDEFGHIJK”;
p=”1234”;q=”5678”;
strcpy(s+2,p+2);strcpy(s+4,q+3);
printf(“%s”,s);
}
14、结构化程序设计规定的三种基本结构是顺序结构、选择结构和循环结构。
15、以下程序的输出结果是31。
main()
{int a=0,i;
for(i=0;i<5;i++)
switch(i)
{case 0:
case 2:a+=3;
default:a+=5;
}
}
printf(“%d\n”,a);
}
16、c语言程序中的每条基本语句以;作为结束符。
17、设a,b和c都是int型变量,且a=7,b=8,c=9,则下列表达式!((a<b)&&!c||1)的值为0 。
18、设x,y均为int型变量,则执行语句:x=y=5;x++||++y后,y的值为5。
19、表达式(float)25/4的值为6.250000。
20、函数的返回表达式的类型与函数的类型不一致时,则返回值的类型由函数类型决定。
21、有如下程序:
#define N 2
#define M N+1
#define NUM 2*(M)-1
main()
{int i;
for(i=1;i<=NUM;i++)
printf(“%d\n”,i);
}
该程序中的for循环执行的次数是5。
22、设x、y均为整型变量,且x=8,y=7,则以下语句的输出结果是9,7。
printf(“%d,%d\n”,++x,y++);
23、表达式x=x+1表示成增量表达式为x++或++x。
24、instrlen函数的功能是计算str所指字符的长度,并作为函数值返回。请填空。
intinstrlen (char *str)
{inti;
for(i=0;str[i] 或str[i]!=’\0’;i++);
return (i);
}
25、当不需要函数返回任何值时,则应把该函数类型定义为void。
26、如有以下定义 inta[10]={1,2,3};则数组x在内存中所占字节数是20。
27、若有以下语句
main()
{char*s=”1234\”\067”;
printf(“%s”,s);
输出结果为123”67。
28、若有以下程序段:
main()
{inta=511;
unsigned char *p;
p=(unsigned char*)&a;
printf(“%d”,*p);
}
输出结果为255。
29、若有定义语句 “inta=25,b=10,c=15;”以下语句执行结果是###26,9,15。
if(a++<=25&&b–<=2 && c++)
printf(“***%d,%d,%d\n”,a,b,c);
else printf(“###%d,%d,%d\n”,a,b,c);
30、设有下列运算符:<<、/、++、&&、<=,其中优先级最高的是++。
三、写出下列程序(程序段)的运算结果
1、main()
{union ss
{char s[2];
int i;
}a;
a.i=123;
a.s[0]=3; a.s[1]=2;
printf(“%d”,a.i);
}—-515
2、void f(int x,inty, int *p1, int *p2)
{*p1=2*x; *p2=x*y;}
main()
{int a,b,c,d;
a=9; b=7;
f(a,b,&c,&d);
printf(“%d,%d\n”,c,d);
}—-18,63
3、main()
{int a=3;
while (–a)
printf(“%d”,a–);
}—–2
4、void main()
{ int a=10,b=20;
printf(“%d %d\n”,a,b);
{int b;
a*=4;
int b=a+35;
printf(“%d %d\n”,a,b);}
printf(“%d %d\n”,a,b);
}—-10 20
40 75
40 20
5、main()
{inta[10]={7,4,8,6,9,5,3,10,2,1};
int i, max, min;
max=min=0;
for(i=0;i<10;i++)
if (a[max]<a[i])max=i;
else if(a[min]>a[i])min=i;
i=a[max];a[max]=a[9]; a[9]=i;
i=a[min];a[min]=a[0]; a[0]=i;
for(i=0;i<10;i++) printf(“%5d”,a[i]);
}—-10 4 8 6 9 5 31 2 7
6、f(int a[],int m, int n)
{inti,s=0;
for(i=m;i<n;i+=i+2)
s=s+a[i];
return (s);
}
main()
{intx,a[]={9,8,7,6,5,4,3,2,1};
x=f(a,3,5);
printf(“%d\n”,x);}———–6
7、main()
{charch[2][5]={“3773”,”6363”}, *p[2];
int i,j,s=0;
for(i=0;i<2;i++)
p[i]=ch[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]!=’\0’;j+=2)
s=10*s+p[i][j]-‘0’;
printf(“%d\n”,s);}———3766
8、main()
{inta[5]={1,3,5,7,9},b[3]={2,4,6},*p,*q,i,j;
p=a;q=b;
printf(“\n”);
while(p<a+5&& q<b+3)
if(*p<*q) printf(“%3d”,*p++);
else printf(“%3d”,*q++);
while(p<a+5)printf(“%3d”,*p++);
while(q<b+3)printf(“%3d”,*q++);
}—————1 2 3 4 5 6 7 9
9、void main()
{chara[]=”abacdaabcabagfcad”;
int i1=0,i2=0,i=0;;
while(a[i])
{if(a[i]==’a’) i1++;
if(a[i]==’b’) i2++;
i++;}
printf(“i1=%d,i2=%d\n”,i1,i2);}———–i1=7,i2=3
10、main()
{inta[]={7,4,8,6,9,5,3,10,2,1};
int i,j,k;
for(j=3;j<=9;j++)
{k=a[j];
i=j-3;
while(i>=0 &&a[i]>k) {a[i+3]=a[i];i=i-3;}
a[i+3]=k;
}
for(i=0;i<=9;i++)
printf(“%d ”,a[i]);
}———–1 4 2 3 9 5 6 1 0 8 7
11、void main()
{int s=0,i;
for( i=1; ; i++)
{if(s>50) break;
if(i%3==0) s+=i;
}
printf(“i=%d,s=%d\n”,i,s);
}—————————-i=19,s=63
12、void main()
{int s1=0,s2=0,i;
for(i=0;i<10;i++)
if(i%2) s1=s1+i;
else s2=s2+i;
printf(“s1=%d,s2=%d\n”,s1,s2);}——————s1=25,s2=20
13、f(int a)
{int b=0;
static c=5;
b=b+3;
c=2*c;
return(a+b+c);
}
main()
{int a=2,i;
for(i=0;i<=2;i++)
printf(“%d”,f(a));
}————–152545
14、main()
{int a,b,c;
a=9; b=5;
c=max(a,b);
printf(“max=%d”,c);
}
int max(int x, int y)
{int z;
if (x>y) z=x;
else z=y;
return (z);
}—————–max=9
15、main()
{int a[3][3]={1,1,1},i,j;
for(i=1;i<3;i++)
for(j=i;j<3;j++)
{a[i][j]=a[i-1][j]+a[i-1][j-1];
a[j][i]=a[j][i]-a[i][j];
}
for(i=1;i<3;i++){printf(“\n”);
for(j=1;j<3;j++)
printf(“%5d”,a[i][j]);
}
}————-0 2
-2 0
四、写出下列程序(段)或函数的功能
1、float fac(int n)
{float f;
if(n<0)
printf(“error!”);
else
if(n==0||n==1)f=1;
else f=fac(n-1)*n;
return f;
}
main()
{int n;
float y;
scanf(“%d”,&n);
y=fac(n);
printf(“%d!=%10.0f”,n,y);
}—求n!
2、#include “stdio.h”
main()
{FILE *fp1, *fp2;
if((fp1=fopen(“name1.dat”,”r”))==NULL)
{printf(“cannotopen file\n”);exit(0);}
if((fp2=fopen(“name2.dat”,”w”))==NULL)
{printf(“cannotopen outfile\n”);exit(0);}
while(!feof(fp1))fputc(fgetc(fp1),fp2);
fclose(fp1);
fclose(fp2);
}—实现文件的复制
3、int f()
{static i=0;
i++;
return i;
}
main()
{int i,s=0;
for(i=0;i<5;i++)
s+=f();
printf(“%d\n”,s);
}—求1到5的和
4、int LA(int *a,int n)
{int s=0,i;
for(i=0;i<n;i++)
s+=a[i];
return s;}
void main(){
int a[]={10,20,30,40,50,60};
int b=LA(a,5);
printf(“b=%d\n”,b);}—求数组a中前5个元素之和
5、int f(int n)
{
int i;
for(i=2;i<=n;i++)
if(n%i==0) return(0);
return 1;
}—判断一个数是否素数
6、void ch(char str1[],char str2[],char str[])
{int i,j;
for(i=0;str1[i]!=’\0’;i++)
str[i]=str1[i];
for(j=0;str2[j]!=’\0’;j++)
str[i+j]=str2[j];
str[i+j]=’\0’;
}
main()
{char s1[80],s2[80],s[80];
scanf(“%s”,s1);
scanf(“%s”,s2);
ch(s1,s2,s);
printf(“The new string is%s\n”,s);
} —将字符串s1和s2合并复制到字符串s中
7、#define PI3.14159
#define S(R) PI*R*R
#define L(R) 2*PI*R
main()
{int r,s,l;
scanf(“%d”,&r);
s=S(r);
l=L(r);
printf(“s=%d\nl=%d\n”,s,l);
}——-求半径为r的圆的周长的半径
8、#include<math.h>
int SB(int x)
{int a=(int)sqrt(x);
int i=2;
while (i<=a){
if (x%i==0) break;
i++;}
if(i<=a) return 0; else return 1;}–判断x是否为素数
9、main()
{int n;
for(n=1;n<=1000;n++)
{if(n%5!=0)
continue;
printf(“%d”,n);
}
}—求1-1000中所有5的倍数
10、#include<string.h>
void main()
{char*a[5]={“student”,”worker”,”cadre”,”apple”,”peasent”};
char *p1;
int i;
p1=a[0];
for( i=0;i<5;i++)
if(strcmp(a[i],p1)>0)p1=a[i];
printf(“%s\n”,p1);}—求字符串数组a中最大的字符串
11、floatave(a,n)
float a[];
intn;
{inti;
float s;
for(i=0,s=0;i<n;i++)
s=s+a[i];
return (s/n);
}———-求数组a中前n个数的平均
12、SD(int a[],int n, int k)
{intb=0;
for(int i=0;i<n;i++)
if(a[i]==k) b++;
return (b);}——–在数组前n个元素中,查找与k相等的元素个数
13、# include “stdio.h”
main()
{FILE*fp1, *fp2;
if((fp1=fopen(“name1.dat”,”r”))==NULL)
{printf(“open error\n”); exit(0);}
if((fp2=fopen(“name2.dat”,”w”))==NULL)
{printf(“open error\n”); exit(0);}
while(!feof(fp1))
fputc(fgetc(fp1),fp2);
fclose(fp1);
fclose(fp2);
}————-把name1.dat文件内容复制到name2.dat中
14、doubleSA(double x,int n)
{intp=1,s=1,i;
for( i=1;i<=n;i++)
{p*=x;
s+=1.0*p/(i+1);}
return s;
}———–求1+x/2+x2/3+……+xn/(n+1)
15、main()
{inti, s=0;
static c=0;
for(i=1;i<10;i++)
{c=c+i;
s=s+c;
}
printf(“%d”,s);
}———–求1+(1+2)+(1+2+3)+……+(1+2+……+9)的和
五、编程题
1、编写求1!+2!+3!+4!+5!+……+n!的函数。
float f(int n)
{
float s=0,p=1;
int i;
for(i=1;i<=n;i++)
{p=p*i;
s=s+p;
}
return s;
}
2、输入3个整数,按由大到小的顺序输出。
main()
{ int a,b,c,t;
scanf(“%d%d%d”,&a,&b,&c);
if(a<b){t=a;a=b;b=t;}
if(a<c){t=a;a=c;c=t;}
if(b<c){t=b;b=c;c=t;}
printf(“\n%d,%d,%d”,a,b,c);
}
3、用选择法对数组中10个整数按由大到小排序。
void sort (int a[], int n)
{
int i,j,k,t;
for(i=0;i<n-1;i++)
{k=i;
for(j=i+1;j<n;j++)
if (a[j]>a[k])k=j;
t=a[k];a[k]=a[i];a[i]=t;}
}
main()
{int a[10],i;
for(i=0;i<10;i++)
scanf(“%d”,&a[i]);
sort(a,10);
for(i=0;i<10;i++)
print(“%d”,a[i]);
printf(“\n”);
}
4、编写一个函数求两个非负整数a和b最大公约数。
int SA(int a, int b);
{int t ;
while(b!=0)
{t=a%b;a=b;b=t;}
return a;}
5、用冒泡法对10个数进行排序。
main()
{
int a[10];
int i,j,t;
printf(“please input 10 numbers:\n”);
for (i=0;i<10;i++)
scanf(“%d”,&a[i]);
for (i=0;i<9;i++)
for (j=9;j>i;j–)
if (a[j]<a[j-1])
{t=a[j];a[j]=a[j-1];a[j-1]=t;}
printf(“\n”);
for (i=0;i<10;i++)
printf(“%d”,a[i]);}
6、输入两个正数u和v,求其最大公约数。(用函数完成)
int f(int u, int v)
{
int r;
while ((r=u%v)!=0)
{u=v;v=r;}
return(v);
}
main()
{int u,v,h;
scanf(“%d,%d”,&u,&v);
h=f(u,v);
printf(“%d\n”,h);
}
转载请注明:XAMPP中文组官网 » c语言程序题目单选项_C语言程序设计