大学大一C语言程序设计期末考试试卷和答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
_
_ _ _ _ _ _ _ _ _ _ _ _ _ _号学
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _名姓
班
_ _ _ _ _ _ _ _ _ _ _级_ _ _ _ _ _ _ _ _ _院学_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
.
四川师范大学计算机科学学院
2012~2013学年度第二学期期末考试
⋯
C语言程序设计试卷试卷 A
⋯
⋯
⋯
答卷说明:
⋯
1、本试卷共 6 页,答题纸 3 页, 4 个大题, 35 个小题,满分 100 分,⋯
⋯
120 分钟完卷。
⋯
⋯2、闭卷考试,所有的答案都必须写在答题纸上,判卷以答题纸上答案⋯为准。
⋯
效3、本试卷适用于 2011 级 1、2、3 班。
⋯
)
线
(
无题号一二三四总分总分人
⋯
⋯
⋯
⋯分数
⋯题
⋯
⋯
⋯
答
得分评卷人
⋯
⋯
⋯
⋯
)内
一、单项选择题 ( 在每小题的四个备选答案中,选出一个正确答案,并将正确答案的
封
(
序号填在题干的括号内。
每小题 1 分,共 20 分)
⋯
1、在 C 语言中,下列标识符中合法的是()
⋯
⋯
线A). -int B). in1_3C). A_B!D D). const
⋯
⋯
⋯2、不属于 C 语言基本数据类型的是 (
)
⋯
A). int B). union C). char D). unsigned
⋯封
⋯
⋯
3、下面是对宏定义的描述。
不正确的是()
⋯
⋯
密A).宏不存在类型问题,宏名无类型,它的参数也无类型
)
B).宏替换不占用运行时间
密
(C).宏替换只是字符串的简单替代
⋯
D).宏替换时先检查类型,类型一致时才可以替换
⋯
⋯
⋯
4、 C语言中,″\\xfds ″在内存中占用的字节数是 ( )
⋯
⋯A).3B).4C).5D).6
⋯
⋯
⋯5、设 int x;则执行 printf( ″%x\n″,~x^x) ;的结果是 ()
⋯
A). ffffffff B). ff C). 0D). 1
⋯
⋯
6、对于 while语句,错误的说法是 ()
A). 用条件控制循环体的执行次数B). 循环体至少要执行一次
.
C). 循环体有可能一次也不执行D). 循环体中可以包含若干条语句
7、执行下列语句后输出的结果是()
int a=8,b=7,c=6;
if(a<b)if(b>c){a=c;c=b;}
printf("%d,%d,%d\n",a,b,c);
A).6 ,7, 7B).6,7,8C).8,7, 6D).8 , 7, 8
8、设 int a=9,b=20;则 printf(″%d,%d\n″,a--,--b);的输出结果是 ()
A).9 ,19B).9 ,20C).10 , 19D).10, 20
9、设 static char x[ ]=″12345″,y[ ]={′1′,′2′,′3′,′4′,′5′,′\0 ′};那么 ()
A).x数组的长度等于y 数组的长度B).x数组的长度大于y 数组的长度
C).x数组的长度少于y 数组的长度D).x数组与 y 数组的存储区域相同
10、设 int i,x[3][3]={1,2,3,4,5,6,7,8,9};则下面语句的输出结果是()
for(i=0;i<3;i++)
printf( ″%d″,x[i][2-i]);
A).147B).159C).357D).369
11、执行完下列语句后,n 的值是 ()
int n;
for (n=0 ; n<100 ; n=2*n+1);
A).125B).126C).127D).128
12、有以下语句: int a=6;a+=a-=a*a;printf(“%d”,a); 输出结果 ()
A). –132B). –60C). -24D). 0
13、为了连接两个字符串s1 与 s2,应当使用 ()
A).strcat(s1, s2)B).strcpy(s1, s2 )C).strlen(s1,s2) D). strcmp( s1, s2 )
14、设 int a,*p;则语句 p=&a; 中的运算符“&”的含义是 ()
A). 位与运算B). 逻辑与运算C). 取指针内容D). 取变量地址
15、下面输出的结果为 ()
i nt a=13, b=64;
printf(“%d\n”, !a || (b>>3) );
A).13B).64
C).1D).0
16、下列定义正确的是 ()
A).enum t={a,b}x;B). enum t{1,2}x;C). enum { ′+′,′-′}x;D). enum t{a,b}x;
.
⋯
⋯_ ⋯ _ _ ⋯ _ ⋯_
_⋯_
_⋯_
_ ⋯ _ ⋯_
_⋯_
_⋯号⋯学)
线_(_ ⋯ _ ⋯_
_⋯_
_⋯_
_ ⋯ _ ⋯_
_⋯_
_⋯_
⋯名⋯姓⋯
⋯
)班封
_(_
_⋯_
_ ⋯ _ ⋯_
_⋯_
_⋯_
⋯级⋯_ _ ⋯ _
_ ⋯ _ _ ⋯ _ _ ⋯ _ ⋯_
院)
密学
_(_ ⋯ _
_ ⋯ _ _ ⋯ _ _ ⋯ _ ⋯_
_⋯_
_⋯_
_ ⋯ _ ⋯_
_⋯
⋯
17、设有定义:struct u{int a[4];float b[3]; char c[16];}aa;
则printf( ″%d\n″,sizeof(aa));的输出是( )
A).32B).36C).12D).8
18、数据 -54.78 在文本文件中占用的字节个数是()
A).4B).5C).6D).8
19、在宏定义 #define p(r) 3.14*r中,请问宏名是 ()
A).p B). p(r)C). 3.14*r D). p(r) 3.14*r
20、要打开一个已存在的用于修改的非空二进制文件“hello.txt ”,正确语句是
( )
效
A). fp=fopen( "hello.txt ","r" )B). fp=fopen( "hello.txt
","ab+" )
C).fp=fopen("hello.txt","w" )D).fp=fopen( "hello.txt 无","r+" )
得分评卷人
题
答
二、填空题 (仔细阅读每小题的说明和源代码,并将正确答案写到答题纸上对应的题
号处。
每小题 4 分,共 36 分)
1. 以下程序的功能是 : 从键盘上输入若干个学生的成绩, 统计并输出最高成绩和最内
低成绩 , 当输入负数时结束输入 . 请填空 .
#include <stdio.h>21:
线int main(int argc, char* argv[])
{
float x,amax,amin;
封scanf("%f",&x);22:
amax=x; amin=x;
while(21)
密{
if(x>amax)
amax=x;
if(22)
amin=x;
scanf("%f",&x);
}
printf("\namax= %f\namin=%f\n",amax,amin);
return 0;
.
2.下面程序的功能是比较字符数组a 和字符数组 b 中的两个字符串是否相等(比较对应字符,全部相同输出 0,如果不同,返回第一个不相同的字符差值,并输出)。
#include <stdio.h>
int main(void)
{
char a[100]="Hello World!";
char b[100]="Hello Chengdu!";23:24:
23;
/*完成对应字符的比较,并判定一个字符串是否结束了 */
while(24)
{
i++;
}
printf("%d\n", a[i]-b[i] );
return 0;
3.就以下程序空缺的地方进行填空。
#include <stdio.h>
#include <ctype.h>
int main(int argc, char* argv[])
{
char str[81],*sptr;
int i;
for(i=0;i<80;i++)
{
str[i]=getchar();
if(str[i]=='\n')
break;
}
str[i]= (25);
sptr=str;
while(*sptr)
putchar(26);
return 0;
}
25:4.以下程序对一个 3×3 的矩阵进行行列互换。
#include <stdio.h>
int main(int argc, char* argv[])
{
int i,j,temp;
int a[3][3]={1,2,3,4,5,6,7,8,9};
for( i=0 ; i<3; i++)
for( j=0; (27)i; j++)
temp=a[i][j],
(28), (29);
printf("\n the result array is:\n");
for(i=0;i<3;i++)
{
printf("\n");
for(j=0;j<3;j++)
printf("%5d",a[i][j]);
}
return 0;
}
26:27:
⋯
⋯_ ⋯ _ _ ⋯ _ ⋯_
_⋯_
_⋯_
_ ⋯ _ ⋯_
_⋯_
_⋯号⋯学)
线_(_ ⋯ _ ⋯_
_⋯_
_⋯_
_ ⋯ _ ⋯_
_⋯_
_⋯_
⋯名⋯姓⋯
⋯
)班封
_(_
_⋯_
_ ⋯ _ ⋯_
_⋯_
_⋯_
⋯级⋯_ _ ⋯ _
_ ⋯ _ _ ⋯ _ _ ⋯ _ ⋯_
院)
密学
_(_ ⋯ _
_ ⋯ _ _ ⋯ _ _ ⋯ _ ⋯_
_⋯_
_⋯_
_ ⋯ _ ⋯_
_⋯
⋯效
无
题
答
内
线
封
密
.
28:
29:
得分评卷人
三、阅读下列程序,将输出结果写到答题纸上对应的题号处。
( 本大题共 4 小题,每小
题 5分,共 20分)
30 题:31 题:
#include <stdio.h>#include <stdio.h>
int fun(int x)int main(void)
{{char str[100]="I am a pig.";
int y=0;char *p= &str[7];
static int z=3;int i;
z++;++y;for (i=0;str[i] != '\0';i++, p++ )
return(x+y+z);{if( *p>='a' && *p<'z' ) }(*p)++;
void main( )else if( *p == 'z' )
{*p = 'a';
int i,x=2;}
for(i=0;i<2;i++)puts( str );
printf("%5d",fun(x++));return 0;
}}
32 题:33 题:
#include <stdio.h>#include <stdio.h>
int a1=300,a2=400;int gcd(int m,int n)
void sub1(int x,int y){
{if(m==n)
a1=x;return m;
x=y;else if(m>n)
y=a1;return gcd(m-n,n);
}else
void main( )return gcd(m,n-m);
{}
int a3=100,a4=200;void main( )
sub1(a3,a4);{
sub1(a1,a2);printf("Gcd=%d\n",gcd(24,36));
printf("%d,%d,%d,%d\n",a1,a2,a3,a4);}
.
得分评卷人
四、程序设计题,将源代码规范地书写在答题纸上( 第 34 小题 10 分,第 35 小题各 14 分,共24分)。
34.设计函数实现将一个字符串中小写字母转化为大写字母。
111 35. 计算e 1
2!的值并输出 ( 设 n=20) 。
1!n!
四川师范大学计算机科学学院
2012~2013 学年度第二学期期末考试
C语言程序设计试卷试卷A
参考答案与评分标准
一、单项选择题:(每小题 1 分,共 20 分)
12345678910
B B D D A B
C A A C
11121314151617181920
C B A
D C D B C A B
二、填空题:(每空 4 分,共 36 分)
21: x >= 022: x < amin
23: int i=024: (a[i] == b[i]) && a[i] != '\0' 25:‘\0 ’26:*sptr++
.
27: j < i28:a[i][j] = a[j][i]29:a[j][i] = temp
三、阅读程序题:(每小题 5 分,共 20 分)
30:7931:I am a qjh.
32:100,400,100,20033:Gcd=12
四、程序设计题:(第 34 小题 10 分,第 35 小题各 14 分,共 24 分)
34. 设计函数实现将一个字符串中小写字母转化为大写字母。
(10分)
#include <stdio.h>(1分)
#include <ctype.h>(1分)
/*转换函数 4 分,其中:循环正确 1 分,判断、转换正确各 1 分,其余 1 分 */
void Convert(char * str)
{
while (*str != '\0')
{
if(islower(*str ))
*str = toupper(*str);
str++;
}
}
/* 主函数 4 分,其中:变量定义初始化正确 1 分,函数调用正确 2 分,输出正确 1 分 */ void main( )
{
char str[] = "123123asadAsadMNer";
Convert(str);
printf("%s\n",str);
}
其它答案可根据情况酌情给分。
35 计算e 1111
的值并输出 ( 设 n=20) 。
( 14 分)
1!21!n!
#include <stdio.h>(1 分)
/* 递归函数 5分 */
long factorial(int n)( 1分)
{
if (n == 1)
return n;(2 分)
else
return n * factorial(n-1);(2 分)
.
}
/*主函数8分,其中:变量定义正确 2 分,循环正确得 2 分,函数调用格式正确 2 分,输出正确 2 分*/
void main( )
{
double e = 1.0;
for (int i=1; i<=20; i++)
{
e += 1/(double)factorial(i);
}
printf("%lf\n",e);
}
其它答案可根据情况酌情给分。