1、 用筛选取法求100之内的素数。
2、 用选择法对10个整数排序。
3、 求一个33的整型二维数组对角线元素之和。
4、 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。
5、 将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1。要求改为1,4,5,6,8。
6、 输出以下的杨辉三角形(要求输出10行)。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
7、 输出“魔方阵”。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角经之和均相等。例如,三阶魔方阵为
8 1 6
2 5 7
3 9 2
要求输出由1~n²之间的自然数构成的魔方阵。
8、 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。
9、 有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无些数”。
10、 有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。
11、 输出以下图案:
* * * * *
* * * * *
* * * * *
* * * * *
* * * * *
12、有一行电文,已按下面规律译成密码:
A→Z a→z
B→Y b→y
C→X c→x
即第1个字母变成26个字母,第i个字母变成第(26 –i +1)个字母。非字母字符不变。要求编程序将密码译回原文,并输出密码和原文。
12、 编一个程序,将两个字符串连接起来,不要用strcat 函数。
13、 编一个程序,将两个字符串s1和s2比较,若s1>s2,输出一个正数;若s1=s2,输出0;若s1<s2,输出一个负数。不要用strcpy函数。两个字符串用gets函数读入。输出的正数或负数的绝对值应是相比较的两个字符串相应字符的ASCⅡ码的差值。例如,”A”与”A”相比,由于”A”<”C”,就输出负数,同时由于′A′与′C′的ASCⅡ码差值为2,因此应输出“-2”。同理,”And”和”Aid”比较,根据第2个字符比较结果,′n′比′i′大5,因此应输出“5”。
14、 编写一个程序,将字符数组s2中的全部字符复制到字符数组s1中。不用strcpy函数。复制时,′\0′也要一并复制。′\0′后面的字符不复制。
#include<stdio.h>
main()
{
int a[10],i,j,min,t;
printf("输入十个数字:");
for(i=0;i<10;i=i+1)
scanf("%d",&a[i]);
printf("\n");
for(i=0;i<10;i=i+1)
{
min=i;
for(j=i+1;j<10;j=j+1)
if(a[min]>a[j])
{
min=j;
}
t=a[min];
a[min]=a[i];
a[i]=t;
}
printf("排序后:");
for (i=0;i<10;i=i+1)
printf("%d ",a[i]);
printf("\n");
}
第八题:
(4) A) 内容:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。
①二维数组有鞍点
9 80 205 40
90 -60 96 1
210 -3 101 89
②二维数组没有鞍点
9 80 205 40
90 -60 196 1
210 -3 101 89
45 54 156 7
用scanf函数从键盘输入数组的各元素的值,检查结果是否正确,题目未指定二维数组的行数和列数,程序应能处理任意行数和列数的数组。因此,从理论上来说,应当准备许多种不同行数和列数的数组数据,但这样的工作量太大,一般来说不需要这样做,只需要准备典型的数据即可。
如果已指定了数组的行数和列数,可以在程序中对数组元素赋初值,而不必用scanf函数。请读者修改程序以实现之。
B) 程序:
1、用scanf函数输入数组元属的值:
#include <stdio.h>
#define N 3
#define M 4
void main()
{
int i,j,k,a[N][M];
int max,maxj,flag;
printf("请输入一个二维数组:\n");
for(i=0;i<N;i=i+1)
for(j=0;j<M;j=j+1)
scanf("%d",&a[i][j]);
for(i=0;i<N;i=i+1)
{
max=a[i][0];
maxj=0;
for(j=0;j<M;j=j+1)
if(a[i][j]>max)
{
max=a[i][j];
maxj=j;
}
flag=1;
for(k=0;k<N;k=k+1)
if(max>a[k][maxj])
{
flag=0;
continue;
}
if(flag)
{
printf("a[%d][%d]=%d\n",i,maxj,max);
break;
}
}
if(!flag)
printf("没有鞍点!\n");
}
2、已指定数组的行和列,对数组元素赋初值:
#include <stdio.h>
void main()
{
int a[3][4]={{9,80,205,40},{90,-60,96,1},{210,-3,101,89}};
int i,j,k;
int max,maxj,flag;
printf("数组是:\n");
for (i = 0;i <3;i=i+1)
{
for (j = 0; j<4;j=j+1)
printf("%5d",a[i][j]);
printf("\n");
}
printf("\n");
for(i=0;i<3;i=i+1)
{
max=a[i][0];
maxj=0;
for(j=0;j<4;j=j+1)
if(a[i][j]>max)
{
max=a[i][j];
maxj=j;
}
flag=1;
for(k=0;k<3;k=k+1)
if(max>a[k][maxj])
{
flag=0;
continue;
}
if(flag)
{
printf("a[%d][%d]=%d\n",i,maxj,max);
break;
}
}
if(!flag)
printf("没有鞍点!\n");
}
第十二题:
#include <stdio.h>
void main()
{
char a[20],b[10];
int i=0,j=0;
scanf("%s%s",a,b);
while (a[i]!='\0') i=i+1;
while (b[j]!='\0')
{
a[i++]=b[j];
j=j+1;
}
a[i]='\0';
printf("%s\n",a);
}
#include<stdio.h>
main()
{
int
a[10],i,j,min,t;
printf("输入十个数字:");
for(i=0;i<10;i=i+1)
scanf("%d",&a[i]);
printf("\n");
for(i=0;i<10;i=i+1)
{
min=i;
for(j=i+1;j<10;j=j+1)
if(a[min]>a[j])
{
min=j;
}
t=a[min];
a[min]=a[i];
a[i]=t;
}
printf("排序后:");
for
(i=0;i<10;i=i+1)
printf("%d
",a[i]);
printf("\n");
}
第八题:
(4)
A)
内容:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。
①二维数组有鞍点
9
80
205
40
90
-60
96
1
210
-3
101
89
②二维数组没有鞍点
9
80
205
40
90
-60
196
1
210
-3
101
89
45
54
156
7
用scanf函数从键盘输入数组的各元素的值,检查结果是否正确,题目未指定二维数组的行数和列数,程序应能处理任意行数和列数的数组。因此,从理论上来说,应当准备许多种不同行数和列数的数组数据,但这样的工作量太大,一般来说不需要这样做,只需要准备典型的数据即可。
如果已指定了数组的行数和列数,可以在程序中对数组元素赋初值,而不必用scanf函数。请读者修改程序以实现之。
B)
程序:
1、用scanf函数输入数组元属的值:
#include
<stdio.h>
#define
N
3
#define
M
4
void
main()
{
int
i,j,k,a[N][M];
int
max,maxj,flag;
printf("请输入一个二维数组:\n");
for(i=0;i<N;i=i+1)
for(j=0;j<M;j=j+1)
scanf("%d",&a[i][j]);
for(i=0;i<N;i=i+1)
{
max=a[i][0];
maxj=0;
for(j=0;j<M;j=j+1)
if(a[i][j]>max)
{
max=a[i][j];
maxj=j;
}
flag=1;
for(k=0;k<N;k=k+1)
if(max>a[k][maxj])
{
flag=0;
continue;
}
if(flag)
{
printf("a[%d][%d]=%d\n",i,maxj,max);
break;
}
}
if(!flag)
printf("没有鞍点!\n");
}
2、已指定数组的行和列,对数组元素赋初值:
#include
<stdio.h>
void
main()
{
int
a[3][4]={{9,80,205,40},{90,-60,96,1},{210,-3,101,89}};
int
i,j,k;
int
max,maxj,flag;
printf("数组是:\n");
for
(i
=
0;i
<3;i=i+1)
{
for
(j
=
0;
j<4;j=j+1)
printf("%5d",a[i][j]);
printf("\n");
}
printf("\n");
for(i=0;i<3;i=i+1)
{
max=a[i][0];
maxj=0;
for(j=0;j<4;j=j+1)
if(a[i][j]>max)
{
max=a[i][j];
maxj=j;
}
flag=1;
for(k=0;k<3;k=k+1)
if(max>a[k][maxj])
{
flag=0;
continue;
}
if(flag)
{
printf("a[%d][%d]=%d\n",i,maxj,max);
break;
}
}
if(!flag)
printf("没有鞍点!\n");
}
第十二题:
#include
<stdio.h>
void
main()
{
char
a[20],b[10];
int
i=0,j=0;
scanf("%s%s",a,b);
while
(a[i]!='\0')
i=i+1;
while
(b[j]!='\0')
{
a[i++]=b[j];
j=j+1;
}
a[i]='\0';
printf("%s\n",a);
}