专升本C语言各种程序.docx
《专升本C语言各种程序.docx》由会员分享,可在线阅读,更多相关《专升本C语言各种程序.docx(16页珍藏版)》请在冰豆网上搜索。
专升本C语言各种程序
1.m个人的成绩存放在score数组中,请编写函数fun,它的功能是:
将低于平均分的人作为函数值返回,将低于平均分的分数放在below所指定的函数中。
intfun(intscore[],intm,intbelow[])
{inti,k=0,aver=0;
for(i=0;iaver+=score[i];
aver/=m;
for(i=0,iif(score[i]{below[k]=score[i];
k++;}
returnk;}
2.请编写函数fun,它的功能是:
求出1到100之内能被7或者11整除,但不能同时北7和11整除的所有整数,并将他们放在a所指的数组中,通过n返回这些数的个数。
voidfun(int*a,int*n)
{inti,j=0;
for(i=2;i<1000;i++)
if((i%7==0||i%11==0))&i%77!
=0)
a[j++]=i;
*n=j;
}
3请编写一个函数voidfun(char*tt,intpp[]),统计在tt字符中"a"到"z"26各字母各自出现的次数,并依次放在pp所指的数组中。
voidfun(char*tt,intpp[])
{inti;
for(i=0;i<26;i++)
pp[i]=0;
while(*tt){
if(*tt>=’a’&&*tt<=’z’)
pp[*tt-97]++;
}
}
4.编写函数fun,功能是:
根据以下公式计算s,计算结果作为函数值返回;n通过形参传入。
s=1+1/(1+2)+1/(1+2+3)+.......+1/(1+2+3+4+......+n)
floatfun(intn)
{inti;
floats=1.0,t=1.0;
for(i=2;i<=n;i++)
{t=t+i;
s=s+1/t;}
returns;}
5.编写一个函数fun,它的功能是:
根据以下公式求P的值,结果由函数值带回。
m与n为两个正整数,且要求m>n。
p=m!
/n!
(m-n)!
floatfun(intm,intn)
{floatp,t=1.0;
inti;
for(i=1;i<=m;i++)
t=t*i;p=t;
for(t=1.0,i=1;i<=n;i++)
t=t*i;
p=p/t;
for(t=1.0,i=1;it=t*i;
p=p/t;
returnp;}
6.编写函数fun,它的功能是:
利用以下的简单迭代方法求方程cos(x)-x=0的一个实根。
迭代步骤如下:
(1)取x1初值为0.0;
(2)x0=x1,把x1的值赋各x0;
(3)x1=cos(x0),求出一个新的x1;
(4)若x0-x1的绝对值小于0.000001,则执行步骤(5),否则执行步骤
(2);
(5)所求x1就是方程cos(x)-x=0的一个实根,作为函数值返回。
程序将输出Root=0.739085。
folatfun()
{floatx1=0.0,x0;
do
{x0=x1;
x1=cos(x0);}
while(fabs(x0-x1)>=1e-6);
returnx1;
}
7.请编写一个函数voidfun(inttt[M][N],intpp[N]),tt指向一个M行N列的二维函数组,求出二维函数组每列中最小元素,并依次放入pp所指定一维数组中。
二维数组中的数已在主函数中赋予。
voidfun(inttt[M][N],intpp[N])
{inti,j,min;
for(j=0;j{min=tt[0][j];
for(i=0;i{if(tt[i][j]min=tt[i][j];}
pp[j]=min;}
}
8.请编写一个函数fun(char*s),该函数的功能使把字符串中的内容逆置。
voidfun(char*s)
{charch;inti,m,n;i=0;
m=n=strlen(s)-1;
while(i<(n+1)/2)
{ch=s[i];s[i]=s[m];s[m]=ch;i++;m--;}
}
9.编写程序,实现矩阵(3行3列)的转置(即行列互换)。
voidfun(intarray[3][3])
{inti,j,temp;
for(i=0;i<3;i++)
for(j=0;j<3;j++){temp=array[i][j];array[i][j]=array[j][i];array[j][i]=temp;}
}
10.编写函数fun,该函数的功能是:
从字符中删除指定的字符,同一字母的大、小写按不同字符处理。
voidfun(chars[],intc)
{inti=0;char*p;
p=s;
while(*p)
{if(*p!
=c)
{s[i]=*p;i++;}
p++;
}
s[i]='\0';
}
11.N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。
请编写函数fun,它的功能是:
找出学生的最高分,由函数值返回。
doublefun(STREC*h)
{doublemax;
STREC*q=h;
max=h->s;
do
{if(q->s>max)
max=q->s;
q=q->next;}
while(q!
=0);
returnmax;}
12.请编写函数fun,该函数的功能是:
判断字符串是否为回文?
若是则函数返回1,主函数中输出YES,否则返回0,主函数中输出NO。
回文是指顺读和倒读都是一样的字符串。
intfun(char*str)
{inti,n=0,fg=1;
char*p=str;
while(*p)
{j++;p++;}
j--;
for(i=0;i<=j;i++)
{if(str[i]!
=str[j]){fg=0;break;}
returnfg;
}
13.请编写一个函数fun,它的功能是:
将一个字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。
longfun(char*p)
{longs=0,t;
inti=0,n=strlen(p);
if(p[0]=='-')
i++;
for(;i<=n-1;++)
{if(p[i]>=’0’&&p[i]<=’9’)
s=s*10+p[i]-'0';
}
if(p[0]=='-')
return-s;
else
returns;}
14.请编写一个函数fun,它的功能是:
输出一个字符串的长度。
(不得调用C语言提供的求字符串长度的函数)。
Intfun(char*s)
{inti=0;
While(*s++)i++;
ReturnI;
}
15.请编写一个函数fun,它的功能是:
将ss所指字符串中所有下标为奇数位置上的字母转换为大写(若该位置上不是字母,则不转换)。
voidfun(char*ss)
{inti,n;
n=strlen(ss);
for(i=1;iif(ss[i]>='a'&&ss[i]<='z')
ss[i]=ss[i]-32;
}
16.请编写函数fun,其功能是:
将s所指字符串中除了下标为偶数、同时ASCII值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的一个数组中。
voidfun(char*s,chart[])
{inti,j,n;
n=strlen(s);
for(i=0;iif(i%2==0&s[i]%2==0)
{t[j]=s[j];
j++;}
t[j]='\0';
}
17..编写一个函数fun,它的功能是:
实现两个字符串的连接(不使用库函数strcat),即把p2所指的字符串连接到p1所指的字符串后。
voidfun(charp1[],charp2[])
{inti=0,n=0;char*p=p1,*q=p2;
while(*p)
{p++;n++;}
i=n;
while(*p)
{p1[i]=*q;
q++;
i++;}
p1[i]='\0';}
18.请编写函数fun,该函数的功能是:
统计字符串中单词的个数,作为函数值返回。
一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格格开,一行的开始没有空格。
intfun(char*s)
{inti,n=0;
for(i=1;i{if(s[i]='a'&s[i]<='z'&s[i-1]==' ')
n++;}
returnn+1;}
19.请编写一个函数fun,它的功能是:
计算并输出给定整数n的所有因子(不包括1与自身)之和。
规定n的值不大于1000。
.intfun(intn)
{ints=0,i;
for(i=2;i<=n-1;i++)
if(n%i==0)
s+=i;
returns;}
20.请编写一个函数fun,它的功能时:
求Fibonacci数列中大于t的最小的一个数,结果由函数返回。
其中Fibonacci数列F(n)的定义为:
F(0)=0,F
(1)=1,F(n)=F(n-1)+F(n-2)
intfun(intt)
{inta=1,b=1,c=0,i;
for(i=4;;i++)
{if(c{c=a+b;
a=b;
b=c;}
else
break;}
returnc;}
21.删除子字符串
voidDelete_SubString(char*source,intstart,intnum)
{
inti,l;
l=strlen(source);
if(num>l-start+1||num==-1)num=l-start+1;
if(start<1||start>l)return;
for(i=start;isource[i-1]=source[i+num-1];
}
22.一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
#include"math.h"
main()
{
longinti,x,y,z;
for(i=1;i<100000;i++)
{x=sqrt(i+100); /*x为加上100后开方后的结果*/
y=sqrt(i+268); /*y为再加上168后开方后的结果*/
if(x*x==i+100&&y*y==i+268)/*如果一个数的平方根的平方等于该数,这说明此数是完全平方数*/
printf("\n%ld\n",i);
}
}
23.打印出杨辉三角形(要求打印出10行如下图)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
main()
{inti,j;
inta[10][10];
printf("\n");
for(i=0;i<10;i++)
{a[i][0]=1;
a[i][i]=1;}
for(i=2;i<10;i++)
for(j=1;j
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i<10;i++)
{for(j=0;j<=i;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
24.判断101-200之间有多少个素数,并输出所有素数。
#include"math.h"
main()
{
intm,i,k,h=0,leap=1;
printf("\n");
for(m=101;m<=200;m++)
{k=sqrt(m+1);
for(i=2;i<=k;i++)
if(m%i==0)
{leap=0;break;}
if(leap){printf("%-4d",m);h++;
if(h%10==0)
printf("\n");
}
leap=1;
}
printf("\nThetotalis%d",h);
}
25.打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
例如:
153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
main()
{
inti,j,k,n;
printf("'waterflower'numberis:
");
for(n=100;n<1000;n++)
{
i=n/100;/*分解出百位*/
j=n/10%10;/*分解出十位*/
k=n%10;/*分解出个位*/
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
{
printf("%-5d",n);
}
}
printf("\n");
}
26.将一个正整数分解质因数。
例如:
输入90,打印出90=2*3*3*5。
程序分析:
对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
2.程序源代码:
/*zhengintisdividedyinshu*/
main()
{
intn,i;
printf("\npleaseinputanumber:
\n");
scanf("%d",&n);
printf("%d=",n);
for(i=2;i<=n;i++)
{
while(n!
=i)
{
if(n%i==0)
{printf("%d*",i);
n=n/i;
}
else
break;
}
}
printf("%d",n);}
27.一个数如果恰好等于它的因子之和,这个数就称为“完数”。
例如6=1+2+3.编程
找出1000以内的所有完数。
main()
{
staticintk[10];
inti,j,n,s;
for(j=2;j<1000;j++)
{
n=-1;
s=j;
for(i=1;i {
if((j%i)==0)
{ n++;
s=s-i;
k[n]=i;
}
}
if(s==0)
{
printf("%disawanshu",j);
for(i=0;i printf("%d,",k[i]);
printf("%d\n",k[n]);
}
}
}
28.一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在
第10次落地时,共经过多少米?
第10次反弹多高?
main()
{
floatsn=100.0,hn=sn/2;
intn;
for(n=2;n<=10;n++)
{
sn=sn+2*hn;/*第n次落地时共经过的米数*/
hn=hn/2;/*第n次反跳高度*/
}
printf("thetotalofroadis%f\n",sn);
printf("thetenthis%fmeter\n",hn);
}
29.猴子吃桃问题:
猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下 的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。
求第一天共摘了多少。
main()
{
intday,x1,x2;
day=9;
x2=1;
while(day>0)
{x1=(x2+1)*2;/*第一天的桃子数是第2天桃子数加1后的2倍*/
x2=x1;
day--;
}
printf("thetotalis%d\n",x1);
}
打印菱形
#include"stdio.h"
voidmain()
{
inti,j,n;
printf("Enternumberrows:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n-i;j++)
putchar('');
for(j=1;j<=2*i-1;j++)
putchar('*');
putchar('\n');
}
for(i=n-1;i>=1;i--)
{
for(j=1;j<=n-i;j++)
putchar('');
for(j=1;j<=2*i-1;j++)
putchar('*');
putchar('\n');
}
}
打印星号
#include"stdio.h"
voidmain()
{inti,j,n;
printf("Entertherows:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n-i;j++)
putchar('');
for(j=1;j<=2*i-1;j++)
putchar('*');
putchar('\n');
}
}
判断素数
#include"stdio.h"
voidmain()
{
intn,i;
printf("请输入一个数N:
");
scanf("%d",&n);
i=2;
while((i<=n)&&(n%i!
=0))
i++;
if(i>=n)
printf("Yes,\n");
else
printf("No,\n");
}
随机10个数输出最大值
#include"stdio.h"
#include"stdlib.h"
voidmain()
{
inti,a[10],max;
for(i=0;i<10;i++)
a[i]=rand()%200;
printf("Thenumarrayis:
\n");
for(i=0;i<10;i++)
printf("%d\t",a[i]);
max=a[0];
for(i=1;i<10;i++)
{
if(a[i]>max)
max=a[i];
}
printf("The10numberis:
%d.\n",max);
}
星号
#include"stdio.h"
#include"math.h"
voidmain()
{
introw,col,rowsCount;
printf("Entertherows:
");
scanf("%d",&rowsCount);
for(row=1;row<=rowsCount/2+1;row++)
{
for(col=1;col<=rowsCount-row;col++)
putchar('');
for(col=1;col<=2*row-1;col++)
putchar('*');
putchar('\n');
}
for(row=rowsCount/2;row>=1;row--)
{
for(col=1;col<=rowsCount-row;col++)
putchar('');
for(col=1;col<=2*row-1;col++)
putchar('*');
putchar('\n');
}
}
转置
#include"stdio.h"
#include"stdlib.h"
voidmain()
{
inta[10][10],i,j,t,m,n;
printf("Entertherowsandcols:
");
scanf("%d",&m);
n=m;
//生成
for(i=0;ifor(j=0;ja[i][j]=rand()%200;
//输出原矩阵
printf("Theyuanjuzhenis:
\n");
for(i=0;i{
for(j=0;jprintf("%d\t",a[i][j]);
printf("\n");
}
//转置
for(i=0;ifor(j=0;j
{
t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
//输出转置后的矩阵
printf("Thezhuangzhihoujuzhenis:
\n");
for(i=0;i{
for(j=0;jprintf("%d\t",a[i][j]);
printf("\n");
}
}
字母
#include"stdio.h"
voidmain()
{
inti,j,n;
printf("Enternumberrows:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n-i;j++)
putchar('');
for(j=1;j<=2*i-1;j++)
putchar(64+i);
putchar('\n');
}
}