山东大学网络教育C程序设计期末考试复习题.docx
《山东大学网络教育C程序设计期末考试复习题.docx》由会员分享,可在线阅读,更多相关《山东大学网络教育C程序设计期末考试复习题.docx(25页珍藏版)》请在冰点文库上搜索。
山东大学网络教育C程序设计期末考试复习题
程序设计模拟题1
一单项选择题
1.C程序的基本单位是______
A子程序B过程C函数D源程序文件
2.若有以下说明,则______不是对strcpy库函数的正确的调用
charstr1=”copy”,str2[10],str3=”hijklmn”,*str4,*str5=”abcd”;
Astrcpy(str2,str1);Bstrcpy(str3,str1);
Cstrcpy(str4,str1);Dstrcpy(str5,str1);
3.C语言中,要求运算量必须是整形数据的运算符是______
A%B/C*D!
4.选出C语言的合法的变量名______
A33aBa#bCab,cDddt3
5.以下说法正确的是:
A.预处理命令行都必须以#号开始
B.预处理命令只能位于源程序的首部
C.对预处理命令的处理是在执行过程中进行的
D.每个C程序必须使用预处理命令#include
6.对于如下数据定义和scanf函数调用:
inti1,i2;
charc1,c2;
scanf("%d%c%d%c",&i1,&c1,&i2,&c2);
若使i1、c1、i2、c2的值分别为10、'C'、20、'D',
正确的数据输入方式是______
A10C20D<回车>B10C20D<回车>C10C20D<回车>D10C20D<回车>
7.当定义一个结构体变量时系统分配给它的内存是:
______
A各成员所需内存量的总和
B成员中占内存量最大者所需的容量
C结构中第一个成员所需内存量
D结构中最后一个成员所需内存量
8.设有以下语句,则c的值用二进制表示为:
______
chara=3,b=6,c;c=(a∧b)<<2;
A00011011B00010100C00011100D00011000
二填空题
1.设inta=10,则执行完语句a+=a-=a*a后,a的值是______。
2.char*str;
str="string";
这种字符串赋值方式正确吗?
______(正确填1,不正确填0)
3.表达式3&4的值为_______。
4.C语言提供的构造类型的数据有:
数组,结构体,______。
5.表达式0?
(0?
3:
2):
(10?
1:
0)的值为______。
6.C语言程序中,若对函数类型未加显式说明,则函数的隐含类型为______类型。
7.定义intj=1;执行while(j++<4)后j的值为______。
三程序填空题
1.输出由’*’组成的倒三角图案,图案的行数n从键盘输入。
如果行数n为6,则图案如图所示:
******
*****
****
***
**
*
#include
main()
{
inti,j,n;
printf("Pleaseinputnumberofrows:
");
scanf("%d",&n);
for(i=______;i{
for(j=0;j<______;j++)
putchar(j
’’:
’______’);
putchar('\n');
}
}
2.用起泡法将10个数组元素从小到大排序。
main()
{inti,j,t;
staticinta[10]={5,7,4,2,3,6,1,0,,9,8};
for(j=0;j<9;j++)
{for(i=0;i______9-j;i++)
{if(a[i]>a[______])
{t=a[i];a[i]=a[i+1];a[i+1]=______;
}
}
}
for(i=0;i<10;i++)printf(“%2d”,a[i]);
}
四改错题
(下面每小题有三行程序存在错误,要求不改变程序的功能,指出出错语句,并写出完整的正确语句)
1.本程序计算N×N二维整型数组全部元素的平均值(输出时保留一位小数)。
行号程序
01#include
02#defineN4
03floatfun(intarr[][N]);
04main()
05{
06staticintaa[][N]={
07{1,2,3,4},{4,5,6,7},
08{10,11,12,13},{20,21,22,23}};
09floatavr;
10avr=fun(&aa);
11printf("avr=%.1f",avr);
12}
13floatfun(intarr[][N])
14{
15inti,j;
16ints;
17floatav;
18for(i=1;i19for(j=0;j<=N-1;j++)
20s+=arr[i][j];
21av=s/(N*N);
22returnav;
23}
可能出错的程序语句的行号为:
03、06、10、13、16、18、19、20,错误依次为:
行号______应改为_________________________________________________。
行号______应改为_________________________________________________。
行号______应改为_________________________________________________。
参考答案:
1.行号10应改为avr=fun(aa);
行号16应改为floats=0;
行号18应改为for(i=0;i2.从键盘输入一行字符,然后删除字符串中的全部空格。
例如,如果输入"abcdefgh",则输出为"abcdefgh"。
行号程序
01#include
02main()
03{
04chars[81];
05char*p1,p2;
06printf("Pleaseenterastring:
");
07scanf(“%s”,s);
08p1=p2=s;
09while(*p1!
='\0')
10{
11if(*p1!
=’’)
12{
13*p2=*p1;
14p2++;
15}
16p2++;
17}
18*p2='\0';
19printf("Stringwithoutleadingblank:
%s\n",s);
20}
可能出错的程序语句的行号为:
05、07、08、09、11、13、16,错误依次为:
行号______应改为_________________________________________________。
行号______应改为_________________________________________________。
行号______应改为_________________________________________________。
参考答案:
2.行号05应改为char*p1,*p2;
行号07应改为gets(s);
行号16应改为p1++;
五阅读理解
1.下面程序的输出结果为:
___________。
main()
{
intx=1,i=1;
for(;x<50;i++)
{
if(x>10)
break;
if(x%2!
=0)
{x+=3;
continue;
}
x-=-1;
}
printf(“%d,%d\n”,x,i);
}
参考答案:
1.12,10
六程序设计题
1.统计所有的三位整数中有多少个数的各位数字之积等于各位数字之和,并输出这些整数。
参考答案:
1.main()
{
intn,a,b,c,sum=0;
for(n=100;n<1000;n++)
{a=n/100;
b=(n-a*100)/10;/*该语句换成b=n/10-a*10;亦可*/
c=n%10;
if(a*b*c==a+b+c)
printf(“Thenumberis%d\n”,n);
sum++;
}
printf(“Thetotalnumberis%d”,sum);
}
2.编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述的结果。
参考答案:
2.intletter,digit,space,others;/*定义全局变量*/
main()
{intcount(charstr[]);/*函数声明*/
chartext[80];
gets(text);
letter=0;
digit=0;
space=0;
others=0;
count(text);
printf(“letter:
%d,digit:
%d,space:
%d,others:
%d\n”,letter,digit,space,others);
}
intcount(charstr[])
{inti;
for(i=0;str[i]!
=’\0’;i++)
if((str[i]>=’a’&&str[i]<=’z’||(str[i]>=’A’str[i]<=’Z’))
letter++;
elseif(str[i]>=’0’&&str[i]<=’9’)
digit++;
elseif(str[i]==’’)
space++;
else
others++;
}
3.输入3个整数,按由小到大的顺序输出。
(注:
要求用指针方法处理)。
参考答案:
3.
main()
{
intn1,n2,n3;
int*p1,*p2,*p3;
scanf(“%d,%d,%d”,&n1,&n2,&n3);
p1=&n1;
p2=&n2;
p3=&n3;
if(n1>n2)swap(p1,p2);
if(n1>n3)swap(p1,p3);
if(n2>n3)swap(p2,p3);
printf(“Theorderis:
%d,%d,%d\n”,n1,n2,n3);
}
swap(int*p1,int*p2)
{
intp;
p=*p1;*p1=*p2;*p2=p;
}
程序设计模拟题2
一单项选择题
1.选出C语言的合法常量_____
A0fdB0xfdaLCe8D.e-4
2.选出合法的变量名______
AautoB2_endsCTURBO_CD.month
3.选出合法的字符串常量_____。
A’String’B”It\’saboy”C”C:
\\x.txt”D”Hesaid,’Sorry!
’”
4.若a为一维整型数组的数组名,则对指针变量p的
正确说明和初始化为
A.int*p=a[0];B.int*p=&a[0];
C.int*p=*a;D.int*p=&a;
5.对两个静态数组A和B进行如下初始化.
staticcharA[]=”ABCDEF”;
staticcharB[]={’A’,’B’,’C’,’D’,’E’,’F’};
则下列叙述正确的是______。
A.A和B完全相同B.A和B只是长度相同
C.A和B不相同,A是指针数组D.A数组长度比B数组长
6.以下说法错误的是
A.宏替换只是字符替换B.宏名必须用大写字母
C.宏替换是在预处理时进行的
D.程序中引用带参数的宏时,对参数的数据类型没有限制
7.对于如下数据定义
floatx,y;
为了使x和y分别为1.23和4.56,输入如下内容:
x=1.23,y=4.56<回车>
则正确的scanf调用是
A.scanf("%f%f",&x,&y);B.scanf("%f,%f",&x,&y);
C.scanf("x=%fy=%f",&x,&y);D.scanf("x=%f,y=%f",&x,&y);
8.以下共用体类型和变量的定义,正确的是______。
A.unionstudentB.union
{intnumber,{intnumber,
charname[20],charname[20],
}s;};s;
C.unionstudentD.unionstudent
{intnumber;{intnumber;
charname[20];charname[20];
}s;};s;
二填空题
1.定义intx=10,y,z;
执行y=z=x;x=y==z;后,变量x的值为_______。
2.charstr[20];
str="string";
这种字符串赋值方式正确吗?
______(正确填1,不正确填0)。
3.设x为整型量,则表达式x∧x的值为_______。
4.若有以下说明和语句inta[]={1,2,3,4,5};
则a++是对数组元素地址的正确表示吗______(正确填1,不正确填0)。
5.表达式(1/2)*10.0的值为______。
6.将一维数组x的第i个元素的地址赋给指针变量p的语句是______。
7.定义inti=1;执行while(i++<5)后i的值为______。
8.设a=7,b=6,c=5;写出表达式(a+b)>(c*c)&&b的值是______。
三程序填空题
1.输出由数字组成的三角图案,图案的行数n从键盘输入。
如果行数n为6,则图案如图所示:
AAAAAA
BBBBB
CCCC
DDD
EE
F
#include
main()
{
inti,j,n;
printf("Pleaseinputnumberofrows:
");
scanf("%d",&n);
for(i=0;i__
(1)__;i++)
{
for(j=__
(2)_;j>i;j--)
putchar(’A’+__(3)_);
putchar(’\n’);
}
}
2.数组a中存放N个由小到大排列的有序整数。
从键盘输入一整数x,使用二分法在数组中查找是否有此整数。
二分查找法的思路是:
将待查数据与全部数组元素中位于中间下标位置的元素相比较,如果待查数据大于中间元素,则缩小查找范围,在中点之后的数组元素中继续查找;否则在在中点之前继续查找。
#include
#defineN10
main()
{intx,mid,lo,hi;
staticinta[N]={3,5,7,9,11,13,15,17,19,21};
scanf("%d",&x);
lo=___
(1)___;hi=N-1;
while(lo<=hi)
{mid=(lo+hi)/2;
if(x==a[mid])___
(2)___;
elseif(x>a[mid])lo=mid+1;
elsehi=__(3)__;
}
if(lo<=hi)printf("Found%dat%d\n",x,mid);
elseprintf("%dnotfound\n",x);
四改错题(下面每小题有三行程序存在错误,要求不改变程序的功能,指出出错语句,并写出完整的正确语句)
1.本程序计算N×N二维整型数组中元素值为负数的元素个数占全部元素个数的百分比(输出时保留一位小数)。
行号程序
01#include
02#defineN4
03floatfun(intarr[][N]);
04main()
05{
06staticintaa[][N]={
07{1,2,3,4},{4,5,6,7},
08{10,11,12,13},{20,21,22,23}};
09floatp;
10p=fun(&aa);
11printf("p=%.1f%%",p*100);
12}
13voidfun(intarr[][N])
14{
15inti,j;
16ints;
17for(i=0;i18for(j=0;j19if(arr[i][j]<0)
20s++;
21return(float)s/(N*N);
22}
可能出错的程序语句的行号为:
03、06、10、11、13、16、17、19、21,错误依次为:
行号______应改为___________________________________________。
行号______应改为___________________________________________。
行号______应改为___________________________________________。
参考答案:
1.行号10应改为p=fun(aa);
行号13应改为floatfun(intarr[][N])
行号16应改为ints=0;
2.从键盘输入一行字符,查找字符串中是否有大写字母’A’。
若有则输出"Found",若无则输出"NotFound"。
行号程序
01#include
02main()
03{
04chara[81],*p=a;
05charmessage[10];
06message="NotFound";
07printf("Pleaseenterastring:
");
08gets(&a);
09while(*p)
10{
11if(p==’A’)
12{
13message="Found";
14break;
15}
16p++;
17}
18puts(message);
19}
可能出错的程序语句的行号为:
05、06、08、09、11、14、18,错误依次为:
行号______应改为___________________________________________。
行号______应改为___________________________________________。
行号______应改为___________________________________________。
参考答案:
2.行号05应改为char*message;
行号08应改为gets(a);
行号11应改为if(*p==’A’);
五阅读理解
1.下面程序的输出结果为:
___________。
inti=2;
main()
{inti=5;
sub1();sub1();
sub2();sub2();
printf(”%d”,i);
}
sub1()
{staticinti=6;
i++;
printf(”%d,”,i);
}
sub2()
{inti=3;
i++;
printf(”%d,”,i);
}
参考答案:
1.7,8,4,4,5
2.下面程序的输出结果为:
___________。
main()
{
staticintx[]={10,7,5,8};
ints,i,*p;
s=1;p=x;
for(i=0;i<4;i++)
s*=*(p+i);
printf("%d\n",s);
}
参考答案:
2.2800
六程序设计
1.试编写一函数,该函数将字符ch打印row行col列。
(8分)
参考答案:
1.
main()
{
voidptr();
charch;
introw,col;
scanf(“%d%c%d”,&row,&ch,&col);
ptr(ch,row,col);
}
voidptr(charch,introw,intcol);
{inti,j;
for(i=1;i<=row;i++)
{for(j=1;j<=col;j++)
printf(“%c”,ch);
printf(“\n”);
}
}
2.有一篇文章,共有3行文字,每行80个字符。
要求分别统计出其中英文大写字母、小写字母、数字、空格以及其它字符的个数。
(10分)
参考答案:
2.
main()
{inti,j,upper,lower,digit,space,others;
chartext[3][80];
upper=lower=digit=space=others=0;
for(i=0;i<3;i++)
{
gets(text[i]);
for(j=0;j<80&&text[i][j])!
=’\0’;j++)
{
if((text[i][j]>=’a’&&text[i][j]<=’z’)
upper++;
elseif(text[i][j]>=’a’text[i][j]<=’z’)
lower++;
elseif(text[i][j]>=’0’&&text[i][j]<=’9’)
digit++;
elseif(text[i][j]==’’)
space++;
else
others++;
}
printf(“upper:
%d,lower:
%d,digit:
%d,space:
%d,others:
%d\n”,upper,lower,digit,space,others);
}
3.输入5个实数,去掉一个最大值,去掉一个最小值,求其他三个数的平均值(输出时要求保留一位小数.)如输入2