



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言基础实训[练习1.1]已知圆柱体的底半径radius=1.5,高high=2.0,求其体积。#include<stdio.h>voidmain(){floatradius,high,vol,pi=3.1415926;printf(nPleaseinputradius&high:H);scanf(n%f%f,,&radius,&high);vol=pi*radius*radius*high;printf(,,radius=%7.2f,high=%7.2f,vol=%7.2f\nH,radius,high,vol);}[练习1.2]输入三个数,输出其最小值。#include<stdio.h>voidmain()(inta,b,c,d,min;printfi(nPleaseinputthreenumber:**);scanff'%d%d%d”,&a,&b,&c);ifi(a>b)d=b;elsed=a;if(c>d)min=d;elsemin=c;printff'theminnumberis:min=%d\n**,min);)[练习1.3]输入两个整数,若他们的平方和大于100,则输出该平方和的百位数以上(包括百位数字)的各个位数字,否则输出两个整数的平方和。#include<stdio.h>voidmain(){inta,b,SOS;printf(MPleaseinputtwonumber:**);scanff%d%d”,&a,&b);SOS=a*a+b*b;if(SOS>=100){SOS=SOS/100;printfi(**%d**,SOS);}else{printff%d”,SOS);[练习14]输入ー个十进制整数,打印输出对应的ハ进制数和十六进制数。调试要求:输入不同的多个数据渣看输出结果是否正确。例如分别输入?5,366,188,56789等数据。#include<stdio.h>voidmain()(while(l){inta;scanff%d”,&a);printf(w%x,%on,a,a);结构化程序设计【练习题2.1】编程求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。在程序中调用scanf()函数通过健盘输入半径,圆柱高,输出计算结果,输出要求有文字说明,答案精确到小数点后两位。已知圆周长、圆面积、圆球表面积、圆球体积、圆柱体积计算公式为:circle=2*PI*r,area=PI*r*r,surface=4*PI*r*r,globe=PI*r*r*r*4/3,column=area*h算法提示:1)定义符号常量PI2)定义实变量r,h,circle,area,surface,globe,column3)提示输入“Pleaseenterr,h:M4)读入r,h5)根据公式计算circle=2*PI*r,area=PI*r*r,surface=4*PI*r*r,globe=PI*r*r*r*4/3,column=area*h6)打印两位精度的结果circle,area,surface,globe,column#include<stdio.h>voidmain(){floatr,h,circle,area,surface,globe,column,Pl=3.1415926;printf(MPleaseenterr,h:H);scanf(n%f%r,&r,&h);circle=2*PI*r;area=PI*r*r;surface=4*PI*r*r;globe=PI*r*r*r*4/3;column=area*h;printf(*'circle=%7.2f,area=%7.2f,surface=%7.2f,globe=%7.2f,column=%7.2r,circle,area,surface,globe,column);}【练习题2.2】输入一个华氏温度f,要求输出摄氏温度c。公式为c=5/9(f-32),输出要求有文字说明,输出2位小数。提示:1)定义实型变量c,f2)提示输入"Pleaseenterf:"3)读入f4)根据公式计算c打印两位精度的结果。#include<stdio.h>voidmain()(floatc,f;printグPleaseenterf:M);scanf(H%r,&f);c=((f32)*5)/9;printfi(HCelsiusis:%7.2f;c);}【练习题2.3】输入一个数,求该数个位,十位,百位上的数之和。提示:%求模(求余)运算,两整数相除,求余数/除法运算,整数相除,结果为整数,实数相除,结果为double型数举例:123123%10 123除以10的余数为3(个位):123/10 123除以10商为12;123/10%10%除以10的余数为2(十位);123/100 123除以100商为1(百位)#include<stdio.h>voidmain(){inti,a,b,c,sum;printfi(nPleaseenterathree-digitnumber:'*);scanf("%d”,&i);a=i%10;b=i/10%10;c=i/100;sum=a+b+c;printff'thesumis:%d",sum);)【练习题2.4]函数F(X)=3*xA3+2*xA2+x+l,输入x,求函数的值。#include<stdio.h>voidmain(){intx,F;printfif"Pleaseinputanumber:M);scanfC%d”,&x);F=3*x*x*x+2*x*x+x+l;printffF=%d”,F);【练习题3.1】有3个整数a、b、c,由键盘输入,输出其中最大的数。#include<stdio.h>voidmain(){inta,b,c,d,max;printfif'Pleaseinputthreenumber:");scanf(("%d%d%d",&a,&b,&c);ifi(a>b)d=a;elsed=b;if(c>d)max=c;elsemax=d;printff'themostmaxnumberis%d",max);}【练习题3.2]有一函数:x(x<l)y=2x-l(l<=x,10)3x-ll(x>=10)写ー程序,输入x,输出y值。#include<stdio.h>voidmain(){intx,y;printfif"Pleaseinputanumber:");scan耳"%d",&x);ifi(x<l)y=x;elseif(l<=x<10)y=2*x-l;elseif(x>=10)y=3*x-ll;prin氓"theanwseris%d",y);}【练习题3.3】给ー个不多于5位的正整数,要求:①求出它是几位数;②分别打卬出每ー位数字;③按逆序打印出各位数字,例如原数为321,应输出123。分析:.判断输入的数是儿位数就是用这个数和9999,999,99,9进行比较;.分别打印出每个数字则利用两个整数相除的结果仍为整数进行计算;.反序数字,实际上就是将求得的每个数字对应的变量按照不同顺序输出。题目中说输入的数不多余5位,就表示可以输入少于5位的数,这样存在一个问题,如果是1234,是否将求得的万位数O也输出出来,变成01234,这个问题在考虑输出时不可避免,因为计算时是要首先计算万位数字的。由于通常不输出,也就是有几位数就输出几位数字。那么我们将1234就表示为1234。#include<stdio.h>voidmain(){inti,a,b,c,d,e;printfif'Pleaseenterafive-digitpositivenitegers:");scanf(H%d",&i);if(i>99999)printfi(^^inputerrorsド);elseif(i>9999&&i<=99999){printfV'thisisafive-digitnumber.\n,T);a=i/10000;//wanweishub=i/1000%10;//qianweishuc=i/100%10;//baiweishud=i/10%10;e=i%10;printf(f,%d%d%d%d%d",e,d,c,b,a);}elseif(i>999&&i<=9999){printff'thisisafour-digitnumber.\nn);b=i/1000%10;//qianweishuc=i/l00%10;//baiweishud=i/10%10;e=i%10;printf(n%d%d%d%d",e,d,c,b);elseif(i>99&&i<=999){printff'thisisathree-digitnumber.\n'');c=i/100%10;//baiweishud=i/10%10;e=i%10;printf("%d%d%d';e,d,c);)elseif(i>9&&i<-99){printff'thisisatwo-digitnumber.\ntf);d=i/10;e=i%10;printfC'%d%d",e,d);}elseif(i>0&&i<=9){prin氓“thisisasingledigitAn");printff%d\i);【练习题3.4】企业发放的奖金根据利润提成。H利润I低于或等于10万元的,奖金可提10%:12利润髙于10万元,低于20万元(10000(XI<=200000)时,低于10万元的部分按10%提成,高于100000元的部分,可提成7.5%;13200000<1<=400000时,低于20万元的部分仍按上述方法提成(下同)。高于20万元的部分按5%提成;144000004〈=600000时,高于40万元的部分按3%提成;I5600000<I<=1000000时,高于60万元的部分按3%提成;16[>1000000时,超过[00万元的部分按[%提成。从键盘输入当月利润I,求应发奖金总数。要求:(1)用if语句编程序;(2)用switch语句编程序。#include<stdio.h>voidmain()(intt0,tl,t2,t3,t4;inti,m;intt;t0=100000*0.1;tl=100000*0.075+t0;t2=200000*0.05+tl;t3=200000*0.03+t2;t4=400000*0.015+t3;printf(MPleaseenteri:M);scanff%d”,&i);if(i<0)(printErrorNumber\nM);}else{t=i/100000;iRt>=10){t=10;)switch(t)(case0:m=i*0.1;break;:m=t0+(i・100000)*0.075;break;case3:m=tl+(i-200000)*0.05;break;case4:case5:m=t2+(i-400000)*0.03;break;case9:m=t3+(i-600000)*0.015;break;case10:m=t4+(i-1000000)*0.01;)printff'Thebonusamountis:%d\nn,m);【练习题3.5]从键盘任意输入成绩在0〜100的分数,要求分别用if语句和switch语句实现五级制的评定,评定条件如右图:要求:①分别用if语句和switch语句实现。②输入一个负分数以及超过100分以上,不应该得到成绩,需要给出错误提示:③程序运行时,需要必要的提示语句。#include<stdio.h>voidmain(){ints;printf(MPleaseenterscore:");scanff%d”,&s);if(s<0||s>100)printfif*Errorscore\nH);elseif(s>=90)printff优”);elseif(s>=80&&s<90)printff良”);elseif(s>=70&&s<80)printR”中”);elseif(s>=60&&s<70)printfiT及格”);elseif(s<60)prints”不及格”);}【练习题3.6】编写计算器程序,要求如下:从屏幕获取请输入两个变量的值和一个算术运算符(+、・ヽ・、ノ、%),对这两个变量进行相应的算术运算,输出计算结果,对于其他运算符给出错误信息。#include<stdio.h>voidmain(){inta,b;floatA;charc;printfif'Pleaseenterwhatyouwanttosolvecomputing:\n”);scanf("%d%c%d”,&a,&c,&b);switch(c){case屮:A=a+b;break;case,-,:A=a-b;break;case,*,:A=a*b;break;case7:A=a/b;break;case,%,:A=a%b;break;default:printf(werror\n");}printf(M%f\nn,A);【习题4.1】求1至100的和加1至50的平方的和加1至10的倒数的和。#include<stdio.h>voidmain()(intx=l,z=l,y=1,sum=0;while(x<=100)(sum=sum+x;x=x+l;)while(y<=50){sum=sum+y*y;y=y+i;)while(z<=10)(sum=sum+l/z;z=z+1;)printf("l至100的和加1至50的平方的和加1至10的倒数的和%d",sum);}【习题4.2]打印出所有"水仙花数",所谓"水仙花数"是指ー个三位数,其各位数字立方和等于该本身。#include<stdio.h>voidmain(){inti=100,a,b,c;while(i>=99&&i<999){i=i+l;a=i/100;b=i/10%10;c=i%10;ifi(i=a*a*a4-b*b*b4-c*c*c)printf(M%d\nw,i);)【习题4.3】有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。#include<stdio.h>voidmain()floatz,i=l,x=l,y=2,sum=0;while(i<=20)(z=y/x;y=y+x;x=y-x;sum=sum+z;i=i+l;)printf("%f',sum);}【习题4.4】ー球从100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地时共经过多少米?第10次反弹多髙?#include<stdio.h>voidmain(){inti=l;floath=100,sum=0;while(i<=10)(sum=sum+h;h=h/2;i=i+l;)printf(M%f\n",h);prmtf(H%f\n",sum);【习题4.5】分别用while语句、dowhile语句和for语句,求出100以内所有奇数的和。#include<stdio.h>voidmain()inti=0,sum=0;while(i<=100)if(i%2=l)sum=sum4-i;i=i+l;)printf(nsum=%dH,sum);)#include<stdio.h>voidmain(){inti=0,sum=0;do{if(i%2=l)sum=sum+i;i=i+l;)while(i<=100);printf(,,sum=%d,,,sum);}#include<stdio.h>voidmain(){inti,sum=0;fbr(i=1;i<=100;i=i+2){sum=sum+i;)printf(Msum=%dH,sum);}【习题4.6】打印输出乘法口诀表。#include<stdio.h>voidmain(){intx,y,z;fbr(x=1;x<=9;x-H-)for(y=i;y<=9;y++){z=x*y;printf(,,%d*%d=%d\n',,x,y,z);}}【习题4.7】任意输入ー个正整数n,求1至n的和,n的阶乘,1的阶乘至n的阶乘之和。#include<stdio.h>voidmain()inti,a;doublex=0,y=l,z=l;prints**Pleaseinputanumbern:”);scanff%d”,&a);fbr(i=l;i<=a;i++){x=x+i;y=y*i;z=z+y;)printfftheanswer1=%lf\nn,x);printff'theanswer2=%lf\n*',y);printfftheanswer3=%lf\nM,z);}【习题4.9】输入x和n,计算并输出下式的值:s=x/l+x/3+ +x/n#include<stdio.h>voidmain()floatx,n,s=0,a;inti=l;printf("Pleaseinputx,n:\n");scanf(M%f%f\&x,&n);while(i<=n){a=x/i;s=s+a;i=i+2;)printf("s=%f',s);I【习题4.10】36块砖36人搬,男搬4女搬3,小孩2人搬1砖。要求一次全搬完,问男、女、小孩各需多少(人)?如有多种方案,输出第•种方案及方案的数量。算法提示:设x,y,z表示男、女、小孩的人数,则有不定方程:x+y+z=364x+3y+z/2=36对x,y,z所有可能的组合测试出满足条件的解。x、y、z的取值范围:X:1~9,步长1y:1-12,步长1z:2-36,步长2对x,y,z所有可能的组合重复测试条件:4*x+3*y+z/2=36&&x+y+z==36是否成立,若成立则打印出x,y、z的值。#include<stdio.h>voidmain(){inti=0;floatx,y,z;fbr(x=l;x<=9;x-H-){for(y=l;y<=12;y++){fbr(z=2;z<=36;z=z+2){ifi[4*x+3*y+z/2==36&&x+y+z=36){i=i+l;prints”共有%d中方案printf("第一种方案:男人%f人,女人%f人,小孩%f^\n",x,y,z);}语言中数组的使用.请编写函数intfun(intm,intscore口,intbelowロ),它的功能是:将低于平均分的人数作为函数值返回,并将低于平均分的成绩放在below数组中(m表示score的长度,score表示成绩)。例如,当score数组中的数据为:10、20、30、40、50、60、70、80、90时,函数返回4,below中的数据应为:10、20、30、40=#include<stdio.h>#include<math.h>intfiin(intm,intscore[],intbelow[])inti;doubleavg,sum=0;fdr(i=0;i<m;i-H-){sum=sum+score[i];avg=sum/m;while(score[i]<avg){below[i]=scorefi];returnbelow[i];)}returni;}voidmain()intsore[9]={10,20,30,40,50,60,70,80,90};inti,n,below[50];n=fiin(9,sore,below);printf(”低于平均分的人数为:\n*');fbr(i=0;i<10;i++)printグ%d”,i);print・低于平均分的分数为:%d",n);fbr(i=O;i<n;i++)printf(M%dM,below[i]);printf(,,\nM);}.用插入排序法将n个字符进行排序(降序)。(提示:插入法排序的思路是:先对数组的头两个元素进行排序,然后根据前两个元素的情况插入第三个元素,再插入第四个元素…)。#include<stdio.h>#include<string.h>main()(chara[100],t;intij,l;printfif"pleaseenterastring:\n");gets(a);l=strlen(a);for(i=0;i<l-2;i++){if(a[i]<a[i+l]){t=a[i];a[i]=a[i+1];a[i+1]=t;}i=0;fbr(j=3;!(a[j]<=a[i]&&a[j]>=a[i+l])&&i<=j-2;i++);if(ag]<=a[i]&&a[j]>=a[i+l]){t=a[i+l];a[i+1]=a[j];a[j]=t;}ifO<l)j++;}puts(a);}.假定整数数组a中元素的值不重复。删除a中值为x的元素(x从键盘输入)。#include<stdio.h>voidmain(){inta[100],i,l,x,count;printfif"Pleaseenterthelengthofthearray:");scanfi("%d",&l);printfi("Pleaseenterasetofintegerarray:");fbr(i=O;ivl;i++)scanf!"%d",&a[i]);printfif"Pleaseentervaluesyouwanttodeletetheelements:");scanグ%d",&x);fbr(i=O;i<l;i++)if(a[i]!=x)printグ%d”,a[i]);}. ー个已按从小到大的顺序排好的数组a,编写程序,从键盘输入ー个数x按原来排序的规律将它插入数组a中。#include<stdio.h>voidmain(){inta[100],l,i,x,t,flag;printff请输入数组长度:");scanff%d”,&l);printf("请按从小到大的顺序输入ー个整数数组ア);fbr(i=O;i<l;i++)scanf(n%dM,&a[i]);printff请输入要插入的ー个数:");scanf(M%dn,&x);fbr(i=O,t=-1,flag=O;i<l;i-H-){t++;if(a[i]<x&&a[i+l]>x)flag=l;fbr(i=l;i-l>t;i-)a[i]=a[i-l];a[t+l]=x;fbr(i=O;iv[+l;i++)print軍%d”,a[i]);.使用数组的方法筛选出1-100中的素数#include<stdio.h>#include<math.h>voidmain()(intij,a[100];fbr(i=0;i<100;i+4-)a[i]=i+l;printf("l—100以内的素数有:'n");fbr(i=l;i<100;i++)(for(j=2;j<=sqrt(a[i])y-H-)ifi(a[i]%j=O)break;if(j>sqrt(a[i]))printf(M%d\nH,a[i]);.已知一个数组a中包括10个整数元素,从a中第二个元素起,分别将后项减前项之差存入数组b,并按每行3个元素输出数组b。#include<stdio.h>#defineMAX100voidmain()inta[MAX];intb[MAX];intij=0;fbr(i=0;i<10;i-H-)scanf(w%d,',&a[i]);)fbr(i=0;i<9;i-H-)b[j]=a[i+l]-a[i];if(O=3)IIO=6))printf("%d,\bU]);j++;.请编写函数ftin,函数的功能是:将M行N列的二维数组中的字符数据按列的顺序依次放到ー个字符串中。例如,二维数组中的数据为:WWWWSSSSHHHH则字符串屮的内容应是:WSHWSHWSHo#include<stdio.h>#defineMAX100voidmain()inti;voidfun(inti);fun(i);chara[3][4]={'w:w','w;w?s',—intj;for(i=0;i<4;i++)j=0;for(;j<3;j++){printf("%c",a|j][i]);))printf(fT\nM);TOC\o"1-5"\h\z8,求出NxN的二维数组周边元素的平均值|0 1 2 7 9||1 9 7 4 5|a=|23831||4 5 6 8 2||5 9 1 4 1|则返回主程序后s的值应为:3.375。#include<stdio.h>#include<string.h>#include<math.h>#defineMAX100voidmain()floata[MAX][MAX],s,n,t=0;inti,j;printf("你输入的是数组n为:");scanf("%f',&n);fbr(i=0;i<n;i++)|for(j=0j<nj++){scanf("%f',&a[i][j]);})if(n<3)(fbr(i=0;i<n;i++)(if((i=0)||(i=(n-l)))fdr(j=O;j<n;j++)E+a[i皿;})else{fbr(i=O;i<n;i-H-){if<(i==O)||(i==(n-l))){for(j=0;j<nu++){t=t+a[i皿;))}for(j=Oj<nJ++)(if((j=O)||0=n-l))(fbr(i=l;i<n-l;i++)(t=t+a[i皿;))n=(n-l)*4;s=t/n;printf(M%f\nM,s);}.求出M行N列的二维数组tt里每列中的最小元素,并依次放入pp数组中。#include<stdio.h>#include<string.H>#include<math.h>#defineMAX100voidmain()
inttt[MAX][MAX],pp[MAX];printf("二维数组的行和列为:");scanfT%d%d“,&m,&n);tbr(i=O;i<m;i-H-)(for(j=0;j<ny++)(scanf("%d",&tt[i][j]);)fbr(j=O;j<ny++)(for(i=O;i<m;i-H-){if(i=O)(min=tt[i][j];}elseif(min>tt[i][j]){min=tt[i][j];}}pp[j]=min;printfC'%d\n",pp[j]);.请编写程序,实现B=A+A、即把矩阵A加ヒA的转置,存放在矩阵B中。计算结果在main函数中输出。其转置矩阵为:|1其转置矩阵为:|147||258|1369||123||456||789|程序输出:|2610||61014||101418|#include<stdio.h>#include<string.h>#include<math.h>//defineMAX100voidmain()(intb[MAX][MAX],a[MAX][MAX],c[MAX][MAX],n,m,t=O;printf("请输入数组的行和列:\nM);scanff%d%d\&n,&m);printf("请输入矩阵:\n");for(inti=0;i<n;i-H-){fbr(intj=O0<m;j++)(scanf("%d",&a[i][j]);fbr(i=0;i<n;i++)(for(intj=0;j<m;j++)(c[i][j]=a[j皿;b[i][j]=a[i]U]+c[i]U];)}printf("请输出矩阵a加上a的转置的和矩阵:\n");for(i=0;i<m*n;i-H-){for(intj=0j<m;j4-+)(printf("%d",b[t][j]);)printf("\n");t++;.编写程序删除字符串s中从下标k开始的n个字符(n和k从键盘输入)。例如,字符串内容为:HellolloWorld!,k中的值为:5,n中的值为:3,结果为:HelloWorld!〇#include<stdio.h>#include<string.h>#include<math.h>#defineMAX100intmain(){chara[MAX];intk,n;while(gets(a)){ printff请输入删除字符串从下标几开始到几个字符:\n");scanf(H%d%d,,,&k,&n);fbr(inti=0;i<strlen(a);i-H-)(if(i==k){i=i+n;}printfC%cH,a[i]);}prin氓"”);)return0;)12.编写程序,从键盘输入字符串tt,将其中每个单词的首字符改为对应的大写字母,首字符后的字母都改为对应的小写字母。例如,若输入字符串:"abcDbOYxy!",则输出字符串为:"AbCdBoyxy!"(,#include<stdio.h>#include<string.h>#include<math.h>#defineMAX100voidmain(){chara[MAX],b[MAX];printf("请输入字符串:");gets(a);intn=strlen(a);fbr(inti=0;i<n;){if((a[i]>64)&&(a[i]<91)){a[i]=a[i]+32;printfC%c”,a[i]);i++;}elsea[i]=a[i]-32;printf("%c",a[i]);if}ifl[a[i]='')(printf("%c",a[i]);i++;)elseprintfi(n%cH,a[i]),i++;)printf("\n");1.请编写程序,把字符串s中所有的字符前移ー个位置,串中的第一个字符移到最后。例如:原有的字符串为:Mn.l23xyZ,则调用该函数后,串中的内容为:n123xyZM。#include<stdio.h>#include<string.h>#defineSIZE81/*用来定义字符的最大长度・/voidmain(){voidfun(char口);/・函数体在使用后,所以使用前需先声明・/chars[SIZE];printfCTIeaseinputastring:\nM);scanff%s”,s);fun(s);printff'Thestringafterfunis:\n%s",s);}voidfun(chars[SIZE]){inti,len;charc=s[0];/・先单独存储第一个字符以便后面用来赋值,否则将会被覆盖・/len=strlen(s);fbr(i=l;i<len;i+4-)s[i・l]=s[i];/*从第二个字母开始逐个前移ッs[i-l]=c;/・将第一个单词移到最后ー个・/.编写程序,把字符串中的内容逆置。例如:字符串中原有的内容为:abcdefg»输出:gfedcbao#include<stdio.h>#include<string.h>voidmain()(chara[100];inti,len,t;printf(MPleaseenterastring:");gets(a);len=strlen(a);for(i=0;i<len/2;i-H-){t=a[i];a[i]=a[len-l-i];a[len-l-i]=t;)puts(a);}.编写程序,依次取出字符串si中所有数字字符,形成新的字符串s2。#include<stdio.h>#include<string.h>voidmain(){charsl[100],s2[100];intk;inti,lj;fbr(k=O;k<100;k++){s2[k尸,;)j=0;printf("Pleaseenterastringsi:");gets(sl);l=strlen(s1);fbr(i=O;i<l;i++){if(sl[i]>='O'&&sl[i]<='9'){s2[j]=sl[i];j++;))s2[j+l]=ヘ0’;puts(s2);}.分别将a、b所指字符串中字符倒序,然后按排列的顺序交叉合并到c所指数组中,过长的剩余字符接在c所指数组的尾部。例如,当a所指字符串中的内容为:"abcdefg",b所指字符串中的内容为:"1234"时,则c所指数组中的内容应该为:“g4f3e2dlcba”;#include<stdio.h>#include<string.h>voidmain()(chara[100],b[100],c[100];intij,k,len1,len2,len3,t;printf(MPleaseenterastringa:");gets(a);lenl=strlen(a);for(i=0;i<lenl/2;i-H-){t=a[i];a[i]=a[lenl-l-i];a[lenl-l-i]=t;)printfifTleaseenterastringb:");gets(b);len2=strlen(b);fbr(j=0;j<len2/2;j-H-){t=b[j];b[j]=b[len2-l-j];b[len2-l-j]=t;)Ien3=lenl+len2;for(k=0;k<len3;k=k+2){c[k]=a[i];i++;)for(k=l;k<len3;k=k+2){c[k]=b[j];j++;)c[k]=W;puts(c);}.已知字符串al和a2,各自存放ー个已按字母顺序排好的字符串,编程合并二个字符串a3中,合并后仍保持字母顺序(如a!中存放:"accel”,a2中存放“ilrz”,则a3中为”acceillrz”)。#include<stdio.h>#include<string.h>//defineN100main()voidfun(chara[],charb[],charc[]);chara[N],b[N],c[N];printfi(HPleaseenterastringa:");gets(a);printfif“Pleaseenterastringb:");gets(b);fiin(a,b,c);printf("%s\n",c);voidfun(chara[],charb[],charc[]){intij,k;fbr(i=O,j=O,k=O;a[i]!='\O,&&b[j]!=W;k++)if(a[i]<bU]){c[k]=a[i];i++;}else{c[k]=b[j];j++;)fbr(;a[i]!='\0';i++,k++)c[k]=a[i];fbr(;b[H!=ヘ。';j++,k++)c[k]=b[j];c[k]='\O';).定义ー个函数char*fun(char*s),判断一个字符串s是否是回文,当字符串是回文时,函数返回字符串:yes!,否则函数返回字符串:no!〇所谓回文即正向与反向的拼写都一样,例如:adgdao#include<stdio.h>#include<string.h>main(){chara[100];inti,l,flag=0;printfi("pleaseinputastring:");gets(a);l=strlen(a);fbr(i=0;i<l/2;i++)i<a[i]!=a[l-l-i]){printf("no!\n");flag=l;break;}ifi(flag==O)printf("yes!\n");.编写求圆的面积的函数,并调用该函数求出圆环的面积。#include<stdio.h>//definepi3.14159doubleS(doubler)(returnpi*r*r;}voidmain(){doubler,s;scanf("%l『,&r);s=S(r);printf(M%lf\n",s);}.请编写函数fun,它的功能是计算下列级数的和,和值由函数值返回。S=l+x+x2/2!+x3/3!+…+xn/n!例如,当n=10,x=0.3时,函数值为1.349859〇可用系统库函数pow(x,i)(表示求x的i次方)求X的基。注意:主函数的代码如下,请勿改动主函数main的任何内容。#include<stdio.h>#include<math.h>doublefun(doublex,intn);voidmain(){intn;doublex;scanf(n%d,%lf:n,&n,&x);printf(”函数值为:%f\nH,fun(x,n));}#include<stdio.h>#include<math.h>floatfiin(intn,floatx){floats=l,k=1;inti;fbr(i=l;i<=n;i++){s=s+pow(x,i);k=k*(k+l);)returns;)voidmain()intn;floatx;scanf(0%d%f;&n,&x);printf(H%f\nH,fun(n,x));.编写函数,求如卜.级数,在主函数中输入n,并输出结果。A=l+l/(l+2)+l/(l+2+3)+l/(l+2+3+4)+ + l/(l+2+3+...+n)。#include<stdio.h>#include<math.h>doublea[100][100];intn,m;doublemin(double*s)(doublex=0;intij;x=s[l][l];fbr(i=l;i<=n;i-H-){砧r(j=l;jv=m;j++){if(s[i][j]>x)x=s[i皿;))returnx;)voidmain(){intij;scanff'%d%d”,&n,&m);fbr(i=l;i<=n;i4-+)fbr(j=lj<=mij++)scanff'%1ロ&a[i][jD;printff%lf\n”,min(a));}.求一个二维数组中的最小值,用函数实现。#include<stdio.h>#include<math.h>doublea[100][100];intn,m;doublemin(doubles[][100])doublex=0;intij;x=s[l][l];fbr(i=l;i<=n;i++)(Cr(j=];jv=m;j++)(if(s[i]U]<X)x=s[i]U];)Ireturnx;)voidmain()(intij;double*p;scanff%d%d",&n,&m);fbr(i=l;i<=n;i++)fbr(j=la<=m;j++)scanfitM%lf',&a[i]|j]);printf{M%lf\n",min(a));}.求C(m,n)=m!/(n!*(m・n)!)并输出。思路:先编写求k!的函数,再调用该函数求解。#include<stdio.h>doublefun(doublen,doublex){inti;ints;doublesi;fbr(i=l;i<=n;i++){x=x*10;}s=x;ifi(s%10>=5)s=s+l;sl=s;fbr(i=l;iv=n;i++)sl=sl/(double)10;)returnsi;)voidmain(){doublex,n;scanf(H%lf%lf\&n,&x);printf("%lf\n”,fun(n));.编写ー个将实数四舍五入到小数点后第n位的函数,并调用此函数将一个实数舍入到小数点后第2位(是指内部精度而非输出精度)。#include<stdio.h>#include<stdio.h>chara[100],b[100];charfun(intlen,char*s){inti;fbr(i=O;i<len;i-H-){b[i]=*(a+i);)puts(b);)voidmain()intlen,i;gets(a);len=strlen(a);fun(len,a);).编写用于字符串复制的函数,类似于库函数strcpy。#include<stdio.h>#include<string.h>voidscopy(charb[],chara[]){inti;for(i=0;a[i]!=^;i++){b[i]=a[i];)b[i]=^';}voidmain()chara[100],b[100];gets(a);scopy(b,a);puts(a);.编程将字符串前后倒置。注意:以后不再提示编写函数来实现功能,应养成习惯,利用函数来提高程序的通用性。#include<stdio.h>#include<string.h>voidsrev(chara[])chart;intn,ij;n=strlen(a);i=0;j=n-l;while(i<j){t=a[i];a[i]=a[j];a[j]=t;i++;j-;))voidmain()chara[80];gets(a);srev(a);puts(a);].判定字符串是否是回文。#include<stdio.h>#include<string.h>intfiin(chara[]){intij,n;n=strlen(a);i=0;j=n-l;while(i<j)if(a[i]=a[j])i++;elsebreak;)if(i>=j)(retum(l);)elseretum(O);Ivoidmain(){chars[100];gets(s);if(fun!=O)printf("yes.\n");elseprintf("no.\n");).设计ー个子函数,用以判断ー个整数是否为素数,如果是,则返回1;否则返回〇,并利用此函数,找出100—200之间的所有素数。#include<stdio.h>#include<math.h>intfiin(int);voidmian(){intm;printff'theprimenumebris:\n");fbr(m=100;m<=200;m++){if(fun(m))printf("%d",m);printfi("\nH);}}intfun(intx){inti,flag=l;fbr(i=2;i<=sqrt(x);i-H-)if(!(x%i))flag=O;returnflag;.编写函数voidfun(inty,intb[],int*m),它的功能是:求出能整除y且是奇数的各整数,并按从小到大的顺序放在b所指的数组中,这些除数的个数通过形参m返回。例如,若y中的值为90,则有4个数符合要求,它们是1、3、5、9、15、45,请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。思路:可以分解为以下几步:从〇开始逐个求得小于y的奇数一按顺序将这些奇数存入数组ー逐个判断该数组中的值是否能整除yー累加能整除y的数值个数一最后按要求传回结果。#include<stdio.h>voidfiin(inty,intb[],int*m)(}voidmain()(inty,a[500],mj;printf(H\nPleaseinputanintegernumber:\n");scanグ%d”,&y);fiin(y,a,&m);fbr(j=Oy<m;j++)printf("%d",a[j]);printf("\n");}正文#include<stdio.h>#include<string.h>voidfun(inty,intb[],int*m){inti=Oj=l,k=O,*s=b;fbr(j=Oj<yj++)if(j%2=0)(s[i]=j;i++;)fbr(j=Oj<yJ-H-)if(y%s[i]==O)(b[k]=s|j];k++;}*m=k;voidmain()inty,a[500],mj;printfif^nPleaseinputanintegernumberiVn*');scanff%d”,&y);fun(y,a,&m);fbr(j=Oy<m;j-H-)printf("%d",a[j]);printf("\n");12.编写函数实现冒泡排序算法。#include<stdio.h>voidfun(intb[],intn){intij,temp;fbr(i=l;i<=n;i-H-)(for(j=l;j<=n-ij++){if(bU+i]<b[j]){temp=b[j+l];b[i+l]=b[j];b[j]=teiTip;voidmain(){inty,a[500],m,i;scanff'%d",&m);fbr(i=l;i<=m;i-H-)scanf("%dM,&a[i]);fiin(a,m);fbr(i=1;i<=m;i+4-)printf(n%dH,a[i]);printffヘn");}.编写程序实现ー个数组排成升序,在数组中某一位置插入一个不超过当前数组中最大值的数,仍保持升序。由于数组长度固定,一旦插入该数后,该数后面的元素将整体移动,导致最后ー个元素会被挤出。#include<stdio.h>doublefiin(doublen,doublex)inti;ints;doublesi;fbr(i=l;iv=n;i++)x=x*10;ifi(s%10>=5)s=s+l;sl=s;for(i=l;i<=n;i++){sl=sl/(double)10;)returnsi;)voidmain(){doublex,n;scanf("%lf%lf\&n,&x);printf("%lf\n”,fim(n));).矩阵转置与矩阵相乘。根据主函数调用方式编写三个函数。完成之后可进ー步思考:这里在函数参数中固定了数组元素的个数,从而限制了函数的应用范围,你能进一步修改完善吗?#include<stdio.h>voidinverse(int[3][6],int[6][3]);voidmulti(int[6][3],int[3][4],int[6][4]);voidoutput(int[6][4]);intmain(){intmiddle[6][3],result[6][4];intmatrix1[3][6]={8,10,12,23,1,3,5,7,9,2,4,6,34,45,56,2,4,6};intmatrix2[3][4]={3,2,1,0,-1,-2,9,8,7,6,5,4};inverse(matrix1,middle); 〃转置矩阵multi(midd1e,matrix2,result);//矩阵乘法output(result); 〃矩阵输出return0;}正文#include<stdio.h>voidinverse(int[3][6],int[6][3])intij;for(i=0;i<3;i++){fbr(j=0y<6u++)(b[j][iW[i][j];)voidmulti(int[6][3],int[3][4],int[6][4])intij,k,sum;for(i=0;i<6;i++)fbr(k=0;k<4;k-H-)(sum=0;fbr(j=OJ<3コ++){sum=sum+a[i][j]*b|j][k];)c[i][k]=sum;})}voidoutput(int[6][4]){intij;fbr(i=0;i<6;i++){fbr(j=0y<4y++){printf("%d",a[i][j]);)printf("\n");)}intmain(){intmiddle[6][3],result[6][4];intmatrix1[3][6]=<8,10,12,23,1,3,5,7,9,2,4,6,34,45,56,2,4,6};intmatrix2[3][4]={3,2,1,0,-1,-2,9,8,7,6,5,4};inverse(matrix1,middle); 〃转置矩阵multi(middle,matrix2,result);〃矩阵乘法output(result); 〃矩阵输出return0;}C语言之指针.将数组中所有元素的值反序。#include<stdio.h>#include<string.h>intfiin(char*s,intlen){inti;chartemp;fbr(i=0;i<len/2;i-H-){temp=*(s+i);*(s+i)=*(s+len-i-1);*(s+len-i-1)=temp;)returnlen;)voidmain()(intlen;chara[100];gets(a);len=strlen(a);fun(a,len);puts(a);).写ー个函数,求字符串的长度。在main函数中输入字符串,并输出其长度。#include<stdio.h>intfun(char*s)(inti,len=0;chartemp;fbr(i=0;*(s+i)!=ヘ〇';i++)(len-H-;returnlen;)voidmain()intlen;chara[100];gets(a);len=fiin(a);printf(H%d\nMen);}.编程判断输入的ー个字符串是否是回文。所谓回文,即顺读和倒读都是ー样的。如eye,level,abba等。#include<stdio.h>#include<string.h>intfun(char*s,intlen)]inti;intflag;fbr(i=0;i<len/2;i-H-){if(*(s+i)=*(s+len-i-1))flag=l;else{flag=O;break;})returnflag;}voidmain()intlen,flag;chara[100];gets(a);len=strlen(a);flag=fiin(a,len);if(flag=l)printffyes\nH);elseprintffno\n");}.输入一行文字,统计其中大写字母、小写字母、空格以及数字字符的个数。#include<stdio.h>#include<string.h>intw[4];//0放数字,1放小写,2放大写,3放空格int*fiin(char*s,intlen)inti;intflag,k;memset(w,(int)0,sizeofi(w));fbr(i=O;i<len;i-H-)iR*(s+i)>=O&&*(s+i)v=9){k=0;w[k]++;)if(*(s+i)>-a,&&*(s+i)<-z')|k=l;w[k]++;)if(*(s+i)>='A'&&*(s+i)<='Z'){k=2;w[k]++;)if(*(s+i)=,'){k=3;w[k]++;returnw;voidmain(){intlen,i;chara[100];gets(a);len=strlen(a);fiin(a,len);fbr(i=0;i<4;i-H-)printグ%d”,wロ]);printf(M\nM);}.实现10个整数的输入,求和,升序排序,输出:求和结果及平均值、排序后的数组。要求:(1)分别用函数实现以上4个模块的功能:(即数组的输入,求和,排序,输出)。(2)函数定义必须用指针或数组名做为形式参数:数组输入: voidinarr(int*p,intn)或voidinarr(inta[],intn)数组求和intsum(int*p,intn)或intsum(inta[],intn)数组排序voidsort(int*p,intn)或voidsort(inta[],intn).(3)写主函数调用以上模块。#include<stdio.h>voidinarr(int*pjntn){inti;for(i=O;i<n;i-H-){scanf("%d",p+i);intsum(int*p,intn){inti,sum=0;fbr(i=0;i<n;i++){sum+=*(p+i);}returnsum;voidsort(int*p,intn)(intij,temp;fbr(i=0;i<n;i++)(fbr(j=Oj<n-i-1y++){if(*(p+j+D<*(p+j)){temp=*(p+j);*(P+j)=*(P+j+D;*(p+j+l)=temp;voidoutput(int*p,intn){inti;for(i=0;i<n;i++)printf(n%d",*(p+i));)printf(H\nH);}voidmain(){inta[10];inarr(a,l0);〃输入printf(Hsum=%d\nM,sum(a,I〇));〃求和sort(a,10);output(a,10);}c语言之结构体1、编ー个程序,输入10个职エ的编号、姓名、基本工资、职务エ资,求出其中“基本工资十职务エ资’‘最少的职エ姓名并输出。#include<stdio.h>//namefbxbasepascalcstructstaff{charname;doublescore1;doublescore2;doublescore3;doubleave;}lesson[4];voidmain()inti;fbr(i=0;i〈4;i++){scanfKM%s %lf %lf%lf*,&lesson[i].name,lesson[i].scoreI,&lesson[i].score2,&lesson[i].score3);}fbr(i=0;i<4;i-H-)(lesson[i].ave=(lesson[i].scorel+lesson[i].score3+lesson[i].score3)/3;Ifor(i=0;i<4;i-H-)printf(n%lf\nM,lesson[i].ave);キ2、编ー个程序,输入下列学生成绩表中的数据,并用结构体数组存放,然后统计并输出三门课程的名称和平均分数。namefbxbasepascalcwang98.0 87.0 77.0TOC\o"1-5"\h\zqian90.5 91.0 88.0sun74.0 77.5 66.5li84.5 64.5 55.0#include<stdio.h>structdate{intyear;intmonth;intday;}s;intisyear(intx){iR(x%4==0&&x%100!=0)||x%400=0)return1;elsereturn0;}voidmain(){intans=0;inti;printff'pleaseinputyyyymmdd\nM);scanf(n%d%d%dn,&s,year,&s.month,&s.day);fbr(i=s.month-1;i>=l;i-)(if(i=l||i=3||i=5||i=7||i=8||i=10||i=12)ans+=31;else(if(i==4||i=6||i==9||i=ll)ans+=30;else(if(i=2){ififisyear(s.year)ans+=29;elseans+=28;}}ans+=day;printf(H%d\n\ans);.定义ー个结构体类型(包括年、月、日)变量,计算某天在本年中是第几天?并注意闰年(需判断年份是否是闰年来决定2月的天数)。#include<stdio.h>structdate{intyear;intmonth;intday;}s;intisyear(intx){ift(x%4==0&&x%100!=0)||x%400=0)return1;elsereturn0;}voidmain(){intans=0;inti;printff'pleaseinputyyyymmdd\nM);scanf(n%d%d%dn,&s,year,&s.month,&s.day);fbr(i=s.month-1;i>=l;i-){if(i=l||i=3||i=5||i=7||i=8||i=10||i=12)ans+=31;else{if(i==4||i=6||i==9||i=ll)ans+=30;else(if(i=2){ififisyear(s.year))ans+=29;elseans+=28;ans+=s.day;printf(H%d\n\ans);.设已建立了两条单向链表,这两链表中的数据已按从小到大的次序排好,指针h!和h2分别指向这两条链表的首结点。链表上结点的数据结构如下:structnode{intdata;node*next;);以卜.函数node*Merge(node*hl,node*h2)的功能是将hl和h2指向的两条链表上的结点合并为一条链表,使得合并后的新链表上的数据仍然按升序排列,并返回新链表的首结点指针。算法提示:首先,使newHead和q都指向首结点数据较小链表的首结点,p指向另ー・链表首结点。其次,合并p和q所指向的两条链表。在q不是指向链尾结点的情况下,如果q的下一个结点数据小于p指向的结点数据,则q指向下ー个结点;否则使pl指向q的下ー个结点,将p指向的链表接到q所指向的结点之后,使q指向p所指向的结点,使p指向pl所指向的链表。直到p和q所指向的两条链表合并结束为止。注意,在合并链表的过程中,始终只有两条链表。node*Merge(node*h1,node*h2){node*newHead,*p,*pl;〃使newHead和q指向首结点数据较小链表的首结点,p指向另•链表首结点if(hl->data<h2->data){newHead=hl;p=h2;}else{newHead=h2;p=hl;}node*q=newHead;/Z合并两条链表while(q->next){if(q->next->data<p->data)(2) ;else{ (3) ;q->next=p;q=p;p=pl;))q->next=p;(4) ;}正文#include<stdio.h>#include<stdlib.h>structNode{intdata;Node*next;Node*create(Node*head,intm){inti,a;Node*p;scanf("%du,&a);head->data=a;for(i=l;i<m;i-H-){seanf("%d”,&a);p=(Node*)malloc(sizeofi(Node));p->data=a;p->next=NULL;head->next=p;head=p;)returnhead;}voidListPint_L(Node*head){Node*p;inti=0;p=head;while(p!=NULL){i卄;printf(”单链表第%d个元素是:”,i);printff%d\n"p>data);p=p->next;)}Node*Merge(Node*hl,Node*h2)jNode*newHead,*p,*pl;if(h1->data<h2->data){newHead=h1;p=h2;}else{newHead=h2;p=h1;}Node*q=newHead;while(q->next){ \f(q->next->data<p->data)q=q->next;elsepl=q->next;q->next=p;q=p;p=pl;}}q->next=p;returnnewHead;}voidmain()intlenl,len2;scanf(n%d%d*\&len1,&len2);Node*headl,*head2;head1=(Node*)malloc(sizeof(Node));head2=(Node*)malloc(sizeof(Node));headl->next=NULL;head2->next=NULL;create(headl,len1);〃创建第一条链create(head2,len2);//1i|j建第二条链ListPint_L(head1);ListPint_L(head2);ListPint_L(Merge(head1,head2));〃输出}5.设已建立一条单向链表,指针head指向该链表的首结点。结点的数据结构如下:typedefstructNode{intdata;Node*next;}Node;以下函数sort(Node*head)的功能是:将head所指向链表上各结点的数据按data值从小到大的顺序排序。算法提示:初始时,使p指向链表的首结点,从p之后的所有结点中找出data值最小的结点,让pl指向该结点。将p指向的结点的data值与pl指向的结点的data值进行交换。让p指向下一个结点,依此类推,直至p指向链表的最后一个结点为止。Node*sort(Node*head){Node*p=head,*pl,*p2;iRp=NULL)returnhead;while(p->next!=NULL){ P1=P;p2=p->next;while(p2!=NULL){if((1) )pl=p2;p2=p2->next;)if(p!=pl){intt;t=p->data;TOC\o"1-5"\h\zp->data= (2) ;=t;);)returnhead;)正文#include<stdio.h>#include<stdlib.h>structNode{intdata;Node*next;};Node*create(Node*head,intm){inti,a;Node*p;scanf("%dn,&a);head->data=a;for(i=l;i<m;i++)(scanf("%dH,&a);p=(Node*)maHoc(sizeofi(Node));p->data=a;p->next=NULL;head->next=p;head=p;}returnhead;voidListPint_L(Node*head){Node*p;inti=0;p=head;while(p!=NULL)计ザprintf("单链表第%d个元素是:",i);printf(M%d\nH,p->data);p=p->next;Node*sort(Node*head){Node*p=head,*pl,*p2;if(p=NULL)returnhead;while(p->next!=NULL)(pl=p;p2=p->next;while(p2!=NULL)(if(p1->data>p2->data)pl=p2;p2=p2->next;}if(p!=pl){intt;t=p->data;p->data=p1->data;p1->data=t;)p=p->next;)returnhead;}voidmain(){intlen;s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年小区违停面试题及答案
- 2025年大学声乐测试题及答案
- 2025年英语语用测试试题及答案
- 2025年海南会考试题及答案地理
- 工业分析与检验复习测试附答案
- 2025年行业知识面试题及答案
- 2025年晶体结构测试题及答案
- 2025年车体安全测试题及答案
- 2025年辽宁工会面试题及答案
- 2025年语文惠州中考试题及答案
- 统编版(2024)道德与法治七年级下册第一单元 珍惜青春时光 单元测试卷(含答案)
- 2025年甘肃省张掖市民乐县招聘专业技术人员9人(第二期)历年高频重点模拟试卷提升(共500题附带答案详解)
- 2025年湖北武汉理工大学学生辅导员招聘18人历年高频重点模拟试卷提升(共500题附带答案详解)
- 北京服装学院招聘考试题库2024
- 金融科技概论-课件 第十五章 金融科技监管与监管科技
- 2024年江苏省南京市中考数学试卷真题(含答案解析)
- 物资装卸培训课件
- DB5101-T 71-2020 成都市电动汽车充电设施 安全管理规范
- 2025年乌兰察布医学高等专科学校高职单招职业技能测试近5年常考版参考题库含答案解析
- 高教版2023年中职教科书《语文》(基础模块)下册教案全册
- 《社群运营》全套教学课件
评论
0/150
提交评论