




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计教程》例题源码练习一【例1.1】打印“常熟理工学院”的汉语拼音。程序源码如下:voidmain(){printf(“changshuligongxueyuan!”);}【例1.2】求任意两个整数的积。程序源码如下:#include<stdio.h>intmul(inta,intb);voidmain(){intx,y,z;printf("inputtwonumbers:\n");scanf("%d%d",&x,&y);z=mul(x,y);printf("mul=%d",z);}intmul(inta,intb){intc;c=a*b;returnc;}【例1.3】求整数a、b的和。程序源码如下:voidmain(){inta,b;intsum;scanf(“%d,%d”,&a,&b);sum=a+b;printf(“%d”,sum);练习二【例2.1】转义字符的使用。程序源码如下:voidmain(){printf("\x4f\x4b\x21\n");printf("\112\112\132\104\n");}【例2.2】符号常量的使用。程序源码如下:#definePI3.14159265voidmain(){floatr,m,s;r=1.2;m=2*PI*r;s=PI*r*r;printf("%f,%f",m,s);}例2.3】整型变量的定义与使用程序源码如下:voidmain(){intx,y,m;unsignedu,n;x=30;y=18;u=32800;m=x+y;n=y+u;printf("x+y=%d,y+u=%d\n",m,n);}例2.4】整型变量的定义与使用。程序源码如下:voidmain(){inta,b,c,d;longx,y;x=7;y=8;a=9;b=10;c=x+a;d=y+b;printf("c=x+a=%d,d=y+b=%d\n",c,d);}例2.5】整型数据的溢出程序源码如下:voidmain(){intx,y;x=32767;y=x+1;printf("%d,%d\n",x,y);}例2.6】实型变量的定义和应用举例程序源码如下:voidmain(){floatx,y,z,a,b;x=1234.2345;a=0.02;y=1111111.11111111111;z=x+y;b=a+y;printf("%f\n%f\\n",z,b);}例2.7】字符型变量的定义与使用举例程序源码如下:voidmain(){charc1,c2;c1=97;c2=98;printf("%c%c",c1,c2);printf("%d%d\n",c1,c2);c1=c1-32;c2=c2-('a'-'A');printf("%c%c\n",c1,c2);}【例2.8】变量初始化举例。程序源码如下:voidmain()intc1,c2,c3,c4;c1=7;c2=7;c3=3;c4=4;printf("%d%d",c1,c2);printf("%d%d\n",c3,c4);}等效于voidmain(){intc1=7,c2=7,c3=3,c4=4;printf("%d%d",c1,c2);printf("%d%d\n",c3,c4);}【例2.10】强制类型转换。程序源码如下:voidmain(){floatm=6.5;intn;n=(int)m;printf("%f,%d",m,n);}练习三【例3.1】关系表达式实例。程序源码如下:#include<stdio.h>intvoidmain(){inttrue,false;true=(3>2);false=(3==2);printf("true=%d;false=%d\n",true,false);return0;}【例3.2】逻辑运算符实例。程序源码如下:voidvoidmain(){charc='k';inti=1,j=2,k=3;floatx=3e+5,y=0.85;printf("%d,%d\n",!x*!y,!!!x);printf("%d,%d\n",x||i&&j-3,i<j&&x<y);printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k);}【例3.3】自增、自减运算符实例。程序源码如下:#include<stdio.h>voidvoidmain(){inti=8;printf("%d\n",++i);printf("%d\n",--i);printf("%d\n",i++);printf("%d\n",i--);printf("%d\n",-i++);printf("%d\n",-i--);}【例3.4】自增、自减运算符实例。程序源码如下:#include<stdio.h>voidvoidmain(){inti=5,j=5,p,q;p=(i++)+(i++)+(i++);q=(++j)+(++j);printf("%d,%d,%d,%d",p,q,i,j);}【例3.5】输出两个数中的大数。程序源码如下:#include<stdio.h>voidvoidmain(){inta,b,max;printf("\ninputtwonumbers:");scanf("%d%d",&a,&b);printf("%d",max=a>b?a:b);}【例3.6】逗号运算符实例。程序源码如下:#include<stdio.h>voidvoidmain(){inta=2,b=4,c=6,x,y;y=((x=a+b),(b+c));printf("y=%d,x=%d",y,x);}练习四【例4.5】求1X2X3X4X5的算法,用C语言表示。程序源码如下:#include<stdio.h>voidmain(){inti,t;t=1;i=2;while(i<=5){t=t*i;i=i+1;}printf(“%d”,t);}【例4.6】printf函数使用实例。程序源码如下:#include<stdio.h>voidvoidmain(){inta=88,b=89;printf("%d%d\n",a,b);printf("%d,%d\n",a,b);printf("%c,%c\n",a,b);printf("a=%d,b=%d",a,b);}【例4.7】printf函数应用实例。程序源码如下:#include<stdio.h>voidvoidmain()inta=15;floatb=138.357620;doublec=35648256.3645287;chard='p';printf("a=%d,%5d,%o,%x\n",a,a,a,a);printf("b=%f,%lf,%5.4lf,%e\n",b,b,b,b);printf("c=%lf,%f,%8.4lf\n",c,c,c);printf("d=%c,%8c\n",d,d);}【例4.8】printf函数应用实例。程序源码如下:#include<stdio.h>voidmain(){inti=8;printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--);}【例4.9】printf函数应用实例。程序源码如下:#include<stdio.h>voidmain(){inti=8;printf("%d\n",++i);printf("%d\n",--i);printf("%d\n",i++);printf("%d\n",i--);printf("%d\n",-i++);printf("%d\n",-i--);}【例4.10】putchar函数应用实例。程序源码如下:#include<stdio.h>voidvoidmain(){chara='B',b='o',c='k';putchar(a);putchar(b);putchar(b);putchar(c);putchar('\t');putchar(a);putchar(b);putchar('\n');putchar(b);putchar(c);}【例4.11】scanf函数应用实例。程序源码如下:#include<stdio.h>voidvoidmain(){inta,b,c;printf("inputa,b,c\n");scanf("%d%d%d",&a,&b,&c);printf("a=%d,b=%d,c=%d",a,b,c);}【例4.12】格式字符串应用实例。程序源码如下:#include<stdio.h>voidvoidmain(){chara,b;printf("inputcharactera,b\n");scanf("%c%c",&a,&b);printf("%c%c\n",a,b);}【例4.13】格式字符串应用实例。程序源码如下:#include<stdio.h>voidvoidmain(){chara,b;printf("inputcharactera,b\n");scanf("%c%c",&a,&b);printf("\n%c%c\n",a,b);}【例4.14】输入一个小写字母,输出其ASCII码和对应的大写字母。程序源码如下:#include<stdio.h>voidvoidmain()chara;printf("inputacharacter:\n");a=getchar();printf("%d\n",a);putchar(a-32);}【例4.15】输入三角形的三边长,求三角形面积。程序源码如下:#include<stdio.h>#include<math.h>voidmain(){floata,b,c,s;doublearea;scanf(“%f,%f,%f”,&a,&b,&c)s=1.0/2*(a+b+c);area=sqrt(s*(s-a)*(s-b)*(s-c));printf(“a=%7.2f,b=%7.2f,c=%7.2f,s=%7.2f\n”,a,b,c,s)printf(“area=%7.2f\n”,area)}练习五【例5.1】输入两个数到变量x和y中,如果x>y则输出x。程序源码如下:#include<stdio.h>voidmain(){intx,y;printf("pleaseinputx,y:");scanf("%d,%d",&x,&y);if(x>y)printf("x>y\n");printf("%d,%d\n",x,y);}【例5.2】某应用软件的登录密码是123,用户从键盘输入密码,如果正确则显示“欢迎使用本软件”的字样,如果密码错误则显示“密码错,请重新输入!”的字样。#include<stdio.h>voidmain()intpassword;printf("请输入密码:\n");scanf("%d",&password);if(password==123)printf("欢迎使用本软件!”);elseprintf("密码错,请重新输入!”);}注意:本题要启动中文DOS运行环境,否则程序中的汉字将显示为乱码,以下例题如有汉字输入输出均与此相同,不再多述。【例5.3】编程实现以下问题求解:给出一百分制成绩,要求输出成绩等级A、B、C、D、E。设90分以上为A,80〜89分为B,70〜79分为C,60〜69分为D,60分以下为E。程序源码如下:#include<stdio.h>voidmain(){intscore;printf("请输入成绩:");scanf("%d",&score);printf("score=%d:",score);if(score>=90)printf("A\n");elseif(score>=80)printf("B\n");elseif(score>=70)printf("C\n");elseif(score>=60)printf("D\n");elseprintf("E\n");}【例5.4】从键盘上输入3个实数a、b、c,求出其中的最小值并输出。程序源码如下:#include<stdio.h>voidmain(){floatx,y,z,min;printf("请输入x,y,z:");scanf("%f,%f,%f",&x,&y,&z);if(x<y){if(x<z)min=x;elsemin=z;}else{if(y<z)min=y;elsemin=z;}printf("min=%f\n",min);}【例5.5】从键盘上输入一个字母,如果这个字母是小写字母就将它转换成大写字母程序源码如下:#include<stdio.h>voidmain(){charx;printf("请输入一个字母:”);scanf("%c",&x);x=(x>=a&&x<=z)?(x-32):x;/*大小写字母ASCII码值相差32*/printf(”转换成大写为:%c\n",x);}【例5.6】设计一个程序,要求输入数字1,显示Monday,输入数字2,显示Tuesday ,一直到输入数字7,显示Sunday,除此以外,显示error。程序源码如下:#include<stdio.h>voidmain(){intx;printf("inputintegernumber:");scanf("%d",&x);switch(x){case1:printf("Monday\n");break;case2:printf("Tuesday\n");break;case3:printf("Wednesday\n");break;case4:printf("Thursday\n");break;case5:printf("Friday\n");break;case6:printf("Saturday\n");break;case7:printf("Sunday\n");break;default:printf("error\n");【例5.7】编程序实现输入不同的月份输出相应的季节。按农历一般规定1〜3月为春季,4〜6月为夏季,7〜9月为秋季,10〜12月为冬季。程序源码如下:#include<stdio.h>voidmain(){intmonth;printf("\n请输入月份:");scanf("%d",&month);switch(month){case1:case2:case3:printf("春季!\n");break;case4:case5:case6:printf("夏季!\n");break;case7:case8:case9:printf("秋季!\n");break;case10:case11:case12:printf("冬季!\n");break;default:printf("输入的数据非法!\n");}}【例5.8】编程实现一个能进行加减乘除运算的简易计算器程序。程序源码如下:#include<stdio.h>voidmain(){floata,b;charch;printf("inputexpression:a+(-,*,/)b\n");scanf("%f%c%f",&a,&ch,&b);switch(ch){case printf("resultis%f\n",a+b); break;case printf("resultis%f\n",a-b); break;case printf("resultis%f\n",a*b); break;caseif(b!=0)printf("resultis%f\n",a/b);elseprintf("除数为0!\n");break;default:printf("inputerror\n");}}练习六例6.1】利用if-goto循环结构求解1到100的累加和程序源码如下:#include<stdio.h>voidmain(){intn=1,s=0;loop:s=s+n;n++;if(n<=100)gotoloop;printf("s=%d\n",s);}【例6.2】用for循环解决1到100的累加问题。程序源码如下:#include<stdio.h>voidmain(){inti,s=0;for(i=1;i<=100;i++)s=s+i;printf("s=%d\n",s);}【例6.3】求数学公式的和:s=l+3+5+„+99。程序源码如下:#include<stdio.h>voidmain(){ints=0,i;for(i=1;i<=99;i=i+2){s=s+i;printf("i=%d\ts=%d\n",i,s);【例6.4】求n的阶乘n!(n!=1*2*„„*n)。程序源码如下:#include<stdio.h>voidmain(){inti,n;longresult=1;printf(“inputn:”);scanf(“%d”,&n);for(i=1;i<=n;i++)result=result*i;printf("%d!=%ld\n",n,j);}【例6.5】从键盘上输入10个数,求其平均值。程序源码如下:#include<stdio.h>voidmain(){inti;floatf,sum;for(i=1,sum=0.0;i<11;i++){scanf("%f",&f);sum=sum+f;}printf("average=%f\n",sum/10);}【例6.6】从键盘上输入若干正整数,求其中最大数和最小数,输入的数以0为中止标记。程序源码如下:#include<stdio.h>voidmain(){intx,max,min;scanf("%d",&x);max=min=x;for(;x!=0;){if(x<min)min=x;if(x>max)max=x;scanf("%d",&x);}printf("max=%dmin=%d\n",max,min);}【例6.7】国际象棋棋盘有64格,若在第1格放1粒谷;第2格放2粒谷;第3格放4粒谷;第4格放8粒谷„„如此一直放到第64格。假设2000000粒谷有一吨重,问需要多少吨谷才够放?程序源码如下:#include<stdio.h>voidmain(){inti;floatn,s;i=1;n=1.0;s=1.0;for(i=2;i<=64;i++){n=n*2;s=s+n;}printf("s=%f\n",s/2000000);}【例6.8】用while语句求1到100的累加和。程序源码如下:#include<stdio.h>voidmain(){inti=1,s=0;while(i<=100){s=s+i;i++;}printf(“s=%d\n”,s);}【例6.9】用do-while语句求1到100的累加和。#include<stdio.h>voidmain(){inti=1,s=0;do{s=s+i;i++;}while(i<=100);printf(“s=%d\n”,s);}【例6.10】从键盘上连续输入若干个字符(以回车换行符为结束标记),统计字符个数(不含回车换行符)。程序源码如下:#include<stdio.h>voidmain(){intn=0;charc;while((c=getchar())!='\n')n++;printf("numberofcharacter=%d\n",n);}程序运行结果如下:Ruruweuiopjsbhcvgasfdugsdfg/numberofcharacter=27【例6.11】对比例10,用do-while循环结构解决相同问题。即从键盘上连续输入若干个字符(以回车换行符为结束标记),统计字符个数(不含回车换行符)。程序源码如下:#include<stdio.h>voidmain(){intn=-1;charc;don++;while((c=getchar())!='\n');printf("numberofcharacter=%d\n",n);}【例6.12】输入一个正整数(短整型),计算并输出该数的各位数字之和。反复执行直到输入为0时停止。程序源码如下:#include<stdio.h>voidmain(){intx,x1,x2,x3,x4,x5;scanf("%d",&x);while(x!=0){x5=x%10;x=x/10;x4=x%10;x=x/10;x3=x%10;x=x/10;x2=x%10;x1=x/10;printf("%d\n",x1+x2+x3+x4+x5);scanf("%d",&x);}}【例6.13】令s=l+2+3+4+……+n,求出使得s的值最接近999的n值。程序源码如下:#include<stdio.h>voidmain(){ints=0;intn=1;while(s<=999){s=s+n;n++;}n--;printf(“n=%d\n”,n);}【例6.14】要输出五行10个星号的图形,可以用一重循环的for语句来实现。程序源码如下:#include<stdio.h>voidmain(){inti,k;for(k=1;k<=5;k++)for(i=1;i<=10;i++){printf("*");}printf("\n");}}【例6.15】打印所有水仙花数(水仙花数是各位数字立方和等于该数本身的三位正整数)。程序源码如下:#include<stdio.h>voidmain(){inti,j,k,m,n;for(i=1;i<=9;i++)for(j=0;j<=9;j++)for(k=0;k<=9;k++){m=i*i*i+j*j*j+k*k*k;n=100*i+10*j+k;if(m==n)printf("%d\n",m);}}【例6.16】从键盘上接收字符并显示出来,当按Tab键时结束输入。程序源码如下:#include<stdio.h>voidmain(){charch;for(;;){scanf("%c",&ch);if(ch==\t)break;elseprintf("%c",ch);}}【例6.17】设有一张厚0.1mm而面积足够大的纸,如果将它不断地对折,问对折多少次后,其厚度可达到或超过珠穆朗玛峰的高度(8848.130米)。程序源码如下:#include<stdio.h>voidmain(){floath=0.1;intn=0;while(h<=8848130){h=h*2;n++;}printf("itneeds%dtimes!\n",n);}【例6.18】对除了是3的倍数以外的1〜100的数求和。程序源码如下:#include<stdio.h>voidmain(){ints,i;s=0;for(i=1;i<=100;i++){if(!(i%3))continue;s=s+i;}printf("s=%d",s);}【例6.19】检查输入的一行字符中有无相邻两字符相同程序源码如下:#include<stdio.h>voidmain(){chara,b;printf("inputastring:");b=getchar();while((a=getchar())!='\n')if(a==b){printf("thestringyouinputhavesamecharacternearby\n");break;}b=a;}}练习七【例7.1】一维数组引用的示例。程序源码如下:#include<stdio.h>voidmain(){intnum[5],i;num[0]=5;for(i=1;i<4;i++)num[i]=i+5;printf("inputthe5thnumber:");scanf("%d",&num[4]);printf("numbersofarraynumare:\n");for(i=0;i<5;i++)printf("num[%d]=%d",i,num[i]);}【例7.2】从键盘上输入10个字符,然后按相反次序输出程序源码如下:#include<stdio.h>voidmain(){chara[10];inti;printf("input10char:");for(i=0;i<10;i++)scanf("%c",&a[i]);printf("\n");printf("output10char:");for(i=9;i>=0;i--)printf("%c",a[i]);}程序运行结果如下:input10char:qwertyuiop/output10char:poiuytrewq【例7.3】用“选择排序法”对一维数组中的整数进行从小到大的顺序排列。程序源码如下:#include<stdio.h>voidmain(){intn,i,k,x,min,min_k,a[100];printf("输入整数个数(vlOO):");scanf("%d",&n);for(i=O;ivn;i++){printf("输入第%小个整数:",i+1);scanf("%d",&a[i]);}for(k=O;kvn-1;k++){min=a[k];min_k=k;for(i=k;ivn;i++)if(a[i]vmin){min=a[i];min_k=i;}x=a[min_k];a[min_k]=a[k];a[k]=x;}printf("输出排序结果:”);for(i=O;ivn;i++)printf("%d",a[i]);}【例7.4】从键盘输入10个数,求其中的最大数和最小数,并按逆序打印出该数组程序源码如下:#includevstdio.h>voidmain()floata[1O];inti;floatmax=-1e2O,min=1e2O;for(i=0;i<=9;i++)scanf("%f",&a[i]);for(i=0;i<=9;i++){if(a[i]>max)max=a[i];if(a[i]<min)min=a[i];}printf("max=%6.2f,min=%6.2f\n",max,min);for(i=9;i>=0;i--)printf("%6.2f\t",a[i]);}【例7.5】从键盘输入一个3*4的整型数组,求出其中的最大值和最小值并显示数组内容。程序源码如下:voidmain(){inta[3][4];inti,j,min,max;for(i=0;i<3;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);min=a[0][0];max=a[0][0];for(i=0;i<3;i++)for(j=0;j<4;j++){if(min>a[i][j])min=a[i][j];if(max<a[i][j])max=a[i][j];}printf("max=%dmin=%d\n",max,min);for(i=0;i<3;i++)for(j=0;j<4;j++){printf("a[%d][%d]=%d\t",i,j,a[i][j]);}}【例7.6】向一个3*3的矩阵(整型数组)输入数据,输出对角线元素并求它们的和程序源码如下:voidmain(){inta[3][3],sum=0;inti,j;printf("inputdata:\n");for(i=0;i<3;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);for(i=0;i<3;i++){printf("a[%d][%d]=%d\t",i,i,a[i][i]);sum=sum+a[i][i];}printf("\nsum=%d",sum);}【例7.7】从键盘上输入一个2*3的矩阵,将其转置后形成3*2矩阵输出。程序源码如下:#include<stdio.h>voidmain(){inta[2][3],b[3][2],i,j;for(i=0;i<2;i++)for(j=0;j<3;j++)scanf("%d",&a[i][j]);for(i=0;i<3;i++)for(j=0;j<2;j++)b[i][j]=a[j][i];for(i=0;i<3;i++){for(j=0;j<2;j++)printf("%4d",b[i][j]);printf("\n");}}【例7.8】输入3个学生的学号和3门课程的成绩(整数),统计并输出3门课程总分最高的学生的学号和总分。程序源码如下:voidmain()ints[3][5],i,max,max_i;for(i=0;i<3;i++){printf("inputstudentno%d,s1,s2,s3:\n",i+1);scanf("%d,%d,%d,%d",&s[i][0],&s[i][1],&s[i][2],&s[i][3]);s[i][4]=s[i][1]+s[i][2]+s[i][3];}max=s[0][4],max_i=0;for(i=1;i<3;i++)if(max<s[i][4]){max=s[i][4];max_i=i;}printf("studentno=%dtotal=%d",s[max_i][0],s[max_i][4]);}【例7.9】输出一维字符串数组的值。程序源码如下:voidmain(){charc[10]={'I','','a','m','','a','','b','o','y'};inti;for(i=0;i<10;i++)printf("%c",c[i]);}【例7.10】输出如下所示的图案。*******程序源码如下:voidmain(){chara[5][5]={'','','*','','',,,,},'','*','*','*','',,,,},{'*','*','*','*','*'},I, , , ,J?'','*','*','*','',,,,},'','','*','','',,,,};inti,j;for(i=0;i<5;i++)printf("\n");for(j=0;j<5;j++)}【例7.11】检测一给定的字符串的长度(字符数),不包括结束符'\0'。程序源码如下:voidmain(){staticcharstr[]="heisagoodstudent!";inti=0;while(str[i]!='\0')i++;printf("thelengthofstringis%d\n",i);}【例7.12】从键盘上输入一行字符(不多于40个,以回车换行符作为输入结束标记)将其中的大写字母改为小写字母,其它字符不变,然后逆向输出。程序源码如下:voidmain(){chara[40];intn=0;printf("inputchar(<40):");do{scanf("%c",&a[n]);if(('A'<=a[n])&&(a[n]<='Z'))a[n]+=32;n++;}while(a[n-1]!='\n');n=n-2;while(n>=0)printf("%c",a[n--]);}【例7.13】从键盘上输入一字符串,并将其显示在屏幕上。程序源码如下:#include<stdio.h>voidmain()charstr[20];inti;for(i=0;i<14;i++)scanf("%c",&str[i]);for(i=0;i<14;i++)printf("%c",str[i]);}【例7.14】从键盘上输入一字符串,并将其显示在屏幕上程序源码如下:#include<stdio.h>voidmain(){charstr[20];scanf("%s",str);printf("%s",str);}【例7.15】从键盘上输入两个字符串,输出其中较大者。程序源码如下:#include<stdio.h>voidmain(){chara[80],b[80],flag='';inti=0;printf("string1:");scanf("%s",a);printf("string2:");scanf("%s",b);while((a[i]!='\0')&&(b[i]!='\0'))if(a[i]<b[i]){flag='b';break;}elseif(b[i]<a[i]){flag='a';break;}elsei++;if(flag=='')if(a[i]=='\0')flag='b';elseflag='a';if(flag=='a')elseprintf("max-string:%s\n",b);}【例7.16】编写一程序,将两个字符串连接起来。程序源码如下:voidmain(){chars1[80],s2[40];inti=0,j=0;printf("inputstring1:");scanf("%s",s1);printf("inputstring2:");scanf("%s",s2);while(s1[i]!='\0')i++;while(s2[j]!='\0')s1[i++]=s2[j++];s1[i]='\0';printf("newstring:%s",s1);}练习八【例8.1】编写程序求三个整数的最大值,其中三个整数由键盘输入程序源码如下:#include<stdio.h>intmax(intx,inty,intz){intm;if(x>y)m=x;elsem=y;if(z>m)m=z;return(m);}voidmain(){intn1,n2,n3,result;scanf("%d,%d,%d",&n1,&n2,&n3);result=max(n1,n2,n3);printf("最大值result=%d",result);}【例8.2】以下程序通过调用swap函数,对调主函数中变量x和y的值,请观察程序的输出结果。程序源码如下:#include<stdio.h>floatswap(floata,floatb){floatt;printf("swap函数运行,交换前a=%.2f,b=%.2f\n",a,b);t=a;a=b;b=t;printf("swap函数运行,交换后a=%.2f,b=%.2f\n",a,b);return0;}voidmain(){floatx=10.0,y=20.0;printf("调用前x=%.2f,y=%.2f\n",x,y);swap(x,y);printf("调用后x=%.2f,y=%.2f\n",x,y);}【例8.3】数组名作为函数参数应用举例。程序源码如下:#include<stdio.h>intarrx(int*n);voidmain(){inti;intm[10];for(i=0;i<10;i++)m[i]=i;arrx(m);}intarrx(int*n){intj;for(j=0;j<10;j++)printf("%3d",*(n++));printf("\n");}【例84】判断下面程序中sum()函数的返回值类型。程序源码如下:#include<stdio.h>sum(floatx,floaty){floats;s=x+y;return(s);}voidmain(){floata,b;ints;scanf("%f,%f",&a,&b);s=sum(a,b);printf("sum=%d\n",s);}【例8.5】func函数被调用,func函数不返回值,只完成某种操作。程序源码如下:#include<stdio.h>func(){printf(”这是一个C函数调用!\n");}voidmain(){func();}【例8.6】调用求两个实数的最大值函数fmax(),求三个数中的最大数。程序源码如下:#include<stdio.h>floatfmax(floatx,floaty){floatm;m=x>y?x:y;return(m);}voidmain(){floata,b,c,result;scanf("%f,%f,%f",&a,&b,&c);result=fmax(fmax(a,b),c);printf("最大值result=%f\n",result);}【例8.7】编写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。程序源码如下:#include<stdio.h>intgcd(inta,intb) /*运用辗转相除法求最大公约数*/{intr,t;if(a<b){t=a;a=b;b=t;}r=a%b;while(r!=0){a=b;b=r;r=a%b;}return(b);}intlcm(inta,intb) /*求最小公倍数*/{intr;r=gcd(a,b);return(a*b/r);}voidmain(){intx,y;printf("请输入两个整数:\n");scanf("%d,%d",&x,&y);printf(”最大公约数=%d\n",gcd(x,y));/*调用gcd作为printf的参数表达式*/printf(”最小公倍数=%d\n",lcm(x,y));}【例88】用递归调用求n!,并输出结果。程序源码如下:#include<stdio.h>floatfac(intn) /*定义计算n!的函数*/{floatf;if(n<0)printf("n<0,dataerror!\n");elseif(n==0||n==1)f=1;elsef=n*fac(n-1);/*递归调用*/return(f);}voidmain(){intn;floaty;printf("请输入一个整数:\n");scanf("%d",&n);y=fac(n);printf("%d!=%f\n",n,y);}【例8.9】Hanoi塔问题程序源码如下:#include<stdio.h>voidmove(charone,chartwo){printf("%c--->%c\n",one,two);}voidhanoi(intn,charx,chary,charz){if(n==1)move(x,z);else{hanoi(n-1,x,z,y);move(x,z);hanoi(n-1,y,x,z);voidmain(){intm;printf("\nInputthenumberofdisks:");scanf("%d",&m);printf("Thestepstomoving%3ddiskesis:\n",m);hanoi(m,'A','B','C');}【例8.10】静态局部变量的作用。程序源码如下:voidmain(){inti;voidf(); /*函数说明*/for(i=1;i<=5;i++)f(); /*函数调用*/}voidf() /*函数定义*/{autointj=0;++j;printf("%d\n",j);}【例8.11】求2+4+6+„„+200的和。程序源码如下:voidmain(){registeri,s=0;for(i=2;i<=200;i+=2)s=s+i;printf("s=%d\n",s);}练习九例9.1】简单的宏替换应用实例,计算圆的周长、面积、体积程序源码如下:#definePI3.1415926voidmain(){intr;floatl,s,v;printf("inputradius:");scanf("%d",&r);l=2.0*PI*r;s=PI*s=PI*r*r;v=4.0/3*PI*r*r*r;printf("l=%5.2f,s=%5.2f,v=%5.3f",l,s,v);}【例9.2】宏定义举例。程序源码如下:#defineJJVUjiujiangvocationaluniversityvoidmain(){printf("JJVU");}【例9.3】宏定义嵌套举例。程序源码如下:#defineA3.1415#defineBA*zvoidmain(){intz=4;printf("%5.2f",B);}【例9.4】宏定义举例程序源码如下:#definePprintf#defineB"%d"#defineF"%5.2f\n"voidmain(){inti=2,j=3;floatc=4.5,d=2.5;P(BF,i,c);P(BF,j,d);【例9.5】用有参数的宏定义输出3个数中最小值,从而实现简单的函数功能。程序源码如下:#defineMIN(a,b)(a<b)?a:bvoidmain(){inti,j,z,min;printf("input3numbers:\n");scanf("%d%d%d",&i,&j,&z);min=MIN(i,j);min=MIN(z,min);printf("min=%d\n",min);}【例9.6】实参是表达式的宏定义程序。程序源码如下:#defineH(a)(a)*(a+2)voidmain(){intb,i;printf("inputanumber:\n");scanf("%d",&b);i=H(b*2);printf("i=%d\n",i);}【例9.7】将上例中形参的括号去掉后的程序。程序源码如下:#defineH(a)a*a+2voidmain(){intb,i;printf("inputanumber:\n");scanf("%d",&b);i=H(b*2);printf("i=%d\n",i);}【例9.8】带参宏定义与函数调用的不同。程序源码如下:#include"stdio.h"#defineP2(a)((a)*(a))P1(inta)return((a)*(a));}voidmain(){inti=5,j=5;while(i>=1)printf("%d\n",P1(i--));while(j>=1)printf("%d\n",P2(j--));}【例9.9】用宏定义来定义多个语句的输出结果。程序源码如下:#definePI3.1415926#defineH(a,b,c)a=PI*r*r;b=2*PI*r;c=4.0/3*PI*r*r*r;voidmain(){intr=4;floatl,m,n;H(l,m,n);printf("l=%f\nm=%f\nn=%f\n",l,m,n);}【例9.10】外部函数用文件包含实现。程序源码如下:在文件f1.c中编写如下:#include<stdio.h>#include"f2.c"voidvoidmain(){intn=10;printf("%ld",f(n));}在文件f2.c中编写如下:longintf(intn){inti;longintp=1;for(i=1;i<=n;i++)p=p*i;return(p);}【例9.11】第一种条件编译的应用程序源码如下:#include<stdio.h>#defineSUM1voidvoidmain(){inta=0;#ifdefSUMa=a+1;#elsea=a-1;#endifprintf("%d",a);}【例9.12】第二种条件编译的应用程序源码如下:#include<stdio.h>#defineSUM1voidvoidmain(){inta=0;#ifndefSUMa=a+1;#elsea=a-1;#endifprintf("%d",a);}【例9.13】第三种条件编译的应用程序源码如下:#include<stdio.h>#defineK1voidvoidmain(){floatc,s;printf("pleaseinputanumber:\n");scanf("%f",&c);#ifKs=2*3.1415*c;printf("zhouchangis:%f\n",s);#elses=3.1415*c*c;printf("mianjiis:%f\n",s);#endif}练习十【例10.1】在定义时对结构体变量赋初值。程序源码如下:#include<stdio.h>voidvoidmain(){structstudent{intnum;charname[10];charssex;floatlength;}a={102,"li",'B',167};printf("Num=%d\tName=%s\tSsex=%c\tLength=%5.2f\n",a.num,,a.ssex,a.length);}【例10.2】在定义后对结构体变量赋初值。程序源码如下:#include<stdio.h>#include<string.h>structstudent{intnum;charname[10];charssex;floatlength;}a;voidvoidmain(){a.num=102;printf("inputname:\n");gets();a.ssex='B';a.length=167;printf("Num=%d\tName=%s\tSsex=%c\tLength=%5.2f\n",a.num,,a.ssex,a.length);}【例10.3】计算学生的平均成绩和及格的人数。要求:结构体数组初始化方法采用定义结构体数组时初始化。程序源码如下:structstudent{intnumber;charname[10];charsex;floatscore;}stu[5]={{1,"ZhouPing",'M',40},{2,"Liluping",'M',60.5},{3,"ZhouYang",'G',76},{4,"ZhouYong",'M',21},{5,"CaoJing",'M',86},};voidmain(){inti,count=0;floata,sum=0;for(i=0;i<5;i++){sum+=stu[i].score;if(stu[i].score>60)count=count+1;}printf("s=%f\n",sum);a=sum/5;printf("average=%f\ncount=%d\n",a,count);}程序运行结果如下:s=283.500000average=56.700001count=3【例10.4】计算学生的平均成绩和及格的人数。要求:结构体数组初始化方法采用定义结构体数组之后初始化。程序源码如下:#include<stdio.h>structstudentintnumber;charname[20];charsex;floatscore;};voidvoidmain(){structstudentstu[5]={{1,"ZhouPing",'M',40},{2,"Liluping",'M',60.5},{3,"ZhouYang",'G',76},{4,"ZhouYong",'M',21},{5,"CaoJing",'M',86},};inti,count=0;floata,sum=0;for(i=0;i<5;i++){sum+=stu[i].score;if(stu[i].score>60)count=count+1;}printf("s=%f\n",sum);a=sum/5;printf("average=%f\ncount=%d\n",a,count);}【例10.5】编写一个函数,输出结构体变量各成员的值。程序源码如下:#include<stdio.h>structstudent{intnumber;intcomputer,maths,english;ints;};voidp(structstudenta){printf("number=%d\tcomputer=%d\tmaths=%d\tenglish=%d\n",a.number,puter,a.maths,a.english);voidvoidmain(){structstudentb;b.number=6;puter=62;b.maths=79;b.english=90;p(b);}【例10.6】计算一个班(假设5名学生)中各学生的总成绩程序源码如下:#include<stdio.h>structstudent{intnumber;intcomputer,maths,english;ints;};voidsum(structstudentstu[],intn){inti;for(i=0;i<n;i++){stu[i].s=stu[i].computer+stu[i].maths+stu[i].english;}};voidvoidmain(){inti;structstudentb[5]={{1,60,70,40},{2,90,80,69},{3,84,64,76},{4,76,80,64},{5,76,64,86},};sum(b,5);for(i=0;i<5;i++){printf("%d\t%d\t\n",b[i].number,b[i].s);}【例10.7】定义一个简单共用体,通过对其成员的多次赋值来研究成员值的变化情况。程序源码如下:#include<stdio.h>unionsz{inta;floatb;};voidvoidmain(){unionszx;printf(“inputa:\n”);scanf(“%d”,&x.a);printf(“x.a=%d\n”,x.a);printf(“inputb:\n”);scanf(“%f”,&x.b);printf(“x.b=%f\n”,x.b);printf(“x.a=%d\n”,x.a);}【例10.8】输出一张表格,内有一个学校的若干人员信息,包括专职教师和行政人员的信息。程序源码如下:#include<stdio.h>unionh{charzhicheng[10];intjibie;};structperson{intnum;charname[10];charjob;unionhzhiji;}person1[2];voidvoidmain(){intn,i;for(i=0;i<2;i++){scanf("%s%d%c",&person1[i].name,&person1[i].num,&person1[i].job);if(person1[i].job=='T')scanf("%s",&person1[i].zhiji.zhicheng);elsescanf("%d",&person1[i].zhiji.jibie);}printf("\nnum\tname\tjob\tjibie/zhicheng\n");for(i=0;i<2;i++)if(person1[i].job=='X')printf("%d\t%s\t%c\t%d\n",person1[i].num,person1[i].name,person1[i].job,person1[i].zhiji.jibie);elseif(person1[i].job=='T')printf("%d\t%s\t%c\t%s\n",person1[i].num,person1[i].name,person1[i].job,person1[i].zhiji.zhicheng);}【例10.9】输入一个数,显示相应的月份。程序源码如下:#include<stdio.h>voidmain(){inti,k;typedefenumyear{JAN=1,FEB,MAR,APR,AUG,SEP,OCT,NOV,DEC}A;Amonth[12],j;printf("\nPleaseInputTheMonth:");scanf("%d",&i);j=JAN;for(k=1;k<=12;k++){month[k]=j;j++;}switch(month[i]){caseJAN:printf("ThisisJANMonth.");break;caseFEB:printf("ThisisFEBMonth.");break;caseMAR:printf("ThisisMARMonth.");break;caseAPR:printf("ThisisAPRMonth.");break;caseAUG:printf("ThisisAUGMonth.");break;caseSEP:printf("ThisisSEPMonth.");break;caseOCT:printf("ThisisOCTMonth.");break;caseNOV:printf("ThisisNOVMonth.");break;caseDEC:printf("ThisisDECMonth.");break;default:printf("Inputerror!");break;}}练习十一【例11.1】取内容运算符的使用。程序源码如下:voidmain(){inta,*p;p=&a;*p=100;printf("%d\n",a);a=200;printf("%d",*p);}【例11.2】改变指针变量的指向。程序源码如下:voidmain(){inta=10,b=20,*p;p=&a;*p=15;printf("%d,%d\n",*p,a);p=&b;b=25;printf("%d,%d",*p,b);}【例11.3】比较指向数组的指针变量的大小。程序源码如下:voidmain(){inta[8],*p1,*p2;p1=&a[1];p2=&a[4];if(p1==p2)printf("p1、p2指向同一元素");if(p1>p2)printf("p1处于高地址位置");if(p1<p2)printf("p1处于低地址位置");}【例11.4】两个指针变量相减。程序源码如下:voidmain(){inta[8],*p1,*p2;p1=&a[1];p2=&a[4];printf("%d",p2-p1);}【例11.5】采用指针法访问数组元素。程序源码如下:voidmain(){inta[5],*p1,i;p1=a;for(i=0;i<5;i++)*(p1+i)=i;for(i=0;i<5;i++)printf("a[%d]=%d\n",i,*(p1+i));}【例11.6】指向一维数组的指针变量指向二维数组。程序源码如下:voidmain(){inta[3][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11}},*p1,*p2;p1=&a[1][2];p2=p1+4;printf("%d,%d",*p1,*p2);}【例11.7】将二维数组中的元素输出。程序源码如下:voidmain(){inta[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};int(*p)[4];inti,j;p=a;for(i=0;i<3;i++)for(j=0;j<4;j++)printf("%2d",*(*(p+i)+j));}【例11.8】指向字符串的指针变量。程序源码如下:voidmain(){char*s="Iamastudent.";printf("%c,",s[2]);printf("%c",*(s+2));}【例11.9】指向字符串的指针变量。程序源码如下:voidmain(){char*s="Iamastudent.";printf("%s\n",s);printf("%s\n",s+3);}【例11.10】程序源码如下:voidfun(intnum){num=num*2;}voidmain(){inti=5;fun(i);printf("%d",i);}【例11.11】程序源码如下:voidfun(int*num){*num=*num*2;}voidmain(){inti=5;fun(&i);printf("%d",i);}【例11.12】编写程序求五门课程的平均成绩程序源码如下:floataverage(float*pscore){inti;floatav,s=0;for(i=0;i<5;i++){s=s+*pscore;pscore++;}av=s/5;returnav;}voidmain(){floatscore[5],ave;inti;printf("请输入五个分数:”);for(i=0;i<5;i++)scanf("%f",&score[i]);ave=average(score);printf("平均分为:%.2f",ave);}【例11.13】求两个数的最大值。程序源码如下:int*max(inta,intb){if(a>b)return&a;elsereturn&b;}voidmain()intx,y,*m;printf(”请输入两个整数:”);scanf("%d%d",&x,&y);m=max(x,y);printf(”最大值为:%d",*m);}【例11.14】求两个数的最大值。程序源码如下:intmax(inta,intb){if(a>b)returna;elsereturnb;}voidmain(){intx,y,m;int(*p)();p=max;printf(”请输入两个整数:”);scanf("%d%d",&x,&y);m=p(x,y);printf(”最大值为:%d",m);}【例11.15】找到年龄最小的学生,并输出结果程序源码如下:structstudent{char*name;intage;}stu[4]={"li",18,"wang",16,"zhang",19,"sun",17};voidmain(){structstudent*pstu,*min_age;inti;min_age=pstu=stu;for(i=0;i<4;i++){if(pstu->age<min_age->age)min_age=pstu;pstu++;}printf("年龄最小的是:%s,为%d岁",min_age->name,min_age->age);}【例11.16】从键盘输入5个整数,统计其中奇数的个数。程序源码如下:#include"malloc.h"voidmain(){int*p,i,odd=0;p=(int*)malloc(5*sizeof(int));printf(请输入5个整数:");for(i=0;i<5;i++)scanf("%d",p+i);for(i=0;i<5;i++)if(p[i]%2!=0)odd++;printf("其中有%小个奇数",odd);free(p);}【例11.17】从键盘输入一行字符,写入一个文件,再把该文件的内容读出显示在屏幕上。程序源码如下:#include"stdio.h"#include"process.h"voidmain(){FILE*fp;charch;if((fp=fopen("c:\\sl.txt","wt+"))==NULL)/*建立文件*/{printf("\nerroronopenc:\\sl.txtfile!");exit(l);}printf("请输
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高效沟通协作机制建立方案
- 乡村环境综合整治技术作业指导书
- 电力行业供电安全告知书
- 房屋买卖按揭合同
- 商业场所租赁使用协议及设备设施管理细则协议
- 智能办公系统集成方案签署协议
- 高考语文复习-文言文重点字词解析练习
- 高考英语整句翻译汉译英专题训练500题(含答案)
- 新品手机使用说明手册
- 企业研发创新基金合作协议
- 《中小学科学教育工作指南》解读与培训
- 跨学科主题学习的意义与设计思路
- 2025年浙江国企台州黄岩站场管理服务有限公司招聘笔试参考题库附带答案详解
- 教科版三年级下册科学全册单元教材分析
- 2025年国家铁路局工程质量监督中心招聘历年高频重点提升(共500题)附带答案详解
- 加快形成农业新质生产力
- 2025年中粮集团招聘笔试参考题库含答案解析
- 湖北省七市2025届高考数学一模试卷含解析
- 数字电子技术(广东工业大学)知到智慧树章节测试课后答案2024年秋广东工业大学
- 安徽省淮北一中2025届高三冲刺模拟数学试卷含解析
- 2024年四川省绵阳市中考语文试卷(附真题答案)
评论
0/150
提交评论