一、单项选择题 2. 以下程序的运行结果是
#include<stdio.h>
main()
{
int a[]={1,2,3,4,5,6,7,8,9,10,11,12};
int *p=&a[5],*q=NULL;
printf("%d%d\n",*p,*q);
}
A B C D
A
[解析] #include<stdio.h> main() { int a[]={1,2,3,4,5,6,7,8,9,10,11,12}; int*p=&a[5],*q=NULL; printf("%d%d\n",*P,*q);/*被置空的指针不能参与"*"运算*/ }
4. 下面程序的功能是输出以下形式的金字塔图案:
#include<stdio.h>
main()
{int i,j;
for(i=1;i<=4;i++)
{for(j=1;j<=4-i;j++)printf("");
for(j=1;j<=______;j++)printf("*");
printf("\n");
}
}
在下划线处应填入的是
A B C D
B
[解析] 应填入控制打印"*"的个数,其个数与行数i的关系是2*i-1的关系。
15. 有以下程序
#include<stdio.h>
main()
{unsigned char a,b;
a=4|3;
b=4&3;
printf("%d%d\n",a,b );
}
执行后输出结果是
A B C D
二、填空题 1. 设int x=2,y=1;则表达式x---y的值是______。
2. 设float a[6][4];则数组a中第一维下标的最大值是______。
3. 如果形参是数组名,则传递方式称为"______"。
4. 设char string[]="this_is_a_book!";,则数组的长度应是______。
5. 设int a,*p=&a;,通过指针变量p为a输入值的scanf语句是______。
6. 设int x=-9,y;,则执行y=x>=0? x:-x;后y的值是______。
7. 语句printf("a\bre\'hi\'y\\bou\n");输出的结果是______。
8. 从计算机的角度来讲,______是计算机程序中解决问题的方法步骤。
9. 设int x=9;,执行语句printf("%d\n",x<<2);后的结果是______。
三、程序分析题 1. 输入数据:2743<回车>。
#include<stdio.h>
main()
{int c;
while((c=getchar())!='n')
{switch(c-'2')
{case 0:
case 1:putchar(c+4);
case 2:putchar(c+4);break;
case 3:putchar(c+3);
case 4:putchar(c+2);break;}
}
printf("\n");}
66877
[解析] #include<stdio.h> main() {int c; while((c=getchar())!='\n\/*从键盘获得字符*/ {switch(c-'2')/*开始进行分支选择*/ {case 0: case 1:putchar(c+4);/*如果此行语句被执行,则其下面的一行语句将被无条件执行。*/ case 2:putchar(c+4);break;/*如果此行语句被执行,则仅执行这一行。*/ case 3:putchar(c+3);/*同casel*/ case 4:putchar(c+2);break;}/*同case3*/ } printf("\n");}
2. int f(int n)
{ static int f=1;
f=f*n;
return f;
}
main()
{ int i;
for (i=1;i<5;i++)
printf("%d,",f(i));
}
3. struct stu { int x;
int *px;
} a[4],*p=a;
main()
{ int i,y[4]={10,11,12,13};
for(i=0;i<4;i++)
a[i].x=i,a[i].px=y+i;
printf("%d\n",++P->x);
printf("%d\n",(++p)->x);
printf("%d\n",++(*p->px));
}
4. #include<stdio.h>
main()
{char b[]="ABCDEFG";
char *chp=e&b[7];
while(--chp>&b[0])
putchar(*chp);
}
GFEDCB
[解析] #include<stdio.h> main() {char b[]="ABCDEFG"; char*chp=&b[7];/*指针变量chp获得数组元素b[7]的值*/ while(--chp>&b[0)/*逆序输出*/ putchar(*chp); }
四、程序填充题 1. 下面程序通过函数average()计算数组中各元素的平均值。
float average(______,int n)/*第一空*/
{int i;
float avg=0.0;
for(i=0;i<n;i++)
avg=avg+______;/*第二空*/
avg=______;/*第三空*/
return avg;
}
main()
{int i,a[5]={2,4,6,8,10);
float mean;
mean=average(a,5);
printf("%f\n",mean);
}
int *pa/*第一空。定义形参变量,main()函数调用average()函数的笫一个实参变量是指针变量,故此处应定义一个指针变量*/ pa[i] /*第二空。将数组各个元素加;因函数调用采用地址传递参数的方式,故可以这样引用 */ avg/n/*第三空。求平均值*/
2. 下列给定程序中,函数fun()的功能是:读人一个字符串(长度<20),将该字符串中的所有字符按ASCⅡ码降序排序后输出。
#include<stdio.h>
void fun(char t[])
{
char c;
int i,j;
for(i=0;______;i++)/*第一空*/
for(j=i+1;j<=strlen(t);j++)
if(______)/*第二空*/
{
c=t[j];
t[j]=t[i];
t[i]=c;
}
}
main()
{
char s[81];
printf("Please enter a character string:\n");
gets(s);
printf("\n\nBefore sorting:\n%s",s);
______;/*第三空*/
printf("\nAfter sorting decreasingly:\n%s\n",s);
}
i<=strlen(t)/*第一空。设定循环上限,以减少不必要的比较束提高程序效率*/ t[i]<t[j]/*第二空。如果t[i]内所包含的字符变量的ASCⅡ值小于t[j]内所包含的字符变量的ASCⅡ,则执行后面语句以交换其位置。*/ fun(s)/*第三空。对函数fun(s)进行调用进行排序,参数传递方式采用地址传递方式。*/
3. 下面程序输出两个字符串对应位置相等的字符。
main()
{ char a[]="students",b[]="study";
int i=0;
while(a[i]!='\0'&&______)
if(a[i]==b[i])printf("%c",______);
else
______;
}
五、程序设计题 1. 在同一程序中,用三种循环语句分别显示1~9的平方值。
#include <stdio.h> main() { int i; for(i=1;i<=9;i++) printf("%d,",i*i); printf("\n"); i=1; while(i<=9) {printf("%d,",i*i);i++;} printf("in"); i=1; do{printf("%d,",i*i);i++;} while(i<=9); }
2. (1) 编写一个计算梯形面积的函数。函数头是:float area(float t,float b,float h)其中变量t、b和h分别表示梯形的上底、下底和高。
(2) 编写主函数从键盘输入梯形的上底、下底和高的值,调用上述函数输出梯形面积(保留小数点后两位)。
#include<stdio.b> float area(float t,float b,float h) { return(t+b )*h*0.5; } main0 {float t1,b1,h1; scanf("%f%f%f",&t1,&b1,&h1); printf("area=%7.2f\n",area(t1,b1,h1)); }