资源描述
中国地质大学(北京)继续教育学院 2012年09课程考试
《C语言程序设计》模拟题
一.单项选择题
(1) 变量的指针,其含义是指该变量的( B )。
A.值 B.地址 C.名 D.一个标志
(2) 设有变量定义int a=2, b=4, c=6, d=8;则表达式a>b? a: c>d? b: d的值是( D )。
A. 2 B. 4 C. 6 D.8
(3) C语言中用于结构化程序设计的三种基本结构是( A )。
A. 顺序结构、选择结构、循环结构
B. if、switch、break
C. for、while、do-while
D. if、for、continue
(4) 数组定义为"int a[4][5];", 引用"a[1]+3"表示( A )。
A. a数组第1行第3列元素的地址 B. a数组第1行第3列元素的值
C. a数组第4行的首地址 D. a数组第4列的首地址
(5) 设有变量定义struct str{int age;int num;}std,*p=&std;能正确引用结构变量std中成员age的表达式是( D )。
A. std->age B. * std->age C. *p.age D.(*p).age
(6) C语言中,函数的隐含存储类型是( A )。
A. auto B. static C. extern D.register
(7) 下面哪个表达式的值为4? ( D )
A. 11/3 B. 11.0/3
C. (float)11/3 D. (int)(11.0/3+0.5)
(8) 设有变量定义char * lang[]={“FOR”, “BAS”, “PAS”, “JAVA”, “C”};则表达式*lang[1]>*lang[3]的值是( B )。
A. 1 B. 0 C. 非零 D.负数
(9) 在一个C语言程序中,说法正确的是( B )。
A. main函数必须出现在所有函数之前
B. main函数可以在任何地方出现
C. main函数必须出现在所有函数之后
D. main函数必须出现在固定位置
(10) 下面哪个表达式的值为4? ( D )
A. 11/3 B. 11.0/3
C. (float)11/3 D. (int)(11.0/3+0.5)
(11) 设有变量定义double b[5], *p=b;则能正确表示b数组中元素地址的表达式是( A )。
A. b+1 B. p+5 C. &b[5] D. &b
(12) 对基类和派生类的关系中错误的是( B )。
A.派生类是基类的具体化
B.派生类是基类定义的子集
C.派生类是基类的子集
D.派生类是对基类的改造
(13) 执行语句scanf(“%f,%f”, &a, &b);,要使变量a和b的值分别为2.97和3.46,正确的输入序列是( C )。
A. 2.97 3.46后跟回车 B. 2.97;3.46后跟回车 C. 2.97,3.46后跟回车
(14) 设有变量定义int a[]= {1, 3, 5, 7, 9, 11, 13}, x, *p=a+2;在下列表达式中,能使变量x的值为5的表达式是( D )。
A. x=*(p+++1) B. x=* (--p) C. x=*(++p) D.x=*(p--)
二.概念填空
(1) 字符常量与字符串常量的区别是字符 常量用单引号,字符串常量用双引号 。
(2) 表达式x=x+1表示成增1表达式为 X++ 。
(3) C程序的基本组成单位是 函数 , 一个C源程序可以由一个或多个函数组成,但必须有一个且只能有一个main 函数。
(4) 若x为int型变量,则执行以下语句后x的值是 -14 。
x=7;
x+=x-=x+x;
(5) 在for循环体内使用continue语句的作用是 跳出该循环 。
(6) 表述“整型变量x,y和z至少有2个相等”的C语言表达式是 ((x==y)||((y==z)||(x==z)) 。
(7) 写出c语言中任意三种基本数据的类型 字符型 整型 浮点型
(8) 执行循环结构中的 continue 语句能够立即执行下一次循环。执行循环结构或switch结构中的 break 语句能够立即退出该结构。
三.程序填空
(1) 下列程序求以下方程的全部整数解:3x+2y-7z=5 (0<=x,y,z<=100)
#include <STDIO.H>
void main(void)
{
int x, y, z;
for (x=0; x<=100; x++)
for (y=0; y<=100; y++) {
if ((z=3*x+2*y-5)%7) continue;
(C) ;
if ( (E) ) printf("x=%d, y=%d, z=%d\n", x, y, z);
}
}
(A) z %= 7 (B) z>=0 (C) z /= 7 (D) x!=0&&y!=0&&z!=0
(E) z>=0 && z<=100
(2) 下列程序完成10进制整数到任意进制数的转换。其中,函数itob(n,s,b) 将整数n 转换成b进制数并存放在字符串s中。如itob(n,s,16) 格式,将数n 转换成16进制数并存放在s中。
#include <STDIO.H>
#include <STRING.H>
void reverse(char *);*
void itob(int, char *, int);
void main(void)
{
char str[20];
int n, base;
printf("Input the number and base:");
scanf("%d%d", &n, &base);
itob(n, str, base);
printf("\nThe number %d in base %d is %s\n", n, base, str);
}
void reverse(char s[])
{
int c, i, j;
for (i=0, j=strlen(s)-1; i<j; i++, j--) {
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
void itob(int n, char s[], int b)
{
int i=0, sign, t;
if ((sign=n)<0) n = -n;
do {
t = n%b;
if ( (B) ) s[i++] = t + 'A' - 10;
else s[i++] = n%b + '0';
} while ( (C) );
if (sign<0) s[i++] = '-';
(F) ;
reverse(s);
}
(A) t>10 (B) t>=10 (C) n/=b (D) n/b>0 (E) n%b>0
(F) s[i]=’\0’ (G) s[i++]=’\0’
(3) 下列函数检查表达式字符串的左右圆括号“(”和“)”是否配对,若配对则函数返回1,否则返回0。
int parenthbesis(char * exp)
{
char * p;
int i;
(A) ;
for ( (F) ; (H) ; p++)
if (*p=='(') i++;
else
if (*p==')') {
i --;
if ( (D) ) return 0;
}
if ( (B) ) return (1);
else return (0);
}
(A) i = 0 (B) i == 0 (C) i>0 (D) i<0 (E) i>=0
(F) p=exp (G) p=strlen(exp) (H) *p ( I) p != NULL (J ) p==NULL
(4) 下列函数用二分法在已按字母次序从小到大排序后的字符数组list[len]中查找字符ch。若ch在数组中,则返回ch在数组中的下标,否则返回-1。
int search(char * list, char ch, int len)
{
int low=0, high=len-1, k;
while ( (B) ) {
k = (low+high)/2;
if ( (C) ) return (k);
else if ( (E) ) high = k-1;
else low = k+1;
}
return (-1);
}
(A) high!=low (B) high>=low (C) list[k]==ch (D) list[k]!=ch
(E) list[k]>ch (F) list[k]<ch (G) list[k]>=ch
四. 写出下列各程序运行时输出的结果
(1) include <STDIO.H>
int p(int);
void main(void)
{
printf(“%d %d %d\n”, p(1), p(1), p(2));
}
int p(int x)
{
int z=1;
static int y = 2;
z ++; y++;
return (x+y+z);
}
答:6, 7, 9
(2). #include <iostream.h>
class A
{
public:
A(int i);
void print();
const int&r;
private:
const int a;
statc const int b;
}
const intA::b+10
A::A(int i):a(i),r(a)
{
}void A::print()
{
cout<<a<<":"<<b<<":"<<r<<endl;
}
void main ()
{
A a1(100),a2(0);
a1.print()
a2.print();
}
答:
100:10:100
0:10:0
(3).#include <stdio.h>
main( )
{int i=1,j=3;
printf("%d\n",i++);
{int i=0;
i+=j*2;
printf("%d,%d\n"i,j);
}
printf("%d,%d\n",i,j);
}
答:
6,3
2,3
五.说明下列函数pw和f的功能
(1) long pw ( int x , int n)
{
long p;
for( p=1; n>0; n--) p*=x;
return (p);
}
答:求阶乘x n
(2) #include <STDIO.H>
void f(int);
void main(void)
{
int x;
scanf("%d", &x);
f(x);
}
void f(int n)
{
int i;
if (n<0) {
putchar('-');
n *= -1;
}
if (i=n/10) f(i);
putchar(n%10+'0');
}
答:将整数n转换成字符串
六.程序设计
(1) 用循环编程,求自然数1至100之间各奇数平方和并输出。
答:#include<iostream.h>
void main()
{int i=1,sum=0;
while(i<=100)
{sum+=i*i;i+=2;}
cout<<"sum="<<sum<<endl;
}
(2) 编写一个在字符串s中删除所有c字符的函数squeeze(s,c),由主函数main输入字符串s和字符c,调用函数squeeze(s,c),最后输出删除了所有c字符的新字符串。
答:
#include <STDIO.H>
#include <STRING.H>
void squeeze(char *s, char c);
void main(void)
{
char string[20], c;
printf("Input a string:");
scanf("%s", string);
getchar();
printf("Input a char to be deleted:");
scanf("%c", &c);
squeeze(string, c);
printf("New String: %s", string);
}
void squeeze(char *s, char c)
{
int i, j, len;
len = strlen(s);
for (i=0; i<len; i++)
if (s[i]==c) {
len --;
for (j=i; j<=len; j++) s[j] = s[j+1];
}
}
(3) 求100~999中的水仙花数(若3位数abc,a³+ b³+ c³=a*100+b*10+c,则称abc为水仙花数。例如:153,1³+ 5³+ 3³=1*100+5*10+3,则153为水仙花数)。
答:
include <STDIO.H>
void main(void)
{
int a, b, c;
for (a=1; a<10; a++)
for (b=0; b<10; b++)
for (c=0; c<10; c++)
if (a*a*a+b*b*b+c*c*c==a*100+b*10+c)
printf("%d\n", a*100+b*10+c);
}
第7页(共7页)
展开阅读全文