文章目录
- 1.用筛选法求100之内的素数
- 2.用选择法对10个整数进行排序。
- 3.求一个3*3的整型矩阵对角线元素之和
- 4.有一个已排好的数组,要求输入·一个数后,按原来的排序规则将它插入数组中。
- 5.将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1,要求改为1,4,5,6,8.
- 6.输出以下的杨辉三角(要求输出10行)
- 7.输出魔方阵。所谓魔方阵是指这样的方阵,它的每一行,每一列和对角线之和均相等。求输出1-n的平方构成的魔方阵。
- 8.找出一个二维数组的鞍点,即该位置上的元素在该行最大,在该列上最小,也可能没有鞍点。
- 9.有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。
- 10.有一篇文章,共有三行文字,每行有80个字符。要求分别统计出其中英文大写字母,小写字母,数字,空格和其他字符的个数。
- 11,输出以下图案
- 12.有一行电文,已按下面规律翻译成密码:将第一个字母变成第26个字母,第i个字母变成第26-i+1个字母,非字母字符不变。要求编程序将密码翻译回原文,并输出密码和原文。
- 13,编一程序,将两个字符串连接起来,不要用strcat函数。
- 14.编一程序,将两个字符串s1和s2比较,若s1>s2,输出一个正数;若s1=s2,输出0;若s1
1.用筛选法求100之内的素数
#include <stdio.h>
#include <math.h>
int main()
{
int a[101],i,j,n;
for(i=1; i<101;i++)
a[i] = i;
for(i=2;i<=100;i++)
{
for(j=2;j<=sqrt(i);j++)
{if(i%j == 0)
a[i] = 0;
}
}
for(i=2,n=0;i<=100;i++)
{
if(a[i]!=0)
{
printf("%5d",a[i]);
n++;
}
if(n%10==0)
printf("\n");
}
return 0;
}
2.用选择法对10个整数进行排序。
#include <stdio.h>
int main()
{
int i,j,min,temp,a[11];
for(i=1;i<=10;i++)
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
printf("\n");
}
for(i = 1;i<10;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;
}
for(i=1;i<=10;i++)
printf("%5d",a[i]);
return 0;
}
3.求一个3*3的整型矩阵对角线元素之和
#include <stdio.h>
int main()
{
int a[3][3],i,j,sum = 0;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
{
printf("a[%d][%d]=",i+1,j+1);
scanf("%d",&a[i][j]);
printf("\n");
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%5d",a[i][j]);
if(i == j)
sum+=a[i][j];
}
printf("\n");
}
printf("Sum = %d\n",sum);
return 0;
}
4.有一个已排好的数组,要求输入·一个数后,按原来的排序规则将它插入数组中。
#include <stdio.h>
int main()
{
int a[11] = {1,2,4,6,8,11,45,67,98,100,102};
int x,i,t;
printf("请输入一个数字:\n");
scanf("%d",&x);
if(a[0] < a[9])
{
for(i=0;x>a[i];i++);
t = i;
for(i = 11;i>t;i--)
a[i]=a[i-1];
a[t]=x;
}
else
{
for(i=0;x<a[i];i++);
t = i;
for(i = 11;i>t;i--)
a[i]=a[i-1];
a[i]=x;
}
for(i=0;i<11;i++)
printf("%5d",a[i]);
return 0;
}
5.将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1,要求改为1,4,5,6,8.
#include <stdio.h>
#define N 5
int main()
{
int a[N],i,t;
for(i=0;i<N;i++)
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
printf("\n");
}
for(i=0;i<N/2;i++)
{
t = a[i];
a[i]=a[N-i-1];
a[N-i-1] = t;
}
for(i=0;i<N;i++)
printf("%5d",a[i]);
return 0;
}
6.输出以下的杨辉三角(要求输出10行)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
…
#include <stdio.h>
#define N 10
int main(){
int i,j,a[N][N] ={0};
for(i=0;i<N;i++)
{
a[i][0]=1;
a[i][i]=1;
}
for(i= 2;i<N;i++)
for(j = 1;j<i;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("%5d",a[i][j]);
printf("\n");
}
return 0;
}
7.输出魔方阵。所谓魔方阵是指这样的方阵,它的每一行,每一列和对角线之和均相等。求输出1-n的平方构成的魔方阵。
#include <stdio.h>
#define N 5
int main(){
int a[N][N] ={0},i,j,k,x,y,t;
i=0;
j = N/2;
t = N-1 ;
for(k=1;k<=N*N;k++)
{
a[i][j] = k;
x=i;
y=j;
if(i==0)
i=t;
else
i = i -1;
if(j!=t)
j=j+1;
else
j=0;
if(a[i][j]!=0)
{
i=x+1;
j=y;
}
}
printf("生成的魔方阵为:\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%3d",a[i][j]);
printf("\n");
}
return 0;
}
8.找出一个二维数组的鞍点,即该位置上的元素在该行最大,在该列上最小,也可能没有鞍点。
#include <stdio.h>
#define N 4
#define M 5
int main()
{
int i,j,k,max,maxi,maxj,a[N][M],flag;
printf("please input matrix:\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(max <a[i][j])
{
max=a[i][j];
maxj = j;
}
flag =1;
for(k=0;k<N;k++)
if(max > a[k][maxj])
flag = 0;
if(flag)
{
printf("a[%d][%d]=%d\n",i,maxj,max);
break;
}
}
if(!flag)
printf("It is not exist!\n");
return 0;
}
9.有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出“无此数”。
#include <stdio.h>
#define N 10
int main()
{
int a[N],mid,sign,local,top,bottom,i,flag = 1,number;
char c;
printf("please enter data;\n");
scanf("%d",&a[0]);
i=1;
while(i<N)
{
scanf("%d",&a[i]);
if(a[i]>=a[i-1])
i++;
else
printf("please enter this data again!\n");
}
printf("\n");
for(i=0;i<N;i++)
printf("%5d",a[i]);
printf("\n");
while(flag)
{
printf("please input number to look for:");
scanf("%d",&number);
sign = 0;
bottom = 0;
top = N-1;
if((number <a[0]) || (number >a[N-1]))
local = -1;
while((!sign) && (bottom <=
top))
{
mid = (bottom+top)/2;
if(a[mid] == number)
{
local = mid;
printf("Has found %d ,its position is %d\n",number,local+1);
sign = 1;
}
else if(a[mid]<number)
bottom = mid+1;
else
top = mid-1;
}
if(!sign || local == -1)
printf("can't find %d\n",number);
printf("continue or not(Y/N)?");
getchar();
scanf("%c",&c);
if(c=='N'||c=='n')
flag =0;
}
return 0;
}
10.有一篇文章,共有三行文字,每行有80个字符。要求分别统计出其中英文大写字母,小写字母,数字,空格和其他字符的个数。
#include <stdio.h>
int main()
{
char a[3][80];
int i,j,upper,lower,space,digit,other;
upper=lower=space=digit=other=0;
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]>='A'&&a[i][j]<='Z')
upper++;
if(a[i][j]>='a'&&a[i][j]<='z')
lower++;
if(a[i][j]>='0'&&a[i][j]<='9')
digit++;
if(a[i][j]==' ')
space++;
else
other++;
}
}
printf("upper:%d\n",upper);
printf("lower:%d\n",lower);
printf("digit:%d\n",digit);
printf("space:%d\n",space);
printf("other:%d\n",other);
return 0;
}
11,输出以下图案
*****
*****
*****
*****
*****
#include <stdio.h>
int main()
{
char a[5] = {'*','*','*','*','*'};
int i,j,k;
for(i=0;i<5;i++)
{
printf("\n");
for(k=0;k<i;k++)
printf(" ");
for(j=0;j<5;j++)
printf("%c",a[j]);
}
return 0;
}
12.有一行电文,已按下面规律翻译成密码:将第一个字母变成第26个字母,第i个字母变成第26-i+1个字母,非字母字符不变。要求编程序将密码翻译回原文,并输出密码和原文。
#include <stdio.h>
int main()
{
char ch[80],tran[80];
int j, n;
printf("input cipher code:");
gets(ch);
printf("ncipher code :%s",ch);
j=0;
while(ch[j]!='\0')
{
if(ch[j]>='a'&&ch[j]<='z')
tran[j]= 219-ch[j];
else if(ch[j]>='A'&& ch[j]<='Z')
tran[j]= 155-ch[j];
else
tran[j]=ch[j];
j++;
}
printf("\n");
n=j;
printf("noriginal text:");
for(j=0;j<n;j++)
putchar(tran[j]);
printf("\n");
return 0;
}
13,编一程序,将两个字符串连接起来,不要用strcat函数。
#include <stdio.h>
int main()
{
char s1[80],s2[40];
int i=0,j=0;
printf("please input s1:\n");
gets(s1);
printf("please input s2:\n");
gets(s2);
while(s1[i]!='\0')
i++;
while(s2[j]!='\0')
s1[i++]=s2[j++];
s1[i]='\0';
printf("The new string is %s\n",s1);
return 0;
}
14.编一程序,将两个字符串s1和s2比较,若s1>s2,输出一个正数;若s1=s2,输出0;若s1<s2,输出一个负数。不要用strcmp函数。
#include <stdio.h>
#include <stdio.h>
int main()
{
char s1[80],s2[80];
int i=0,resu;
printf("please input s1:\n");
gets(s1);
printf("please input s2:\n");
gets(s2);
while((s1[i]==s2[i])&& s1[i]!='\0')i++;
if(s1[i]=='\0' && s2[i]=='\0')
resu = 0;
else
resu = s1[i]-s2[i];
printf("result:%d\n",resu);
return 0;
}
15,编写一个程序,将字符串s2中全部字符复制到字符数组s1中。不用strcpy函数。复制时’\0’也要复制过去。’\0’后面的字符不复制。
#include <stdio.h>
int main()
{
char s1[80],s2[80];
int i;
printf("please input s2:\n");
gets(s2);
for(i=0;s2[i]!='\0';i++)
s1[i]=s2[i];
s1[i] = '\0';
i=0;
printf("s1:%s\n",s1);
printf("s2:%s\n",s2);
return 0;
}