西南交大上机考试必备c语言题目+源程序代码精心总结.docx
《西南交大上机考试必备c语言题目+源程序代码精心总结.docx》由会员分享,可在线阅读,更多相关《西南交大上机考试必备c语言题目+源程序代码精心总结.docx(28页珍藏版)》请在冰豆网上搜索。
西南交大上机考试必备c语言题目+源程序代码精心总结
1.用π/4≈1-1/3+1/5-1/7+…公式求π的近似值,直到某一项的绝对值小于10-6为止
#include
#include
voidmain()
{ints;
floatn,t,pi;
t=1;pi=0;n=1.0;s=1;
while(fabs(t)>1e-6)
{pi=pi+t;
n=n+2;
s=-s;
t=s/n;
}
pi=pi*4;
printf("pi=%10.6f\n",pi);
}
2.求Fibonacci数列前40个数
#include
voidmain()
{
longintf1,f2;
inti;
f1=1;f2=1;
for(i=1;i<=20;i++)
{printf("%12ld%12ld",f1,f2);
if(i%2==0)printf("\n");
f1=f1+f2;
f2=f2+f1;
}
}
3.删除字符串中的数字字符,以‘#’作为字符串的结束标志
#include
#include
fun(char*p)
{
chara[100];
inti,j,k;
for(i=0,j=0;*(p+i)!
='#';i++)
{
if(*(p+i)<'0'||*(p+i)>'9')/*(((s1[i]>='a')&&(s1[i]<='z'))||((s1[i]>='A')&&(s1[i]<='Z')))*/
{
a[j++]=*(p+i);
k=j;
}
}
a[k]='\0';
strcpy(p,a);
}
voidmain()
{
chars1[100];
printf("请输入随意字符:
\n");
gets(s1);
fun(s1);
puts(s1);
printf("\n");
}
4.输出10000—20000之间个位数是7的素数个数,并将其中最大的素数返回。
#include
#include
voidmain()
{
inti,j,n,word=0,max;
for(i=10000;i<=20000;i++)
{
if(i%10==7)
{
n=sqrt(i);
for(j=2;j<=n;j++)
{
if(i%j==0)
break;
}
if(j>=n+1)
{
word=word+1;
max=i;
}
}
}
printf("这样的素数有%d个,其中最大的一个是%d.\n",word,max);
}
5.统计输入英文字母的个数
#include
voidfun(char*tt,intpp[])
{
inti;
for(i=0;i<26;i++)
pp[i]=0;
for(;*tt!
='\0';tt++)
(pp[*tt-97])++;
}
voidmain()
{
charaa[1000];
intbb[26],k;
printf("\npleaseenteracharstring:
\n");
scanf("%s",aa);
fun(aa,bb);
for(k=0;k<26;k++)
printf("%d",bb[k]);
printf("\n");
}
6.矩阵主对角线元素平方之和
#include
intfun(intx[3][3],inty)
{
inti,j,k;
y=0;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
if(i==j)
k=x[i][j]*x[i][j];
y=y+k;
}
return(y);
}
voidmain()
{
inti,j;
inta[3][3],n;
printf("请输入一个3*3矩阵:
\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
printf("%4d",a[i][j]);
}
printf("\n");
}
n=fun(a,n);
printf("对角线平方和为:
%d\n",n);
}
7.字符串倒序
#include
#include
voidfun(char*s,char*t)
{
inti,k;
ints1=strlen(s);
/*
for(i=0;i<=s1;i++)
{
*(t+i)=*(s+i);
k=i;必须在循环体内赋值
}
*/
strcpy(t,s);
for(k=s1;k<=2*s1-1;k++)
t[k]=s[2*s1-1-k];
t[2*s1]='\0';
}
voidmain()
{chars[100],t[100];
printf("\nPleaseenterstrings:
");scanf("%s",s);
fun(s,t);
printf("Theresultis:
%s\n",t);
}
8.将字符串中的字母变成其后的字母,其中z变成a,Z变成A
程序如下:
#include
#include
voidmain()
{
voidfun(chara[100],charb[100]);
printf("\n请输入一个字符串:
\n");
charstr[100];charp[100];
gets(str);
fun(str,p);
puts(p);
}
voidfun(chara[100],charb[100])
{
inti,k;
for(i=0;*(a+i)!
='!
';i++)
{
if((*(a+i)>='a'&&*(a+i)<='z')||(*(a+i)>='A'&&*(a+i)<='Z'))
{
if(*(a+i)=='z')
*(a+i)='a';
elseif(*(a+i)=='Z')
*(a+i)='A';
else
*(a+i)=*(a+i)+1;
}
}
*(a+i)='\0';
strcpy(b,a);
}
9.非零整数的最大公约数
#include
voidmain()
{
inti,a,b,c,t;
printf("请输入两个非零正整数:
\n");
scanf("%d,%d",&a,&b);
printf("\n");
c=a>b?
a:
b;
for(i=1;i<=c;i++)
if((a%i==0)&&(b%i==0))
t=i;
printf("最大公约数为:
\n");
printf("%d\n",t);
}
10.根据以下公式求π(要求满足精度0.0005)的近似值:
π/2=1+1/3+(1*2)/(3*5)+(1*2*3)/(3*5*7)+……+(1*2*3*4*……*n)/(3*5*7*……*(2n+1))
#include
voidmain()
{
floati,k,n,t;
floatpi,sum=1;
for(i=1,k=1,t=1;;i++)
{
if(k/t<0.00000005)
break;
k=k*i;
t=t*(2*i+1);
sum=sum+k/t;
}
pi=sum*2;
printf("π的值为:
%f\n",pi);
}
11.将两个两位数的正整数a,b合并形成一个整数放在c中,合并的方式如:
当a=45,b=12时,调用该函数后,c=4152
#include
voidfun(inta,intb,long*c)
{
*c=(a/10)*1000+(b/10)*100+(a%10)*10+(b%10);
}
main()
{inta,b;
longc;
printf("Inputab:
");scanf("%d%d",&a,&b);
fun(a,b,&c);
printf("Theresultis:
%d\n",c);
}
12.初试矩阵加上转置矩阵
#include
voidmain()
{
inta[3][3]={{1,1,1},{2,2,2,},{3,3,3}};
intb[3][3],c[3][3];
inti,j,t;
printf("初试矩阵为:
\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%3d",a[i][j]);
printf("\n");
}
printf("\n");
printf("转置后的矩阵为:
\n");
for(i=0;i<3;i++)
for(j=i;j<3;j++)
{
t=a[j][i];
b[j][i]=a[i][j];
b[i][j]=t;
}
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%3d",b[i][j]);
printf("\n");
}
printf("\n");
printf("初试矩阵加上转置矩阵后的矩阵为:
\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
c[i][j]=a[i][j]+b[i][j];
printf("%3d",c[i][j]);
}
printf("\n");
}
printf("\n");
}
13.从低位开始取出长整型变量s中奇数位上的数,依次构成一个新数放在t中。
高位仍在高位,低位仍在低位。
如当s中的数为:
7654321时,t中的数为7531
#include
voidfun(longs,long*t)
{
longi,k,n=10;
k=s%10;
for(i=0;i
{
s=s/100;
k=(s%10)*n+k;
n=n*10;
}
*t=k;
}
main()
{longs,t;
printf("\nPleaseenters:
");scanf("%ld",&s);
fun(s,&t);
printf("Theresultis:
%ld\n",t);
}
14.冒泡法选择法
#include
/*起泡法
voidfun(intn,int*a)
{
inti,j,t;
for(i=0;ifor(j=0;jif(a[j]>a[j+1])
{
t=a[j+1];
a[j+1]=a[j];
a[j]=t;
}
}*/
/*选择法*/
voidfun(intn,int*a)
{
inti,j,t;
for(i=0;ifor(j=i+1;jif(*(a+j)<*(a+i))
{
t=*(a+j);
*(a+j)=*(a+i);
*(a+i)=t;
}
}
voidputarr(intn,int*z)
{inti;
for(i=1;i<=n;i++,z++)
{printf("%4d",*z);
if(i%10==0)printf("\n");
}printf("\n");
}
main()
{intaa[20]={9,3,0,4,1,2,5,6,8,10,7},n=11;
printf("\nBeforesorting%dnumbers:
\n",n);putarr(n,aa);
fun(n,aa);
printf("\nAftersorting%dnumbers:
\n",n);putarr(n,aa);
}
15.将长整型数中每一位上为偶数的数依次取出,构成一个新数放在t中,高位仍在高位,低位仍在低位。
如当s中的数为87653142时,t中的数为8642
#include
voidfun(longs,long*t)
{
longk=1,n,j;
for(*t=0,j=1;s>0;)
{
n=s%10;
if(n%2==0)
{
*t=*t+n*k;
k=k*10;
}
s=s-n;/*出错在此处,写成了s=s-n*j;s=s/j;j=j*10*/
s=s/10;/*或者直接写成s=s/10;*/
}
}
main()
{longs,t;
printf("\nPleaseenters:
");scanf("%ld",&s);
fun(s,&t);
printf("Theresultis:
%ld\n",t);
}
16.将字符串中除了下标为偶数同时asc值也为偶数的字符外,其余全部删除。
#include
#include
voidfun(char*s,chart[])
{
intk,i,j;
k=strlen(s);
for(i=0,j=0;i{
if(i%2==0&&s[i]%2==0)
{
t[j]=s[i];
j++;
}
}
t[j]='\0';
}
main()
{
chars[100],t[100];
printf("\nPleaseenterstringS:
");scanf("%s",s);
fun(s,t);
printf("\nTheresultis:
%s\n",t);
}
17.计算正整数num各位数字之积
#include
longfun(longnum)
{
inti,k,t=1;
while(num>0)
{
k=num%10;
t=t*k;
num=num/10;
}
return(t);
}
main()
{longn;
printf("\nPleaseenteranumber:
");scanf("%ld",&n);
printf("\n%ld\n",fun(n));
}
18.将字符串中的字符按逆序输出
#include
voidfun(chara[])
{
inti,n,t;
chark;
for(i=0;a[i]!
='\0';i++)
n=i+1;
t=n/2-1;
for(i=0;i<=t;i++)
{
k=a[n-i-1];
a[n-i-1]=a[i];
a[i]=k;
}
}
main()
{chars[10]="abcdefghi";
printf("处理前字符串=%s\n处理后字符串=",s);
fun(s);
printf("%s\n",s);
}
19.比较两个字符串的长度(不得调用c语言提供的求字符串长度的函数),函数返回较长的字符串。
若两个字符串长度相同,则返回第一个字符串。
#include
#include
/*第一种方法
char*fun(charx[],chary[])
{
inti,m,n;
for(i=0,m=0;x[i]!
='\0';i++)
m++;
for(i=0,n=0;y[i]!
='\0';i++)
n++;
if(m>=n)
return(x);
else
return(y);
}
*/
/*第二种不同的方法,但都需要定义*fun函数,定义此函数,返回值可用指针代替字符数组名。
第二种不同的方法*/
char*fun(char*x,char*y)
{
inti,m,n;
char*p;
for(i=0,m=0;*(x+i)!
='\0';i++)
m++;
for(i=0,n=0;*(y+i)!
='\0';i++)
n++;
if(m>=n)
p=x;
else
p=y;
return(p);
}
/*第三种方法
*****************************************************
voidfun(charx[],chary[],charz[])
{
inti,m,n;
for(i=0,m=0;x[i]!
='\0';i++)
m++;
for(i=0,n=0;y[i]!
='\0';i++)
n++;
if(m>=n)
{
for(i=0;i<=m;i++)
z[i]=x[i];
}
else
for(i=0;i<=n;i++)
z[i]=y[i];
}
main()
{chara[20],b[20],c[20];
inti,m,n;
printf("Input1thstring:
");
gets(a);
printf("Input2thstring:
");
gets(b);
printf("Thelargerstringis:
");
fun(a,b,c);
printf("%s\n",c);
}
*******************************************************
第三种方法*/
main()
{chara[20],b[20];
printf("Input1thstring:
");
gets(a);
printf("Input2thstring:
");
gets(b);
printf("Thelargerstringis:
");
printf("%s\n",fun(a,b));
}
20.删除字符串中的所有空白字符(包括制表符,回车符和换行符)
#include
#include
main()
{
voidfun(char*P);
charc,s[80];
inti=0;
printf("Inputastring:
");
c=getchar();
while(c!
='#')
{s[i]=c;i++;c=getchar();}
s[i]='\0';
fun(s);
puts(s);
}
voidfun(char*p)
{inti,t;
chara[80];
for(i=0,t=0;*(p+i)!
='#';i++)
if((*(p+i)!
=32)&&(*(p+i)!
=10)&&(*(p+i)!
=9))/*TAB的asc码制是9,换行符的asc码制是10,空格符的asc码制是32*/
a[t++]=*(p+i);
a[t]='\0';
strcpy(p,a);
}
21.当字符串中的内容为:
“abcdabfabcdx”,t中的内容为:
“ab”时,输出结果应是:
abcdx
当字符串中的内容为:
“abcdabfabcdx”,t中的内容为:
“abd”时,则程序输出:
notbefound!
#include
#include
char*fun(char*s,char*t)
{
char*p,*r,*a=0;
while(*s)
{
p=s;r=t;
while(*r)
{
if(*p==*r)
{p++;r++;}
elsebreak;
}
if(*r=='\0')
a=s;
s++;
}
return(a);
}
main()
{
chars[100],t[100],*p;
printf("\nPleaseenterstringS:
");
scanf("%s",s);
printf("\nPleaseentersubstringt:
");
scanf("%s",t);
p=fun(s,t);
if(p)
printf("\nTheresultis:
%s\n",p);
else
printf("\nNotfound!
\n");
}
22.当s所指字符串的内容为:
“abcdabfab”,t1所指子串中的内容为:
“ab”,t2所指子串的内容为:
“99”时,结果在w所指的数组中的内容应为:
“99cd99f99”
#include
#include
voidfun(char*s,char*t1,char*t2,char*w)
/*
{
char*p,*q,*n;
strcpy(w,s);
while(*w)
{
p=w;q=t1;
while(*q)
{
if(*p==*q)
{p++;q++;}
elsebreak;/*此else语句相当重要,不可缺少。
若缺少,程序无法正常执行
}
if(*q=='\0')
{
p=w;q=t2;
while(*q)
{*p=*q;p++;q++;}
}
w++;
}
}
*/***********************************
{
char