一,1000以内的回文素数

#include<stdio.h>
#include<math.h>

int judg(int i)//用于判断一个数字是不是素数
{
	int j;
	if(i==1)
		return 0;
 	if(i==2)
  		return 1;
 	for(j=2;j<=sqrt(i);j++)
	{
  		if(i%j==0)
   			break;
	}
 		if(j>sqrt(i))
  			return 1;
}
int main()
{
	int i;
	for(i=10;i<1000;i++)
		if(judg(i)==1)
			if(i/100==0)//判断是不是两位数
			{
				if(i/10==i%10)//判断两位数的个位和十位是否相等
					printf("%d ",i);
			}
			else
				if(i/100==i%10)//判断百位和个位是否相等
					printf("%d ",i);
}

二,数组中插入元素

#include <stdio.h>

void insert(int *a,int n,int index,int e)
{
	int i,j;
	for(j=n-1;j>=index-1;j--)
		a[j+1]=a[j];
		a[index-1]=e;
}

int main()
{
	int a[5]={2,4,5,6,0};
	int i;
	for(i=0;i<5;i++)//遍历
		printf("%d\t",a[i]);
	printf("\n");
	insert(a,5,2,15);//第2个位置插入15
	for(i=0;i<6;i++)
		printf("%d\t",a[i]);//输出排序后的数组
}

三,求2/1,3/2,5/3,8/5…前20项的和。

#include <stdio.h>

int main()
{
	int n,t,num=20;
	float a=2,b=1,s=0;
	for(n=1;n<=num;n++)
	{
		s=a/b+s;
		t=a;
		a=a+b;
		b=t;//t把前一个分式的分子传个下一个分式的分母
	
	}
	printf("sum=%9.6f\n",s);
	
	return 0; 
}

四,获取二维数组将3*4的矩阵中元素的最大值及下标

#include <stdio.h>

int main()
{
	int a[3][4],i,j,max,max_i=0,max_j=0;
	for(i=0;i<3;i++)
		for(j=0;j<4;j++)
			scanf("%d",&a[i][j]);
	max=a[0][0];
	for(i=0;i<3;i++)
		for(j=0;j<4;j++)
			if(a[i][j]>max)
			{
				max=a[i][j];
				max_i=i;
				max_j=j;
			}
			printf("max=a[%d][%d]=%d\n",max_i,max_j,max);
	return 0; 
}

五,矩阵转置(mxn阶,初始a(i,j),转置后

b(j,i)=a(i,j))

#include <stdio.h>

int main()
{
	int i,j,i1,j1,a[101][101],b[101][101];
	printf("please input the num of rows(<=100)\n");
	scanf("%d",&i1);
	printf("please input the num of columns(<=100)\n");
	scanf("%d",&j1);
	for(i=0;i<i1;i++)
		for(j=0;j<j1;j++)
			b[j][i]=a[i][j];
	return 0; 
}

六,求3x3矩阵对角线元素之和

void main()
{
	int a[3][3];
	int sum=0,i,j;
	for(i=0;i<3;i++)
		for(j=0;j<3;j++)
			scanf("%d",&a[i][j]);
	for(i=0;i<3;i++)
		for(j=0;j<3;j++)
			if(i==j||(i+j)==2)//下标满足情况
				sum=a[i][j]+sum;
	printf("%d\n",sum);
 } 

七,求水仙花数(三位数,各位数字立方和等于其本身)

#include <stdio.h>

int main()
{
	int a,b,c,i;
	for(i=100;i<1000;i++)
	{
		a=i%10;
		b=i/10%10;
		c=i/100;
		if(a*a*a+b*b*b+c*c*c==i)
		printf("%5d\n",i);
	}
	return 0;
}

八,求前20个Fibonacci数列

#include <stdio.h>

int main()
{
	int a=1,b=1;
	int i;
	for(i=0;i<10;i++)
	{
		printf(" %d %d",a,b);
		a=a+b;
		b=b+a;
	}
	system("pause");
}

九,生兔子问题(1,1,2,3,5,8……)

#include <stdio.h>

int main()
{
	int i,tu1,tu2,tu3,m;
	tu1=1;tu2=1;
	printf("month\n");
	scanf("%d",&m);
	if(m==1||m==2)
	{
		printf("yi dui tuzi");
	}
	else if(m>2)
	{	
		for(i=3;i<=m;i++)
		{
			tu3=tu1+tu2;
			tu1=tu2;
			tu2=tu3;
		}
		printf("%dmonth de tuzi:%d\n",m,tu3);
	}	
	return 0;
}

十,输入一行英文句子,计算单词个数

#include <stdio.h>

int main()
{
	printf("input:\n");
	char ch;
	int i,count=0,word=0;
	while((ch=getchar())!='\n')
		if(ch==' ')
			word=0;
		else if(word==0)
		{
			word=1;
			count++;
		}
		printf("you %d ge danci\n",count);

	return 0;
}

十一,加密解密(字符+位置+偏移值5)

#include <stdio.h>
#include <string.h>
int main()
{
    int result=1;
    int i;
    int count=0;
    char Text[128]={'\0'};
    char cryptograph[128]={'\0'};
    while(1)
    {
        if(result==1)
        {
            printf("请输入要加密的明文:\n");
            scanf ("%s",&Text);
            count=strlen(Text);
            for(i=0;i<count;i++)
            {
                cryptograph[i]=Text[i]+i+5;
            }
            cryptograph[i]='\0';
            printf("加密后的密文是:%s\n",cryptograph);
        }
        else if(result==2)
        {
            count=strlen(Text);
            for(i=0;i<count;i++)
            {
                Text[i]=cryptograph[i]-i-5;
            }
            Text[i]='\0';
            printf("解密后的明文是:%s\n",Text);
        }
        else if(result==3)
        {
            break;
        }
        else
        {
            printf("请输入正确的命令符:\n");
        }
        printf("输入1加密新的明文,输入2对刚加密的密文进行解密,输入3退出系统:\n");
        printf("请输入命令符:\n");
        scanf("%d",&result);
    }
    return 0;
}

十二,逆序输出(将一个从键盘输入的整数存放到一个数组中,通过程序的运行按照数组中的逆序输出该整数,利用递归的方法解决问题)

#include <stdio.h>

int convert(char s[],int n)
{
	int i;
	if((i=n/10)!=0)//通过不断取余和整除10来得到数据的每一位
		convert(s+1,i);
	*s=n%10+'0';
	return 0;
}

int main()
{
	int num;
	char str[10]=" ";
	printf("input integer data: ");
	scanf("%d",&num);
	convert(str,num);
	printf("output string: \n");
	puts(str);
	return 0;
}

十三,将一个一维数组就地逆置

#include <stdio.h>

int main()
{
	int a[10]={1,2,3,4,5,6,7,8,9,10};
	int i=0,j=9;
	while(i<=j)
	{
		int tem=a[i];
		a[i]=a[j];
		a[j]=tem;
		i++;
		j--;
	}
	for(i=0;i<10;i++)
		printf("%d ",a[i]);

	return 0;
}

十四,数据加密(每位数字加上5,除10的余数取代该数,再将第一位和第四位交换,二三位交换)

#include <stdio.h>

int main()
{
	int a,i,aa[4],t;
	scanf("%d",&a);
	aa[0]=a%10;
	aa[1]=a%100/10;
	aa[2]=a%1000/100;
	aa[3]=a/1000;
	for(i=0;i<=3;i++)
	{
		aa[i]+=5;
		aa[i]%=10;
	}
	for(i=0;i<=1;i++)
	{
		t=aa[i];
		aa[i]=aa[3-i];
		aa[3-i]=t;
	}
	for(i=3;i>=0;i--)
		printf("%d",aa[i]);

	return 0;
}

十五,输出菱形

#include <stdio.h>
#include <stdlib.h>
int main()
{
	int line = 0;  //上半部分行数
	int i = 0; //控制循环次数
	int j = 0;//控制星星数
	int n = 0;//控制空格数
	printf("input:");
	scanf("%d", &line);
	if(line % 2 == 0)   //判断是否为奇数行 
	{
		printf("error\n");
		exit(1);
	}
	for (i = 0; i < line; i++)//上半部分 
	{
		for (n = 0; n < line - 1 - i; n++)//每行星星前面的空格数 
		{
			printf(" ");
		}
		for (j = 0; j < 2 * (i+1)-1; j++)//*的个数=2*行数-1
		{
				printf("*");
		}
			printf("\n");
	}
	for (i = 0; i < line - 1; i++)//下半部分 
	{
		for (n = 0; n < i + 1; n++)
		{
			printf(" ");
		}
		for (j = 0; j < 2 * (line - 1 - i) - 1; j++)
		{
			printf("*");
		}
		printf("\n");
	}
	
	system("pause");
	return 0;
}

十六,求2-300范围内的完数(完数=因子之和,如6=1+2+3)

#include <stdio.h>

int main()
{
	int num, i, sum;
	for(num=2;num<=300;num++){
		sum=0;
		for(i=1;i<num;i++)
		{
			if(num%i==0)
				sum+=i;
		}
	if(sum==num)
		printf("%d\n",num);
	}
	return 0;
}

十七,求孪生素数(间隔为2的素数)3-1000以内

#include <stdio.h>
#include <math.h>
int prime(int m)
{
	int j;
	for(j=2;j<=sqrt(m);j++)
	{
		if(m%j==0)
			return 0;
	}
	return 1;
}

int main()
{
	int i,count=0;
	for(i=3;i<1000;i++)
		if(prime(i)&&prime(i+2))
		{
			printf("(%-3d,%3d)",i,i+2);
			count++;
			if(count%5==0)
				printf("\n");
		}
	
	return 0;
}

十八,求回文数(n<256,n的平方具有对称性质的数)

#include <stdio.h>

void main()
{
	int i,j,k;
	for(i=0;i<=256;i++)
	{
		j=i*i;
		k=0;
		while(j>0){
			k=k*10+j%10;//把j的值从最低位往前依次给k最高位往后 
			j=j/10;//j=0的时候就交换完了 
		}
		if(k==i*i)//如果是回文的,交换完还是不变的 
			printf("%d*%d=%d\n",i,i,i*i);
	}
}

十九,判断一个五位数是不是回文数

#include <stdio.h>

int main()
{
	int a,b,c,d,n;
	scanf("%d",&n);
	a=n%10;
	b=n%100/10;
	c=n%10000/1000;
	d=n/10000;
	if(a==d&&b==c)
		printf("this number is a huiwen\n");
	else
		printf("this number is not a huiwen\n");
	return 0;
}

二十,求100以内所有的勾股数

#include <stdio.h>
#include <math.h>

int main()
{
	int a,b,c,i;
	printf("100以内的勾股数:\n");
	for(a=1;a<=100;a++)
		for(b=1;b<=100;b++)
		{
			c=sqrt(a*a+b*b);
		if(c*c==a*a+b*b && a+b>c && a+c>b && b+c>a && c<=100)
		{
			printf("%4d %4d %4d\n",a,b,c);
		}
		}
	printf("\n");
	return 0;
}

更多推荐

C语言程序设计经典例题(考研必背)(基础篇)第二周