共25个基础编程题,如需要更多,可在我的资源里面下载更多的题目。

1、一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6的因子为1,2,3,而6=1+2+3,因此6是完数。编写程序找出500以内的所有完数,并按下面的格式输出其因子:6
its factors are 1,2,3

#include<stdio.h>
int main()
{
   
	int i,j,s;
	for(i=2;i<500;i++)
	{
       s=0;
		for(j=1;j<i;j++)
			if(i%j==0)
				s=s+j;
		if(s==i)
		{
   
			printf("%d, is factors are ",i);
		for(j=1;j<i;j++)
			if(i%j==0)
		      printf("%d ",j);
		printf("\n");
		}
	}
	return 0;
}

2、在屏幕上显示杨辉三角形
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

#include<stdio.h>
int main()
{
   
	int i,j,k,a[6][12] = {
   0};
	a[0][6] = 1;
	for(i = 1;i < 6;i++)
	{
   
		for(j = 1;j < 12;j++)
		{
   
			a[i][j] = a[i - 1][j - 1] + a[i - 1][j + 1];
		}
	}
	for(i = 0;i < 6;i++)
	{
   
		for(j = 0;j <12;j++)
		{
   
			if(a[i][j] == 0)
				printf(" ");
			else 
			{
   
				printf("%2d",a[i][j]);
			}
		}
		printf("\n");
		
	}
	return 0;
}

3、一个偶数总能表示为两个素数之和。要求:输入一个偶数,将其表示成两个素数之和,直到输入的数为0。(例如,输入的偶数为16,则输出16=3+13 16=5+11)

#include <stdio.h>
int main()
{
   
	int i,j,s[1010] = {
   0};
	for(i = 2 ; i <= 1000 ; i++)
	{
   
		for(j = 2 ; j <= i - 1 ; j++)
		{
   
			if(i % j == 0)
				break;
		}
		if(j >= i)
			s[i] = 1;
	}
	int a;
	scanf("%d",&a);
	for(i = 0; i <= a ; i++)
	{
   
		if(s[i] == 1 && s[a - i] == 1)
			printf("%d = %d + %d\n",a,i,a-i);
	}
	return 0;
}

4、编程输出如下形式的九九乘法表
1 2 3 4 5 6 7 8 9
1
2 4
3 6 9
……
8 16 24 32 40 48 56 64
9 18 27 36 45 54 63 72 81

#include<stdio.h>
int main()
{
   
	int i,j;
	for(i = 1;i <= 9;i++)
		printf("%d\t",i);
	printf("\n\n");
	for(i = 1;i <= 9;i++)
	{
   
		for(j = 1;j <= i;j++)
		{
   
			printf("%d\t",i * j);
		}
		printf("\n");
	}
	return 0;
}

5、输出菱形图案。(要求使用双循环实现,不能利用字符数组或简单的printf函数输出)

#include<stdio.h>
int main()
{
   
	int i,j,k;
	for(i=0;i<=4;i++)
	{
   
		for(j=0;j<4-i;j++)
			printf(" ");
		for(k=0;k<(2*i+1);k++)
			printf("*");
		printf("\n");
	}
	for(i=3;i>=0;i--)
	{
   
		for(j=0;j<4-i;j++)
			printf(" ");
		for(k=0;k<(2*i+1);k++)
			printf("*");
		printf("\n");
	}
	return 0;
}

6、输出倒三角形式的99口诀表,要求用循环实现。
9
1=9 92=18 93=27 94=36…… 99=81
81=8 82=16 83=24 84=32 88=64
……
1
1=1

#include<stdio.h>
int main()
{
   
	int i,j;
	for(i=9;i>=1;i--)
	{
   
		for(j=1;j<=i;j++)
		{
   
			printf("%d*%d=%d\t",i,j,i*j);
		}	
		printf("\n");
	}
	return 0;
}

7、将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1改后成为1,4,5,6,8。(同一数组中完成)

#include<stdio.h>
int main()
{
   
    int a[5] = {
   8,6,5,4,1},i,temp;
    printf("array a:\n");
    for(i=0; i<N; i++)
        printf("%4d",a[i]);
    for(i=0; i<N/2; i++)
    {
   
        temp=a[i];
        a[i]=a[N-i-1];
        a[N-i-1]=temp;
    }
    printf("\nNow,array a:\n");
    for(i=0; i<N; i++)
        printf("%4d",a[i]);
    printf("\n");
    return 0;
}

8、用筛选法求100之内的素数。(利用数组知识)

#include<stdio.h>
int main()
{
   
    int i,j,n,a[101] = {
   0};
    for(i=2; i<=100; i++)
    {
   
        for(j = 2 ; j <= i - 1 ; j++)
        {
   
            if(i % j == 0)
                break;
        }
        if(j >= i)
            a[i] = 1 ;
    }
    for(i = 0 ; i <= 100 ; i++)
        if(a[i] == 1)
        printf("%d\t",i);
    printf("\n");
    return 0;
}

9、输入10个整数,用起泡法对这10个数排序,并该由小到大顺序在屏幕上输出。

#include<stdio.h>
int main()
{
   
    int a[10],i,j,t;
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    printf("\n");
    for(i=0;i<9;i++)
        for(j=0;j<9-i;j++)
            if(a[j]>a[j+1])
            {
   
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
            }
            for(i=0;i<10;i++)
                printf("%d ",a[i]);
            printf("\n");
            return 0;
}

10、编程实现:输入任意一个不超过5位的十进制整数,取出该数中的所有奇数数字,按原来的顺序组成一个新的数。

#include <stdio.h>
#include <string.h>
int main()
{
   
char s[5];
int a[5];
scanf("%s",s);
    {
   
    int i,d;
    d=strlen(s);
    for(i=0;i<d;i++)
    {
   
           a[i]=s[i]-'0';
           if(a[i]%2!=0)
            printf("%d",a[i]);
    }
     printf("\n");
}
       return 0;
}

11、有一个已升序排列的数组,要求输入一个数后,按原来排序的规律将它插入数组中。(在同一数组中实现)

方法1:#include<stdio.h>
  int main()
  {
   
    int a[11]={
   1,4,6,9,13,15,17,36,68,100};
    int temp1,temp2,num,end,i,j;
    printf("array a:\n");
    for(i=0;i<10;i++)
        printf("%5d",a[i]);
    printf("\n");
    printf("insert data:");
    scanf("%d",&num);
    end=a[9];
    if(num>end)
        a[10]=num;
    else
    {
   
        for(i=0;i<10;i++)
        {
   
            if(a[i]>num)
            {
   
                temp1=a[i];
                a[i]=num;
                for(j=i+1;j<11;j++)        
                {
   
                    temp2=a[j];
                    a[j]=temp1;
                    temp1=temp2;
                }
                break;
            }
        }
    }
    printf("Now array:\n");
    for(i=0;i<11;i++)
        printf("%5d",a[i]);
    printf("\n");
    return 0;
  }
方法2
#include<stdio.h>
  int main()
  {
   
    int a[11]={
   1,4,6,9,13,15,17,36,68,100};
    int t,num,end,i,j;
    printf("array a:\n");
    for(i=0;i<10;i++)
        printf("%5d",a[i]);
    printf("\n");
    printf("insert data:");
    scanf("%d",&num);
    end=a[9];
    if(num>end)
        a[10]=num;
    else
        for(i=0;i<10;i++)
        if(a[i]>num)
        {
   
            t=a[i];
            a[i]=num;    
            for(j=9;j>i;j--)                
               a[j+1]=a[j];
            a[j+1]=t;    
        break;               
        }
    
    printf("Now array:\n");
    for(i=0;i<11;i++)
        printf("%5d",a[i]);
    printf("\n");
    return 0;
  }

12、发工资问题:要给10个人发工资,每人的工资从键盘输入,为避免临时兑换零钱且取款张数最少,发工资前需要统计出所有职工的工资所需的各种币值(100,50,20,10,5,2,1共七种)的张数,请编写程序。
如输入3100 650 320 360 963 250 320 240 420 650,输出100元:69张,
50元:5张,20元:5张,10元:2张,5元:0张,2元1张,1元1张

#include<stdio.h>
#define N 10
int main()
{
   
  int a[N],i,j,k,m,n,w,x,y,z;
  int s1=0,s2=0,s3=0,s4=0,s5=0,s6=0,s7=0;
  printf("Please input:");
  for (i=0;i<10;i++)
	  scanf("%d",&a[i]);
  for (j=0;j<10;j++)
  {
   
    n=a[j]/100;
	s1=s1+n;
	m=(a[j]-100*n)/50;
	s2=s2+m;
	k=(a[j]-100*n-50*m)/20;
	s3=s3+k;
	x=(a[j]-100*n-50*m-20*k)/10;
	s4=s4+x;
	y=(a[j]-100*n-50*m-20*k-10*x)/5;
	s5=s5+y;
	z=(a[j]-100*n-50*m-20*k-10*x-5*y)/2;
	s6=s6+z;
	w=(a[j]-100*n-50*m-20*k-10*x-5*y-2*z);
	s7=s7+w;
  }
  printf("100元:%d张\n50元:%d张\n20元:%d张\n10元:%d张\n5元:%d张\n2元:%d张\n1元:%d张\n",s1,s2,s3,s4,s5,s6,s7);
  return 0;
}

13、给一个不多于6位的正整数,要求:①求出它是几位数;②分别输出每一位数字;③按逆序输出各位数字,例如原数为158,应输出851。(利用数组知识)

解法一:
# include<stdio.h>
# include<math.h>
int main()
{
   
    int s[7];
    int i=0,j=1,a,m=10,n,y,p=1,q;
	scanf("%d",&n);
	for(;p>0;i++)
	{
   
		p=n/m;
		m*=10;
	}//计算n是几位数字
	a=i;
	printf("%d\n",i);
	q=pow(10,i-1);
	for(;i>0;i--)
	{
   
		y=n/q;
		n=n-y*q;
		q=q/10;
		s[i]=y;      //将每位数字赋给数组s[7]
		printf("%d\t",s[i]);
	}
	printf("\n");
	for(;j<=a;j++)
		printf("%d",s[j]);  //逆序输出n
	return 0;
}
解法二:
#include<stdio.h>
#include <string.h>
int main()
{
   
    char s[6];
    scanf("%s",s);
    int i,len = strlen(s);
    printf("这个数是 %d 位数\n",len);
    for(i = 0 ; i < len ; i++ )
    {
   
        printf("第 %d 位 %c\n",i+1,s[i]);
    }
    for(i = len - 1; i >= 0;i--)
    {
   
        printf("%c",s[i]);
    }
    printf("\n");
    return 0;
}

14、将一个二维数组a的行和列的元素互换(即行列互换),存到另一个二维数组b中。

#include<stdio.h>
int main()
{
   
    int a[2][3]={
   {
   1,2,3},{
   4,5,6}};
    int b[3][2],i,j;
    printf("array a:\n");
    for(i=0;i<=1;i++)
    {
   
        for(j=0;j<=2;j++)
        {
   
            printf("%5d",a[i][j]);
            b[j][i]=a[i][j];
        }
        printf("\n");
    }
    printf("array b:\n");
    for(i=0;i<=2;i++)
    {
   
        for(j=0;j<=1;j++)
            printf("%5d",b[i][j]);
        printf("\n");
    }
    return 0;
}

15、一次考试***考了5门课,有20名学生,统计20个学生中至少有三门课成绩高于80分的人数。

#include<stdio.h>
int main()
{
   
	int a[20][5],i,j,k=0,s=0;
	printf("Input:");
	for(i=0;i<5;i++)
	{
   
		for(j=0;j<20;j++)
		{
   
scanf("%d",&a[i][j]);
			if(a[i][j]>80)
				k++;
		}
		if(k>=3)
		{
   s++;k=0;}
	}
	printf("%d人\n",s);
	return 0;
}

16、在一个3*4的二维数组a中,要求编程求出其中值最大的那个元素的值,并输出其所在的行号和列号。

#include<stdio.h>
int main()
{
   	
    int i,j,row=0,colum=0,max;
    int a[3][4]={
   {
   1,2,4,5},{
   23,54,6,7},{
   0,3,5,6}};
    max=a[0][0];
    for(i=0;i<=2;i++)
        for(j=0;j<=3;j++)
            if(a[i][j]>max)
            {
   max=a[i][j];
            row=i;
            colum=j;
            }
            printf("max=%d\nrow=%d\ncolum=%d\n",max,row,colum);
            return 0;
}  

17、有一行电文,已按下面规律译成密码:
A→Z a→z
B→Y b→y
C→X c→x
……
Z→A z→a
即第1个字母变成第26个字母,第i个字母变成第(26 – i + 1)个字母。非字母符号不变。要求编程序将密码译回原文,并输出密码和原文。(如输入abcABC234ABCZz
输出为zyxZYX234ZYXAa)

#include<stdio.h>
int main()
{
   
    int j,n;
    char ch[90],tran[90];
    printf("input cipher code:");
    gets(ch);
    printf("\ncipher sode :%s",ch);
    j=0;
    while(ch[j]!='\0')
    {
   if((ch[j]>='A')&&(ch[j]<='Z'))
    tran[j]=155-ch[j];
    else if((ch[j])>='a'&&(ch[j]<='z'))
        tran[j]=219-ch[j];
    else
        tran[j]=ch[j];
    j++;
    }
    n=j;
    printf("\noriginal text:");
    for(j=0;j<n;j++)
        putchar(tran[j]);
    printf("\n");
    return 0;
}

18、有一篇文章,共有4行文章,每行有20个字符。要求分别统计出其中英文大写字符、小写字母、数字、空格以及其他字符的个数。(如输入:sdfgd234、ASDFfsfd24、sd43、
sd32 dfg,输出为
upper case :4
low case :16
digit :9
space :1
other :0)

#include<stdio.h>
int main()
{
   
    int i,j,upp,low,dig,spa,oth;
    char text[4][20];
    upp=low=dig=spa=oth=0;
    for(i=0;i<4;i++)
    {
   
        printf("please input line %d:\n",i+1);
        gets(text[i]);
        for(j=0;j<20&&text[i][j]!='\0';j++)
        {
   if(text[i][j]>='A'&&text[i][j]<='Z')
        upp++;
        else if(text[i][j]>='a'&&text[i][j]<='z')
            low++;
        else if(text[i][j]>='0'&&text[i][j]<='9')
            dig++;
        else if(text[i][j]==' ')
            spa++;
        else oth++;
        }
    }	
    printf("\nupper case :%d\n",upp);
    printf("low case :%d\n",low);
    printf("digit :%d\n",dig);
    printf("space :%d\n",spa);
    printf("other :%d\n",oth);
    return 0;
}

19、将输入的字符串逆序排列,如输入ABCD,输出DCBA。

# include<stdio.h>
int main()
{
   	
	char str[10000],ch;
	int i=0;
	while(scanf("%c",&ch)&&ch!='\n')
	{
   
		str[i]=ch;         //为数组赋值
		i++;
	}
	for(i=i-1;i>=0;i--)
		printf("%c",str[i]);     //逆序输出
	printf("\n");
	return 0;
}

20、有4个字符串,要求找出其中最大者。

#include<stdio.h>
  #include<string.h>
  int main()
  {
     
    char str[4][20];  //定义二维字符数组
    char string[20];  //定义以为字符数组,作为交换字符串时的临时字符数组
    int i;
    for(i=0;i<4;i++)
       gets(str[i]);    //读入三个字符串,分别给str[0],str[1].str[2]
    if (strcmp(str[0],str[1])>0) //若str[0]>str[1]
        strcpy(string,str[0]);  //把str[0]的字符串赋给字符数组string
    else
        strcpy(string,str[1]);  //否则把str[1]的字符串赋给string
    if(strcmp(str[2],string)>0)  //若str[2]大于string
        strcpy(string,str[2]); 
	else
        strcpy(string,str[2]);//把str[2]的字符串赋给字符数组string
    if(strcmp(str[3],string)>0)
		strcpy(string,str[3]);
	else
        strcpy(string,str[3]);
    printf("\nThe largest string is:\n%s\n",string);
return 0;
}

21、输入一行字符,统计小写字母中哪个出现的频率最高?并且统计有多少个?

#include<stdio.h>
#include<string.h>
int main()
{
   
	int i,j,m=0,n,k=0,p=0;
	char a[100];
	printf("Input :");
	gets(a);
	n=strlen(a);
	for(i=0;i<n;i++)
	{
   
		if(a[i]>=97&&a[i]<=122)
		{
   
		for(j=0;j<n;j++)
		{
   
			if(a[i]==a[j])
				k++;
		}
		if(m<k)
		{
   	m=k;p=i;}
		k=0;
		}
	}
	printf("%c出现%d次\n",a[p],m);
	return 0;
}

22、编写一个程序,将字符s2中的全部字符复制到字符数组s1中,不用strcpy函数。

# include<stdio.h>
int main()
{
   
	char s1[100],s2[100];
	int  i=0,j=0;
	scanf("%s",s2);
	for(;s2[i]!=0;i++,j++)
		s1[j]=s2[i];        //复制
	s1[i]='\0';           //为换行开辟空间
	printf("%s\n",s1);
	return 0;
}

23、编一个程序,将两个字符串连接起来,不要用strcat函数。

#include<stdio.h>
int main()
{
   
    void concatenate(char string1[],char string2[],char string[]);
    char s1[100],s2[100],s[100];
    printf("input string1:");
    scanf("%s",s1);
    printf("input string2:");
    scanf("%s",s2);
    concatenate(s1,s2,s);
    printf("\nThe new string is %s\n",s);
    return 0;
}
void concatenate(char string1[],char string2[],char string[])
{
   
    int i,j;
    for(i=0;string1[i]!='\0';i++)
        string[i]=string1[i];
    for(j=0;string2[j]!='\0';j++)
        string[i+j]=string2[j];
    string[i+j]='\0';
}

24、编程实现:输入任意一个字符串,依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串后输出。

# include<stdio.h>
int main()
{
   
	char ch;
	while((ch=getchar())!='\n')
	{
   
		if(ch>='0'&&ch<='9') //判断是否为数字
			putchar(ch);
	}
	return 0;
}

25、输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。

#include<stdio.h>
  int main()
  {
     
    char string[100];
    int i,num=0,word=0;
    char c;
    gets(string);    //输入一个字符串给字符组string
        for(i=0;(c=string[i])!='\0';i++) //只要字符不是'\0'就继续执行循环
        if(c==' ') word=0;   //如果是空格符,使word置0

        else if(word==0)   //如果不his空格符且word原值为0
        {
   
            word=1;        //使word置1
            num++;        //sum累加1,表示增加一个单词
        }
        printf("There are %d words in this line.\n",num);//输出单词数
        return 0;
  }