2013c语言第5次作业答案
- 格式:doc
- 大小:28.00 KB
- 文档页数:4
C语⾔程序设计第五次作业——循环结构(1)(⼀)改错题输出华⽒摄⽒温度转换表:输⼊两个整数lower和upper,输出⼀张华⽒摄⽒温度转换表,华⽒温度的取值范围是{lower,upper},每次增加2℉。
计算公式如下:c = 5×(f-32)/9其中,c表⽰摄⽒温度,f表⽰华⽒温度。
输⼊输出样例1: Enter lower:32 Enter upper:35 fahr celsius 32 0.0 34 1.1输⼊输出样例2: Enter lower:40 Enter upper:30 fahr celsius源程序(有错误的程序)#include <stdio.h>int main(void){int fahr , lower, upper; /* fahr表⽰华⽒度 */double celsius; /* celsius表⽰摄⽒度 */printf("Enter lower:");scanf("%d",&lower);printf("Enter upper:");scanf("%d",&upper);printf("fahr celsius\n"); /* 显⽰表头 *//* 温度转换 */for (fahr = lower , fahr <= upper, fahr ++) ;celsius = 5 /9 * (fahr - 32.0);printf("%3.0f %6.1f\n", fahr, celsius);return 0;}对源程序进⾏编译,结果如下:错误信息1:错误原因:for语句后⾯加了分号。
改正⽅法:将分号去掉。
错误信息2:错误原因:for语句下没有加“{}“改正⽅法:在for语句下加上“{}”错误信息3:错误原因:发现for语句内语句⽤逗号隔开了。
作业四:简单程序设计1.printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列。
如果字符串长度大于5,则输出按方式(B);如果字符串长度小于5,则输出按方式(C)。
(5分)(重要)A) 从左起输出该字符串,右补空格 B) 按原字符长从左向右全部输出C) 右对齐输出该字符串,左补空格 D) 输出错误信息2.阅读以下程序,当输入数据的形式为:25,13,10<CR>(注:<CR>表示回车),则正确的输出结果为(D)。
(5分)main(){ int x,y,z;scanf(“%d%d%d”,&x,&y,&z);要和这里一样printf(“x+y+z=%d\n”,x+y+z);}A) x+y+z=48 B) x+y+z=35 C) x+z=35 D) 不确定值3.根据下面的程序及数据的输入和输出形式,程序中输入数据的正确形式应该为(WXY)。
(5分)main(){ char ch1,ch2,ch3;scanf(“%c%c%c”,&ch1,&ch2,&ch3);printf(“%c%c%c”,ch1,ch2,ch3);}4.以下的输出结果是(x=1,y=2*sum*=310 Squard is : 100)。
(5分)main(){ int x=1,y=2;printf(“x=%d y=%d * sum * =%d\n”,x,y,x+y);printf(“10 Squared is : %d\n”,10*10);}5.若a=3,b=4,c=5,x=,y=,z=,u=51274,n=128765,c1=’a’,c2=’b’,想得到以下的输出格式和结果,请写出程序(包括定义变量类型和设计输出)。
要求输出的结果如下:(20分)a= 3 b= 4 c= 5x=,y=,z=x+y= y+z= z+x=u= 51274 n= 128765c1=’a’ or 97(ascll)c2=’b’ or 98(ascll)main(){ int a=3,b=4,c=5;float x=,y=,z=;unsigned u=51274;long n=128765;char c1=’a’,c2=’b’;printf(“a=%d b=%d c=%d\n”,a,b,c);printf(“x=%f ,y=%f, z=%f\n”,x,y,z);printf(“x+y=% y+z=%.2f z+x=%.2f\n”,x+y,y+z,z+x); printf(“u=%u n=%9ld \n”,u,n);printf(“c1=’%c’or %d (asc11) \n”,c1,c1);printf(“c2=’%c’or %d (asc11) \n”,c2,c2);}6.请写出下面程序的输出结果。
第5章习题参考答案2填空题(1)32(2)4(3)str1[7]= '\0';(4)for(i=0;i<6;i++) gets(a[i]);(5)strcpy(web, "");(6)int *p=a;(7)5(8)1(9)*(p+6)或*(s+6)4程序阅读题(1)6(2)str(3)60(4)bcdefgacdefgabdefgabc(5)a1e25程序填空题(1)# include <math.h> scanf("%f", &a[i]) s=0; x=a[0] fabs(a[i]-s) (2)scanf("%d",&n) a[i][i]=1 a[i-1][j-1] printf("\n")(3)b[i]!='\0' strcpy puts(b)(4)p=a[0]; 或p=&a[0][0]; *p六、编程题1、使用数组和指针2种方法来处理。
方法一(使用数组)#include <stdio.h>void main(){ int i=0,a[10],t;printf("Enter the 10 number=\n");for(i=0; i<10; i++)scanf("%d",&a[i]);for(i=0;i<5;i++){ t=a[i];a[i]=a[9-i];a[9-i]=t;}for(i=0; i<10; i++)printf("%d ",a[i]);printf("\n");}方法二(使用指针)#include <stdio.h>void main(){ int i=0,a[10],t,*p,*q;printf("Enter the 10 number=\n");for(p=a; p<a+10; p++)scanf("%d",p);p=a;q=a+9;for(;p<q;p++,q--){ t=*p;*p=*q;*q=t;}for(p=a; p<a+10; p++)printf("%d ",*p);printf("\n");}2、方法一(使用数组)#include <stdio.h>main(){int i, j, t, n, a[11]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};for(i=0;i<10;i++)printf("%d ", a[i]);printf("\n");printf("Enter the Move n=?");scanf("%d", &n);for(i=1; i<=n; i++){t=a[10];for(j=9;j>=0;j--) a[j+1]=a[j];a[0]=t;}for(i=0; i<=10; i++)printf("%d ", a[i]);getch();}方法二(使用指针)#include <stdio.h>void main(){ int i,t, n, a[11]={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10},*p=a;for(;p<a+11;p++)printf("%d ", *p);printf("\n");printf("Enter the Move n=?");scanf("%d", &n);for(i=1; i<=n; i++){p=a+10;t=*p;for(;p>a;p--) *p=*(p-1);*p=t;}for(p=a;p<a+11;p++)printf("%d ", *p);}3、#include <stdio.h>#include <stdlib.h>main(){int a[100], b[100], i, j, p, n=0, t;randomize();for(i=0; i<100; i++){a[i]=random(100);if(a[i]%2==0) b[n++]=a[i]; }for(i=0; i<n-1; i++){p=i;for(j=i+1; j<n; j++)if(b[j]>b[p]) p=j;t=b[p]; b[p]=b[i]; b[i]=t; }for(i=0; i<n; i++){printf("%d ", b[i]);if(i%10==9) printf("\n"); }getch();}4、#include <stdio.h>#include <stdlib.h>#define N 50main(){int a[N], i, j,p,t; randomize();for(i=0; i<N; i++){a[i]=random(100);for(j=0;j<i;j++)if(a[i]==a[j]){ i--;break;}}for(i=0; i<N-1; i++){p=i;for(j=i+1; j<N; j++)if(a[j]>a[p]) p=j;t=a[p]; a[p]=a[i]; a[i]=t;}for(i=0; i<N; i++){printf("%d ", a[i]);if(i%10==9) printf("\n");}}5、#include <stdio.h>#define N 10void main(){int i;float a[N],s=0.0,x0=0.0;for(i=0;i<N;i++){ scanf("%f",&a[i]);x0+=a[i];}x0/=N;for(i=0;i<N;i++)s+=(a[i]-x0)*(a[i]-x0);printf("%10.6f", s);}6、#define N 4#define M 3void main(){ int i,j,sum,a[N][M+1],max,p;printf("input score\n");for(i=0;i<N;i++) /*i代表学生序号*/{ sum=0; /*每位学生成绩输入前,其总成绩赋初值0*/ for(j=0;j<M;j++) /*j代表课程代号*/{ scanf("%d",&a[i][j]); /*输入第i号学生第j门课程的成绩*/ sum=sum+a[i][j]; /*累加求总成绩*/}a[i][M]=sum; /*求第i个学生的总成绩放到a[i][M]*/ }max=a[0][M];p=0;for(i=1;i<N;i++) /*查找总成绩最高的学生*/if(a[i][M]>max) p=i;printf("No.%d Total score:%d\n",p+1,a[p][M]);}7、#include <stdio.h>void main(){int a[5][6];int i, j, mi, mj;for(i=0; i<5; i++)for(j=0; j<6; j++){printf("input a[%d][%d]:", i, j);scanf("%d", &a[i][j]);}mi=0; mj=0;for(i=0; i<5; i++){for(j=0; j<6; j++){if(a[i][j]<a[mi][mj]) { mi=i; mj=j; }printf("%d ",a[i][j]);}printf("\n");}printf("min=%d ",a[mi][mj]);}8、#include <stdio.h>#include <math.h>void main(){float a[5][6];int i, j, max;printf("Enter array a=?\n" );for(i=0; i<5; i++)for(j=0; j<6; j++)scanf("%f", &a[i][j]);for(i=0; i<5; i++){ max=a[i][0];for(j=0; j<6; j++) /*查找第i行中绝对值最大的元素*/if(fabs(a[i][j])>fabs(max)) max=a[i][j];for(j=0; j<6; j++) /*第i行中所有元素除以绝对值最大的元素*/{ a[i][j]=a[i][j]/max;printf("%8.4", a[i][j]);}printf(" -----max =%8.4\n",max);}}9、#include <stdio.h>#include <string.h>#define N 20main(){char str[N][15],st[15],*p=st;int i, j;for(i=0; i<N; i++)scanf("%s", str[i]);for(i=0; i<N; i++)for(j=0; j<N-i-1; j++)if(strcmp(str[j],str[j+1])>0){strcpy(p,str[j]);strcpy(str[j],str[j+1]);strcpy(str[j+1],p);}for(i=0; i<N; i++)printf("%s\n", str[i]);}10、程序如下:#include <stdio.h>main(){int a[10], b[10], t;int n=0, m=0, i, j, f;printf("Input Array a, end with –1:");scanf("%d", &t);while(n<10 && t!=-1){ a[n++]=t; scanf("%d", &t); }printf("Input Array b, end with –1:");scanf("%d", &t);while(m<10 && t!=-1){ b[m++]=t; scanf("%d", &t); }for(i=0; i<n; i++) /* 打印只在数组a中出现的元素*/{f=1;for(j=0; j<m; j++)if(a[i]==b[j]) {f=0; break;}if(f) printf("%d", a[i]);}for(i=0; i<m; i++) /* 打印只在数组b中出现的元素*/{f=1;for(j=0; j<n; j++)if(b[i]==a[j]) {f=0; break;}if(f) printf("%d", b[i]);}}11、#include <stdio.h>main(){char str[81];int i=-1;printf("Input:");scanf("%s", str);while(++i<80 && str[i]!= '\0')if(str[i]== '$') str[i]= 'S';puts(str);}12、#include <stdio.h>void main(){ char x[80],y[26]; int i,j,ny=0;gets(x);for(i=0;x[i]!='\0';i++)if(x[i]>='A'&&x[i]<='Z') {for(j=0;j<ny;j++)if(y[j]==x[i]) break;if(j==ny) { y[ny]=x[i]; ny++; }}for(i=0;i<ny;i++)printf("%c ",y[i]);printf("\n");}13、#include <stdio.h>void main(){ int m, bin[32],j;scanf("%d",&m);for(j=0;m!=0;j++){bin[j]= m%2;m=m/2;}for(;j!=0;j--)printf("%d", bin[j-1] );}14、#include <stdio.h>#include <string.h>#include <ctype.h>void main(){ char s[80];int i=0;gets(s);while(s[i]!='\0')if(isdigit(s[i])) strcpy (s+i,s+i+1);else i++;puts(s);}15、void main(){int a,b,c;int *p1,*p2,*p3,*t;printf("\nPlease input three integers:\n"); scanf("%d,%d,%d",&a,&b,&c);p1=&a,p2=&b,p3=&c;if(*p1>*p2)t=p1,p1=p2,p2=t;if(*p1>*p3)t=p1,p1=p3,p3=t;if(*p2>*p3)t=p2,p2=p3,p3=t;printf("new order:\n");printf("%d,%d,%d",*p1,*p2,*p3);}16、void main(){char st[80],ss[20],sp[20],*a=st,*b=ss,*t=sp; int i,n,m,p=-1;printf("\nPlease input two string:\n");gets(a);gets(b);n=strlen(a);m=strlen(b);for(i=0;i<=n-m+1;i++){a=st+i;strncpy(t,a,m); /*将字符指针a指向的字符串取前m个字符复制到t所指的字符串中*/if(strcmp(b,t)==0){p=i;break;}}if(p==-1)printf("%d",p);elseprintf("%d",p+1); /*因数组下标从0开始,所以输出p+1*/getch();}17、#include <string.h>void main(){char st[80],*p=st,ch;printf("Enter a string\n");gets(p);while(*p!='\0'){ ch=*p;if(ch>='A' && ch<='Z')ch='A'+('Z'-ch);else if(ch>='a' && ch<='z')ch='a'+('z'-ch);*p=ch; /*转换后的字符替换原字符*/p++; /*指针指向下一个字符*/} /*指针指向字符串首字符*/p=st;puts(p);getch();}18、#include <string.h>void main(){char st[80],*p=st,ch;long k=0;printf("Enter a string\n");gets(p);strupr(p);while(*p!='\0'){ ch=*p;if(ch>='0' && ch<='9' || ch>='A' && ch<='F')p++;elsestrcpy(p,p+1); /*滤去所有的非十六进制字符*/ }p=st;while(*p!='\0') /*将十六制数转换成十进数*/{ ch=*p;if(ch>='0' && ch<='9' )k=16*k+(ch-'0');else if(ch>='A' && ch<='F')k=16*k+(10+ch-'A');p++;}printf("%ld\n",k);}。
作业四:简单程序设计1.printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列。
如果字符串长度大于5,则输出按方式(B);如果字符串长度小于5,则输出按方式(C)。
(5分)(重要)A) 从左起输出该字符串,右补空格 B) 按原字符长从左向右全部输出C) 右对齐输出该字符串,左补空格 D) 输出错误信息2.阅读以下程序,当输入数据的形式为:25,13,10<CR>(注:<CR>表示回车),则正确的输出结果为(D)。
(5分)main(){ int x,y,z;scanf(“%d%d%d”,&x,&y,&z);要和这里一样printf(“x+y+z=%d\n”,x+y+z);}A) x+y+z=48 B) x+y+z=35 C) x+z=35 D) 不确定值3.根据下面的程序及数据的输入和输出形式,程序中输入数据的正确形式应该为(WXY)。
(5分)main(){ char ch1,ch2,ch3;scanf(“%c%c%c”,&ch1,&ch2,&ch3);printf(“%c%c%c”,ch1,ch2,ch3);}4.以下的输出结果是(x=1,y=2*sum*=310 Squard is : 100)。
(5分)main(){ int x=1,y=2;printf(“x=%d y=%d * sum * =%d\n”,x,y,x+y);printf(“10 Squared is : %d\n”,10*10);}5.若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=’a’,c2 =’b’,想得到以下的输出格式和结果,请写出程序(包括定义变量类型和设计输出)。
要求输出的结果如下:(20分)a= 3 b= 4 c= 5x=1.200000,y=2.400000,z=-3.600000x+y= 3.6 y+z=-1.20 z+x=-2.40u= 51274 n= 128765c1=’a’ or 97(ascll)c2=’b’ or 98(ascll)main(){ int a=3,b=4,c=5;float x=1.2,y=2.4,z=-3.6;unsigned u=51274;long n=128765;char c1=’a’,c2=’b’;printf(“a=%d b=%d c=%d\n”,a,b,c);printf(“x=%f ,y=%f, z=%f\n”,x,y,z);printf(“x+y=%3.1f y+z=%.2f z+x=%.2f\n”,x+y,y+z,z+x); printf(“u=%u n=%9ld \n”,u,n);printf(“c1=’%c’or %d (asc11) \n”,c1,c1);printf(“c2=’%c’or %d (asc11) \n”,c2,c2);}6.请写出下面程序的输出结果。
第五次上机作业:(请用指针实现)1.数据移位有n(n<=10)个整数,使前面各数顺序向后移m(m<=n)个位置,最后m 个数变成最前面的m个数,如图所示。
编写函数shift(a,n,m)实现上述功能,在主函数中输入n个整数和输出调整后的n个数。
SAMPLE OUTPUTnInput n(n<=10):10Input 10 integers:Output the original:Output the shifted:#include <>#define N 10void shift(int a[ ],int n,int m);void main( ){ int i,n,m;int a[N];printf("Input n(n<=10):");scanf("%d",&n);printf("Input %d integers:\n",n);for(i=0;i<n;i++)scanf("%d",a+i);printf("Output the original:\n");for(i=0;i<n;i++)printf("%d ",*(a+i));printf("\n");printf("Input m(m<=%d):",n);scanf("%d",&m);shift(a,n,m);printf("Output the shifted:\n");for(i=0;i<n;i++)printf("%d ",*(a+i));printf("\n");}void shift(int a[ ],int n,int m){ int i,j,t;for(i=0;i<m;i++){ t=a[n-1];for(j=n-2;j>=0;j--)a[j+1]=a[j];a[0]=t;}}2.字符串排序在主函数中输入10个不等长的字符串放入二维字符数组中,编写函数sort()利用指针数组对其排序,在主函数中输出排好序的字符串。
第五次实验题目-第七章函数教学目标31.一元二次方程的系数:a、b、c由主函数输入,编写函数求方程的根。
#include <stdio.h>#include <math.h>void root(double a, double b, double c){ double delta,x1,x2,m,n;if (fabs(a) <= 1e-6){if (fabs(b) <= 1e-6)puts("Not an equation");elseprintf("x=%.2lf",-c/b);return;}else{delta=b*b - 4*a*c;m = -b / (2*a);n = sqrt(fabs(delta)) / (2*a);x1 = m + n;x2 = m - n;if (fabs(delta) <= 1e-6)printf("x1=%.2lf, x2=%.2lf", x1, x1);else if (delta < 0)printf("x1=%.2lf+%.2lfi, x2=%.2lf-%.2lfi",m,n,m,n);elseprintf("x1=%.2lf, x2=%.2lf", x1, x2);}}int main( ){ double a,b,c;scanf("%lf%lf%lf",&a,&b,&c);root(a,b,c);return 0;}教学目标32.输入一串字符,统计其中英文字母的个数,编写统计英文字母个数的函数。
#include<stdio.h>int numberOfLetter(char str[]) {int i=0;int num = 0;//统计字母个数while (str[i]!=’\0’) {if ((str[i]>='A'&& str[i]<='Z')||( str[i]>='a'&& str[i]<='z')) num++;i++;}return num;}int main( ) {char str[100];int letterNum;printf("Enter a string: ");gets(str);letterNum = numberOfLetter(str);printf("Number of letters is %d.\n", letterNum);return 0;}教学目标33. 求100以内所有素数的和。
练习5-1答案一、选择题1.合法得数组说明语句就是( B )。
A.int a[]="string";B.int a[]={0,1,2,3,4,5};C.char a="string";D.char a[5]={'0', '1', '2', '3', '4', '5'};2.以下对一维整型数组a得说明正确得就是( D )。
A.int a(10);B.int n=10, a[n];C.int n;D.#define SIZE 10scanf("%d", &n); int a[SIZE];int a[n];3.已知:int a[10];,则对a数组元素得正确引用就是( D )。
A.a[10]B.a[3、5]C.a(5)D.a[10-10]4.以下对一维数组a进行正确初始化得语句就是( C )。
A.int a[10]=(0, 0, 0, 0, 0);B.int a[10]={};C.int a[]={0};D.int a[2]={10, 9, 8};5.对以下说明语句得正确理解就是( B )。
int a[10]={6, 7, 8, 9, 10};A.将5个初值依次赋给a[1]至a[5]B.将5个初值依次赋给a[0]至a[4]C.将5个初值依次赋给a[6]至a[10]D.因为数组长度与初值得个数不相同,所以此语句不正确二、填空题6.求所有不超过200得N值,N得平方就是具有对称性质得回文数。
所谓回文数就就是将一个数从左到右与从右到左读都就是一样得,例如:34543与1234321都就是回文数。
例如:满足题意要求得数有:N=1,11*11=121;N=111,111*111=12321。
#include <stdio、h>main(){int m[16], n, i, t, count=0;long a, k;printf("Result is:\n");for (n=10; n<200; n++){ k=0;t=1;a=n*n;for (i=1; a!=0; i++){ ①;a/=10;}for (; i>1; i--){ k+=m[i-1]*t;②;}if ( ③) printf("%2d:%10d %10d\n", ++count, n, n*n);}}则①为( m[i]=a%10; )、②为( t*=10; )、③为( k==n*n )。
学习任务五 参考答案 问题5-1:输入正方形的边长,求面积的函数解法,请将代码补充完整。
#include "stdio.h"double fun(double);void main(){ double a,area;printf("请输入正方形的边长:");scanf("%lf",&a);area=fun(a);printf("area=%lf\n",area);}double fun(double x){double s;s=x*x;return s;}问题5-2:模仿应用举例5-2,编写一个函数isprime(int a)判断a是否为素数,并在主函数中输出100以内的非素数之和。
#include "stdio.h"#include "math.h" //包含数学函数的头文件int isprime(int a){int i;for(i=2;i<=sqrt(a);i++)if(a%i==0)return 0;return 1;}void main(){int i,s=0;for(i=1;i<=100;i++)if(isprime(i)==0)s=s+i;printf("s=%d\n",s);getchar();}程序执行结果:s=3989编程训练5-1-1 输入两个整数,输出较大数,只由main函数实现#include "stdio.h"void main(){int x,y,max;printf("请输入两个整数:\n");scanf("%d%d",&x,&y);if(x>y)max=x;elsemax=y;printf("较大值是:%d\n",max);}编程训练5-1-2 建一个无参数的函数,将主函数中的代码全部转移到自定义函数中,#include "stdio.h"void fmax() //自定义函数{ // 将原来主函数中的内容全部搬来.int x,y,max;while(1){printf("请输入两个整数:\n");scanf("%d%d",&x,&y);if(x>y)max=x;elsemax=y;printf("较大值是:%d\n",max);}}void main(){fmax(); //主函数中仅一条函数调用语句}编程训练5-1-3 编写带参数的函数。
练习55.1 计算循环体的执行次数并上机验证。
1. int i = 0;2. short i = 1;while(1) while(i > 0){ {++i; ++i;printf("%d\n", i); printf("%d\n", i);} }3. short i = 1;4. char c = 'a';while(i * i >= 0) while(c >= 0){ {++i; --c;printf("d\n", i); printf("%c\n", c)} }答:1.表达式1恒真,因此循环体会执行无数次。
2.在数学上,变量i的初值为1,每次自增1后会一直大于0,也就是说表达式i > 0恒真,但是,计算机中整型构成一个环,short型变量的取值范围为-32768~32767,当变量i的值自增到32767后再加1就变成了-32768,表达式i 〉0为假,循环退出,因此循环体执行了32767次。
3.表达式i * i >= 0恒真,因此循环体会执行无数次。
4.字符型变量c的值为97号字符’a’,因此从97至0,循环体共执行了98次。
5.2 画出例5-2的程序流程图。
5.3 整数n为几时1.0/n小于10-5。
答:5.4 编程输出整数n的阶乘。
(n! = n * (n-1) * … * 2 * 1)答:与例5-2相同的:0的阶乘等于1,此程序能正确输出吗?for结构的程序。
还可以用:与前面两个程序相比,少用了一个变量。
5.5 编程输出一个正整数各位上数字中零的个数,正整数由用户输入。
5.6 编程输出正整数各位上数字中的最大数。
或者(注意体会两者的区别)5.7 以小僧的人数为循环变量求解例5-4。
答:注意:在用穷举法解决此类问题时要防止因四舍五入而出错的情况。
如此题中设大僧每人2个馍,小僧4人一个馍,则问题应该无解,但用例5-4的算法求解时程序却会给出错误的结果。
C语言第5次作业及答案
1:[论述题]8,已知公鸡每只5元,母鸡每只3元,小鸡一元3只,现有100元买鸡100只,问其中公鸡、母鸡、小鸡各多少只?编程求解。
参考答案:8,提示:此题与上题类似,实际是求一个不定方程组,令公鸡有x只,母鸡
有y只,小鸡z只,进行C语言求解。
此题还有另外一些限制:只有100元,所以公鸡不超过20只,母鸡不超过33只。
考虑这些限制可以提高程序运行效率
#include
void main()
{
int x,y,z,j=0;
printf("Folleing are possible plans to buy 100 fowls with 100 Yuan.\n");
for(x=0;x<=20;x++) /*外层循环控制鸡翁数*/
for(y=0;y<=33;y++) /*内层循环控制鸡母数y在0~33变化*/
{
z=100-x-y; /*内外层循环控制下,鸡雏数z的值受x,y的值的制约*/
if(z%3==0&&5*x+3*y+z/3==100)
/*验证取z值的合理性及得到一组解的合理性*/ printf("%2d:cock=%2d hen=%2d chicken=%2d\n",++j,x,y,z);
}
}
2:[论述题]7,一个笼子中有鸡兔各若干只,已知共有50只脚,20张嘴,问笼中各有鸡多少只,兔多少只?编程实现求解。
参考答案:7、提示:有嘴20张,有脚50只,考虑鸡有2只脚,兔有4只脚,鸡兔都只有一
张嘴,此题实际是计算一个二元一次方程组(令鸡有x只,兔有y只)
main()
{
int x,y;
for(x=1;x<20;x++)
{
y=20-x;
if(2*x+4*y==50)
printf("there are %d hens and %d rabbits\n”,x,y);
}
}
3:[论述题]6,统计用户输入的10个正自然数中有多少偶数。
参考答案:6、提示:用户输入的数用数组存放,用数组元素对2求模,为0则为偶数,统
计出偶数个数即可
main()
{
int a[10],n=0,i;
for(i=0;i<10;i++)
scanf("%d”,&a[i]);
for(i=0;i<10;i++)
if(a[i]%2==0)
n++;
printf("%d”,n);
}
4:[论述题]5,编写程序求得一维数组中的最大最小数,一维数组的值由用户输入。
参考答案:5、提示:使得一个变量max等于数组的第一个元素,然后把max依次和其
他元素进行比较,若max比某个元素小,则使max为此元素值,求得数组中最大数,最小数类似
main()
{
int a[10],max,min,i;
for(i=0;i<10;i++)
scanf("%d”,&a[i]);
max=min=a[0];
for(i=0;i<10;i++)
{
if(max
max=a[i];
else if(min>a[i])
min=a[i];
}
p irntf("max=%d,min=%d”,max,min);
}
5:[论述题]3,编写一个程序,使得该程序能够由用户输入一个数,并根据该用户输入的数值输出相应行数和列数的"*”。
(如,用户输入5,则输出5行,每行5个"*”)
参考答案:3,比较与第3题的区别后参照第3题编写实现
6:[论述题]2,编写程序,使用三种循环语句实现以下输出(*之间有一个空格):
*
* *
* * *
* * * *
* * * * *
* * * * * *
* * * * * * *
参考答案:2、提示:使用循环嵌套可以实现。
第一层循环用于每行的输出,第二层循环
用于控制每行输出的"*”的个数,注意两层循环的标志量不能是相同的。
提供一种参考
main()
{
int n,j;
for(n=0;n<7;n++)
{
for(j=0;j<=n;j++)
printf("* ");
printf("\n”);
}
}
7:[论述题]1.编写一个程序,使得可以根据用户输入数值求下列分段函数的值。
(1) 当x<0时,y=-x;
(2) 当x>10时,y=3x+5;
(3) 当x为其他值时, y=2x-1。
参考答案:1、对于分段函数,使用if-else语句分情况求值即可
main()
{
int y,x;
scanf("%d”,&x);
if (x<0)
y=-x;
else if (x<=10)
y=2*x-1;
else
y=3*x+5;
}。