1.用筛选法求100之内的素数。
#include <stdio.h>
#include <math.h>
int main ()
{
int i,j,n,a[101];
for (i = 1; i <= 100; i++)//对数值a赋值,a[0]为空,a[1]为0;
a[i] = i;
a[1] = 0;
for (i = 2; i < sqrt(100); i++)//求出100 的平方根,从2到100平方根逐个排查,凡能除尽均不是素数,令其得0;
for (j = i + 1; j <= 100; j++)
{
if(a[i] != 0 && a[j] != 0)
if (a[j] % a[i] == 0)
a[j] = 0;
}
printf("\n");
for (i = 2,n = 0; i <= 100; i++)//n到10 换行。
{
if (a[i] != 0)
{
printf("%5d",a[i]);
n++;
}
if (n == 10)
{
printf("\n");
n = 0;
}
}
printf("\n");
return 0;
}
2.用选择法对10 个整数排序
#include <stdio.h>
int main()
{
int a[10];
int i, j, b;
printf("请输入十个整数:\n");
for (i = 0; i < 10; i++) //循环输入十次数值
scanf("%d",&a[i]);
printf("\n");
for (j = 0; j < 9; j++)//利用j来循环十次
for (i = 0; i < 9 - j ; i++)//j的每次循环都将最大数后移
if (a[i] > a[i+1])
{
b = a[i];
a[i] = a[i+1];
a [i+1] = b;//对其赋值
}
printf ("从小到大排序为:\n");
for (i = 0; i < 10; i++) //挨个输出
printf("%d ",a[i]);
printf("\n");
return 0;
}
#include <stdio.h>
int main()
{
int i,j,min,temp,a[11];
printf("请输入数值:\n");
for (i = 1; i <= 10; i++)
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
}
printf("\n");
printf("原始数值为:\n");
for(i = 1; i <= 10; i++)
printf("%5d",a[i]);
printf("\n");
for (i = 1; i <= 9; i++)
{
min = i;
for (j = i + 1; j <= 10; j++)
if (a[min] >a[j])
min= j;
temp = a[i];
a[i] = a[min];
a[min] = temp;
}
printf("整数排序为:\n");
for (i = 1; i <= 10; i++)
printf("%5d ",a[i]);
printf("\n");
return 0;
}
3.求一个3*3的整型矩阵对角线元素之和
#include <stdio.h>
int main()
{
int a[3][3],i,j,n,s;
printf("请输入数值:\n");
for (i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
scanf("%d",&a[i][j]);
n = a[0][0] + a[1][1] + a[2][2];
s = a[0][2] + a[1][1] + a[2][0];
printf("n=%d\ns=%d\n",n,s);
return 0;
}
#include <stdio.h>
int main()
{
int a[3][3],i,j,n = 0;
printf("请输入数值:\n");
for (i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
scanf("%d",&a[i][j]);
for (i = 0; i < 3; i++)
n = n + a[i][i];
printf("n=%d\n",n);
return 0;
}
4.有一个已拍好序的数组,要求输入一个数后,按原来排序的规律将他插入数组中
#include <stdio.h>
int main()
{
int a[11] = {1,2,31,44,65,77,88,99,123,222};
int i, j, b, c,d;
printf("原值为:\n");
for (i = 0; i < 10; i++)
printf("%5d ",a[i]);
printf("\n");
printf("请输入数值:");
scanf("%d",&b);
if (b > a[9])
a[10] = b;
else
{
for (i = 0; i < 10; i++)
if (a[i] > b)
{
c = a[i];
a[i] = b;
for (j = i + 1; j < 11; j++)
{
d = a[j];
a[j] = c;
c = d;
}
break;
}
}
printf("排序后为:\n");
for (i = 0; i < 11; i++)
printf("%5d",a[i]);
printf("\n");
return 0;
}
5.讲一个数组中的值按逆序从新存放。
# include <stdio.h>
# define N 5
int main()
{
int a[5],i,j,t;
printf("请输入原值:\n");
for (i = 0; i < N; i++)
scanf("%5d",&a[i]);
printf("\n");
printf("从小到大排序为:\n");
for (i = 0; i < N - 1; i++)
for(j = i+1; j < N; j++)
if (a[i] > a[j])
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
for (i = 0; i < N; i++)
printf("%5d",a[i]);
printf("\n");
printf("从大到小排序为:\n");
for (i = 0; i < N - 1; i++)
for(j = i + 1; j < N; j++)
if (a[i] < a[j])
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
for (i = 0; i < N; i++)
printf("%5d",a[i]);
printf ("\n");
}
# include <stdio.h>
# define N 5
int main()
{
int a[N], i, t;
printf("请输入%d位数值:\n",N);
for (i = 0; i < N; i++)
scanf("%5d",&a[i]);
printf("原序为:\n");
for (i = 0; i < N; i++)
printf("%5d",a[i]);
for (i = 0; i < N /2; i++)
{
t = a[i];
a[i] = a[N - i -1];
a[N - i -1] = t;
}
printf("\n逆序为:\n");
for (i = 0; i < N; i++)
printf("%5d",a[i]);
printf("\n");
return 0;
}
6.输出杨辉三角形(10行)
# include <stdio.h>
# define N 10
int main()
{
int a[N][N],i,j,n;
for (i = 0; i < N; i++)
{
a[i][i] = 1;
a[i][0] = 1;
}
for (i = 2; i < N; i++)
for (j = 1; j <= i - 1; j++)
a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
for (i = 0; i < N; i++)
{
for(j = 0; j <= i; j++)
printf("%6d",a[i][j]);
printf("\n");
}
printf("\n");
return 0;
}
7.输出魔方阵,要求输出1~n^2的自然是构成的魔方阵
# include <stdio.h>
int main()
{
int a[15][15],i,j,k,p,n;
p = 1;
while ( p == 1)
{
printf("输入 n( 1 ~ 15 ):");
scanf("%d",&n);
if((n != 0) && (n <= 15) && (n %2 != 0))//n应在1~15之间,且须为奇数。
p = 0;
}
for (i = 1; i <= n; i++)
for(j = 1; j <= n; j++)
a[i][j] = 0;//初始化,对方阵内数值置0
j = n / 2 + 1;
a[1][j] = 1;//设方阵第一行中间数值为1;
for (k = 2; k <= n * n; k++)
{
i = i - 1;
j = j + 1;
if ((i < 1) && (j > n))
{
i = i + 2;
j = j - 1;
}//从第二个数开始至方阵结束,每一个数存放的行比前一个数的行数减1,列数+1;
//如果数值为第1行最后一个数时,那么下一个为下一行的最后一个值;
else
{
if(i < 1)
i = n;
if(j > n)
j = 1;//如果当前值为第一行,那么下个数值为第n行;
//如果当前值为最后一列,那么下个数值为第一列;
}
if(a[i][j] == 0)
a[i][j] = k;//如果下个值有位置则放入下个值。
else
{
i = i + 2;
j = j - 1;
a[i][j] = k;
}//如果下个值的位置已经不为0时,放入当前值的下方;
}
for (i = 1;i <= n; i++)//输出魔方阵
{
for(j = 1;j <= n; j++)
printf("%5d",a[i][j]);
printf("\n");
}
return 0;
}
8.找出一个二维数组的鞍点。
# include <stdio.h>
# define N 4
# define M 5
int main()
{
int i, j, k, a[N][M],max,maxj,flag;
printf("请输入该数组:\n");//输入数组数值
for (i = 0; i < N; i++)
for (j = 0; j < M; j++)
scanf("%d",&a[i][j]);
for (i = 0; i < N; i++)
{
max = a[i][0];//先设每行第一个数为最大数值。
maxj = 0;
for (j = 0; j < M; j++)
if(a[i][j] > max)//如果每行的第二个数比第一个数大,则第二个数为最大数,依次类推到每行的最后数值。
{
max = a[i][j];
maxj = j;
}
flag = 1;//先设flag=1为鞍点
for (k = 0; k < N; k++)
if (max >a[k][maxj])//将每行的最大数与同列数比相比,如果mxa不是同列数最小数值,则不是鞍点,flag置0;
{
flag = 0;
continue;
}
if(flag)//如果是鞍点,则输出a[i][maxj]的值;并结束循环
{
printf("a[%d][%d] = %d\n",i,maxj,max);
break;
}
}
if (!flag)//如果flag值为0 ,则输出无鞍点。
printf("无鞍点!\n");
return 0;
}
9.有15个数按由大到小顺序存放的在一个数组里,输入一个数,要求折半法查找出该数所在的位置,如果该数不在数组中,则输出无此数
、
#include <stdio.h>
#define N 15
int main()
{
int i,number,top,bott,mid,loca,a[N],flag = 1,sign;
char c;
printf("输入数据:\n");
scanf("%d",&a[0]);//输入第一个数
i = 1;
while(i < N)//检查是否输入完毕
{
scanf("%d",&a[i]);//输入下一个数
if(a[i] >= a[i - 1])//如果输入的数不小于前一个数
i++;//使序号+1
else
printf("再次输入此数据:\n");//否者要求从新输入此数
}
printf("\n");
for (i = 0; i < N; i++)
printf("%5d",a[i]);//输出全部15 个数
printf("\n");
while(flag)
{
printf("输入要查找的号码:");
scanf("%d",&number);//输入要查找的数
sign = 0;//为0时表示尚未找到
top = 0;//查找区间起始位置
bott = N - 1;//查找区间最末位置
if((number < a[0]) || (number > a[N - 1]))//要查找的数不在查找区间内
loca = -1;//表示未找到
while ((!sign) && (top <= bott))//循环体
{
mid = (bott + top) / 2;//找出中间元素的下标
if (number == a[mid])//如果要找的数刚好等于中间数值
{
loca = mid;//则记下该下标
printf("已发现 %d ,他的位置是 %d \n",number, loca+1);//由于下标从0 算起,而人们习惯从1算起,所以加1
sign = 1;//表示找到
}
else
if(number < a[mid])//否者如果要找的数值小于中间元素
bott = mid - 1;//则从起始位置0到中间元素的下标查找
else
top = mid + 1;//否者从中间元素到最末位置查找
}
if (!sign || loca == -1)//如果该数组内没有或者大于该数组则输出未找到
printf("找不到 %d .\n",number);
printf("继续与否(Y/N)?");//问是否继续查找
scanf("%c",&c);
if (c == 'N' || c == 'n')//如果不想继续查找输入'N'或'n';
flag = 0;//flag为开关变量,控制程序是否结束运行,与上方循环体相关联
}
printf("\n");
return 0;
}
10.有一篇文章,共有三行,每行80个字符,分别统计其中英文大小写字母,数字,空格,其他个数
# include <stdio.h>
int main()
{
char a[3][80];
int i,j,dx,xx,sz,kg,qt;
dx = xx = sz = kg = qt = 0;
printf("请输入文章:\n");
for (i = 0; i < 3; i++)
{
printf("第%d行为:\n",i+1);
gets(a[i]);
for (j = 0; j < 80 && a[i][j] != '\0'; j++)
{
if (a[i][j] <= 'Z' && a[i][j] >= 'A')
dx++;
else
if (a[i][j] <='z' && a[i][j] >= 'a')
xx++;
else
if (a[i][j] == ' ')
kg++;
else
if (a[i][j] >='0' && a[i][j] <= '9')
sz++;
else
qt++;
}
}
printf("\n文章中大写字母有%d 个\n小写字母有%d 个\n数字有%d 个\n空格有%d 个\n其他有%d 个\n",dx,xx,sz,kg,qt);
printf("\n");
}
11.输出以下图案
# include <stdio.h>
int main()
{
char a[5] = {'*','*','*','*','*'};
char b = ' ';
int i,j,k;
for (i = 0; i < 5; i++)
{
printf("\n");
for (j = 0; j <= i; j++)
printf("%c",b);
for (k = 0; k < 5; k++)
printf("%c",a[k]);
}
printf("\n");
return 0;
}
12.有一行电文,按以下规律译成密码
A Z
B Y
C X
.
.
.
# include <stdio.h>
# include <string.h>
int main()
{
char a[80],b[80];
int i;
printf("请输入密码:");
gets(a);
printf("密码为:");
puts(a);
for (i = 0; i < 80; i++)
{
if (a[i] >= 'A' && a[i] <= 'Z')
b[i] = 155 - a[i];
else
if (a[i] >= 'a' && a[i] <= 'z')
b[i] = 219 - a[i];
else
b[i] = a[i];
}
printf("原文为:");
puts(b);
return 0;
}
# include <stdio.h>
int main()
{
char a[80],b[80];
int i,j;
printf("请输入密码:");
gets(a);
printf("密码为:%s\n",a);
i = 0;
while(a[i] != '\0')
{
if ((a[i] >= 'A') && (a[i] <= 'Z'))
b[i] = 155 - a[i];
else
if ((a[i] >= 'a') && (a[i] <= 'z'))
b[i] = 219 - a[i];
else
b[i] = a[i];
i++;
}
j = i;
printf("原文为:");
for (i = 0; i < j; i++)
printf("%c",b[i]);
printf("\n");
return 0;
}
13.编一个程序,将两个字符连接起来,不要用strcat函数
#include <stdio.h>
int main()
{
char a[80],b[80];
int i = 0, j = 0;
printf("请输入数组a:");
gets(a);
printf("请输入数组b:");
gets(b);
while (a[i] != '\0')
i++;
while (b[j] != '\0')
a[i++] = b[j++];
a[i] = '\0';
printf("%s",a);
printf("\n");
return 0;
}
#include <stdio.h>
int main()
{
char a[80], b[80];
int i,n;
printf("请输入数组a:");
gets(a);
printf("请输入数组b:");
gets(b);
n = strlen(a);
for (i = 0; b[i] != '\0';n++, i++)
a[n] = b[i];
a[n] = '\0';
printf("%s\n",a);
}
14.将两个字符串s1s2比较,输出为ASCII码的差码
# include <stdio.h>
int main()
{
char s1[80],s2[80];
int i, n;
printf("请输入数组s1:");
gets(s1);
printf("请输入数组s2:");
gets(s2);
for (i = 0; (s1[i] == s2[i]) && (s1[i] != '\0'); i++);
if (s1[i] == '\0' && s2[i] == '\0')
n = 0;
else
n = s1[i] - s2[i];
printf("差值为:%d\n",n);
}
# include <stdio.h>
# include <string.h>
int main()
{
char s1[80],s2[80];
int i, n;
printf("请输入数组s1:");
gets(s1);
printf("请输入数组s2:");
gets(s2);
for (i = 0; (s1[i] == s2[i]) && (s1[i] != '\0'); i++);
if (strcmp(s1,s2) == 0)
n = 0;
else
n = s1[i] - s2[i];
printf("差值为:%d\n",n);
return 0;
}
15.编写将字符s2中全部字符复制到s1中,不用strcpy函数。
# include <stdio.h>
# include <string.h>
int main()
{
char a[80],b[80];
int i;
printf("请输入数组b:");
scanf("%s",b);
for(i = 0; i <= strlen(b); i++)
a[i] = b[i];
printf("a:%s\n",a);
return 0;
}