资源描述
__________________学院__________级___________班 姓名_______________ 学号_______________
………………………………(密)………………………………(封)………………………………(线)………………………………
密 封 线 内 答 题 无 效
四川师范大学计算机科学学院
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_3 C). A_B!D D). const
2、 不属于C语言基本数据类型的是( )
A). int B). union C). char D). unsigned
3、 下面是对宏定义的描述。不正确的是( )
A). 宏不存在类型问题,宏名无类型,它的参数也无类型
B). 宏替换不占用运行时间
C). 宏替换只是字符串的简单替代
D). 宏替换时先检查类型,类型一致时才可以替换
4、 C语言中,″\\xfds″在内存中占用的字节数是( )
A).3 B).4 C).5 D).6
5、 设int x;则执行printf(″%x\n″,~x^x);的结果是( )
A). ffffffff B). ff C). 0 D). 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,7 B).6,7,8 C).8,7,6 D).8,7,8
8、 设int a=9,b=20;则printf(″%d,%d\n″,a--,--b);的输出结果是( )
A).9,19 B).9,20 C).10,19 D).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).147 B).159 C).357 D).369
11、 执行完下列语句后,n的值是( )
int n;
for (n=0 ; n<100 ; n=2*n+1);
A).125 B).126 C).127 D).128
12、 有以下语句:int a=6;a+=a-=a*a;printf(“%d”,a);输出结果( )
A).–132 B).–60 C). -24 D). 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、 下面输出的结果为( )
int a=13, b=64;
printf(“%d\n”, !a || (b>>3) );
A).13 B).64
C).1 D).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).32 B).36 C).12 D).8
__________________学院__________级___________班 姓名_______________ 学号_______________
………………………………(密)………………………………(封)………………………………(线)………………………………
密 封 线 内 答 题 无 效
18、 数据-54.78在文本文件中占用的字节个数是( )
A).4 B).5 C).6 D).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>
int main(int argc, char* argv[])
{
float x,amax,amin;
scanf("%f",&x);
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;
}
21:
22:
2. 下面程序的功能是比较字符数组a和字符数组b中的两个字符串是否相等(比较对应字符,全部相同输出0,如果不同,返回第一个不相同的字符差值,并输出)。
#include <stdio.h>
int main(void)
{
char a[100]="Hello World!";
char b[100]="Hello Chengdu!";
23 ;
/* 完成对应字符的比较,并判定一个字符串是否结束了*/
while( 24 )
{
i++;
}
printf("%d\n", a[i]-b[i] );
return 0;
}
23:
24:
3. 就以下程序空缺的地方进行填空。 4.以下程序对一个3×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;
}
#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;
}
25:
26: 27:
28:
29:
__________________学院__________级___________班 姓名_______________ 学号_______________
………………………………(密)………………………………(封)………………………………(线)………………………………
密 封 线 内 答 题 无 效
得分
评卷人
三、阅读下列程序,将输出结果写到答题纸上对应的题号处。(本大题共4小题,每小题5分,共20分)
31题:
#include <stdio.h>
int main(void)
{ char str[100]="I am a pig.";
char *p= &str[7];
int i;
for (i=0; str[i] != '\0'; i++, p++ )
{ if( *p>='a' && *p<'z' )
(*p)++;
else if( *p == 'z' )
*p = 'a';
}
puts( str );
return 0;
}
30题:
#include <stdio.h>
int fun(int x)
{
int y=0;
static int z=3;
z++;++y;
return(x+y+z);
}
void main( )
{
int i,x=2;
for(i=0;i<2;i++)
printf("%5d",fun(x++));
}
33题:
#include <stdio.h>
int gcd(int m,int n)
{
if(m==n)
return m;
else if(m>n)
return gcd(m-n,n);
else
return gcd(m,n-m);
}
void main( )
{
printf("Gcd=%d\n",gcd(24,36));
}
32题:
#include <stdio.h>
int a1=300,a2=400;
void sub1(int x,int y)
{
a1=x;
x=y;
y=a1;
}
void main( )
{
int a3=100,a4=200;
sub1(a3,a4);
sub1(a1,a2);
printf("%d,%d,%d,%d\n",a1,a2,a3,a4);
}
得分
评卷人
四、程序设计题,将源代码规范地书写在答题纸上(第34小题10分,第35小题各14分,共24分)。
34.设计函数实现将一个字符串中小写字母转化为大写字母。
35. 计算的值并输出(设n=20)。
四川师范大学计算机科学学院
2012~2013学年度第二学期期末考试
C语言程序设计试卷 试卷A
参考答案与评分标准
一、单项选择题:(每小题1分,共20分)
1
2
3
4
5
6
7
8
9
10
B
B
D
D
A
B
C
A
A
C
11
12
13
14
15
16
17
18
19
20
C
B
A
D
C
D
B
C
A
B
二、填空题:(每空4分,共36分)
21: x >= 0 22: x < amin
23: int i=0 24: (a[i] == b[i]) && a[i] != '\0'
25: ‘\0’ 26: *sptr++
27: j < i 28: a[i][j] = a[j][i] 29: a[j][i] = temp
三、阅读程序题:(每小题5分,共20分)
30: 7 9 31: I am a qjh.
32:100,400,100,200 33: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计算的值并输出(设n=20)。(14分)
#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);
}
其它答案可根据情况酌情给分。
展开阅读全文