C语言习题集.docx
《C语言习题集.docx》由会员分享,可在线阅读,更多相关《C语言习题集.docx(12页珍藏版)》请在冰点文库上搜索。
C语言习题集
1.编写函数longfun(longx),它的功能是:
将长整型参数x中每一位上为偶数的数依次取出,构成一个新数返回。
高位仍在高位,低位仍在低位。
例如:
下面程序运行时输入:
124578902,程序输出:
24802.
longfun(longx)
{
}
voidmain()
{longa,b;
printf("Enteranumber:
");
scanf("%ld",&a);
b=fun(a);
printf("b=%ld\n",b);
}
2.编写函数voidfun(intk,int*p),功能是:
将参数k(2≤k≤32767)所有的不相同质因子升序写入p所指的一维数组中,以-1作为所有质因子的结束标志。
例如:
下面程序运行时若输入200,输出:
25;若输入27720,输出:
235711;若输入101,输出101。
voidfun(intk,int*p)
{
}
voidmain()
{intx,a[17]={0},i;
do{printf("Enteranumber(2-32767):
");
scanf("%d",&x);
}while(x<2);
fun(x,a);
for(i=0;a[i]!
=-1;i++)
printf("%d",a[i]);
printf("\n");
}
3.编写函数voidfun(int*x,intn),功能是:
求出长度为n的数组x中的最大数与次最大数,并把最大数和a[0]对调,次最大数与a[1]对调,其余的数保持不变。
下面程序运行时若输入:
2461397058,则输出:
9861327054。
#defineN10
voidfun(int*x,intn)
{
}
voidmain()
{inta[N],i;
for(i=0;i scanf("%d",a+i);
fun(a,N);
for(i=0;i printf("%d",a[i]);
printf("\n");
}
4.数组x中保存有n个正整数,编写函数intfun(int*x,intn),对数组x进行如下操作:
当x[i]不是最后一个元素时,用x[i]+x[i+1]取代x[i],即x[0]被x[0]+x[1]取代,x[1]被x[1]+x[2]代替……当x[i]是数组最后一个元素时,x[i]被x[i]+x[0]代替,即x[n-1]=x[n-1]+x[0],然后对数组进行升序排序,并统计奇数个数返回。
例如,下面程序若输入:
3527911219输出:
7891216203032n=2
intfun(int*x,intn)
{
}
voidmain()
{inta[8],i,n;
for(i=0;i<8;i++)
scanf("%d",&a[i]);
n=fun(a,8);
for(i=0;i<8;i++)
printf("%d",a[i]);
printf("n=%d\n",n);
}
5.编写函数intfun(intx,longinty),功能:
计算满足表达式x0+x1+x2+...+xn例如,当x=2,y=1000时,程序输出8。
intfun(intx,longinty)
{
}
voidmain()
{intx;longy;
scanf("%d%ld",&x,&y);
printf("n=%d\n",fun(x,y));
}
6.编写函数intfun(char(*ss)[N],intm,char*s),功能是:
形参ss指向一个m行N列的二维字符数组,每行存放一个字符串。
求出最长的字符串,复制到s所指的字符数组中,然后返回此最长字符串的长度。
#defineN30
intfun(char(*ss)[N],intm,char*s)
{
}
voidmain()
{chara[8][N],b[N];
inti,len;
for(i=0;i<8;i++)
gets(a[i]);
len=fun(a,8,b);
printf("len=%d,str=%s\n",len,b);
}
7.编写函数intcountw(char*str),统计字符串str中单词的个数。
单词之间以空格,逗号,句号作分隔,数字也看做单词。
单词之间可能不止一个分隔符。
如输入:
It's 10:
10 o'clock ,Iamlate.屏幕上输出"Thereare6words."
intcountw(char*str)
{
}
voidmain()
{chars[200];
gets(s);
printf("Thereare%dwords.\n",countw(s));
}
8.编写函数voidfun(char*str),功能:
字符串str中单词以空格作分隔,如果单词之间不止一个空格,则删除多余的空格,使单词之间只保留一个空格。
字符串开始的空格也只保留一个。
例如,程序运行时若输入:
It's 10:
10 o'clock , I am late.
输出:
It's10:
10o'clock,Iamlate.
voidfun(char*str)
{
}
voidmain()
{chars[100];
puts("Enterastring:
");
gets(s);
fun(s);
puts(s);
}
9.函数voidfun(intx,intk,int*p)的功能是:
求出比x大的最初k(k<1000)个素数,放入p所指数组中。
例如:
程序运行时输入:
1010,输出:
11131719232931374143
#include
voidfun(intx,intk,int*p)
{
}
voidmain()
{inta,b,n[1000],i;
scanf("%d%d",&a,&b);
fun(a,b,n);
for(i=0;i
printf("%d",n[i]);
puts("");
}
10.编写函数intfun(inta,intb),在[a,b]范围内统计满足下面条件的数的个数。
条件:
该数是素数,且该数逆序后形成的数也是素数。
例如,在[100,150]范围内101107113131149满足条件,则下面程序运行时输入100150,输出:
num=5。
#include
intfun(inta,intb)
{
}
voidmain()
{intnum,a,b;
scanf("%d%d",&a,&b);
num=fun(a,b);
printf("num=%d\n",num);
}
11.编写函数voidfun(char*a,char*b),功能:
将a所指字符串中的所有字符复制到b中,要求每复制三个字符之后插入一个#。
例如,下面程序运行时,若输入:
ABCDEFGHIJK 输出:
ABC#DEF#GHI#JK
voidfun(char*a,char*b)
{
}
voidmain()
{charx[80],y[120];
gets(x);
fun(x,y);
puts(y);
}
12.编写函数intfun(intk),功能:
从3个红球,5个白球,6个黑球中任意取出k(2≤k≤13)个球作为一组进行组合。
在每组中,可以没有黑球,但必须要有红球和白球。
不同组合的数目作为函数值返回。
例如,若k为8时,正确的组合数是15;若k为2时,正确的组合数是1;或k为3时,正确的组合数是3。
intfun(intk)
{
}
voidmain()
{intx,n;
scanf("%d",&x);
n=fun(x);
printf("n=%d\n",n);
}
13.编写函数voidfun(char*str),功能:
对形参str所指字符串中的字符按ASCII码升序排序。
例如,下面程序运行时输入:
TheCProgrammingLanguage<回车>
输出:
CLPTaaaeegggghimmnnorru
voidfun(char*str)
{
}
voidmain()
{chars[100];
gets(s);
fun(s);
puts(s);
}
14.请编写函数voidfun(int*a,intn,inty),它的功能是:
把y值插入到有n个数的a数组中,a数组中的数已按由大到小的次序排好,y的值从键盘读入。
插入后,数组中的数仍然有序。
对照下面三种情况运行程序:
1)插在最前 2)插在最后 3)插在中间
若输入数11,输出201816141211108642
输入数1, 输出20181614121086421
输入数33,输出332018161412108642
#include
voidfun(int*a,intn,inty)
{
}
voidmain()
{inti,a[11]={20,18,16,14,12,10,8,6,4,2},x;
voidfun(int*,intn,inty);
scanf("%d",&x);
fun(a,10,x);
for(i=0;i<11;i++)
printf("%d",*(a+i));
}
15.编写函数intfun(char*str,charch),从字符串str中删除指定字符ch。
如果字符串str中不包含字符ch,则函数返回值为-1,如果包含字符ch,则删除所有的ch字符后,将删除字符的个数返回。
例如:
若输入的字符串为:
abaaAabcaabbabca,字符ch为:
a,则程序输出:
bAbcbbbc,n=8
若输入的字符串为:
abaaAabcaabbabca,字符ch为:
d,则程序输出:
Nofindd
#include
#include
intfun(char*str,charch)
{
}
voidmain()
{chara[80],b;
intn;
printf("Pleaseinputastring:
");
gets(a);
printf("Pleaseinputadeletecharacter:
");
b=getchar();
n=fun(a,b);
if(n==-1)
printf("Nofind%c\n",b);
elseprintf("%s,n=%d\n",a,n);
}
16.编写函数intfun(char*str),功能是:
统计字符串str中不同字符的个数并做为函数值返回。
例如,下面程序运行时若输入:
Oneworld,Onedream!
输出:
n=13
intfun(char*str)
{
}
void main()
{chars[80];
intn;
gets(s);
n=fun(s);
printf("n=%d\n",n);
}
17.编写函数intfun(intm,intn,int*p),要求将范围[m,n]之间所有的fibonacci数写入p所指的一维数组中,fibonacci数的个数通过函数返回值带回。
例如,[0,30]之间的fibonacci数有7个,它们是:
123581321;[1000,32767]之间有7个,它们是:
159725846765109461771128657。
intfun(intm,intn,int*p)
{
}
voidmain()
{inta,b,n,c[22],i;
scanf("%d%d",&a,&b);
n=fun(a,b,c);
for(i=0;i printf("%6d",c[i]);
printf("\nn=%d\n",n);
}
18.编写函数char*fun(char*s1,char*s2,intn),将字符串s1中后面的n个字符复制到s2所指数组中,若s1不足n个字符,则用*在前端补齐至n个字符,写入s2中。
函数返回字符串s2的指针。
例如,下面程序运行时,
若输入:
“abcd1234”和6,则输出“cd1234”
若输入:
“abcd1234”和10,则输出“**abcd1234”
char*fun(char*s1,char*s2,intn)
{
}
voidmain()
{charc1[80],c2[80];
gets(c1);
fun(c1,c2,6);
puts(c2);
puts(fun(c1,c2,30));
}
19.编写函数char*fun(char*str),对英文字符串str进行加密处理,加密规则是:
A->C,B->D,……,X->Z,Y->A,Z->B,同理,小写字母也按上面规则,a->c,b->d,……,x->z,y->a,z->b,其余字符保持不变。
函数返回字符串str的指针。
例如,
如输入:
IwenttoZooyesterday!
输出:
KygpvvqBqqaguvgtfca!
char*fun(char*str)
{
}
voidmain()
{chars[80];
gets(s);
puts(fun(s));
}
20.编写函数voidfun(char*s),功能是:
把形参s所指字符串中下标为奇数的字符右移到下一个奇数位置,最右边被移出字符串的字符绕回放到第一个奇数位置,下标为偶数的字符不动。
例如,下面程序运行时,
若输入:
abc 输出:
abc
若输入:
abcdefg 输出:
afcbedg
若输入:
abcdefgh 输出:
ahcbedgf
voidfun(char*s)
{
}
voidmain()
{chara[80];
gets(a);
fun(a);
puts(a);}