C程序设计.docx
《C程序设计.docx》由会员分享,可在线阅读,更多相关《C程序设计.docx(60页珍藏版)》请在冰豆网上搜索。
C程序设计
1.将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。
例如,若输入字符串"-1234",则函数把它转换为整数值-1234。
longfun(char*p)
{
/*以下代码仅供参考*/
inti,len,t;/*len为串长,t为正负标识*/
longx=0;
len=strlen(p);
if(p[0]=='-')
{t=-1;len--;p++;}
elset=1;
/*以下完成数字字符串转换为一个数字*/
while(*p)
x=x*10-48+(*p++);
returnx*t;
}
2.将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。
例如,二维数组中的数据为:
WWWW
SSSS
HHHH
则字符串中的内容应是:
WSHWSHWSH。
voidfun(chars[][N],char*b)
{
inti,j,n=0;
for(i=0;i{
for(j=0;j{
b[n]=s[j][i];
n=i*M+j+1;
}
}
b[n]='\0';
}
3.统计一行字符串中单词的个数,作为函数值返回。
一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。
intfun(char*s)
{
intk=1;
while(*s)
{
if(*s=='')k++;
s++;
}
returnk;
}
4.统计各年龄段的人数。
N个年龄通过调用随机函数获得,并放在主函数的age数组中;要求函数把0至9岁年龄段的人数放在d[0]中,把10至19岁年龄段的人数放在d[1]中,把20至29岁年龄段的人数放在d[2]中,其余依此类推,把100岁(含100)以上年龄的人数都放在d[10]中。
结果在主函数中输出。
voidfun(int*a,int*b)
{
inti,j;
for(i=0;ib[i]=0;
for(i=0;i{
j=a[i]/10;
if(j>10)
b[M-1]++;
elseb[j]++;
}
}
5.删去一维数组中所有相同的数,使之只剩一个。
数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
例如,一维数组中的数据是:
2223445666677899101010。
删除后,数组中的内容应该是:
2345678910。
intfun(inta[],intn)
{
inti,j=1,k=a[0];
for(i=1;iif(k!
=a[i])
{
a[j++]=a[i];
k=a[i];
}
a[j]=0;
returnj;
}
6.移动字符串中的内容,移动的规则如下:
把第1到第m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。
例如,字符串中原有的内容为:
ABCDEFGHIJK,m的值为3,则移动后,字符串中的内容应该是:
DEFGHIJKABC。
voidfun(char*w,intm)/*可调用fun1函数左移字符*/
{
inti;
for(i=0;ifun1(w);
}
7.请编写一个函数unsignedfun(unsignedw),w是一个大于10的无符号整数,若w是n(n≥2)位的整数,函数求出w的低n-1位的数作为函数值返回。
例如:
w值为5923,则函数返回923;w值为923则函数返回23。
unsignedfun(unsignedw)
{
if(w>10000)
w%=10000;
elseif(w>1000)
w%=1000;
elseif(w>100)
w%=100;
elseif(w>10)
w%=10;
returnw;
}
8.程序定义了N×N的二维数组,并在主函数中自动赋值。
请编写函数fun(inta[][N],intn),函数的功能是:
使数组左下三角元素中的值乘以n。
例如:
若n的值为3,a数组中的值为;
|197|
|238|
|456|
则返回主程序后a数组中的值应为;
|397|
|698|
|121518|
intfun(inta[][N],intn)
{
inti,j;
for(i=0;ifor(j=0;j<=i;j++)
a[i][j]*=n;
}
9.移动一维数组中的内容;若数组中有n个整数,要求把下标从0到p(含p,p小于等于n-1)的数组元素平移到数组的最后。
例如,一维数组中的原始内容为:
1,2,3,4,5,6,7,8,9,10;p的值为3。
移动后,一维数组中的内容应为:
5,6,7,8,9,10,1,2,3,4。
voidfun(int*w,intp,intn)
{
inti,j=0,b[N];
for(i=p+1;ib[j++]=w[i];
for(i=0;i<=p;i++)
b[j++]=w[i];
for(i=0;iw[i]=b[i];
}
10.请编写一个函数,函数的功能是删除字符串中的所有空格。
例如,主函数中输入"asdafaaz67",则输出为"asdafaaz67"。
intfun(char*str)
{
char*p=str;
inti=0;
while(*p)
{
if(*p!
='')
str[i++]=*p;
p++;
}
str[i]=0;
}
11.将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串。
函数fun中给出的语句仅供参考。
例如,字符串数组中的M个字符串为
AAAABBBBBBBCC
则合并后的字符串的内容应是:
AAAABBBBBBBCC。
提示:
strcat(a,b)的功能是将字符串b复制到字符串a的串尾上,成为一个新串。
voidfun(chara[M][N],char*b)
{
/*以下代码仅供参考*/
inti;*b=0;
for(i=0;istrcat(b,a[i]);
}
12.将M行N列的二维数组中的数据,按列的顺序依次放到一维数组中。
函数fun中给出的语句仅供参考。
例如,二维数组中的数据为:
33333333
44444444
55555555
则一维数组中的内容应是:
334455334455334455334455。
voidfun(int(*s)[10],int*b,int*n,intmm,intnn)
{
/*以下代码仅供参考*/
inti,j,np=0;/*np用作b数组下标*/
for(i=0;ifor(j=0;j{
b[np]=s[j][i];
np=i*mm+j+1;
}
*n=np;
}
13.将M行N列的二维数组中的数据,按行的顺序
依次放到一维数组中,一维数组中数据的个数存放在形参n所指的存储单元中。
例如,二维数组中的数据为:
33333333
44444444
55555555
则一维数组中的内容应是:
333333334444444455555555。
voidfun(int(*s)[10],int*b,int*n,intmm,intnn)
{
inti,j,k;
for(i=0;ifor(j=0;j{
k=i*nn+j;
b[k]=s[i][j];
}
*n=mm*nn;
}
14.判断字符串是否为回文?
若是,函数返回1,主函数中输出:
YES,否则返回0,主函数中输出NO。
回文是指顺读和倒读都一样的字符串。
例如,字符串LEVEL是回文,而字符串123312就不是回文。
intfun(char*str)
{
inti,j=strlen(str);
for(i=0;iif(str[i]!
=str[j-i-1])
return0;
return1;
}
15.N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头
节点。
请编写函数fun,它的功能是:
找出学生的最高分,由函数值返回。
doublefun(STREC*h)
{
doublemax=h->s;
STREC*p;
p=h->next;
while(p)
{
if(p->s>max)
max=p->s;
p=p->next;
}
returnmax;
}
16.对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按ASCII码降序排列。
例如,原来的字符串为CEAedca,排序后输出为CedcEAa。
intfun(char*s,intnum)
{
charch;
inti,j;
for(i=1;i<6;i++)
for(j=i+1;j<6;j++)
{
if(*(s+i)<*(s+j))
{
ch=*(s+j);
*(s+j)=*(s+i);
*(s+i)=ch;
}
}
}
17.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:
把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。
例如,输入的分数是6069,则应当把分数在60到69的学生数据进行输出,包含60分和69分的学生数据。
主函数中将把60放在low中,把69放在heigh中。
intfun(STREC*a,STREC*b,intl,inth)
{
inti,j=0;
for(i=0;iif(a[i].s>=l&&a[i].s<=h)
b[j++]=a[i];
returnj;
}
18.将s所指字符串中ASCII值为奇数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。
例如,若s所指字符串中的内容为:
"ABCDEFG12345",其中字符A的ASCII码值为奇数、…、字符1的ASCII码值也为奇数、…都应当删除,其它依此类推。
最后t所指的数组中的内容应是:
"BDF24"。
voidfun(char*s,chart[])
{
inti,j=0;
for(i=0;iif(s[i]%2==0)
t[j++]=s[i];
t[j]=0;
}
19.将a、b中的两个两位正整数合并形成一个新的整数放在c中。
合并的方式是:
将a中的十位和个位数依次放在变量c的百位和个位上,b中的十位和个位数依次放在变量c的十位和千位上。
例如,当a=45,b=12。
调用该函数后,c=2415。
voidfun(inta,intb,long*c)
{
*c=(b%10)*1000+(a/10)*100+(b/10)*10+a%10;
}
20.函数的功能是求出二维数组周边元素之和,作为函数值返回。
二维数组中的值在主函数中赋予。
例如:
二维数组中的值为
13579
29994
69998
13570
则函数值为61。
intfun(inta[M][N])
{
inttot=0,i;
for(i=0;i{
tot+=a[0][i];
tot+=a[M-1][i];
}
for(i=1;i{
tot+=a[i][0];
tot+=a[i][N-1];
}
returntot;
}
21.程序定义了N×N的二维数组,并在主函数中赋值。
请编写函数fun,函数的功能是:
求出数组周边元素的平均值并作为函数值返给主函数中的s。
例如:
a数组中的值为
|01279|
|19745|
a=|23831|
|45682|
|59141|
则返回主程序后s的值应为:
3.375。
doublefun(intw[][N])
{
inti,n=0;
doublesum=0;
for(i=0;i{
sum+=w[0][i]+w[N-1][i];
n+=2;
}
for(i=1;i{
sum+=w[i][0]+w[i][N-1];
n+=2;
}
returnsum/n;
}
22.将两个两位数的正整数a、b合并形成一个整数放在c中。
合并的方式是:
将a数的十位和个位数依次放在c数的个位和百位上,b数的十位和个位数依次放在c数的十位和千位上。
例如,当a=45,b=12时,调用该函数后,c=2514。
voidfun(inta,intb,long*c)
{
*c=(b%10)*1000+(a%10)*100+(b/10)*10+(a/10);
}
23.函数的功能是求出小于或等于lim的所有素数并放在aa数组中,函数返回所求出的素数的个数。
函数fun中给出的语句仅供参考。
intfun(intlim,intaa[MAX])
{
/*以下代码仅供参考*/
inti,j,k=0;
/*其中变量k用于统计素数个数*/
for(i=2;i<=lim;i++)
{
/*以下完成判断aa数组中小于或等于lim的素数并统计个数*/
for(j=2;j<=(i/2);j++)
if(i%j==0)
break;
if(j>(i/2))
aa[k++]=i;
}
returnk;
}
24.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:
把分数最低的学生数据放在b所指的数组中,注意:
分数最低的学生可能不止一个,函数返回分数最低的学生的人数
intfun(STREC*a,STREC*b)
{
inti,j=0,min=a[0].s;
for(i=0;i{
if(min>a[i].s)
{
j=0;b[j++]=a[i];min=a[i].s;
}
elseif(min==a[i].s)
b[j++]=a[i];
}
returnj;
}
25.将s所指字符串中ASCII值为偶数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。
例如,若s所指字符串中的内容为:
"ABCDEFG12345",其中字符B的ASCII码值为偶数、…、字符2的ASCII码值为偶数、…都应当删除,其它依此类推。
最后t所指的数组中的内容应是:
"ACEG135"。
voidfun(char*s,chart[])
{
inti,j=0;
for(i=0;iif(s[i]%2)
t[j++]=s[i];
t[j]=0;
}
26.求出1到m之间(含m)能被7或11整除的所有整数放在数组a中,通过n返回这些数的个数。
例如,若传送给m的值为50,则程序输出:
711142122283335424449
voidfun(intm,int*a,int*n)
{
inti;
*n=0;
for(i=7;i<=m;i++)
if((i%7==0)||(i%11==0))
a[(*n)++]=i;
}
27.根据以下公式求π的值(要求满足精度0.0005,即某项小于0.0005时停止迭代):
π11×21×2×31×2×3×41×2×…×n
─=1+─+─—+────+──────+……+────────
233×53×5×73×5×7×93×5×…×(2n+1)
程序运行后,如果输入精度0.0005,则程序输出为3.14…。
doublefun(doubleeps)
{
doubles=1,t=1./3;
intn=1;
while(t>=eps)
{
s+=t;n++;t=t*n/(2.0*n+1);
}
return(s*2.0);
}
28.求出1到1000之间能被7或11整除、但不能同时被7和11整除的所有整数并将它们放在a所指的数组中,通过n返回这些数的个数。
voidfun(int*a,int*n)
{
inti;
*n=0;
for(i=7;i<1000;i++)
if(((i%7)==0||(i%11)==0)&&(i%77)!
=0)
a[(*n)++]=i;
}
29.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:
把高于等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。
doublefun(STREC*a,STREC*b,int*n)
{
doublet=0;
inti;
*n=0;
for(i=0;it=t+a[i].s;
t=t/N;
for(i=0;iif(a[i].s>t)
b[(*n)++]=a[i];
returnt;
}
30.假定输入的字符串中只包含字母和*号。
请编写函数fun,它的功能是:
将字符串中的前导*号全部移到字符串的尾部。
函数fun中给出的语句仅供参考。
例如,字符串中的内容为:
*******A*BC*DEF*G****,移动后,字符串中的内容应当是:
A*BC*DEF*G***********。
在编写函数时,不得使用C语言提供的字符串函数。
voidfun(char*a)
{
/*以下代码仅供参考*/
char*p,*q;
intn=0;
p=a;
while(*p=='*')/*统计串头'*'个数n*/
{
n++;p++;
}
q=a;
/*向前复制字符串,请填写相应的语句完成其功能*/
while(*p)
{
*q=*p;
p++;q++;
}
for(;n>0;n--)/*在串尾补n个'*'*/
*q++='*';
*q='\0';
}
31.请编写一个函数voidfun(chara[],charb[],intn),其功能是:
删除一个字符串中指定下标的字符。
其中,a指向原字符串,删除指定字符后的字符串存放在b所指的数组中,n中存放指定的下标。
例如,输入一个字符串:
World,然后输入3,则调用该函数后的结果为:
Word。
voidfun(chara[],charb[],intn)
{
strncpy(b,a,n);
b[n]=0;
strcat(b,a+n+1);
}
32.假定输入的字符串中只包含字母和*号。
请编写函数fun,它的功能是:
使字符串的前导*号不得多于n个;若多于n个,则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除。
函数fun中给出的语句仅供参考。
例如,字符串中的内容为:
*******A*BC*DEF*G****,若n的值为4,删除后,字符串中的内容应当是:
****A*BC*DEF*G****;若n的值为8,则字符串中的内容仍为:
*******A*BC*DEF*G****。
n的值在主函数中输入。
在编写函数时,不得使用C语言提供的字符串函数。
voidfun(