2008-1-3
相关自考频道点评提问自考网上培训
自考“C语言程序设计”模拟试题一
一、填空题
1、C语言中基本的数据类型有:______、______ 、______ .
2、C语言中普通整型变量的类型说明符为______,在内存中占______字节,有符号普通整型的数据范围是______ .
3、整数-35在机内的补码表示为______.
4、执行下列语句int a=8; a+=a-=a*a; 后,a的值是______.
5、有如下语句:char A[ ]={“I am a student”}; 该字符串的长度是______,A[3]=______.
6、符号“a”和‘a’的区别是______.
7、所谓“指针”就是______.“&”运算符的作用是______.“*”运算符的作用是______.
8、有如下输入语句:scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);为使变量a的值为1,b的值为3,c的值为2,从键盘输入数据的正确形式应是______.
二、选择题
1、设整型变量a为5,使b不为2的表达式是( )。
A. b=a/2B. b=6-(——a) C. b=a%2D. b=a>3?2:1
2、为了避免嵌套的条件分支语句if-else的二义性,C语言规定:C程序中的else总是与( )组成配对关系。
A. 缩排位置相同的ifB. 在其之前未配对的if
C. 在其之前未配对的最近的if D.同一行上的if
3、以下程序的输出结果是( )。
int x=10,y=10;
printf(“%d %d\n”,x——,——y);
A. 10 10 B. 9 9 C. 9 10 D. 10 9
4、设A为存放(短)整型的一维数组,如果A的首地址为P,那么A中第i 个元素的地址为( )。
A.P+i*2 B. P+(i-1)*2 C. P+(i-1) D. P+i
5、选出下列标识符中不是合法的标识符的是( )。
A. hot_do B. cat1 C. _pri D. 2ab
6、以下程序的输出结果是( )。
int a=5;
float x=3.14;
a*=x*(‘E’ - ‘A’);
printf(“%f\n”,(float)a);
A. 62.000000 B. 62.800000 C. 63.000000 D. 62
7、设有说明double(*p1)[N];其中标识符p1是( )。
A. N个指向double型变量的指针。
B. 指向N个double型变量的函数指针。
C. 一个指向由N个double型元素组成的一维数组的指针。
D.具有N个指针元素的一维指针数组,每个元素都只能指向double型量。
8、在C程序中有如下语句:char *func(int x,int y);它是( )。
A. 对函数func的定义。 B. 对函数func的调用。
C.对函数func的原型说明。 D. 不合法的。
9、以下程序的输出结果是( )。
char str[15]=“hello!”;
printf(“%d\n”,strlen(str));
A. 15 B. 14 C. 7 D. 6
10、分析以下程序的输出结果是( )。
main()
{int a=5,b=-1,c;
c=adds(a,b);
printf(“%d”,c);
c=adds(a,b);
printf(“%d\n”,c);}
int adds(int x,int y)
{static int m=0,n=3;
n*=++m;
m=n%x+y++;
return(m);}
A. 2,3 B. 2,2 C. 3,2 D. 2,4
11、下列描述中不正确的是( )。
A. 字符型数组中可能存放字符串。
B. 可以对字符型数组进行整体输入、输出。
C. 可以对整型数组进行整体输入、输出。
D. 不能在赋值语句中通过赋值运算符“=”对字符型数组进行整体赋值。
12、以下程序的输出结果是( )。
#define f(x) x*x
main()
{int a=6,b=2,c;
c=f(a)/f(b);
printf(“%d\n”,c);
}
A. 9 B. 6 C. 36 D. 18
13、设有如下定义: int x=10,y=3,z;
则语句printf(“%d\n”,z=(x%y,x/y)); 的输出结果是( )。
A. 1 B. 0 C. 4D. 3
14、定义如下变量和数组:int i;int 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. 1 5 9 B. 1 4 7 C. 3 5 7 D. 3 6 9
15、以下对二维数组a进行正确初始化的是( )
A. int a[2][3]={{1,2},{3,4},{5,6}}; B. int a[ ][3]={1,2,3,4,5,6};
C. int a[2][ ]={1,2,3,4,5,6}; D. int a[2][ ]={{1,2},{3,4}};
16、两次运行下面的程序,如果从键盘上分别输入6和3,则输出结果是( )。
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
17、设有如下定义: char *aa[2]={“abcd”,“ABCD”}; 则以下说法中正确的是()。
A)aa数组成元素的值分别是“abcd”和ABCD“
B)aa是指针变量,它指向含有两个数组元素的字符型一维数组
C)aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址
D)aa数组的两个元素中各自存放了字符‘a’和‘A’的地址
18、下列程序的输出结果是( )。
char *p1=“abcd”, *p2=“ABCD”, str[50]=“xyz”;
strcpy(str+2,strcat(p1+2,p2+1));
printf(“%s”,str);
A. xyabcABB. abcABz C. ABabcz D. xycdBCD
19、下列程序的输出结果是( )。
int a[5]={2,4,6,8,10},*P,* *k;
p=a; k=&p;
printf(“%d”,*(p++));
printf(“%d\n”,* *k);
A. 4 4 B. 2 2C. 2 4 D. 4 6
20、不能把字符串:Hello!赋给数组b的语句是( )。
A. char b[10]={‘H’,‘e’,‘l’,‘l’,‘o’,‘!’};
B. char b[10]; b=“Hello!”;
C. char b[10]; strcpy(b,“Hello!”);
D. char b[10]=“Hello!”;
三、读程序题
1、float f=3.1415927;
printf(“%f,%5.4f,%3.3f”,f,f,f);
则程序的输出结果是 .
2、int x=6, y=7;
printf(“%d,”,x++);
printf(“%d\n”,++y);
程序的输出结果是.
3、a=3;
a+=(a<1)?a:1;
printf(“%d”,a);
结果是.
4、for (a=1,b=1;a<=100;a++)
{ if(b>=20) break;
if(b%3==1)
{b+=3; continue;}
b-=5; }
程序的输出结果a的值为 .
5、int y=1, x, *p, a[ ]={2,4,6,8,10};
p=&a[1];
for(x=0;x<3;x++)
y + = * (p + x);
printf(“%d\n”,y);
程序的输出结果y的值是 .
四、程序填空题
1、从键盘上输入10个数,求其平均值。
main()
{int i;
float f,sum;
for(i=1,sum=0.0;i<11;i++)
{;
;}
printf(“average=%f\n”,sum/10); }
2、以下程序是建立一个名为myfile的文件,并把从键盘输入的字符存入该文件,当键盘上输入结束时关闭该文件。
#include
main()
{ FILE *fp;
char c;
fp= ;
do{
c=getchar();
fputs(c,fp);
}while(c!=EOF);
}
3、以下程序的功能是:从键盘上输入若干个学生的成绩, 统计并输出最高成绩和最低成绩,当输入负数时结束输入。请填空。
main()
{ float x,amax,amin;
scanf(“%f”,&x);
amax=x; amin=x;
while()
{ if(x>amax)amax=x;
if( ) amin=x;
scanf(“%f”,&x); }
printf(“\namax=%f\namin=%f\n”,amax,amin); }
五、编程题
1. 三个整数a、b、c,由键盘输入,输出其中最大的一个数。
2.输出1900~2000年中所有的闰年。每输出3个年号换一行。(判断闰年的条件为下面二者之一:能被4整除,但不能被100整除。或者能被400整除。)
3.请编一个函数int fun(int a),它的功能是:判断a是否是素数,若a是素数,返回1;若不是素数,返回0.A的值由主函数从键盘读入。
4.有N个学生,每个学生的信息包括学号、性别、姓名、四门课的成绩,从键盘上输入N个学生的信息,要求输出总平均成绩最高的学生信息,包括学号、性别、姓名和平均成绩。
参考答案
一、填空题
(1)整型、实型、字符型。
(2)int,2,-32768~ +32767
(3)1111111111011101
(4)- 112
(5)14,‘m’
(6)“a”是字符串常量,而‘a’是字符常量。
(7)存放地址值的变量或常量,或者答地址。
(8)取运算对象的地址。 取指针变量所指的内容。a=1,b=3,c=2
二、选择题
1、C 2、C 3、D 4、B 5、D
6、A 7、C 8、C 9、D 10、A
11、C12、C13、D14、C 15、B
16、C17、D18、D19、C 20、B
三、阅读程序题
(1) 3.141593,3.1416,3.142
(2) 6,8
(3) 4
(4) 22
(5) 19
四、程序填空题
1、scanf(“%f”,&f);sum+=f;
2、fopen(“myfile”,w)fclose(fp);
3、x>=0.0 x<=amin
五、编程题
1、main()
{int a,b,c;
printf(“请输入三个整数:”);
scanf(“%d,%d,%d”,&a,&b,&c);
if(a
if(b
else printf(“max=%d\n”,b);
else if(a
elseprintf(“max=%d\n”,a);}
2、#include“stdio.h”
main()
{int I,n;
for(n=0,I=1900;I<=2000;I++)
{if(I%4==0&&I0!=0||I@0==0)
{printf(“%d ”,I);n++;}
if(n%3==0)
printf(“\n”);} } }
3、#include“stdio.h”
int fun(int a)
{int I;
if(a==2) return 1;I=2;
while((a%I)!=0&&I<=sqrt((float)a))
I++;
if(a%I==0)
{printf(“%d is not a prime!”,a);
return 0;}
printf(“%d is a prime!”,a);
return 1; }
main()
{int x;
printf(“\n please enter a number:”);
scanf(“%d”,&x);
printf(“%d\n”,fun(x)); }
4、#include“stdio.h”
#define N 3
struct student
{long stu_num; char sex;
char name[15]; int score[4];
float average; };
main()
{int I,j,index; float sum,max;
struct student stuarr[N];
for(I=0;I
{printf(“please input %d student information:\n”,I+1);
scanf(“%ld,%c,%s”,&stuarr[I].stu_num,&stuarr[I].sex,stuarr[I].name);
for(j=0;j<4;j++)
scanf(“%d”,&stuarr[I].score[j]); }
for(I=0;I
{sum=0.0;
for(j=0;j<4;j++)
sum+=stuarr[I].score[j];
stuarr[I].average=sum/4.0;}
max=stuarr[0].average;
index=0;
for(I=1;I
if(stuarr[I].average>max)
{max=stuarr[I].average;
index=I; }
printf(“总平均成绩最高的学生信息是学号=%ld,性别=%c,姓名=%s,平均成绩=%4.1f\n”,stuarr[index].stu_num,stuarr[index].sex,stuarr[index].name,stuarr[index].average);
}
一.选择题
(共15题,
每题2分,共30分)
1.
定义结构体的关键字是(
)
A.
union
B.
enum
C.struct
D.typedef
2.
设整型变量a为5,使b不为2的表达式是(
)
A.
b=a/2
B.
b=6-(--a)
C.
b=a%2
D.
b=a>3?2:1
3.
下面哪一项是不正确的字符串赋值或赋初值的方法(
)
A.
char
*str
str=
“china”
B.
char
str[7]=
{‘c’,
‘h’,
‘i’,
‘n’,
‘a’}
C.
char
str1[]=
“china”,str2[]=“123”
D.
char
str1[10]
str1=
“china”
4.
以下对二维数组a进行正确初始化的是(
)
A.
int
a[2][3]={{1,2},{3,4},{5,6}}
B.
int
a[
][3]={1,2,3,4,5,6}
C.
int
a[2][
]={1,2,3,4,5,6}
D.
int
a[2][
]={{1,2},{3,4}}
5.
选出下列标识符中不是合法的标识符的是(
)
A.
hot_do
B.
cat1
C.
_pri
D.
2ab
6.
以下说法中正确的是(
)
A.
C语言程序总是从第一个的函数开始执行
B.
在C语言程序中,要调用的函数必须在main()函数中定义
C.
C语言程序总是从main()函数开始执行
D.
C语言程序中的main()函数必须放在程序的开始部分
7.
若已定义:int
a[9],
*p=a并在以后的语句中未改变p的值,不能表示a[1]地址的表达式为(
)
A.
p+1
B.
a+1
C.
a++
D.
++p
8.
若有说明:
int
i,j=7,
*p=&i,
则与i=j
等价的语句是(
)
A.
i=
*p
B.
*p=*&j
C.
i=&j
D.
i=*
*p
9.
若变量c为char类型,能正确判断出c为小写字母的表达式是(
)
A.
‘a’<=c<=
‘z’
B.
(c>=
‘a’)
||
(c<=
‘z’)
C.
(‘a’<=c)
and
(‘z’>=c)
D.
(c>=
‘a’)
&&
(c<=
‘z’)
10.
以下程序的输出结果是(
)
main()
{
int
a[]={1,2,3,4,5,6,7,8,9},
*p
p=a
*(p+3)+=2
printf(
“%d,%d\n”,*p,*(p+3)
)
}
A.
0,
5
B.
1,
6
C.
1,
5
D.
0,
6
11.
以下程序的输出结果是(
)
main()
{
int
a=5
float
x=3.14
a*=x*(‘E’-
‘A’)
printf(“%f\n”,(float)a)
}
A.
62.000000
B.
62.800000
C.
63.000000
D.
62
12.
以下程序的输出结果是(
)
#define
f(x)
x*x
main()
{
int
a=6,b=2,c
c=f(a)/f(b)
printf(“%d\n”,c)
}
A.
9
B.
6
C.
36
D.
18
13.
定义如下变量和数组:int
i
int
x[3][3]={1,2,3,4,5,6,7,8,9}
则语句for(i=0i<3i++)
printf("%d
",x[i][2-i])
的输出结果是(
)
A.
1
5
9
B.
1
4
7
C.
3
5
7
D.
3
6
9
14.
下列程序段的输出结果是
(
)
void
main(
)
{
int
k
for
(k=1k<5k++)
{
if(k%2!=0)
printf(
“#”
)
else
printf(“*”)
}
}
A.
#*#*
B
.
*#*#
C.
##
D.
**
15.
下列程序执行后输出的结果是(
)
int
d=1
fun
(int
p)
{
int
d=5
d
+
=p
+
+
printf("%d,",d)
}
main(
)
{
int
a=3
fun(a)
d
+
=
a
+
+
printf("%d\n",d)
}
A.
8,
4
B.
9,
6
C.
9,
4
D.
8,
5
二.
填空题(共7题,每空2分,共30分)
1.
数组
int
a[3][5]
共定义了_______________个元素。
2.
有float
f=3.1415927
则
printf(“%5.4f”,
f
)输出的结果是_______________。
3.
下面程序的功能是:输出
100以内(不包含100)能被
3整除且个位数为
6的所有整数,请填空。
main(
)
{
int
i
for(i=1
_______________
i++)
if
(_______________)
printf("%d",
i);
}
4.
设有“int
x=2,
y”说明,则逗号表达式“y=x+5,x+y”的值是
_______________
5.
以下是使用指针,进行字符串复制的程序,请填空。
main()
{
char
a[]=
“Tsinghua
University”,
b[30],
*p1,*p2
p1=a
p2=b
for(
*p1!=
‘_______________’
p1++,
p2++)
_______________=_______________
*p2=
‘_______________’
printf(“string
a
is:%s\n”,a)
printf(“string
b
is:%s\n”,b)
}
6.
下面程序用冒泡法对数组a进行降序排序,请填空。
main()
{
int
a[5]={4,7,2,5,1}
int
i,j,m
for(i=0i<4i++)
for(j=0j<_______________j++)
if(
_______________<
_______________
)
{
m=a[
j]
a[
j]=a[
j+1]
a[
j+1]=
m
}
for(i=0i<5i++)
printf("%d
",a[i])
}
7.
函数fun的功能是:使一个字符串按逆序存放,请填空。
void
fun
(char
str[])
{
char
m
int
i,j
for(i=0,j=strlen(str)i<_______________i++,j--)
{
m=str[i]
str[i]=
_______________
str[j-1]=m
}
printf("the
rotated
string
is
%s\n",_______________)
}
c语言程序设计试题
阐述编程语言的概念,学习进制转换以及程序的基本运行原理,让大家先有一个整体上的认识。下面是我整理的关于c语言程序设计基础知识,希望大家认真阅读!
【程序1】
题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去
掉不满足条件的排列。
2.程序源代码:
代码如下:
#include "stdio.h"
#include "conio.h"
main()
{
int i,j,k
printf("\n")
for(i=1i<5i++) /*以下为三重循环*/
for(j=1j<5j++)
for (k=1k<5k++)
{
if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/
printf("%d,%d,%d\n",i,j,k)
}
getch()
}
【程序2】
题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%利润高
于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提
成7.5%20万到40万之间时,高于20万元的部分,可提成5%40万到60万之间时高于
40万元的部分,可提成3%60万到100万之间时,高于60万元的部分,可提成1.5%,高于
100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
2.程序源代码:
代码如下:
#include "stdio.h"
#include "conio.h"
main()
{
long int i
int bonus1,bonus2,bonus4,bonus6,bonus10,bonus
scanf("%ld",&i)
bonus1=100000*0. 1
bonus2=bonus1+100000*0.75
bonus4=bonus2+200000*0.5
bonus6=bonus4+200000*0.3
bonus10=bonus6+400000*0.15
if(i<=100000)
bonus=i*0.1
else if(i<=200000)
bonus=bonus1+(i-100000)*0.075
else if(i<=400000)
bonus=bonus2+(i-200000)*0.05
else if(i<=600000)
bonus=bonus4+(i-400000)*0.03
else if(i<=1000000)
bonus=bonus6+(i-600000)*0.015
else
bonus=bonus10+(i-1000000)*0.01
printf("bonus=%d",bonus)
getch()
}
【程序3】
题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后
的结果满足如下条件,即是结果。请看具体分析:
2.程序源代码:
代码如下:
#include "math.h"
#include "stdio.h"
#include "conio.h"
main()
{
long int i,x,y,z
for (i=1i<100000i++)
{
x=sqrt(i+100)/*x为加上100后开方后的结果*/
y=sqrt(i+268)/*y为再加上168后开方后的结果*/
if(x*x==i+100&&y*y==i+268) /*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
printf("\n%ld\n",i)
}
getch()
}
【程序4】
题目:输入某年某月某日,判断这一天是这一年的第几天?
1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的.第几天,特殊
情况,闰年且输入月份大于3时需考虑多加一天。
2.程序源代码:
代码如下:
#include "stdio.h"
#include "conio.h"
main()
{
int day,month,year,sum,leap
printf("\nplease input year,month,day\n")
scanf("%d,%d,%d",&year,&month,&day)
switch(month) /*先计算某月以前月份的总天数*/
{
case 1:sum=0break
case 2:sum=31break
case 3:sum=59break
case 4:sum=90break
case 5:sum=120break
case 6:sum=151break
case 7:sum=181break
case 8:sum=212break
case 9:sum=243break
case 10:sum=273break
case 11:sum=304break
case 12:sum=334break
default:printf("data error")break
}
sum=sum+day/*再加上某天的天数*/
if(year%400==0||(year%4==0&&year%100!=0)) /*判断是不是闰年*/
leap=1
else
leap=0
if(leap==1&&month>2) /*如果是闰年且月份大于2,总天数应该加一天*/
sum++
printf("It is the %dth day.",sum)
getch()
}
【程序5】
题目:输入三个整数x,y,z,请把这三个数由小到大输出。
1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,
然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
2.程序源代码:
代码如下:
#include "stdio.h"
#include "conio.h"
main()
{
int x,y,z,t
scanf("%d%d%d",&x,&y,&z)
if (x>y)
{t=xx=yy=t} /*交换x,y的值*/
if(x>z)
{t=zz=xx=t} /*交换x,z的值*/
if(y>z)
{t=yy=zz=t} /*交换z,y的值*/
printf("small to big: %d %d %d\n",x,y,z)
getch()
}
【程序6】
题目:用*号输出字母C的图案。
1.程序分析:可先用'*'号在纸上写出字母C,再分行输出。
2.程序源代码:
代码如下:
#include "stdio.h"
#include "conio.h"
main()
{
printf("Hello C-world!\n")
printf(" ****\n")
printf(" *\n")
printf(" * \n")
printf(" ****\n")
getch()
}
【程序7】
题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
1.程序分析:字符共有256个。不同字符,图形不一样。
2.程序源代码:
代码如下:
#include "stdio.h"
#include "conio.h"
main()
{
char a=176,b=219
printf("%c%c%c%c%c\n",b,a,a,a,b)
printf("%c%c%c%c%c\n",a,b,a,b,a)
printf("%c%c%c%c%c\n",a,a,b,a,a)
printf("%c%c%c%c%c\n",a,b,a,b,a)
printf("%c%c%c%c%c\n",b,a,a,a,b)
getch()
}
【程序8】
题目:输出9*9口诀。
1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。
2.程序源代码:
代码如下:
#include "stdio.h"
#include "conio.h"
main()
{
int i,j,result
printf("\n")
for (i=1i<10i++)
{
for(j=1j<10j++)
{
result=i*j
printf("%d*%d=%-3d",i,j,result)/*-3d表示左对齐,占3位*/
}
printf("\n")/*每一行后换行*/
}
getch()
}
【程序9】
题目:要求输出国际象棋棋盘。
1.程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。
2.程序源代码:
代码如下:
#include "stdio.h"
#include "conio.h"
main()
{
int i,j
for(i=0i<8i++)
{
for(j=0j<8j++)
if((i+j)%2==0)
printf("%c%c",219,219)
else
printf(" ")
printf("\n")
}
getch()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)