C语言编程练习60题.docx
《C语言编程练习60题.docx》由会员分享,可在线阅读,更多相关《C语言编程练习60题.docx(41页珍藏版)》请在冰豆网上搜索。
![C语言编程练习60题.docx](https://file1.bdocx.com/fileroot1/2023-2/22/cab9f99a-bcdb-4fe8-a6f9-46877d0c52fd/cab9f99a-bcdb-4fe8-a6f9-46877d0c52fd1.gif)
C语言编程练习60题
综合编程题
1.请编写函数fun,对长度为7个字符的字符串,除首、尾字符外,将其余5个字符按降序排列。
例如,原来的字符串为CEAedca,排序后输出为CedcEAa。
intfun(char*s,intnum){}
2.输入三个字符串,按由小到大顺序输出。
编写交换函数fun,用交换指针的方式实现交换。
charfun(char*p1,char*p2){}
3.编写函数fun,函数的功能是:
计算并输出给定整数n的所有因子之和(不包括1与自身)。
规定n的值不大于1000。
例如:
n的值为855时,应输出704。
intfun(intn){}
4.编写函数fun求1000以内所有7的倍数之和。
intfun(intm){}
5.用函数求一个N阶方阵右下三角元素的和(包括副对角线上的元素)。
#defineN3
intsum(inta[][N]){}
6.调用函数fun判断一个三位数是否"水仙花数"。
在main函数中从键盘输入一个三位数,并输出判断结果。
请编写fun函数。
所谓"水仙花数"是指一3位数,其各位数字立方和等于该数本身。
例如,153是一个水仙花数,因为153=1+125+27。
intfun(intn){}
7.编写函数fun,函数的功能是:
求一组数中大于平均值的数的个数。
例如:
给定的一组数为1,3,6,9,4,23,35,67,12,88时,函数值为3。
intfun(inta[],intn){}
8.编写函数fun,函数的功能是:
求给定正整数m以内的素数之和。
例如:
当m=20时,函数值为77。
intfun(intm){}
9.求一批数中最大值和最小值的差。
intmax_min(inta[],intn){}
10.请编写一个函数fun,函数的功能是:
求出N×M整型数组的最大元素及其所在的行坐标及列坐标(如果最大元素不唯一,选择位置在最前面的一个)。
例如:
输入的数组为:
123
4156
12189
10112
求出的最大数为18,行坐标为2,列坐标为1。
#defineN4#defineM3
intfun(intarray[N][M]){}
11.编写函数判断一个整数m的各位数字之和能否被7整除,可以被7整除则返回1,否则返回0。
调用该函数找出100~200之间满足条件的所有数。
intsub(intm){}
12.产生20个[30,120]上的随机整数放入二维数组a[5][4]中,求每行元素的和。
voidrow_sum(inta[5][4],intb[5]){}
13.编写函数fun,函数的功能是:
求一分数序列2/1,3/2,5/3,8/5,13/8,21/13…的前n项之和。
每一分数的分母是前两项的分母之和;每一分数的分子是前两项的分子之和。
例如:
求前20项之和的值为32.660259。
floatfun(intn){}
14.编写函数fun其功能是在键盘上输入一个3行3列矩阵的各个元素的值(值为整数),然后输出主对角线元素的平方和,并在fun()函数中输出。
intfun(inta[3][3]){}
15.编写函数fun,函数的功能是:
求给定正整数m以内的素数之和。
例如:
当m=20时,函数值为77。
intfun(intm){}
16.从键盘上输入任意实数x,求出其所对应的函数值。
z=(x-4)的二次幂(x>4)
z=x的八次幂(x>-4)
z=z=4/(x*(x+1))(x>-10)
z=|x|+20(其他)
floaty(floatx){}
17.编写函数fun,函数的功能是:
求一个四位数的各位数字的立方和
intfun(intn){}
18.编写函数fun,函数的功能是:
求1到100之间的偶数之积。
doublefun(intm){}
19.计算并输出high以内最大的10个素数之和,high由主函数传给fun函数,若high的值为100,则函数的值为732。
20.将一个字符串中的前N个字符复制到一个字符数组中去,不许使用strcpy函数。
练习题:
1:
将字母转换成密码,转换规则是将当前字母变成其后的第四个字母,但W变成A、X变成B、Y变成C、Z变成D。
小写字母的转换规则同样。
#include
main()
{
charc;
/***********SPACE***********/
while((c=getchar())!
='\n')
{
/***********SPACE***********/
if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))c+=4;
/***********SPACE***********/
if((c>'Z'&&c<='Z'+4)||c>'z')c-=26;
printf("%c",c);
}
}
2:
将一个数组中的元素按逆序存放。
#defineN7
main()
{
staticinta[N]={12,9,16,5,7,2,1},k,s;
printf("\ntheoriganalarray:
\n");
for(k=0;kprintf("%4d",a[k]);
/***********SPACE***********/
for(k=0;k{
s=a[k];
/***********SPACE***********/
a[k]=a[N-k-1];
/***********SPACE***********/
a[N-k-1]=s;
}
printf("\nthechangedarray:
\n");
for(k=0;k/***********SPACE***********/
printf("%4d",a[k]);
}
3:
产生10个[30,90]区间上的随机整数,然后对其用选择法进行由小到大的排序。
#include"stdlib.h"
main()
{
/***********SPACE***********/
intt;
inti,j,k;
inta[10];
for(i=0;i<10;i++)
a[i]=random(61)+30;
for(i=0;i<9;i++)
{
/***********SPACE***********/
k=i;
for(j=i+1;j<10;j++)
/***********SPACE***********/
if(a[k]>a[j])k=j;
if(k!
=i)
{
t=a[k];
a[k]=a[i];
a[i]=t;
}
}
/***********SPACE***********/
for(i=0;i<10;i++)
printf("%5d",a[i]);
printf("\n");
}
4:
将一个字符串中的前N个字符复制到一个字符数组中去,不许使用strcpy函数。
main()
{
charstr1[80],str2[80];
inti,n;
/***********SPACE***********/
gets(str1);
scanf("%d",&n);
/***********SPACE***********/
for(i=0;i/***********SPACE***********/
str2[i]=str1[i];
/***********SPACE***********/
str2[n]='\0';
printf("%s\n",str2);
}
5:
数组名作为函数参数,求平均成绩。
floataver(floata[])/*定义求平均值函数,形参为一浮点型数组名*/
{
inti;
floatav,s=a[0];
for(i=1;i<5;i++)
/***********SPACE***********/
s+=a[i];
av=s/5;
/***********SPACE***********/
returnav;
}
voidmain()
{
floatsco[5],av;
inti;
printf("\ninput5scores:
\n");
for(i=0;i<5;i++)
/***********SPACE***********/
scanf("%f",&sco[i]);
/***********SPACE***********/
av=aver(sco);
printf("averagescoreis%5.2f\n",av);
getch();
}
6:
输入数组,最大的与最后一个元素交换,最小的与第一个元素交换,输出数组。
main()
{
intnumber[10];
input(number);
max_min(number);
output(number);
}
input(number)
intnumber[10];
{
inti;
/***********SPACE***********/
for(i=0;i<9;i++)
scanf("%d,",&number[i]);
scanf("%d",&number[9]);
}
max_min(array)
intarray[10];
{
int*max,*min,k,l;
int*p,*arr_end;
arr_end=array+10;
max=min=array;
for(p=array+1;pif(*p>*max)
max=p;
elseif(*p<*min)
/***********SPACE***********/
min=p;
k=*max;
l=*min;
*p=array[0];
array[0]=l;
/***********SPACE***********/
l=*p;
*p=array[9];
/***********SPACE***********/
array[9]=k;
k=*p;
return;
}
output(array)
intarray[10];
{
int*p;
for(p=array;pprintf("%d,",*p);
printf("%d\n",array[9]);
}
7:
输出Fibonacci数列的前15项,要求每行输出5项。
Fibonacci数列:
1,1,2,3,5,8,13...........
#include
main()
{
/***********SPACE***********/
intfib[14],i;
fib[0]=1;fib[1]=1;
for(i=2;i<15;i++)
/***********SPACE***********/
fib[i]=fib[i-2]+fib[i-1];
for(i=0;i<15;i++)
{
printf("%d\t",fib[i]);
/***********SPACE***********/
if(i%5==4)printf("\n");
}
}
8:
将一个字符串中下标为m的字符开始的全部字符复制成为另一个字符串。
#include
voidstrcopy(char*str1,char*str2,intm)
{
char*p1,*p2;
/***********SPACE***********/
p1=str1+m;
p2=str2;
while(*p1)
/***********SPACE***********/
*p2++=*p1++;
/***********SPACE***********/
*p2='\0';
}
main()
{
inti,m;
charstr1[80],str2[80];
gets(str1);
scanf("%d",&m);
/***********SPACE***********/
strcopy(str1,str2,m);
puts(str1);puts(str2);
}
9:
通过函数的递归调用计算阶乘。
longpower(intn)
{
longf;
if(n>1)
/***********SPACE***********/
f=power(n-1)*n;
else
f=1;
return(f);
}
main()
{
intn;
longy;
printf("inputainteagernumber:
\n");
/***********SPACE***********/
scanf("%d",&n);
y=power(n);
/***********SPACE***********/
printf("%d!
=%ld\n",n,y);
getch();
}
10:
计算圆周率的近似值。
#include
#include
main()
{
ints;
/***********SPACE***********/
floatn,pi;
doublet;
t=1;pi=0;n=1;s=1;
/***********SPACE***********/
while(fabs(t)>=2e-6)
{
pi+=t;n+=2;s=-s;t=s/n;
}
/***********SPACE***********/
pi*=4;
printf("pi=%.6f\n",pi);
}
11:
删除字符串中的数字字符。
例如:
输入字符串:
48CTYP9E6,则输出:
CTYPE。
#include
/***********SPACE***********/
voidfun(char*s)
{
char*p=s;
while(*p)
if((*p>='0')&&(*p<='9'))p++;
/***********SPACE***********/
else*s++=*p++;
/***********SPACE***********/
*s='\0';
}
main()
{
charitem[100];
printf("\nEnterastring:
");
gets(item);fun(item);
printf("\nThestring:
\"%s\"\n",item);
}
12:
计算并输出500以内最大的10个能被13或17整除的自然数之和。
#include
#include
/***********SPACE***********/
intfun(intk)
{
intm=0,mc=0,j,n;
/***********SPACE***********/
while(k>=2&&mc<10)
{
/***********SPACE***********/
if(k%13==0||k%17==0)
{
m=m+k;
mc++;
}
k--;
}
/***********SPACE***********/
returnm;
}
main()
{
clrscr();
printf("%d\n",fun(500));
}
13:
统计一个字符串中的字母、数字、空格和其它字符的个数。
#include"stdio.h"
main()
{
chars1[80];inta[4]={0};
intk;
/***********SPACE***********/
voidfun(chars[],intb[]);
gets(s1);
/***********SPACE***********/
fun(s1,a);
puts(s1);
for(k=0;k<4;k++)
printf("%4d",a[k]);
}
voidfun(chars[],intb[])
{
inti;
for(i=0;s[i]!
='\0';i++)
if('a'<=s[i]&&s[i]<='z'||'A'<=s[i]&&s[i]<='Z')
b[0]++;
/***********SPACE***********/
elseif('0'<=s[i]&&s[i]<='9')
b[1]++;
/***********SPACE***********/
elseif(s[i]=='')
b[2]++;
else
b[3]++;
}
14:
求两个非负整数的最大公约数和最小公倍数。
main()
{
intm,n,r,p,gcd,lcm;
scanf("%d%d",&m,&n);
if(mp=m*n;
r=m%n;
/***********SPACE***********/
while(r!
=0)
{
/***********SPACE***********/
m=n;n=r;r=m%n;
}
/***********SPACE***********/
gcd=n;
lcm=p/gcd;
/***********SPACE***********/
printf("gcd=%d,lcm=%d\n",gcd,lcm);
}
15:
以每行5个数来输出300以内能被7或17整除的偶数,并求出其和。
#include
#include
main()
{
inti,n,sum;
sum=0;
/***********SPACE***********/
n=0;
/***********SPACE***********/
for(i=1;i<=300;i++)
/***********SPACE***********/
if(i%7==0||i%17==0)
if(i%2==0)
{
sum=sum+i;
n++;
printf("%6d",i);
/***********SPACE***********/
if(n%5==0)
printf("\n");
}
printf("\ntotal=%d",sum);
}
16:
不用第三个变量,实现两个数的对调操作。
#include
main()
{
inta,b;
scanf("%d%d",&a,&b);
printf("a=%d,b=%d\n",a,b);
/***********SPACE***********/
a=a+b;
/***********SPACE***********/
b=a-b;
/***********SPACE***********/
a=a-b;
printf("a=%d,b=%d\n",a,b);
}
17:
找出数组中最大值和此元素的下标,数组元素的值由键盘输入。
#include"stdio.h"
voidmain()
{
inta[10],*p,*s,i;
for(i=0;i<10;i++)
/***********SPACE***********/
scanf("%d",a+i);
/***********SPACE***********/
for(p=a,s=a;p-a<10;p++)
/***********SPACE***********/
if(*p>*s)s=p;
/***********SPACE***********/
printf("max=%d,index=%d\n",*s,s-a);
}
18:
输入学生成绩并显示。
#include
structstudent
{
charnumber[6];
charname[6];
intscore[3];
}stu[2];
voidoutput(structstudentstu[2]);
voidmain()
{
inti,j;
/***********SPACE***********/
for(i=0;i<2;i++)
{
printf("请输入学生%d的成绩:
\n",i+1);
printf("学号:
");
/***********SPACE***********/
scanf("%s",&stu[i].number);
printf("姓名:
");
scanf("%s",stu[i].name);
for(j=0;j<3;j++)
{
printf("成绩%d.",j+1);
/***********SPACE***********/
scanf("%d",&stu[i].score[j]);
}
printf("\n");
}
output(stu);
}
voidoutput(structstudentstu[2])
{
inti,j;
printf("学号姓名成绩1成绩2成绩3\n");
for(i=0;i<2;i++)
{
/***********SPACE***********/
printf("%-6s%-6s",stu[i].number,stu[i].name);
for(j=0;j<3;j++)
printf("%-8d",stu[i].score[j]);
printf("\n");
}
}
19:
计算平均成绩并统计90分以上人数。
main()
{
intn,m;floatgrade,average;
/***********SPACE***********/
average=n=m=0;
while
(1)
{
/***********SPACE***********/
scanf(