共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口诀表,要求用循环实现。
91=9 92=18 93=27 94=36…… 99=81
81=8 82=16 83=24 84=32 88=64
……
11=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;
}