C语言常见经典题目

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言经典题目
1.将一个数组中的值按逆序重新存放。
#include
#include
int main()
{ int i,j,l,t;
char a[10];
gets(a);
l=strlen(a);
for(i=0;i{t=a[i],a[i]=a[l-1-i],a[l-1-i]=t;};
for(i=0;iprintf("%c",a[i]);
}
2.写一个函数,输入一个十六进制数,输出相应的十进制数。
#include
#include
void main()
{ int change(int n);
char a[5];
gets(a);
int i,j=strlen(a),s=0,t;
for(i=0,t=j;i{if(a[i]>='0'&&a[i]<='9')
s+=(a[i]-'0')*change(j-1);
if(a[i]>='A'&&a[i]<='Z')
s+=(a[i]-55)*change(j-1);
}
printf("%5d",s);
}
int change(int n)
{ int i,j=1;
for(i=1;i<=n;i++)
j*=16;
return j;
}
3.给出年、月、日,计算该日是该年的第几天。
#include
#include
void main()
{ int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int y,m,d,s=0,i;
printf("Input the year,month,date:\n");
scanf("%d,%d,%d",&y,&m,&d);
if((y%4==0&&y%100!=0)||y%400==0) a[2]++;
for(i=1;is+=a[i];
s=s+d;
printf("The %d date.\n",s);
}
4.写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。
#include
#include
void main()
{ void ant(char a[],char b[]);
char a[10],b[10];
scanf("%s",a);
ant(a,b);
printf("%s",b);
}
void ant(char a[],char b[])
{ int i,n;
n=strlen(a);
for(i=0,n--;n>=0;i++,n--)
b[i]=a[n];
b[i]='\0';
}
5.输出10行杨辉三角形。
#include
int main()
{ int a[10][10];
int i,j;
for(i=0;i<10;i++)
for(j=0;j<10;j++)
{if(j==0||j==i) a[i][j]=1;
else a[i][j]=a[i-1][j]+a[i-1][j-1];}
for(i=0;i<10;i++)
{for(j=0;j<=i;j++)
printf("%5d",a[i][j]);
printf("\n");}
}
6.用牛顿迭代法求方程的根。
#include
#include
void main()
{ float a,b,c,d;
float f,f1,x,x1;
float slt(float a,float b,float c,float d);
printf("Input the numbers:\n");
scanf("%f,%f,%f,%f",&a,&b,&c,&d);
x=slt(a,b,c,d);
printf("The solution is %5.4f.\n",x);
}
float slt(float a,float b,float c,float d)
{ float f,f1,x,x1;
x=1.5;
do{ x1=x;
f=((a*x1+b)*x1+c)*x1+d;
f1=(3*a*x1+2*b)*x1+c;
x=x-f/f1;}
while(fabs(x-x1)>1e-5);
return x;
}
用弦截法求方程的根。
#include
#include
float f(float x)
{
float y ;
y=((x-8)*x+12)*x-30;
return y;
}
float xpt(float x1,float x2)
{
float x;
x=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1));
return x;
}
float root(float x1,float x2)
{
float x,y,y1;
y1=f(x1);
do{x=xpt(x1,x2);
y=f(x);
if(y*y1>0) {y1=y;x1=x;}
else x2=x;
} while(fabs(x)>=1e-5);
return x;
}
int main()
{ float x1,x2,x;
scanf("%f,%f",&x1,&x2);
x=root(x1,x2);
printf("%f\n",x);
getch();
}
7.给出

一个不多于5位的正整数,要求:求出它是几位数,分别输出每一位数字,按逆序输出各位数字。
#include
int main()
{ int m,n,t,a,b,c,d,e;
printf("Input the number:\n");
scanf("%d",&m);
if(m<10) printf("single digit\n");
else
if(m<100) printf("tens digit\n");
else
if(m<1000) printf("hunds digit\n");
else
if(m<10000) printf("thouds digit\n");
else
printf("tens thouds digit\n");
n=m/100000,d=m/10000,c=m/1000,b=m/100,a=m/10,e=m%10;
if(a==0)
printf("%d",m);
else
if(b==0) {t=10*e+a;printf("%d",t);}
else
if(c==0) {t=100*e+10*(a-10*b)+b;printf("%d",t);}
else
if(d==0) {t=1000*e+100*(a-10*b)+10*(b-10*c)+c;printf("%d",t);}
else
if(n==0) {t=10000*e+1000*(a-10*b)+100*(b-10*c)+10*(c-10*d)+d;printf("%d",t);}
}
8.输入两个正整数m和n,求其最大公约数和最小公倍数。
#include
void main()
{ int m,n,a,b;
int cd(int m,int n);
printf("Input the numbers:\n");
scanf("%d,%d",&m,&n);
a=cd(m,n),b=m*n/a;
printf("%d,%d\n",a,b);
}
int cd(int m,int n)
{ int t;
while(m%n!=0)
{t=m,m=n,n=t%n;
}
return n;
}
9.输出n阶魔方阵。(n为奇数)
#include
void main()
{ int a[50][50];
int i,j,k,n;
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
a[i][j]=0;
j=n/2+1;
a[1][j]=1;
for(k=2;k<=n*n;k++)
{ i--,j++;
if((i<1)&&(j>n)) {i+=2,j--;}
else {if(i<1) i=n;
if(j>n) j=1;}
if(a[i][j]==0) a[i][j]=k;
else {i+=2,j--,a[i][j]=k;}
}
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
printf("%3d",a[i][j]);
printf("\n");}
}
10.用冒泡法对十个整数排序。
#include
int main()
{ int i,j,t,a[10];
printf("Input the numbers:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("\n");
for(j=0;j<9;j++)
for(i=0;i<9-j;i++)
if(a[i]>a[i+1])
{ t=a[i];
a[i]=a[i+1];
a[i+1]=t;}
printf("The sorted numbers:\n");
for(i=0;i<10;i++)
printf("%5d",a[i]);
}
用选择法对十个整数排序。
#include
#include
void main()
{
int a[10]={9,3,0,6,1,13,36,37,98,12};
int i,j,k,t;
for(j=0;j<9;j++)
{ k=j;
for(i=j+1;i<10;i++)
if(a[i]>a[k]) k=i;
if(k!=j) {t=a[j];a[j]=a[k];a[k]=t;}
}
for(i=0;i<10;i++)
printf("%3d",a[i]);
}
11.输入星型图案。
#include
void main()
{ int i,j;
for(i=1;i<5;i++)
{
for(j=0;j<=3-i;j++) printf(" ");
for(j=0;j<2*i-1;j++) printf("*");
printf("\n");
}
for(i=3;i>0;i--)
{ for(j=0;j<=3-i;j++) printf(" ");
for(j=0;j<2*i-1;j++) printf("*");
printf("\n");
}
}
12.十进制数转换成任意进制数(2、8、16)
#include
void main()
{int changeB(int n);
int changeO(int n);
int changeH(int n);
int i,m,n;
scanf("%d,%d",&m,&n);
if(n==2) changeB(m);
else if(n==8) changeO(m);
else if(n==16) changeH(m);
}
int change

B(int n)
{ int i=0,j,k,a[10];
while(n)
{ a[i]=n%2;
n=n/2;
i++; }
for(j=i-1;j>=0;j--)
printf("%d",a[j]);
}
int changeO(int n)
{ int i=0,j,k,a[10];
while(n)
{ a[i]=n%8;
n=n/8;
i++; }
for(j=i-1;j>=0;j--)
printf("%o",a[j]);
}
int changeH(int n)
{ int i=0,j,k,a[10];
char Hen[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
while(n>0)
{a[i]=n%16;
n=n/16;
i++; }
for(j=i-1;j>=0;j--)
printf("%c",Hen[a[j]]);
}
13.任意进制数转换成十进制数。
二进制
#include
#include
void main()
{int power(int n);
char a[10];
gets(a);
int i,j,l,s=0;
j=strlen(a);
for(i=0,l=j;is+=(a[i]-'0')*power(j-1);
printf("%d",s);
}
int power(int n)
{ int i,m=1;
for(i=1;i<=n;i++)
m*=2;
return m;
}
八进制
#include
#include
void main()
{int power(int n);
char a[10];
gets(a);
int i,j,l,s=0;
j=strlen(a);
for(i=0,l=j;is+=(a[i]-'0')*power(j-1);
printf("%d",s);
}
int power(int n)
{ int i,m=1;
for(i=1;i<=n;i++)
m*=8;
return m;
}
十六进制
#include
#include
int main()
{ int change(int n);
char a[5];
gets(a);
int i,j=strlen(a),s=0,t;
for(i=0,t=j;i{if(a[i]>='0'&&a[i]<='9')
s+=(a[i]-'0')*change(j-1);
if(a[i]>='A'&&a[i]<='Z')
s+=(a[i]-55)*change(j-1);
}
printf("%5d",s);
}
int change(int n)
{ int i,j=1;
for(i=1;i<=n;i++)
j*=16;
return j;
}
14.编写一个程序,将两个字符串连接起来,不使用strcat函数。
#include
void main()
{char str1[20],str2[20];
gets(str1),gets(str2);
int i=0,j=0;
while (str1[i])
i++;
while (str2[j])
str1[i++]=str2[j++];
str1[i]='\0';
printf("%s\n",str1);
}
15.输出1000以内的所有完数。
#include
void main()
{ int i,j,k,s;
for(i=2;i<1000;i++)
{s=0;
for(j=1;j<=i/2;j++)
{if(i%j==0)
s+=j;}
if(s==i)
{printf("\n%5d\n",i);
for(j=1;j<=i/2;j++)
if(i%j==0) printf("%5d",j);
}
}
}
16.编程实现输入一个数组,使最大的数与第一个元素交换,最小的数与最后一个元素交换,并输出数组(用指针的方法)
不使用指针:
#include
void main()
{ int a[10],i,j,m,n,k,l,t;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
k=l=0,m=a[0],n=a[9];
for(i=1;i<10;i++)
{if(a[i]>m) m=a[i],k=i;
else if(a[i]}
t=a[0],a[0]=a[k],a[k]=t;
if(a[9]!=a[l])
t=a[9],a[9]=a[l],a[l]=t;
for(i=0;i<10;i++)
printf("%3d",a[i]);
}
使用指针:(有错误)
#include
void main()
{void max_min(int *a);
void output(int *a);
int a[10],i;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
max_min(a);
output(a);
}
void max_min(int *a)
{ int *m,*n,*p,*t,k,l;
p=a,t=a+10,m=&a[0],n=&a[9];
for(p=a+1;p{if(*p>*m) m=p ;
else if(*p<*n) n=p;}
k=*m,l=*n;
*p=a[

0],a[0]=k,k=*p;
*p=a[9],a[9]=l,l=*p;
return ;
}
void output(int *a)
{ int *p;
for(p=a;pprintf("%d ",*p);
}
17.输入n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。
#include
void main()
{void move(int *a,int n,int m);
int a[100],m,n,i;
scanf("%d,%d",&n,&m);
for(i=0;iscanf("%d",&a[i]);
move(a,n,m);
for(i=0;iprintf("%d ",a[i]);
}
void move(int *a,int n,int m)
{int *p=a,arr,i,j;
for(j=0;j{ arr=*(p+n-1);
p=a+n-1;
for(i=n-1;i>0;i--)
{*p=*(p-1);p--;}
*a=arr;
}
}
18.求0—7所能组成的奇数个数。
#include
void main()
{int i,j,k,s,sum=0,a[9];
a[1]=4,a[2]=28;
for(i=3;i<=8;i++)
{k=1,s=4;
for(j=1;j<=i-2;j++)
k*=8;
s*=k*7;
a[i]=s;
}
for(i=1;i<=8;i++)
sum+=a[i];
printf("%d",sum);
}
19.验证哥德巴赫猜想:一个大于6的偶数总能表示为两个素数之和。
#include
#include
void main()
{ int a,b,c,d;
printf("Please input:\n");
scanf("%d",&a);
if(a<5||a%2!=0) printf("Input data error!\n");
else {
for(b=3;b<=a/2;b+=2)
{ for(c=2;c<=sqrt(b);c++)
if(b%c==0) break;
if(c>sqrt(b))
d=a-b;
for(c=2;c<=sqrt(d);c++)
if(d%c==0) break;
if(c>sqrt(d))
printf("%d=%d+%d\n",a,b,d);}
}
}
#include
#include
void main()
{
int i,j,n,p,q,fp,fq;
printf("Input the integer:\n");
scanf("%d",&n);
if(n<5||(n%2)!=0) printf("Input data error!\n");
else
{ p=1;
do {p++;q=n-p;
fp=fq=1;
for(i=2;i<=sqrt(p);i++)
if(p%i==0)
{
fp=0;break;
}
for(j=2;j<=sqrt(n-p);j++)
if(q%j==0)
{
fq=0;break;
}
} while(fp*fq==0);
printf("%d=%d+%d\n",n,p,q);
}
}
20.统计一串字符中的空格数并输出。
#include
int main()
{
char str[50],*p=str;
int num=0;
gets(str);
while(*p!='\0')
{if(*p==' ')
{
p++;
if(*p!=' ')
num++;
continue;
} p++;
}
printf("%d\n",num);
}
21.输出九九乘法表。
#include
int main()
{
int a[10][10]={0};
int i,j;
for(i=0,j=1;j<10;j++) a[i][j]=j;
for(j=0,i=1;i<10;i++) a[i][j]=i;
for(i=1;i<10;i++)
for(j=1;j<10;j++) a[i][j]=i*j;
for(i=0;i<10;i++)
{for(j=0;j<10;j++)
printf("%3d",a[i][j]);
printf("\n");
}
getch();
}

22.模拟ATM界面。
#include
int main()
{
char c;
printf("Please select the key:\n1.Quary\n2.Credit\n3.Debit\n4.Exit\n");
c=getchar();
switch(c)
{
case '1': printf("Your balance is $1000.\nPress any key to return.");break;
case '2': {printf("Please select Credit money:\n1.$50\n2.$100\n3.Return\n");
char a; a=getchar();
switch(a)
{
case '1':printf("Your credit money is $50,Thank you!");break;
case '

2':printf("Your credit money is $100,Thank you!");break;
case '3':break;
}
} break;
case '3': printf("Please select Debit money:\n1.$50\n2.$100\n3.$500\n4.Return\n");break;
case '4': printf("Thank you for your using,Good Bye!\n");break;
}
}
23.利用数组求前n个质数。
#include
int main()
{
int a[50],i,k,m,l;
a[0]=2,i=1,m=3;
while(i<50)
{k=0;
while(a[k]*a[k]<=m)
if(m%a[k]==0)
{
m+=2;k=1;
}
else k++;
a[i++]=m;
m+=2;
}
for(k=0;kprintf("%4d",a[k]);
getch();
}
24.文本编译器。
#include
void main()
{ char a[10][10];
register int i,j,t;
for(t=0;t<10;t++)
{
printf("%d:",t);
gets(a[t]);
if(!a[t][0]) break;
}
for(i=0;ifor(j=0;a[i][j];j++)
{putchar(a[i][j]);putchar('\n');}
}
25.将输入的整数转换成字符串输出。
#include
void convert(int n)
{ int i;
if((i=n/10)) convert(i);
putchar('0'+n%10);
}
void main()
{
int m,n;
scanf("%d",&m);
convert(m);
putchar('\n');
}
26.一个统计学生成绩的程序。
#include
#include
int a[3][3]={76,84,93,75,81,96,77,88,95},i,j;
float astu[3],asb[3],h;
float st(int a[3][3])
{
int i,j;
float s;
for(i=0;i<3;i++)
{ s=0;
for(j=0;j<3;j++)
s+=a[i][j];
astu[i]=s/3;
}
}
float sb(int a[3][3])
{
int i,j;
float s;
for(j=0;j<3;j++)
{ s=0;
for(i=0;i<3;i++)
s+=a[i][j];
asb[j]=s/(float)3;
}
}
float max(int *r,int *c)
{ h=a[0][0];
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(a[i][j]>h) {h=a[i][j];
*r=i+1,*c=j+1;}
return h;
}
float sd()
{
float s1=0,s2=0;
for(i=0;i<3;i++)
{ s1+=astu[i]*astu[i];
s2+=astu[i];
}
return (s1/3-(s2/3)*(s2/3));
}
void main()
{ int r=0,c=1;
st(a);
sb(a);
for(i=0;i<3;i++)
printf("%6.2f",astu[i]); putchar('\n');
for(j=0;j<3;j++) printf("%6.2f",asb[j]); putchar('\n');
h=max(&r,&c);
printf("The max%6.2f is %dth student %dth subject.\n",h,r,c);
printf("S is%6.2f",sd());
}


相关文档
最新文档