1.求100到200之间的所有素数
方法1:判断n是否被2~n-1整除
#include <stdlib.h>
#include<math.h>
int main()
{
//求100到200之间的所有素数
int n,i,m=0;
for(n=101;n<=200;n=n+2) //对每个奇数n进行判定
{
for(i=2;i<=n-1;i++)
if(n%i==0)break; //n被i整除,终止
if(i>n-1) //除数i大于n-1,为素数
{
printf("%d\t",n);
m++; //统计个数,用来换行
if(m%5==0)
printf ("\n");
}
}
return 0;
}
方法2:判断n是否被2~n^0.5整除,优化方法1
2.为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。例如,可以按以下规律将电文变成密码:将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D
#include <stdlib.h>
#include<math.h>
#include<stdio.h>
int main()
{
char c;
printf("请输入电文:");
c=getchar();
while(c!='\n')//不是换行符就循环
{
if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))//是一个字母
{
if((c>='W'&&c<='Z')||(c>='w'&&c<='z'))
c=c-22;//如果是后4个字母
else c=c+4;
}
printf("%c",c);
c=getchar();
//再输入下一个字符给字符变量,每次只处理一个字符
}
printf("\n");
return 0;
}
3.有10个地区的面积,要求对它们按由小到大的顺序排列
(冒泡排序法)
#include<stdio.h>
int main()
{
int a[10];
int i,j,s;
printf("请输入10个地区面积的大小:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);//数组初始化
printf("\n");
for(j=0;j<9;j++)//10个数排序,比较9轮
for(i=0;i<9-j;i++)//每轮需要比较9-j次
if(a[i]>a[i+1])//相邻两个数比较,交换
{
int s;
s=a[i];
a[i]=a[i+1];
a[i+1]=s;
}
printf("面积排序如下:\n");
for(i=0;i<10;i++)
printf("%d\t",a[i]);//输出排序好的结果
return 0;
}
4.将一个二维数组行和列的元素互换,存到另一个二维数组中。
#include<stdio.h>
int main()
{
int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
printf("a数组为:\n");
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
printf("%5d",a[i][j]);//输出a数组
b[j][i]=a[i][j];//将a数组的值付给b数组
}
printf("\n");//每打印一行就换行
}
//输出b数组中的元素
printf("b数组为:\n");
for(i=0;i<3;i++)
{
for(j=0;j<2;j++)
{
printf("%5d",b[i][j]);
}
printf("\n");//每打印一行就换行
}
return 0;
}
5.有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。
(打擂台算法)
#include<stdio.h>
int main()
{
int i,j,max;
int row=0,colum=0;
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,1,12,13}};
//声明并初始化数组
max=a[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(a[i][j]>max)//如果比max大,替换max
{
max=a[i][j];
row=i;
colum=j;
}
printf("最大值为:%d\n行号为:%d\n列号为:%d\n",max,row,colum);
return 0;
}
6.输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。
#include<stdio.h>
#include<string.h>
int main()
{
char string[1000];
int i,num=0,word=0;
//i用于遍历字符串中的每个字符
char c;
gets(string);
//输入一个字符串给字符数组string
for(i=0;(c=string[i])!='\0';i++)
//只要不是'\0'就循环
if(c==' ')word=0;
//如果是空格,word置为0
else if(word==0)
{
word=1;
num++;//增加一个单词
}
printf("这句话中有%d个单词\n",num);
return 0;
}
7.有3个字符串,要求找出其中“最大”者。
(字符串比较的规则是:两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同 的字符或遇到′\0′为止
(1) 如全部字符相同,则认为两个字符串相等;
(2) 若出现不相同的字符,则以第1对不相同的字符的比较结果为准。)
#include<stdio.h>
#include<string.h>
int main()
{
char str[3][20];
char string[20];
int i;
for( i=0;i<3;i++)
gets(str[i]);
//读入3个字符串 给str[0],str[1],str[2]
if(strcmp(str[0],str[1])>0)
strcpy(string,string[0]);//如果成立,将string[0]赋给string
else
strcmp(string,string[1]);
if(strcmp(str[2],string)>0)
strcpy(string,str[2]);//把str[2]的字符串赋给字符数组string
printf("\n最'大'的字符串为:%s\n",string);
return 0;
}