资源描述
江苏省计算机等级考试
- 年 第 学期 c程序设计 试卷( )
题号
一
二
三
四
五
六
七
八
九
总 分
得分
一、选择题(本题共20道小题,共40分。)
1. 如下程序运行后,输出成果是
main( )
{
char *s="abcde";
s+=2;
printf("%ld\n",s);
}
A)cde B)字符c的ASCII码值 C)字符c的地址 D)犯错
2. 下面程序的运行成果是
main()
{
char ch[7]={"65ab21"};
int i,s =0
for(i=0;ch[i]>='0'&&ch[i]<'9';i+=2)
s=10*s+ch[i]-'0'
printf("%d\n",s);
}
A)12ba56 B)6521 C)6 D)62
3. 若有阐明,double *p,a;则能通过scanf语句正确给输入项读入数据的程序段是
A)*p=&a; scanf("%lf",p);
B)p=(double*)malloc(8);scanf("%f",p);
C) p=&a;scanf("%lf",a);
D)p=&a; scanf("%le",p);
4. 若要用下面的程序片段使指针变量p指向一个存储整型变量的动态存储单元:
int *p;
p=__________ malloc( sizeof(int));
则应填入
A) int B) inst * C) (*int) D) (int *)
5. 若k是int型变量,且有下面的程序片段:
k=-3
if(k<=0) printf("####")
else printf("&&&&");
上面程序片段的输出成果是
A) #### B) &&&& C) ####&&&& D) 有语法错误,无输出成果
6. 如下程序运行后,输出成果是
#include<stdio.h>
#define PT 5.5
#define S(x) PT*x*x
main( )
{
int a=1,b=2;
printf("%4.1f\n",S(a+b))
}
A)49.5 B)9.5 C)22.0 D)45.0
7. 设有如下语句:
struct st {int n; struct st *next;};
static struct st a[3]={5,&a[1],7,&a[2],9,'\0'},*p;
p=&a[0];
则体现式_____的值是6。
A)p + + ->n B) p->n + + C) (*p).n + + D) + + p->n
8. 当a=1,b=3,c=5,d=4时,执行下面一段程序后,x的值为
if(a<b)
if(c<d)x=1;
else if(a<c)
if(b<d)x=2;
else x=3;
else x=6;
else x=7;
A)1 B)2 C)3 D)6
9. 下面程序的输出是
A) xyzabcABC B) zabcABC C) yzabcABC D) xyabcABC
#include<stdio.h>
#include<string.h>
main()
{ char *p1="abc",*p2="ABC",str[50]="xyz";
strcpy(str+2,strcat(p1,p2));
printf("%s\n", str);}
10. 执行如下程序后,y的值是
main ( )
{ int a[]={2,4,6,8,10};
int y=1,x,*p;
p=&a[1];
for(x=0;x<3;x++) y + = * (p + x);
printf("%d\n",y); }
A) 17 B) 18 C) 19 D) 20
11. 设已经有定义: char *st="how are you"; 下列程序段中正确的是
A) char a[11], *p; strcpy(p=a+1,&st[4]);
B) char a[11]; strcpy(++a, st);
C) char a[11]; strcpy(a, st);
D) char a[], *p; strcpy(p=&a[1],st+2);
12. 若有阐明:int i,j=7, *p=&i;,则与i=j;等价的语句是
A) I= *P; B) *P=*&J;
C) i=&j; D) i=* *p;
13. 执行语句:for(i=1;i++<4;)后;变量i的值是
A)3 B)4 C)5 D)不定
14. 两次运行下面的程序,假如从键盘上分别输入6和4,则输出成果是
main( )
{ int x;
scanf("%d",&x);
if(x + + >5) printf("%d",x);
else printf("%d\n",x - -); }
A) 7和5 B) 6和3 C) 7和4 D) 6和4
15. 有如下程序
int fun(int x,int y,int *cp,int *dp)
{*cp=xy;*dp=x--y;}
main()
{
int a,b,c,d;
a=30;b=50;
fun(a,b,&c,&d);
printf("%d,%d\n",c,d);
}
输出成果是
A)50,30 B)30,50
C)80,-20 D)80,20
16. 设有数组定义: char array [ ]="China"; 则数组 array所占的空间为
A) 4个字节 B) 5个字节 C) 6个字节 D) 7个字节
17. 如下程序运行后,输出成果是
fut(int **s, int p[2][3])
{
**s=p[1][1];
}
main()
{
int a[2][3]={1,3,5,7,9,11},*p;
p=(int *)malloc(sizeof(int));
fut(&p,a);
printf("%d\n",*p);
}
A)1 B)7 C)9 D)11
18. 设j为int型变量,则下面for循环语句的执行成果是
for(j=10;j>3;j--)
{
if(j%3)j--;
--j;--j;
printf("%d",j);
}
A)6 3 B)7 4 C)6 2 D)7 3
19. 设C语言中,一个int 型数据在内存中占2个字节,则unsigned int 型数据的取值范围为:
A) 0-255
B) 1-32767
C) 0-65535
D) 0-
20. 设有如下定义:
int (*ptr)*();
则如下论述中正确的是
A)ptr是指向一维组数的指针变量
B)ptr是指向int型数据的指针变量
C)ptr是指向函数的指针,该函数返回一个int型数据
D)ptr是一个函数名,该函数的返回值是指向int型数据的指针
二、填空题(每空1分,共10分。)
1. C语言数组的下标总是从__________开始,不能够为负数;组成数组各个元素具备相同的__________。
2. 在C语言中(以16位PC机为例),一个char数据在内存中所占字节数为_______,一个int数据在内存中所占字节数为_______,一个long数据在内存中所占字节数为_______,一个float数据在内存中所占字节数为_______。
3. C程序是由________组成的,一个C程序中最少包括________ 。因此,________是C程序的基本单位。
4. 假定一个二维数组为a[M][N],则a[i]的地址值(以字节为单位)为 __________。
三、判断题(本题共10道小题,共10分。)
1. 若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存储整型数( )
2. 全局变量使得函数之间的"耦合性"愈加快密,不利于模块化的要求( )
3. 若调用一个函数,且此函数中没有return语句,则返回一个不确定的值( )
4. 用户若需要调用标准库函数,调用前必须重新定义( )
5. 函数调用:strcat(strcpy(str1,str2),str3)的功效是将串str2复制到串str1中后再将串str3连接到串str1之后( )
6. 在实际编程中,do-while循环完全能够用for循环替代( )
7. C程序的注释只能是一行( )
8. 自增运算符(++)或自减运算符(--)只能用于变量,不能用于常量或体现式( )
9. 在函数内的复合语句中定义的变量在本函数范围内有定义( )
10. 一个变量在内存中占据一定的存储单元( )
四、程序填空(本题共5道小题,每题4分,共20分。)
1. 如下程序统计从终端输入的字符中每个大写字母的个数。用#号作为输入结束标志,请填空。
#include <stdio.h>
#include <ctype.h>
main( )
{ int num[26],i; char c;
for(i=0; i<26; i++) num[i]=0;
while( _________!='#') /*统计从终端输入的大写字母个数*/
if( isupper(c)) num[c-65]+=1;
for(i=0; i<26; i++) /*输出大写字母和该字母的个数*/
if(num[i]) printf("%c:%d\n,i __________ , num[i]);
}
2. 如下程序求a数组中的所有素数的和,函数isprime用来判断自变量是否为素数。素数是只能被1和自身整除且不小于1的自然数。
#include <stdio.h>
main()
{ int i,a[10],*p=a,sum=0;
printf("Enter 10 num:\n");
for(i=0;i<10;i + + ) scanf("%d",&a[i]);
for(i=0;i<10;i + + )
if(isprime(*(p+ _______)) = = 1){ printf("%d",*(a+i)); sum+=*(a+i); }
printf("\nThe sum=%d\n",sum); }
isprime(x)
int x;
{ int i; for(i=2;i<=x/2;i + + )
if(x%i = = 0) return (0); _________ ; }
3. 如下程序建立了一个带有头结点的单向链表,链表结点中的数据通过键盘输入,当输入数据为-1时,表示输入结束(链表头结点的data 域不放数据,表空的条件是ph->next = = NULL).
#include<stdio.h>
struct list { int data;struct list *next;};
_________creatlist()
{ struct list *p,*q,*ph; int a;
ph=(struct list *) malloc(sizeof(struct list));
p=q=ph; printf("Input an integer number,enter -1 to end:\n");
scanf("%d",&a):
while(a!=-1)
{ p=(struct list *)malloc(sizeof(struct list));
p->data=a;
q->next=p;
_________=p;
scanf("%d",&a); }
p->next='\0';
return(ph);
}
main()
{ struct list *head; head=creatlist();}
4. 设有如下程序:
main()
{ int a, b, k=4, m=6, *p1=&k, *p2=&m;
a=pl==&m;
b=(*p1)/(*p2)+7;
printf("a=%d\n",a);
printf("b=%d\n",b);
}
执行该程序后,a的值为_________,b的值为__________。
5. 如下程序调用invert函数按逆序重新放置a数组中元素的值。a数组中的值在main函数中读入。
#include <stdio.h>
#define N 10
invert(s,i,j)
int *s,i,j;
{ int t; if(i<j){ t=*(s+i); *(s+j)=(s+j);*(s+j)=t; invert(s, ________ ,j-1);}}
main()
{ int a[N],i;
for(i=0;i<N;i + + ) scanf("%d",a+ ____________ );
invert(a,0,N-1);
for(i=0;i<N;i + + ) printf("%d",a[i]);
printf("\n"); }
五、编程题(本题共2道小题,共20分。)
1. 计算1-1/2+1/3-1/4-...+1/99-1/100的值,并显示出来。
2. 从键盘输入一个5*5整型数组赋值,找出其中的最小值并显示出来。
江苏省计算机等级考试
- 年 第 学期 c程序设计 试卷(参考答案)
题号
一
二
三
四
五
六
七
八
九
总 分
得分
一、选择题(本题共20道小题,共40分。)
1. C
2. C
3. D
4. D
5. D
6. B
7. D
8. B
9. D
10. C
11. A
12. B
13. C
14. A
15. B
16. C
17. C
18. B
19. C
20. C
二、填空题(每空1分,共10分。)
1. 0 , 数据类型
2. 1 ,2 ,4 ,4
3. 函数 ,main() ,函数
4. a+i或*(a+i)
三、判断题(本题共10道小题,共10分。)
1. 错
2. 对
3. 对
4. 错
5. 对
6. 对
7. 错
8. 对
9. 错
10. 对
四、程序填空(本题共5道小题,每题4分,共20分。)
1. (c=getchar()) , +65 或 +'A'
2. I , return 1 或 return (1)
3. struct list * , q
4. 0 , 7
5. i+1 , i
五、编程题(本题共2道小题,共20分。)
1. #include "stdio.h"
main()
{
int c,s;
float ch;
ch=0;
for (c=1;c<100;c++)
{if(c%2==0)
s=-1;
else
s=1;
ch+=s*(1/(float)c);
}
printf("sum=%f",ch);
}
2. #include "stdio.h"
main()
{
int i=0,j=0,Max=0;
int but[5][5];
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&but[i][j]);
scanf("%d",&but[i][j]);
Max=but[0][0];
for(i=0;i<5;i++)
for(j=0;j<5;j++)
if (Max>but[i][j])
Max=but[i][j];
printf("最小值是%d",Max);
}
展开阅读全文