c语言考试必备.docx
《c语言考试必备.docx》由会员分享,可在线阅读,更多相关《c语言考试必备.docx(28页珍藏版)》请在冰豆网上搜索。
c语言考试必备
使用此答案的同学们注意了!
!
!
为了在老师改变数据的情况下也能快速做好,
我把题目一一列出,为大家争取时间!
!
!
(记住不要管字下面的线条,争取好成绩,加油!
!
!
1.输入两个正整数M和N,求其最大公约数和最小公倍数。
2.输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数。
3.输出所有水仙花数,即一个3位数,其各位数字立方和等于该数本身。
4.输出1000以内所有的完数。
5.有一个分数列,2/1,3/2,5/3,8/5,13/8,求这个数列前20项之和。
6.用迭代法求X=根号A。
7.用牛顿迭代法求2X3-4X2+3X-6=0在1.5附近的根。
8.用二分法求2X3-4X2+3X-6=0在(-10,10)之间的根。
9.用筛选法求100以内的素数。
10.用选择法对10个整数排序。
11.找出一个二维数组中的鞍点。
12.编译程序,将两个字符转连接起来,不要用STRCAT函数。
13.编译程序,将字符数组S2中的全部字符复制到字符数组S1中,不要用STRCPY函数。
14.写一个函数,使给定的一个3×3的二维整形数组转置,即行列互换。
15.写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。
16.写一个函数,将两个字符串连接起来。
17.写一个函数,用起泡法对输入的10个字符按由小到大顺序排列。
18.输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换,写3个函数,1输入10个数,2进行处理3输出10个数。
19.有N个整数,使前面各数顺序向后移M个位置,最后M个数变成最前面M个数
20.在主函数中输入10个等长的字符串,用另一函数对他们排序,然后在主函数中输出。
21.用指针数组处理上一题目,字符串不等长。
22.用指向指针的指针的方法对5个字符串排序并输出。
//指针指向的方法
23.求ax2+bx+c=0方程的解。
24.有10个地区的面积,要求对他们按由小到大的顺序排列。
25.输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。
26.有5个学生坐在一起,问第5个学生多少岁,他说比第4个学生大2岁......第一个学生是10岁,问第5个学生多大?
27.用递归方法求N的阶乘。
28.输入10个数,要求输出其中值最大的元素和该数是第几个数。
29.用选择法对数组中10个整数按由小到大顺序排列。
30.将数组中N个整数按相反顺寻存放。
31.用指针方法对10个整数按由大到小顺序排序。
32.将若干字符串按字母顺序(由小到大)输出。
33.输出以下矩阵。
12345246810369121548121620
*1.输入两个正整数M和N,求其最大公约数和最小公倍数。
#include
intmain()
{
intp,r,n,m,temp;
printf("请输入两个正整数n,m:
");
scanf("%d,%d,",&n,&m);
if(n{
temp=n;
n=m;
m=temp;
}
p=n*m;
while(m!
=0)//辗转相除法
{
r=n%m;
n=m;
m=r;
}
printf("它们的最大公约数为:
%d\n",n);
printf("它们的最小公约数为:
%d\n",p/n);
return0;
}
2.输入一行字符,分别统计出其中英文字母,空格,数字和其他字符的个数。
#include
intmain()
{
charc;
intletters=0,space=0,digit=0,other=0;
printf("请输入一行字符:
\n");
while((c=getchar())!
='\n')
{
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
letters++;
elseif(c=='')
space++;
elseif(c>='0'&&c<='9')
digit++;
else
other++;
}
printf("字母数:
%d\n空格数:
%d\n数字数:
%d\n其它字符数:
%d\n",letters,space,digit,other);
return0;
}
3.输出所有水仙花数,即一个3位数,其各位数字立方和等于该数本身。
#include
intmain()
{
inti,j,k,n;
printf("parcissusnumbersare");
for(n=100;n<1000;n++)
{
i=n/100;
j=n/10-i*10;//找出百位十位个位上各自的数字
k=n%10;
if(n==i*i*i+j*j*j+k*k*k)
printf("%d",n);
}
printf("\n");
return0;
}
4.输出1000以内所有的完数。
#include
intmain()
{intm,s,i;
for(m=2;m<1000;m++)//由于
{s=0;
for(i=1;iif((m%i)==0)s=s+i;
if(s==m)
{printf("%d,itsfactorsare",m);
for(i=1;iif(m%i==0)printf("%d",i);
printf("\n");
}
}
return0;
}
5.有一个分数列,2/1,3/2,5/3,8/5,13/8,求这个数列前20项之和。
#include
intmain()
{
inti,n=20;//可变数据20
doublea=2,b=1,s=0,t;
for(i=1;i<=n;i++)
{
s=s+a/b;
t=a,
a=a+b,
b=t;
}
printf("sum=%16.10f\n",s);
return0;
}
6.用迭代法求X=根号A。
#include
#include
intmain()
{
floata,x0,x1;
printf("enterapositivenumber:
");
scanf("%f",&a);
x0=a/2;
x1=(x0+a/x0)/2;
do
{x0=x1;
x1=(x0+a/x0)/2;
}while(fabs(x0-x1)>=1e-5);
printf("Thesquarerootof%5.2fis%8.5f\n",a,x1);
return0;
}
7.用牛顿迭代法求2X3-4X2+3X-6=0在1.5附近的根。
#include
#include
intmain()
{doublex1,x0,f,f1;
x1=1.5;
do
{x0=x1;
f=((2*x0-4)*x0+3)*x0-6;
f1=(6*x0-8)*x0+3;
x1=x0-f/f1;
}while(fabs(x1-x0)>=1e-5);
printf("Therootofequationis%5.2f\n",x1);
return0;
}
8.用二分法求2X3-4X2+3X-6=0在(-10,10)之间的根。
#include
#include
intmain()
{floatx0,x1,x2,fx0,fx1,fx2;
do
{printf("enterx1&x2:
");
scanf("%f,%f",&x1,&x2);
fx1=x1*((2*x1-4)*x1+3)-6;
fx2=x2*((2*x2-4)*x2+3)-6;
}while(fx1*fx2>0);
do
{x0=(x1+x2)/2;
fx0=x0*((2*x0-4)*x0+3)-6;
if((fx0*fx1)<0)
{x2=x0;
fx2=fx0;
}
else
{x1=x0;
fx1=fx0;
}
}while(fabs(fx0)>=1e-5);
printf("x=%6.2f\n",x0);
return0;
}
9.用筛选法求100以内的素数。
#include
#include
intmain()
{inti,j,n,a[101];
for(i=1;i<=100;i++)
a[i]=i;
a[1]=0;
for(i=2;ifor(j=i+1;j<=100;j++)
{if(a[i]!
=0&&a[j]!
=0)
if(a[j]%a[i]==0)
a[j]=0;
}
printf("\n");
for(i=2,n=0;i<=100;i++)
{if(a[i]!
=0)
{printf("%5d",a[i]);
n++;
}
if(n==10)
{printf("\n");
n=0;
}
}
printf("\n");
return0;
}
10.用选择法对10个整数排序。
#include
intmain()
{inti,j,min,temp,a[11];
printf("enterdata:
\n");
for(i=1;i<=10;i++)
{printf("a[%d]=",i);
scanf("%d",&a[i]);
}
printf("\n");
printf("Theorginalnumbers:
\n");
for(i=1;i<=10;i++)
printf("%5d",a[i]);
printf("\n");
for(i=1;i<=9;i++)
{min=i;
for(j=i+1;j<=10;j++)
if(a[min]>a[j])min=j;
temp=a[i];
a[i]=a[min];
a[min]=temp;
}
printf("\nThesortednumbers:
\n");
for(i=1;i<=10;i++)
printf("%5d",a[i]);
printf("\n");
return0;
}
11.找出一个二维数组中的鞍点。
#include
#defineN4
#defineM5
intmain()
{
inti,j,k,a[N][M],max,maxj,flag;
printf("pleaseinputmatrix:
\n");
for(i=0;ifor(j=0;jscanf("%d",&a[i][j]);
for(i=0;i{max=a[i][0];
maxj=0;
for(j=0;jif(a[i][j]>max)
{max=a[i][j];
maxj=j;
}
flag=1;
for(k=0;kif(max>a[k][maxj])
{flag=0;
continue;}
if(flag)
{printf("a[%d][%d]=%d\n",i,maxj,max);
break;
}
}
if(!
flag)
printf("Itisnotexist!
\n");
return0;
}
12.编译程序,将两个字符转连接起来,不要用STRCAT函数。
#include
intmain()
{chars1[80],s2[40];
inti=0,j=0;
printf("inputstring1:
");
scanf("%s",s1);
printf("inputstring2:
");
scanf("%s",s2);
while(s1[i]!
='\0')
i++;
while(s2[j]!
='\0')
s1[i++]=s2[j++];
s1[i]='\0';
printf("\nThenewstringis:
%s\n",s1);
return0;
}
13.编译程序,将字符数组S2中的全部字符复制到字符数组S1中,不要用STRCPY函数。
#include
#include
intmain()
{chars1[80],s2[80];
inti;
printf("inputs2:
");
scanf("%s",s2);
for(i=0;i<=strlen(s2);i++)
s1[i]=s2[i];
printf("s1:
%s\n",s1);
return0;
}
14.写一个函数,使给定的一个3×3的二维整形数组转置,即行列互换。
#include
#defineN3
intarray[N][N];
intmain()
{voidconvert(intarray[][3]);
inti,j;
printf("inputarray:
\n");
for(i=0;ifor(j=0;jscanf("%d",&array[i][j]);
printf("\noriginalarray:
\n");
for(i=0;i{for(j=0;jprintf("%5d",array[i][j]);
printf("\n");
}
convert(array);
printf("convertarray:
\n");
for(i=0;i{for(j=0;jprintf("%5d",array[i][j]);
printf("\n");
}
return0;
}
voidconvert(intarray[][3])
{inti,j,t;
for(i=0;ifor(j=i+1;j{t=array[i][j];
array[i][j]=array[j][i];
array[j][i]=t;
}
}
15.写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。
#include
#include
intmain()
{voidinverse(charstr[]);
charstr[100];
printf("inputstring:
");
scanf("%s",str);
inverse(str);
printf("inversestring:
%s\n",str);
return0;
}
voidinverse(charstr[])
{chart;
inti,j;
for(i=0,j=strlen(str);i<(strlen(str)/2);i++,j--)
{t=str[i];
str[i]=str[j-1];
str[j-1]=t;
}
}
16.写一个函数,将两个字符串连接起来。
#include
intmain()
{voidconcatenate(charstring1[],charstring2[],charstring[]);
chars1[100],s2[100],s[100];
printf("inputstring1:
");
scanf("%s",s1);
printf("inputstring2:
");
scanf("%s",s2);
concatenate(s1,s2,s);
printf("\nThenewstringis%s\n",s);
return0;
}
voidconcatenate(charstring1[],charstring2[],charstring[])
{inti,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';
}
17.写一个函数,用起泡法对输入的10个字符按由小到大顺序排列。
#include
#include
#defineN10
charstr[N];
intmain()
{voidsort(char[]);
inti,flag;
for(flag=1;flag==1;)
{printf("inputstring:
\n");
scanf("%s",&str);
if(strlen(str)>N)
printf("stringtoolong,inputagain!
");
else
flag=0;
}
sort(str);
printf("stringsorted:
\n");
for(i=0;iprintf("%c",str[i]);
printf("\n");
return0;
}
voidsort(charstr[])
{inti,j;
chart;
for(j=1;jfor(i=0;(i='\0');i++)
if(str[i]>str[i+1])
{t=str[i];
str[i]=str[i+1];
str[i+1]=t;
}
}
18.输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换,写3个函数,1输入10个数,2进行处理3输出10个数。
#include
intmain()
{voidinput(int*);
voidmax_min_value(int*);
voidoutput(int*);
intnumber[10];
input(number);
max_min_value(number);
output(number);
return0;
}
voidinput(int*number)
{inti;
printf("input10numbers:
");
for(i=0;i<10;i++)
scanf("%d",&number[i]);
}
voidmax_min_value(int*number)
{int*max,*min,*p,temp;
max=min=number;
for(p=number+1;pif(*p>*max)max=p;
elseif(*p<*min)min=p;
temp=number[0];number[0]=*min;*min=temp;
if(max==number)max=min;
temp=number[9];number[9]=*max;*max=temp;
}
voidoutput(int*number)
{int*p;
printf("Now,theyare:
");
for(p=number;pprintf("%d",*p);
printf("\n");
}
19.有N个整数,使前面各数顺序向后移M个位置,最后M个数变成最前面M个数
#include
intmain()
{voidmove(int[20],int,int);
intnumber[20],n,m,i;
printf("howmanynumbers?
");
scanf("%d",&n);
printf("input%dnumbers:
\n",n);
for(i=0;iscanf("%d",&number[i]);
printf("howmanyplaceyouwantmove?
");
scanf("%d",&m);
move(number,n,m);
printf("Now,theyare:
\n");
for(i=0;iprintf("%d",number[i]);
printf("\n");
return0;
}
voidmove(intarray[20],intn,intm)
{int*p,array_end;
array_end=*(array+n-1);
for(p=array+n-1;p>array;p--)
*p=*(p-1);
*array=array_end;
m--;
if(m>0)move(array,n,m);
}
20.在主函数中输入10个等长的字符串,用另一函数对他们排序,然后在主函数中输出。
#include
#include
intmain()
{voidsort(chars[][6]);
inti;
charstr[10][6];
printf("input10strings:
\n");
for(i=0;i<10;i++)
scanf("%s",str[i]);
sort(str);
printf("Now,thesequenceis:
\n");
for(i=0;i<10;i++)
printf("%s\n",str[i]);
return0;
}
voidsort(chars[10][6])
{inti,j;
char*p,temp[10];
p=temp;
for(i=0;i<9;i++)
for(j=0;j<9-i;j++)
if(strcmp(s[j],s[j+1])>0)
{strcpy(p,s[j]);
str