搜索
您的当前位置:首页正文

本课程作业评讲

来源:易榕旅网


P10 3 #include \"stdio.h\" void main() { 3. printf(\"***********************\\n\"); #include \"stdio.h\" printf(\"* Hello, C program! *\\n\"); void main() printf(\"***********************\\n\"); { } int kt; double sum; 4. 解法一: printf(\"please input kua tuo shu:\\n\"); #include //模仿书上用函数解 scanf(\"%d\void main() { int jie(int x, int y); int a, b, result; printf(“Please input two number(like:3,5): \\n”); scanf(\"%d,%d\ result = jie(a, b);

printf(\"%d * %d = %d\\n\

}

int jie(int x, int y) {

return (x * y);

} 解法2:不用函数 #include void main() { int a, b, result;

printf(“Please input two number(like:3,5): \\n”); scanf(\"%d,%d\

result = a*b;

printf(\"%d * %d = %d\\n\

}

P27 2 从建盘上输入一个小写字母,编程输出

其对应的大写字母及十进制ASCII码。

#include \"stdio.h\"

void main() { char xxzm; printf(\"please input one small char:\\n\"); scanf(\"%c\ xxzm=xxzm-32; printf(\"da xie zi mu is :%c,shi jin zhi Ascii is :%d\\n\} sum=kt*950/3.0e-23; printf(\"shui fen zi ge shu is :%f\\n\} P 62 3.7

1、输出所有的“水仙花数”。所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身,例如,153是一个水仙花数,因为 解法1 main() { int ge,shi,bai,number; for(number=100;number<1000;number++) { bai=number/100; shi=(number%100)/10;

ge=number%10;

if(number==bai*bai*bai+shi*shi*shi+ge*ge*ge)

printf(\"\\n%d is.\\n\

} } 解法2 #include \"stdio.h\" main() { int i,j,k; for(i=1;i<10;i++) for(j=0;j<10;j++) for(k=0;k<10;k++) {if( (i*100+j*10+k)==((i*i*i)+(j*j*j)+(k*k*k))) printf(\"%d is \}

3.3 判断闰年:

算法:假设定义一个整型变量year,表示年份,若year能被4整除,但不能被100整除,或year能被400整除,即为闰年,否则不是闰年。

#include \"stdio.h\" void main () { int year;

printf (“please input one year:\\n”); scanf (“%d”,&year);

if (year%4==0&&((year%100!=0)||(year%400==0)))

printf(“%d is a leap year.\\n ”,year); else

printf(“%d is not

a leap year.\\n ”,year); } 3.5

求2/1,3/2,5/3,8/5,13/8,21/13,…前20项的和。

#include void main() { int n;

float a=1.0,b=2.0,x,sum=0,c; for(n=1;n<21;n++) {

x=b/a;

sum=sum+x; c=a; //此处注意! a=b; b=b+c; }

printf(\"The answer is %f\ }

3.8 求两个数a和b的最大公约数和最小公倍数。 #include void main() { int x,y,m,n,z;

printf(\"请输入2个数:\\n\"); scanf(\"%d%d\ if(m{ z=m;m=n;n=z;}

x=m;y=n; z=x%y;

while(z!=0) /*用辗除法,直到b为0为止*/ { x=y; y=z; z=x%y; }

printf(\"最大公约数:%d\\n\

printf(\"最小公倍数:%d\\n\}

3.6 猴子吃桃子问题。

猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉了一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第十天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少个桃子。

#include void main() {

int day,x1,x2; day=9; x2=1;

while(day>0) {

x1=(x2+1)*2 /*第一天的桃子数是第二天的挑子数加1后的2倍*/

x2=x1; day--; }

Printf(\"total=%d\\n\}

运行结果为:total=1534

#include #include void main () {

float a,b,c,deta,x1,x2,realpart,imagpart; scanf(\"%f,%f,%f\

//求实系数(a,b,c)的一元二次方程的根 if(b*b-4*a*c<0) {

deta=sqrt(4*a*c-b*b); realpart=-b/(2*a); imagpart=deta/(2*a);

printf(\"%8.2f+%8.2fi\\n\

printf(\"%8.2f-%8.2fi\\n\ x2=(-b-deta)/(2*a); } printf(\"%8.2f,%8.2f\\n\ else } { deta=sqrt(b*b-4*a*c); } x1=(-b+deta)/(2*a);

逆序输出一个三位数的整数。例如你输入的整数scanf(\"%d\是:321,那么输出的就是:123, bai=a/100; #include shi=a%100/10; void main() ge=a%10; { b=bai+shi*10+ge*100; int a,b,bai,shi,ge; printf(\"%d\ printf(\"输入一个三位数\"); }

逆序输出任意一个整数 while(t>0) #include \"stdio.h\" { void main() printf(\"%d\{ t/=10; int t; } printf(\"请输入一个整数!\"); } scanf(\"%d\

P42,5.输出所有水仙花数.所谓水仙花数是指一个3位数.其各位数字立方和等于该数本身 解法1

#include \"stdio.h\" main() { int i,j,k;

for(i=1;i<10;i++) for(j=0;j<10;j++) for(k=0;k<10;k++)

if( (i*100+j*10+k)==((i*i*i)+(j*j*j)+(k*k*k))) printf(\"%d%d%d \}

解法2 main()

{ int ge,shi,bai,number;

for(number=100;number<1000;number++)

{

bai=number/100;

shi=(number%100)/10; ge=number%10;

if(number==bai*bai*bai+shi*shi*shi+ge*ge*ge) printf(\"\\nnumber=%d\\n\

}

P42.7输入一行字符,分别统计处其中大写英文字母、小写英文字母、数字、空格和其他字符的个数 #include else if(c==' ') e++; main( ) else f++; { } int a=0,b=0,d=0,e=0,f=0; printf(\"%d\\n\ char c; printf(\"%d\\n\ while((c=getchar( ))!='\\n') printf(\"%d\\n\ { printf(\"%d\\n\ if (c>='A'&&c<='Z') a++; printf(\"%d\\n\

} else if(c>='a'&&c<='z') b++;

else if(c>='0'&&c<='9') d++;

P42.8将一元人民币兑换成1,2,5分的硬币,有多少种换法? #include main() { int i,j,k;

for(i = 0 ; i <= 20; i++) for(j = 0; j <= 50; j++) { k = 100 - i * 5 - j * 2; if(k >= 0)

printf(\"%d %d %d\ } }

解法2

#include void main() {

int i,j,k;

for (i=0;i<=100;i++) for (j=0;j<=50;j++) for (k=0;k<=20;k++) if (i+j*2+k*5==100)

printf(\"%d %d %d\

}

解法3

#include \"stdio.h\" void main() { int i,j,k;

for (int i = 0; i <= 20; i++) //5分最多20个 { for (int j = 0; j <= (100-5*i)/2; j++) //2分最多(100-5*i)/2个 { for (int k = 0; k <= 100-5*i-2*j; k++) //1分最多100-5*i-2*j个 { if (i*5+j*2+k == 100) //如果加起来是1元

{ printf(\"%d %d %d\

}

} }

}

}

P78.8 输入一个含若干字符的字符串,分别统计出其中的字母和数字的个数。 解法1

#include \"stdio.h\" main()

{ char a[100]; //用数组来做,定义大一点,但一定要有确定的大小。 int i,zm=0,sz=0;

scanf(\"%s\或者用gets(a); for(i=0;a[i]!= '\\0';i++)

{ if(('a'<=a[i]&&a[i]<='z')||('A'<=a[i]&&a[i]<='Z') ) zm++; if('0'<=a[i]&&a[i]<='9') sz++; }

printf(\"%d %d \}

解法2//类似的题,出成用函数来做。编写一个C语言其首部为 int fun( char s[]), 函数的功能为统计字符数组 s 中的英文字母的个数。 #include } int fun( char s[]) return sum; { int sum=0,i=0; } while (s[i]) //或者s[i]!= '\\0' main() { if[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z') { sum++; int count=0; i++; char s[100];

printf(\"please enter a string:\\n\"); gets(s);

count=fun(s);

P78.9选择法排序 #include\"stdio.h\" void main()

{int a[10],i,j,minindex,temp; int a[10]={2,3,1,6,7,8,9,10,4,5}; //或

for(i=0;i<10;i++) scanf(“%d”,&a[i]); for(i=0;i<10;i++) { minindex=i;

for(j=i+1;j<10;j++)//这是找出第i个最小的。 {

解法2:写成函数的形式 #include void sort(int a[],int n) {int i,j,k,t; for(i=0;ifor(j=i+1;ja[j]) k=j;

if(k!=i) {t=a[i]; a[i]=a[k]; a[k]=t; } } }

main() {

int a[10],i;

for(i=0;i<10;i++) scanf(\"%d\sort(a,10);

printf(\"排好序的数组是:\\n\"); for(i=0;i<10;i++)

printf(\"count=%d\}

if(a[j]temp=a[i];//这是交换 a[i]=a[minindex]; a[minindex]=temp; }

for(i=0;i<10;i++) printf(\"%d \}

printf(\"%d \}

猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉了一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第十天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少个桃子。

#include void main() {

int day,x1,x2; day=9; x2=1;

while(day>0) {

x1=(x2+1)*2 /*第一天的桃子数是第二

天的挑子数加1后的2倍*/

x2=x1; day--; }

Printf(\"total=%d\\n\}

运行结果为:total=1534

因篇幅问题不能全部显示,请点此查看更多更全内容

Top