一、单项选择题7. 有以下程序( )
main()
{char *p[10]={"abc","aabdfg","dcdbe","abbd","cd"};
printf("%d\n",strlen(p[4]));
}
执行后输出结果是
A B C D
A
[解析] 输出的数据是第五个字符串的字符个数。p[4]传递给函数strlen()的址第五个字符串的首地址。
二、填空题1. 设int a=1,b=2,m=2,n=2;,执行表达式(m=a<b )||++n后,n的值是______。
2. 设float x=23.65;,则执行语句printf("%d\n",(int)(x+0.5));后输出结果是______。
3. 用来定义寄存器类型变量的C语言保留字是______。
4. 设
int x=5;
x+==x-=x*x;
则x的值是______。
5. 设char w;int x;float y;double z;,则表达式w*x+z-y的值的类型是______。
6. 设int x=3;,执行语句printf((x%2)?("* *%d\n"):("##%d\n"),x);后,输出结果是______。
7. 设int a,b,c;则执行a=(b=3,c=5,b=10);后变量a的值是______。
8. 设int a=12;,语句printf("%d\n",(a/3,a%3,a/10>0));的输出结果是______。
9. ______是C语言中唯一的一个三目运算符,它是由两个符号组成。
10. C语言标识符的第一个字符只能字母或______
三、程序分析题1. main()
{ int a[3][4]={1,3,5,7,12,14,16,18,9,6,4,2},j,k,m,n,x;x=m=n=0;
for(j=2;j>-1;j--)
for(k=0;k<4;k++)
if(x<a[j][k])
x=a[j][k],m=j,n=k;
printf("a[%d][%d]=%d\n",m,n,x);
}
2. #include<stdio.h>
main()
{int i,j,row,col,max;
int a[3][4]={{1,2,3,4,},{10,4,20,6,},{0,-1,-3,-5,}};
max=a[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(a[i][j]>max)
{max=a[i][j];row=i;col=j;)
printf("max=%d,row=%d,col=%d\n",max,row,col);
}
max=20,row=1,col=2
[解析]
#include<stdio.h>
main()
{int i,j,row,col,max;
int a[3][4]={{1,2,3,4,},{10,4,20,6,},{0,-1,-3,-5,}};/*初始化数组a[3][4],没有初始化的元素默认为"0"*/
max=a[0][0];
for(i=0;i<3;i++)
for(j-0;j<4;j++)
if(a[i][j]>max)
{max=a[i][j];row=i;col=j;}/*用每个元素和max对比,比max大的将其值赋于max并记录其横、纵两个下标的值*/
printf("max=%d,row=%d,col=%d\n",max,row,col);
}
3. #include<stdio.h>
main()
{char *a="12134211";
int v1=0,v2=0,v3=0,v4=0,k;
for(k=0;k<=strlen(a );k++)
switch(*a++)
{default:v4++;
case'1':v1++;
case'3':v3++;
case'2':v2++;)
printf("v1=%d,v2=%d,v3=%d,v4=%d\n",v1,v2,v3,v4);}
v1=3,v2=5,v3=4,v4=1
解折:
#include<stdio.h>
main3()
{char *a="12131211";
int v1=0,v2=0,v3=0,v4=0,k;
for(k=0;k<strlen(a );k++)/*,循环被终止的条件是k的值大于字符串a的长度8*/
switch(*a++)/*选择的条件是数组a的元素,并且a作为于指针变量有一个自增1运算*/
{default:v4++;
case'1':v1++;
case'3':v3++;
case'2':v2++}/*因没有break语句,从符介条什的语句开始,每一行case语句都会被执行*/
printf("vt=%d,v2=%d,v3=%d,v4=%d\n",v1,v2,v3,v4);
}
4. int fm(int a,int b )
{if(b==1)return a;
else return a+fm(a,b-1);
}
main()
{
printf("%d\n",fm(4,3));
}
四、程序填充题1. 求f(x[0,10])的累加和,其中f(x)=2x+1。
#include<stdio.h>
int F(int x)
{return______;)/*第一空*/
int SumFun(int n)
{
int x,s=0:
for(x=0;x<n;x++)______;/*第二空*/
return s;
}
main()
{
printf("The sum=%d\n",______);/*第三空*/
}
x*x+1/*笫一空。此为函数式"f(x)=2x+1的C语言表达式*/
s+-=F(x)/*第二空。求函数式"f(x)"的累加*/
SumFum(10)/*第三空。调用函数"StunFun()求累加值"*/
2. 以下程序用来统计从终端输入的字符中大写字母的个数。以"$"作为输入结束标记。
#include<stdio.h>
#include<ctypc.h>
main()
{int num[126],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(______)/*第二空*/
printf("%c:%d\n",______,num[i]);/*第三空*/
}
c=getchar()/*第一空。得到从键盘输入的值,并判断是不是结束标志"$"*/
num[i]/*第二空。判断用以记录个数的数组元素是否为0,如为0则不输出*/
i+65/*第三空。从语句"num[c-65]+=1;"可知数组对字符的记录是通过下标和字符的ASCⅡ值之间的关系进行的。故此处应填上与之相应的换算关系*/
3. 根据迭代公式

,求a的平方根(精度要求|x
1-x
0|<10
-6)。
#define EPS 1E-6
#include ______ /*第一空*/
void main()
{
float a,x0,x1=1.0;
scanf("%f",&a );
do
{
x0=x1;
x1=______; /*第二空*/
}while(fabs(x1-x0)>=______); /*第三空*/
printf("sqrt=%.6f\n|",x1);
}
第一空:<math.h>(或"math.h")
第二空:(x0+a/x0)/2
第三空:EPS(或1E-6)
五、程序设计题1. 输入一个整数n(n<10),如果n=3,则输出
1
222
33333
222
1
以此类推。
#include <stdio>
#include<stdlib.h>
main()
{
int n,i,s=1,k;
scanf("%d",&n);
if(n>10)exit(0);/*判定输入变量值是否超过10,如超过则自动终止程序运行*/
k=2*n-1;/*确定输出最长行输出的数字个数*/
while(k!=0)/*确定输出模式,并循环输出*/
{
for(i=0;i<n-1;i++)primf(" ");
for(i=0;i<2*s-1;i++)printf("%d",s);
printf("\n");
if(s<k){--n;++s;--k;}/*当s<k时输出为增量形式输出*/
else{++n;--s;--k;}/*当s>k时输出为减量形式输出*/
}
}
2. 编写程序,输入一个3×4的矩阵和一个4×3的矩阵,分别存入数组a和b,然后求它们的乘积存入数组c,输出数组c中的矩阵。矩阵中的数据均为整型。
main()
{ int a[3][4],b[4][3],c[3][3],i,j,k;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
for(i=0;i<4;i++)
for(j=0;j<3;j++)
scanf("%d",&b[i][j]);
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{ c[i][j]=0;
for(k=0;k<4;k++)
c[i][j]+=a[i][k]*b[k][j];}
for(i=0;i<3;i++)
{ printf("\n");
for(j=0;j<3;j++)
printf("%10d",c[i][j]);
}