C语言习题1滁州学院 计算机科学与技术专升本Word文档下载推荐.docx
《C语言习题1滁州学院 计算机科学与技术专升本Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言习题1滁州学院 计算机科学与技术专升本Word文档下载推荐.docx(39页珍藏版)》请在冰豆网上搜索。
A)7B)8C)9D)10
16在C语言中,int、char和short三种类型数据在内存中所占用的字节数(D)。
A)由用户自己定义B)均为2个字节
C)是任意的D)有所用的机器的机器字长决定
17设变量a是整型,f是实型,i是双精度型,则表达式10+‘a’+i*f值的数据类型为(C)。
A)intB)floatC)doubleD)不确定
18设intn=3;
则++n的结果是(C),n的结果是(C)
A)2B)3C)4D)5
19语句(1,2,3,4)的结果是(D)。
A)1B)2C)3D)4
20有如下程序,若要求a1、a2、c1、c2的值分别为10、20、A、B,正确的数据输入是(D).
main()
{
inta1,a2;
charc1,c2;
scanf("
%d%d"
&
a1,&
a2);
%c%c"
c1,&
c2):
}
A)1020AB<
CR>
B)1020<
AB<
C)1020ABC<
D)1020AB<
21已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数据是,正确的数据输入方式是(A)。
(注:
︼表示空格,<
表示回车)
scanf(“%d%c%d%c”,&
a2,&
c2);
A)10A︼20B<
B)10︼A︼20︼B<
C)10A20B<
D)10A20︼B<
22阅读以下程序,当输入数据的形式为:
25,13,10<
,正确的输出结果为(D)。
{intx,y,z;
scanf(“%d%d%d”,&
x,&
y,&
z);
printf(“x+y+z=%d\n”,x+y+z);
A)x+y+z=48
B)x+y+z=35
C)x+z=35
D)不确定值
23设X,Y均为float变量,则以下不合法的赋值语句是(B)
A)++x;
B)y=(x%2)/10;
C)x*=y+8;
D)x=y=10;
24以下程序的执行结果是(A)。
#include<
stdio.h>
intsum,pad;
sum=pad=5;
pad=sum++;
pad++;
++pad;
printf("
%d\n"
pad);
A)7B)6C)5D)4
25有以下定义:
int
a;
long
b;
double
x,y;
则以下选项中正确的表达式是(B)
A)a%(int)(x-y) B)a=x!
=y;
C)(a*y)%b D)y=x+y=x
26以下选项中能表示合法常量的是(D)
A)整数:
1,200
B)实数:
1.5E2.0
C)字符斜杠:
‘\’
D)字符串:
"
\007"
27表达式a+=a-=a=9的值是(D)
A)9 B)-9 C)18 D)0
28有以下程序(B)
#include<
main()
{inta=1,b=2;
while(a<
6){b+=a;
a+=2;
b%=10;
}
printf(”%d,%d\n”,a,b);
}
程序运行后的输出结果是 A)5,11 B)7,1 C)7,11 D)6,1
29有以下程序(B)
#include<stdio.h>
{inty=10;
while(y--);
printf(”y=%d\n”,y);
}
程序执行后的输出结果是 A)y=0 B)y=-1 C)y=1 D)while构成无限循环
30有以下程序(C)
#include<stdio.h>
{chars[」=”rstuv"
;
printf(”%c\n”,*s+2);
程序运行后的输出结果是 A)tuv B)字符t的ASCII码值 C)t D)出错
31有以下程序(B)
#include<stdio.h>
#include<string.h>
{charx[]=”STRING”;
x[0」=0;
x[1]=’\0’;
x[2」=’0’;
printf(”%d
%d\n”,sizeof(x),strlen(x));
}
程序运行后的输出结果是 A)6
1 B)7
0 C)6
3 D)7
1
32有以下程序(D)
f(int
x);
main()
{int
n=1,m;
m=f(f(f(n)));
printf(”%d\n”,m);
x) {return
x*2;
}
程序运行后的输出结果是 A)1 B)2 C)4 D)8
33以下程序段完全正确的是(C)
A)int*p;
scanf("
%d"
&p);
B)int*p;
scanf(“%d”,p);
C)intk,*p=&
k;
p);
D)intk,*p:
;
*p=&
34下列定义数组的语句中,正确的是(B)
A)int
N=10;
intx[N];
B)#defineN10 int
x[N];
C)int
x[0..10];
D)intx[];
35若要定义一个具有5个元素的整型数组,以下错误的定义语句是(D)
a[5]=﹛0﹜;
B)int
b[]={0,0,0,0,0};
c[2+3];
D)int
i=5,d[i];
36有以下程序
void
f(int*p);
a[5]={1,2,3,4,5},*r=a;
f(r);
printf(”%d\n”;
*r);
voidf(int*p)
{p=p+3;
printf(”%d,”,*p);
程序运行后的输出结果是(D)
A)1,4 B)4,4 C)3,1 D)4,1
37有以下程序(函数fun只对下标为偶数的元素进行操作
#include<stdio.h>
voidfun(int*a;
intn)
{inti、j、k、t;
for(i=0;
i<n-1;
i+=2)
{k=i;
for(j=i;
j<
n;
j+=2)if(a[j]>
a〔k])k=j;
t=a〔i];
a〔i]=a[k];
a〔k]=t;
}
{intaa「10」={1,2,3,4,5,6,7},i;
fun(aa,7);
for(i=0;
i<
7;
i++)printf(”%d,”,aa[i]));
printf(”\n”);
程序运行后的输出结果是(A)
A)7,2,5,4,3,6,1 B)1,6,3,4,5,2,7 C)7,6,5,4,3,2,1 D)1,7,3,5,6;
2,1 38下列选项中,能够满足“若字符串s1等于字符串s2,则执行ST"
要求的是(A)
A)if(strcmp(s2,s1)==0)ST;
B)if(sl==s2)ST;
C)if(strcpy(sl,s2)==1)ST;
D)if(sl-s2==0)ST;
39以下不能将s所指字符串正确复制到t所指存储空间的是(C)
A)while(*t=*s){t++;
s++;
B)for(i=0;
t[i]=s[i];
i++);
C)do{*t++=*s++;
}while(*s);
D)for(i=0,j=0;
t[i++]=s[j++];
);
40有以下程序(strcat函数用以连接两个字符串)
#include<string.h>
{chara[20]=”ABCD\0EFG\0”,b[]=”IJK”;
strcat(a,b);
printf(”%s\n”,a);
程序运行后的输出结果是(B)
A)ABCDE\OFG\OIJK B)ABCDIJK C)IJK D)EFGIJK
41有以下程序
#include<stdio.h>
fun(intx)
{if(x/2>1)fun(x/2);
printf(”%d”,x);
{fun(7);
printf(”\n”);
程序运行后的输出结果是(D)
A)137 B)731 C)73 D)37
42有以下程序
#include<stdio.h>
intfun()
{staticintx=1;
x+=1;
returnx;
{inti;
s=1;
for(i=1;
=5;
i++)s+=fun();
printf(”%d\n”,s);
程序运行后的输出结果是(B)
A)11 B)21 C)6 D)120
43有以下程序
#inctude<stdio.h>
#include<stdlib.h>
{int*a,*b,*c;
a=b=c=(int*)malloc(sizeof(int));
*a=1;
*b=2,*c=3;
a=b;
printf(“%d,%d,%d\n”,*a,*b,*c);
程序运行后的输出结果是(A)
A)3,3,3
B)2,2,3
C)1,2,3
D)1,1,3
44有以下程序
{ints,t,A=10;
doubleB=6;
s=sizeof(A);
t=sizeof(B);
printf(“%d,%d\n”,s,t);
在VC6平台上编译运行,程序运行后的输出结果是(C)
A)2,4
B)4,4
C)4,8
D)10,6
45若有以下语句
typedefstructS {intg;
charh;
}T;
以下叙述中正确的是(B)
A)可用S定义结构体变量 B)可用T定义结构体变量 C)S是struct类型的变量 D)T是structS类型的变量
二、写出下列每个程序运行后的输出结果
1.#include<
voidmain(){
inti,s=0;
for(i=1;
i++){
if(s>
50)break;
if(i%2==0)s+=i;
}
printf("
i,s=%d,%d\n"
i,s);
2.#include<
charch='
*'
inti,n=5;
while
(1){
for(i=0;
n;
i++)printf("
%c"
ch);
\n"
if(--n==0)break;
3.#include<
voidmain()
{
intx=24,y=88;
inti=2,p=1;
do{
while(x%i==0&
&
y%i==0){
p*=i;
x/=i;
y/=i;
i++;
}while(x>
=i&
y>
=i);
p*x*y);
4.#include<
inta[9]={36,25,48,24,55,40,18,66,20};
inti,b1,b2;
a[0]<
=a[1]?
(b1=a[0],b2=a[1]):
(b1=a[1],b2=a[0]);
for(i=2;
i<
9;
i++)
if(a[i]<
b1){b2=b1;
b1=a[i];
elseif(a[i]<
b2)b2=a[i];
%d%d\n"
b1,b2);
5.#include<
inta=10,b=20;
a,b);
{intb=a+25;
a*=4;
6.#include<
voidSelectSort(inta[],intn)
inti,j,k,x;
i++){//进行n-1次选择和交换
k=i-1;
for(j=i;
j++)
if(a[j]<
a[k])k=j;
x=a[i-1];
a[i-1]=a[k];
a[k]=x;
inti;
inta[6]={20,15,32,47,36,28};
SelectSort(a,6);
6;
i++)printf("
%d"
a[i]);
7.#include<
voidLE(int*a,int*b){
intx=*a;
*a=*b;
*b=x;
intx=15,y=26;
x,y);
LE(&
y);
8.#include<
#include<
string.h>
structWorker{
charname[15];
//姓名
intage;
//年龄
floatpay;
//工资
};
intEqual(structWorker*r1,structWorker*r2)
if(strcmp(r1->
name,r2->
name)==0)return1;
elsereturn0;
structWorkera[4]={{"
abc"
25,420},{"
defa"
58,638},
{"
ghin"
49,560},{"
jklt"
36,375}};
structWorkerx={"
};
4;
i++)
if(Equal(a+i,&
x))break;
if(i>
=4)printf("
没有查找所需要的记录!
elseprintf("
%s%d%6.2f\n"
a[i].name,a[i].age,a[i].pay);
9.
#include<
voidmain()
inta=0,b=2,c=3;
switch(a)
{case0:
switch(b==2)
{case1:
putchar('
'
break;
case2:
%'
case1:
switch(c)
$'
default:
#'
}
10.
#include<
intm=1,n=2,t=3;
++m;
t+=++n;
{intn=10,t;
t=n*2;
m+=t;
%d,%d,%d\n"
m,n,t);
答案:
1.
i,s=15,56
2.
*****
****
***
**
*
3.
264
4.
1820
5.
1020
4035
4020
6.
152028323647
7.
1526
2615
8.
defa58638.00
9.&
#
10.221020
2236
三、写出下列每个函数的功能
1.intSE(intn){//n为大于等于1的整数
intx,s=0;
输入%d个整数:
"
n);
x);
if(n==1)returnx;
s=x;
while(--n){scanf("
s+=x;
returns;
voidWA(inta[],intn){
inti,k,j,x;
n-1;
k=i;
for(j=i+1;
if(a[j]>
x=a[i];
a[i]=a[k];
int*LJ(inta[],intn){
inti,k=0;
i++)
if(a[i]>
a[k])k=i;
return&
a[k];
4.intOutput(structIntNode*f)
intsum=0;
if(!
f)return-9999;
//用返回特定值-9999表示空表
while(f){
sum+=f->
data;
f=f->
next;
returnsum;
假定structIntNode的类型定义为:
structIntNode{
intdata;
//结点值域
structIntNode*next;
//结点指针域
1.求出从键盘上输入的n个整数之和并返回。
2.采用选择排序的方法对数组a中的n个整数按照从大到小的次序重新排列。
3.求出数组a中n个元素的最大值元素,返回该元素的地址
4.对于以表头指针为f的链表,求出并返回所有结点中data域的值之和。
四程序填空
1.下面程序的功能是:
将一个数插入到一个有序数组(从小到大)中,使插入以后的数组仍然有序。
采用的算法是:
确定要插入数的位置,然后将比这个数大的数后移一个位置,在空出的位置上将该数插入。
inta[11]={1,3,6,7,9,12,14,18,19,20},x;
inti,p;
Inputadata:
for(i=0,p=10;
10;
i++)
if(x<
a[i])
①;
break;
for(i=9;
②;
i--)
a[i+1]=a[i];
③;
Thearray:
11;
%4d"
2.以下程序能统计一个英文句子(以.号结束)中最长单词的长度。
intcount(char*p)
intword=0,max=