C程序设计1测试题答案
程序设计模拟题1
一 单项选择题
1.C程序的基本单位是______
A子程序 B过程 C 函数 D源程序文件
2.若有以下说明,则______不是对strcpy库函数的正确的调用
char str1=”copy”,str2,str3=”hijklmn”,*str4,*str5=”abcd”;
A strcpy(str2,str1); B strcpy(str3,str1);
C strcpy(str4,str1); D strcpy(str5,str1);
3.C语言中,要求运算量必须是整形数据的运算符是______
A% B/ C * D!
4.选出C语言的合法的变量名______
A 33a B a#b Cab,c Dddt3
5.以下说法正确的是:
预处理命令行都必须以#号开始
预处理命令只能位于源程序的首部
对预处理命令的处理是在执行过程中进行的
每个C程序必须使用预处理命令#include <stdio.h>
6.对于如下数据定义和scanf函数调用:
int i1, i2;
char c1, c2;
scanf("%d%c%d%c", &i1, &c1, &i2, &c2);
若使i1、c1、i2、c2的值分别为10、'C'、20、'D',
正确的数据输入方式是______
A 10C20D<回车> B 10 C 20D<回车> C 10 C 20 D<回车> D 10 C20 D<回车>
7.当定义一个结构体变量时系统分配给它的内存是:______
A各成员所需内存量的总和
B 成员中占内存量最大者所需的容量
C 结构中第一个成员所需内存量
D 结构中最后一个成员所需内存量
8.设有以下语句,则c的值用二进制表示为: ______
char a=3,b=6,c;c=(a∧b)<<2;
A00011011 B00010100 C00011100 D00011000
二 填空题
1. 设int a=10,则执行完语句a+=a-=a*a后,a 的值是______。
2.char *str;
str="string";
这种字符串赋值方式正确吗?______(正确填1,不正确填0)
3.表达式3&4的值为_______。
4.C语言提供的构造类型的数据有: 数组,结构体,______ 。
5.表达式0?(0?3:2):(10?1:0)的值为______。
6.C语言程序中,若对函数类型未加显式说明,则函数的隐含类型为______类型。
7.定义int j=1;执行while(j++<4)后j的值为______。
三 程序填空题
1.输出由’*’组成的倒三角图案,图案的行数n从键盘输入。
如果行数n为6,则图案如图所示:
* * * * * *
* * * * *
* * * *
* * *
* *
*
#include <stdio.h>
main( )
{
int i, j, n;
printf("Please input number of rows:");
scanf("%d", &n);
for( i=______; i <n; i ++)
{
for( j=0; j<______; j++ )
putchar( j< i?’ ’:’______’);
putchar( '\n' );
}
}
2. 用起泡法将10个数组元素从小到大排序。
main ( )
{int i,j,t;
static int a={5,7,4,2,3,6,1,0,,9,8};
for(j=0;j<9;j++)
{ for(i=0;i______9-j;i++)
{if(a>a)
{ t=a;a=a;a= ______;
}
}
}
for(i=0;i<10;i++) printf(“%2d”,a);
}
四 改错题
(下面每小题有三行程序存在错误,要求不改变程序的功能,指出出错语句,并写出完整的正确语句)
1.本程序计算N×N二维整型数组全部元素的平均值(输出时保留一位小数)。
行号程序
01 #include <stdio.h>
02 #define N 4
03 float fun( int arr[] );
04 main( )
05 {
06 static int aa[]={
07 { 1, 2, 3, 4 }, { 4, 5, 6, 7 },
08 { 10,11,12,13 }, {20,21,22,23 } };
09 float avr;
10 avr=fun(&aa);
11 printf("avr=%.1f", avr);
12 }
13 float fun( int arr[] )
14 {
15 int i, j;
16 int s;
17 float av;
18 for( i=1; i<N; i++ )
19 for( j=0; j<=N-1; j++ )
20 s += arr;
21 av = s/(N*N);
22 return av;
23 }
可能出错的程序语句的行号为:03、06、10、13、16、18、19、20,错误依次为:
行号______应改为_________________________________________________。
行号______应改为_________________________________________________。
行号______应改为_________________________________________________。
参考答案:
1.行号10 应改为avr=fun(aa);
行号16 应改为 floats=0;
行号 18 应改为 for(i=0;i<N;i++)2.从键盘输入一行字符,然后删除字符串中的全部空格。
例如,如果输入"abc def gh", 则输出为"abcdefgh"。
行号程序
01 #include <stdio.h>
02 main( )
03 {
04 char s;
05 char *p1, p2;
06 printf("Please enter a string:");
07 scanf(“%s”,s);
08 p1=p2=s;
09 while( *p1!= '\0' )
10 {
11 if(*p1!=’ ’)
12 {
13 *p2=*p1;
14 p2++;
15 }
16 p2++;
17 }
18 *p2 = '\0';
19 printf("String without leading blank:%s\n", s);
20 }
可能出错的程序语句的行号为:05、07、08、09、11、13、16,错误依次为:
行号______应改为_________________________________________________。
行号______应改为_________________________________________________。
行号______应改为_________________________________________________。
参考答案:
2.行号05 应改为char *p1,*p2;
行号07 应改为 gets(s);
行号 16 应改为 p1++; 五 阅读理解
1. 下面程序的输出结果为:___________。
main( )
{
int x=1,i=1;
for(;x<50;i++)
{
if(x>10)
break;
if(x%2!=0)
{ x+=3;
continue;
}
x-=-1;
}
printf(“%d,%d\n”,x,i);
}
参考答案:
1.12,10
六 程序设计题
1. 统计所有的三位整数中有多少个数的各位数字之积等于各位数字之和,并输出这些整数。
参考答案:
1.main()
{
intn,a,b,c,sum=0;
for(n=100;n<1000;n++)
{ a=n/100;
b=(n-a*100)/10; /* 该语句换成b=n/10-a*10;亦可*/
c=n%10;
if(a*b*c==a+b+c)
printf(“The number is %d\n”,n);
sum++;
}
printf(“The total number is %d”,sum);
}2.编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述的结果。
参考答案:
2. int letter,digit,space,others; /*定义全局变量*/
main()
{ int count (char str[ ]); /*函数声明*/
char text;
gets(text);
letter=0;
digit=0;
space=0;
others=0;
count(text);
printf(“letter:%d,digit:%d,space:%d,others:%d\n”,letter,digit,space,others);
}int count (char str[ ])
{int i;
for(i=0;str!=’\0’;i++)
if((str>=’a’&& str<=’z’||( str>=’A’ str<=’Z’))
letter++;
else if(str>=’0’&& str<=’9’)
digit++;
else if(str==’ ’)
space++;
else
others++;
}
3.输入3个整数,按由小到大的顺序输出。(注:要求用指针方法处理)。
参考答案:
3.
main()
{
intn1,n2,n3;
int *p1, *p2, *p3;
scanf(“%d,%d,%d”,&n1,&n2,&n3);
p1=&n1;
p2=&n2;
p3=&n3;
if(n1>n2)swap(p1,p2);
if(n1>n3)swap(p1,p3);
if(n2>n3)swap(p2,p3);
printf(“The order is:%d,%d,%d\n”,n1,n2,n3);
}
swap(int *p1,int *p2)
{
int p;
p=*p1;*p1=*p2;*p2=p;
}无忧答案网 Q 761 2960 21
页:
[1]