1. 单项选择题
(1)【答】C
(2)【答】B
(3)【答】B
(4)【答】D
(5)【答】D
(6)【答】C
(7)【答】C
(8)【答】C
(9)【答】D
(10)【答】D
(11)【答】C
(12)【答】B
(13)【答】B
(14)【答】C
(15)【答】B
(16)【答】B
(17)【答】D
(18)【答】B
(19)【答】B
2. 填空题
(1)【答】Language
(2)【答】123
(3)【答】s=15
(4)【答】s=45
(5)【答】place=6
(6)【答】a(1,1)=-5
(7)【答】第9个元素(1,3)值是-3
(8)【答】-9是第6个元素
(9)【答】12
(10)【答】①s[j++]=s[i]②s[j]='\0'
3.编程题
(1)编写一个程序,将两个字符串合并成一个字符串。
【解】程序如下:
#include
main()
{
char
s1[20],s2[20],s3[40];
int
i,j;
printf("字符串1:");
gets(s1);
printf("字符串2:");
gets(s2);
for
(i=0;s1[i]!='\0';i++)
s3[i]=s1[i];
for
(j=0;s2[j]!='\0';j++)
s3[i+j]=s2[j];
s3[i+j]='\0';
printf("合并字符串:%s\n",s3);
}
(2)编写一个程序,将一个子字符串插入到主字符串中指定位置。
【解】程序如下:
#include
main()
{
int
n,i,j,k;
char
s1[20],s2[20],s3[40];
printf("主字符串:");
gets(s1);
printf("子字符串:");
gets(s2);
printf("起始位置:");
scanf("%d",&n);
for
(i=0;i
s3[i]=s1[i];
for
(j=0;s2[j]!='\0';j++)
s3[i+j]=s2[j];
printf("i=%d,j=%d\n",i,j);
for
(k=n;s1[k]!='\0';k++)
s3[j+k]=s1[k];
s3[j+k]='\0';
printf("结果字符串:%s\n",s3);
}
(3)编写一个程序,输出一个字符串的逆转串。
【解】程序如下:
#include
main()
{
char
s1[20],s2[20];
int
i,j;
printf("字符串:");
scanf("%s",s1);
for
(i=0;s1[i]!='\0';i++);
for
(j=0;s1[j]!='\0';j++)
s2[i-j-1]=s1[j];
s2[i]='\0';
printf("逆转串:%s\n",s2);
}
(4)编写一个程序,判定一个字符串是否是另一个字符串的子串。
【解】程序如下:
#include
main()
{
int
i,j,k,index;
char
s1[20],s2[20];
printf("主字符串:");
gets(s1);
printf("子字符串:");
gets(s2);
index=0;
for
(i=0;s1[i];i++)
{
for
(j=i,k=0;s1[j]==s2[k];j++,k++)
if (!s2[k+1])
{
index=i;
break;
}
if
(index!=0)
break;
}
printf("位置=%d\n",index);
}
(5)编写一个程序,计算一个字符串中子串出现的次数。
【解】程序如下:
#include
main()
{
int
i,j,k,count=0;
char
s1[20],s2[20];
printf("主字符串:");
gets(s1);
printf("子字符串:");
gets(s2);
for
(i=0;s1[i];i++)
for
(j=i,k=0;s1[j]==s2[k];j++,k++)
if (!s2[k+1])
count++;
printf("出现次数=%d\n",count);
}
(6)编写一个程序,计算一个3×4阶矩阵和一个4×3阶矩阵相乘,并打印出结果。
【解】使用两个二维数组a和b存储两个3×4阶矩阵的元素值,然后用三重for循环进行相乘求值产生二维数组c,最后输出c的各元素值。程序如下:
#include
main()
{
int
a[3][4]={{2,3},{4,2},{1,2,3}};
int
b[4][3]={{1,2,3},{2,3,4},{3,4,5}};
int
c[3][3],i,j,k,s;
for
(i=0;i<3;i++)
for
(j=0;j<3;j++)
{
s=0;
for (k=s=0;k<4;k++)
s+=a[i][k]*b[k][j];
c[i][j]=s;
}
for
(i=0;i<3;i++)
{
for
(j=0;j<3;j++)
printf("M",c[i][j]);
printf("\n");
}
}
(7)已知某班30个学生的姓名、学号,以及英语、程序设计、数学三门课的成绩,编写一个程序,完成下列工作:
·全班每个学生姓名、学号和三门课成绩的输入及总分计算。
·统计各科的总成绩。
·当给出学生姓名或学号时,检索出该生每门功课的成绩及总成绩。
【解】定义一维数组no存储学生学号,二维数组name存储学生姓名,二维数组degree存储学生三门课成绩及总分。程序如下:
#include
#include
#define RS
3 char
name[RS][10]; int
no[RS]; float
degree[RS][4]; void input()
{
int i;
printf("输入数据:\n");
for
(i=1;i<=RS;i++)
{
printf(" 第%d个学生\n",i);
printf(" 姓名:");
scanf("%s",&name[i-1]);
printf(" 学号:");
scanf("%d",&no[i-1]);
printf(" 英语成绩:");
scanf("%f",°ree[i-1][0]);
printf(" 程序设计成绩:");
scanf("%f",°ree[i-1][1]);
printf(" 数学成绩:");
scanf("%f",°ree[i-1][2]);
degree[i-1][3]=degree[i-1][0]+degree[i-1][1]+degree[i-1][2];
}
}
void sum()
{
int i;
float
s1=0,s2=0,s3=0;
printf("\n统计各科总成绩\n");
printf("-------------------------\n");
for
(i=0;i
{
s1+=degree[i][0];
s2+=degree[i][1];
s3+=degree[i][2];
}
printf(" 英语总成绩:%g\n",s1);
printf("程序设计总成绩:%g\n",s2);
printf(" 数学总成绩:%g\n",s3);
printf("--------------------------\n\n");
}
void query()
{
int
sel,bh,i;
char
xm[8];