您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页大一c++课后习题答案

大一c++课后习题答案

来源:华佗小知识
第四章

4.8 设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2位数字。

#define P 3.1415926 #include void main()

{float h,r,l,s,sq,vq,vz;

printf(\"请输入圆半径r,圆柱高h:\"); scanf(\"%f%f\",&r,&h); l=2.0*P*r; s=P*r*r; sq=4*P*r*r;

vq=4.0/3.0*P*r*r*r; vz=P*r*r*h;

printf(\"圆周长为: l=%6.2f\\n\",l); printf(\"圆面积为: s=%6.2f\\n\",s); printf(\"圆球表面积为:sq=%6.2f\\n\",sq); printf(\"圆球体积为: vq=%6.2f\\n\",vq); printf(\"圆柱体积为: vz=%6.2f\\n\",vz); }

运行结果:

请输入圆半径r,圆柱高h:1.5 3 圆周长为: l= 9.42 圆面积为: s= 7.07 圆球表面积为:sq= 28.27 圆球体积为: vq= 14.14 圆柱体积为: vz= 21.21

Press any key to continue

4.9 输入一个华氏温度,要求输出摄氏温度。公式为c=5/9(F-32)输出要有文字说明,取2位小数。

#include void main() {float c,f;

printf(\"请输入一个华氏温度:\"); scanf(\"%f\",&f); c=5.0/9.0*(f-32);

printf(\"摄氏温度为%5.2f\\n\",c); }

运行结果:

请输入一个华氏温度:20 摄氏温度为-6.67

Press any key to continue

4.10编程序,用getchar函数读入两个字符给c1,c2,然后分别用putchar函数和printf函数输出这两个字符。思考以下问题: (1)变量c1、c2应定义为字符或整型?或二者皆可?

(2)要求输出c1和c2值的ASCII码,应如何处理?用putchar函数还是printf函数?

(3)整形变量与字符变量是否在任何情况下都可以互相代替?如:char c1,c2;与int c1,c2 是否无条件的等价? (1)

#include void main() {

char c1,c2;

printf(\"请输入两个字符c1,c2:\"); c1=getchar(); c2=getchar();

printf(\"用putchar语句输出结果\"); putchar(c1);

putchar(c2); printf(\"\\n\");

printf(\"用printf语句输出结果\"); printf(\"%c%c\\n\",c1,c2); }

运行结果:

请输入两个字符c1,c2:as 用putchar语句输出结果as 用printf语句输出结果as

Press any key to continue

(2)

#include void main() {

char c1,c2;

printf(\"请输入两个字符c1,c2:\"); scanf(\"%c%c\",&c1,&c2); c1=getchar(); c2=getchar();

printf(\"按ASCII码输出结果为:\\n\"); printf(\"%d,%d\\n\",c1,c2); }

运行结果:

请输入两字符c1,c2:a,s 按ASCII码输出结果为: 97,115

Press any key to continue (3)

#include void main() {int c1,c2;

printf(\"请输入两个整数c1,c2:\"); scanf(\"%d%d\",&c1,&c2);

printf(\"按字符输出结果:\\n\"); printf(\"%c%c\\n\",c1,c2);

printf(\"按ASCII码输出结果为:\\n\"); printf(\"%c%c\\n\",c1,c2); }

运行结果:

请入两个整数c1,c2:97,98 按字符输出结果: a,b

按ASCII码输出结果为: 97,98

Press any key to continue

#include void main() {char c1,c2; int a1,a2;

printf(\"请输入两个字符c1,c2:\"); scanf(\"%c%c \",&c1,&c2); a1=c1; a2=c2;

printf(\"按字符输出结果:\\n\"); printf(\"%c%c\\n\",a1,a2);

printf(\"按整数输出结果为:\\n\"); printf(\"%d%d\\n\",c1,c2); }

运行结果:

请输入两个字符c1,c2:ab 按字符输出结果: ab

按整数输出结果为: 9798

Press any key to continue 第五章

5.3 写出下列各逻辑表达式的值.设a=3,b=4,c=5. (1)a+b>c&&b==c (2)a||b+c&&b-c (3)!(a>b)&&!c||1 (4)!(x=a)&&(y=b)&&0 (5)!(a+b)+c-1&&b+c/2 解: (1)0;(2)1;(3)1; (4) 0; (5) 1; 5.5 有一个函数: x x<1

y={2x-1 1≤x<10

3x-11 x≥10

写一段程序,输入x,输出y. 解:

#include void main() { int x,y;

printf(\"输入:x=\"); scanf(\"%d\",&x); if(x<1) y= x;

else if(x<10) y=2*x-1; else

y=3*x-11;

printf(\"输出:y=\"); printf(\"%d\\n\",y); }

运行结果:

输入:x=-1 输出:y=-1

Press any key to continue 输入:x=5 输出:y=9

Press any key to continue 输入:x=12 输出:y=25

Press any key to continue

5.6 给出一百分制成绩,要求输出成绩等级’A’、‘B’、 ‘C’ 、‘D’ 、‘E’。90分以上为A,80~分为B,70~79为C,60~69为D,60分以下为E。 #include void main() { float x;

printf(\"请输入学生成绩:\"); scanf(\"%f\",&x); while(x>100||x<0)

{printf(\"输入错误,请重输:\"); scanf(\"%f\",&x); }

if(100>x>90)

printf(\"相应等级是:A\"); else if(x>80)

printf(\"相应等级是:B\"); else if(x>70)

printf(\"相应等级是:C\"); else if(x>60)

printf(\"相应等级是:D\"); else

printf(\"相应等级是:E\"); }

运行结果:

请输入学生成绩:111 输入错误,请重输:88 相应等级是:B

Press any key to continue

5.7 给一个不多于5位的正整数,要求:

1.求出它是几位数;2.分别输出每一位数;3.按逆序输出各位数字,如原数为321,应输出123

#include #include void main()

{ long int num;

int ge,shi,bai,qian,wan,place;

printf(\"请输入一个整数(0~99999):\"); scanf(\"%ld\",&num); if(num>9999) place=5;

else if(num>999) place=4;

else if(num>99) place=3;

else if(num>9) place=2; else place=1;

printf(\"位数=%d\\n\",place); printf(\"每位数字为:\"); wan=num/10000;

qian=(int)(num-wan*10000)/1000;

bai=(int)(num-wan*10000-qian*1000)/100;

shi=(int)(num-wan*10000-qian*1000-bai*100)/10;

ge=(int)(num-wan*10000-qian*1000-bai*100-shi*10); switch(place)

{case 5:printf(\"%d,%d,%d,%d,%d\",wan,qian,bai,shi,ge); printf(\"\\n反序函数为:\");

printf(\"%d%d%d%d%d\\n\",ge,shi,bai,qian,wan); break;

case 4:printf(\"%d,%d,%d,%d\",qian,bai,shi,ge); printf(\"\\n反序函数为:\");

printf(\"%d%d%d%d\\n\",ge,shi,bai,qian); break;

case 3:printf(\"%d,%d,%d\",bai,shi,ge); printf(\"\\n反序函数为:\");

printf(\"%d%d%d\\n\",ge,shi,bai); break;

case 2:printf(\"%d,%d\",shi,ge); printf(\"\\n反序函数为:\"); printf(\"%d%d\\n\",ge,shi); break;

case 1:printf(\"%d\",ge); printf(\"\\n反序函数为:\"); printf(\"%d\\n\",ge); break; } }

运行结果:

请输入一个整数(0~99999):98765 位数=5

每位数字为:9,8,7,6,5 反序函数为:567

Press any key to continue

第六章

6.2输入一行字符,分别统计出其中英文字符、空格、数字和其他字符个数。 #include void main() {

char c;

int lettes=0,space=0,digit=0,other=0; while((c=getchar())!='\\n') {

if((c>='a'&&c<='z')||(c>='A'&&c<='Z')) lettes++; else if(c==' ') space++;

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

other++; }

printf(\"字母数:%d\\n空格数:%d\\n数字数:%d\\n其他字符数:%d\\n\",lettes,space,digit,other); }

运行结果: abc 123\"\" 字母数:3 空格数:1 数字数:3 其他字符数:2

Press any key to continue

6.6输入所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。 #include void main() {

int i,j,k,n;

printf(\"narcissus numbers are\"); for(n=100;n<1000;n++) { i=n/100; j=n/10-i*10; k=n-i*100-j*10; if(n==i*i*i+j*j*j+k*k*k) printf(\"%d\",n); }

printf(\"\\n\"); }

运行结果:

narcissus numbers are153370371407 Press any key to continue

6.7一个数如果恰好等于它的因子之和,这个数就称为“完数”。

#include void main() {

int n,s,i;

for(n=2;n<1000;n++) {s=0; for(i=1;i运行结果:

6,its factors are1,2,3,

28,its factors are1,2,4,7,14,

496,its factors are1,2,4,8,16,31,62,124,248, Press any key to continue

6.4求1!+2!+3!+...+20! #include void main() {

float s=0,t=1; int n;

for(n=1;n<=20;n++) { t=t*n; s=s+t; }

printf(\"1!+2!+3!+...+20!=%e\\n\",s); }

运行结果:

1!+2!+3!+...+20!=2.561327e+018 Press any key to continue 6.5

#include void main() {

int n1=100,n2=50,n3=10; float k;

float s1=0,s2=0,s3=0; for(k=1;k<=n1;k++) s1=s1+k;

for(k=1;k<=n2;k++) s2=s2+k*k; for(k=1;k<=n3;k++) s3=s3+1/k;

printf(\"sum=%8.2f\\n\",s1+s2+s3); }

运行结果: sum=47977.93

Press any key to continue

第七章

7.2 用选择法对10个整数进行排序 #include void main() {

int a[11],i,j,k,x;

printf(\"enter data:\\n\"); for(i=1;i<11;i++) {

printf(\"a[%d]=\ scanf(\"%d\ }

printf(\"\\n\");

printf(\"\\nThe oringinal numbers:\\n\"); for(i=1;i<11;i++) printf(\"%5d \ for(i=1;i<10;i++) { k=i;

for(j=i+1;j<=10;j++) if(a[j]x=a[i]; a[i]=a[k]; a[k]=x; }

printf(\"\\nThe sorted numbers:\\n\"); for(i=1;i<11;i++) printf(\"%5d \ printf(\"\\n\"); }

运行结果: enter data: a[1]=1 a[2]=5 a[3]=44 a[4]=23 a[5]=15 a[6]=18 a[7]=14 a[8]=36 a[9]=34 a[10]=32

The oringinal numbers:

1 5 44 23 15 18 14 36 34 32 The sorted numbers:

1 5 14 15 18 23 32 34 36 44 Press any key to continue

7.3求一个3*3的整型矩阵对角线元素之和 #include void main() {

int a[3][3],sum=0; int i,j;

printf(\"enter data:\\n\"); for(i=0;i<3;i++) for(j=0;j<3;j++)

scanf(\"%d\ for(i=0;i<3;i++) sum=sum+a[i][i];

printf(\"sum=%6d\}

运行结果: enter data: 1 3 4 5 6 7 8 9 1

sum= 8Press any key to continue

7.4有一个已排序的数组,今输入一个数,要求按原来的排序规则将它插入数组中

按升序排序

#include void main() {

int a[11]={1,2,3,4,5,50,60,70,80,100}; int n,i,j;

printf(\"array a:\\n\"); for(i=0;i<10;i++)

printf(\" %5d\ printf(\"\\n\");

printf(\"intsert data:\\n\"); scanf(\"%d\ if(n>a[9]) a[10]=n; else {

for(i=0;i<10;i++) if(a[i]>n) {

for(j=9;j>=i;j--) a[j+1]=a[j]; a[i]=n; break; } }

printf(\"now array a:\\n\"); for(i=0;i<11;i++) printf(\"%5d\}

运行结果: array a:

1 2 3 4 5 50 60 70 intsert data: 33

now array a:

1 2 3 4 5 33 50 60 70 80 continue

7.6输出以下的杨辉三角形(要求输出10行) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1

80 100 100Press any key to . . . . . . . . . . . . . . . . .

#include #define n 11 void main() {

int i,j,a[n][n]; for(i=1;ia[i][1]=1; a[i][i]=1; }

for(i=3;ifor(j=2;j<=i-1;j++)

a[i][j]=a[i-1][j-1]+a[i-1][j]; for(i=1;ifor(j=1;j<=i;j++)

printf(\"%6d\ printf(\"\\n\"); }

printf(\"\\n\"); }

运行结果: 1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

1 5 10 10 5 1

1 6 15 20 15 6 1

1 7 21 35 35 21 7 1

1 8 28 56 70 56 28 8 1

1 9 36 84 126 126 84 36 9 1

Press any key to continue

第八章

8.2求方程ax*x+bx+c=0的梗,用3个函数分别求当b*b-4ab大于0、等于0和小于0时的根,并输出结果。从主函数输入a,b,c的值。

源代码:

#include \"stdio.h\" #include \"math.h\" float disc,p,q,x1,x2; void main() {

void greater_than_zero(float,float); void equal_to_zero(float,float); void smaller_than_zero(float,float); float a,b,c;

printf(\"\\n输入 a,b,c:\"); scanf(\"%f,%f,%f\",&a,&b,&c);

printf(\"方程:%5.2f*x*x+%5.2f*x+%5.2f=0\",a,b,c); disc=b*b-4*a*c;

printf(\"\\n结果:\\n\"); if(disc>0) {

greater_than_zero(a,b);

printf(\"x1=%f\\x2=%f\\n\",x1,x2); }

else if(disc==0) {

equal_to_zero(a,b);

printf(\"x1=%f\\x2=%f\\n\",x1,x2); } else {

smaller_than_zero(a,b);

printf(\"x1=%f+fi\x2=%f-%fi\\n\",p,q,p,q); } }

void greater_than_zero(float a,float b) {

x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); }

void equal_to_zero(float a,float b) {

x1=x2=(-b)/(2*a); }

void smaller_than_zero(float a,float b) {

p=-b/(2*a);

q=sqrt(-disc)/(2*a); }

运行结果:

输入 a,b,c:2,5,1

方程: 2.00*x*x+ 5.00*x+ 1.00=0 结果:

x1=-0.219224 x2=-2.280777 Press any key to continue

8.3编写一个判素数的函数,在主函数输入一个整数,输出是否素数的信息。 源代码:

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

int prime(int); int n;

printf(\"\\n输入一个数:\"); scanf(\"%d\",&n); if(prime(n))

printf(\"\\n 是素数 \\n\"); else

printf(\"\\n 不是素数\\n\"); }

int prime(int n) {

int flag=1,i;

for(i=2;ireturn(flag); }

运行结果:

输入一个数:47 是素数

Press any key to continue

8.4编写一个函数,使给定的一个二维数组(3*3)转置,即行列换行。 源代码

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

int i,j,t,s[3][3]; printf(\"input s:\\n\"); for(i=0;i<3;i++) for(j=0;j<3;j++)

scanf(\"%d,%d\",&s[i][j]);

for(i=0;i<3;i++) {

for(j=0;j<3;j++)

printf(\"%5d\",s[i][j]); printf(\"\\n\"); }

for(i=0;i<3;i++) for(j=i+1;j<3;j++) {

t=s[i][j];

s[i][j]=s[j][i]; s[j][i]=t; }

for(i=0;i<3;i++) {

for(j=0;j<3;j++)

printf(\"%5d\",s[i][j]); printf(\"\\n\"); } }

运行结果: input s: 1 2 3

4 5 6 7 8 9

1 2 3 4 5 6 7 8 9 1 4 7 2 5 8 3 6 9

Press any key to continue

8.5编写一个函数,输入一个字符串按反序存放,在主函数输入和输出字符串

源代码

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

void fx(char s[]); char s[100];

printf(\"input strint:\\n\"); gets(s); fx(s); puts(s); }

void fx(char s[]) {

char t; int i,j;

for(i=0,j=strlen(s);i<(strlen(s)/2);i++,j--) {

t=s[i];

s[i]=s[j-1]; s[j-1]=t; } }

运行结果:input strint: abcdefg gfedcba

Press any key to continue

第9章

9.2输入两个整数,求他们相除的余数。用带参数的宏来实现 源代码:

#include

#define XCYS(a,b) ((a)%(b)) void main() {

int a,b;

printf(\"输入两个整数a,b:\"); scanf(\"%d,%d\",&a,&b);

printf(\"他们相除的余数是%d\\n\",XCYS(a,b)); }

运行结果:

输入两个整数a,b:9,2 他们相除的余数是1

Press any key to continue

9.8分别用函数和参数的宏,从3个数中找出最大数 (1)源代码:

#include void main() {

int max(int x,int y); int a,b,c;

printf(\"输入3个整数a,b,c:\"); scanf(\"%d,%d,%d\",&a,&b,&c);

printf(\"MAX=%d\\n\",max((a,b),c)); }

max(int x,int y) {

int z;

z=x>y? x: y; return(z); }

运行结果:

输入3个整数a,b,c:2,4,7 MAX=7

Press any key to continue (2)源代码:

#include

#define MAX(a,b) ((a)>(b)?(a):(b)) void main() {

int a,b,c;

printf(\"输入3个整数a,b,c:\"); scanf(\"%d,%d,%d\",&a,&b,&c);

printf(\"MAX=%d\\n\",MAX(MAX(a,b),c)); }

运行结果:

输入3个整数a,b,c:3,6,8 MAX=8

Press any key to continue

10.3输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后的一个数对换。编写3个函数:(1)输入10个数(2)进行处理(3)输出10个数 源程序:

#include void main() {

void input(int *);

void max_min_value(int *); void output(int *); int number[10]; input(number);

max_min_value(number); output(number); }

void input(int number[]) {

int i;

printf(\"输入10个数:\"); for(i=0;i<10;i++)

scanf(\"%d\}

void max_min_value(int number[]) {

int *max,*min,*p,temp; max=min=number;

for(p=number+1;p*max) max=p;

else if(*p<*min) min=p;

temp=number[0];number[0]=*min;*min=temp;

temp=number[9];number[9]=*max;*max=temp; return; }

void output(int number[]) {

int *p;

printf(\"输出: \");

for(p=number;p运行结果: (1)

输入10个数:22 1 9 5 2 3 6 4 7 8 输出: 1 8 9 5 2 3 6 4 7 22 Press any key to continue (2)

输入10个数:5 1 2 3 4 6 7 8 9 输出: 1 5 9 2 3 4 6 7 8 Press any key to continue

10.11在主函数中输入10个等长的字符串。用另一个函数对它们进行排序。然后在主函数输出这10个已排好序的字符串。 源程序:

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

{

void sort(char (*p)[6]); int i;

char str[10][6]; char (*p)[6];

printf(\"输入10个字符串\\n\"); for(i=0;i<10;i++) scanf(\"%s\",str[i]); p=str; sort(p);

printf(\"排序号的字符串\\n\"); for(i=0;i<10;i++)

printf(\"%s\\n\",str[i]); }

void sort(char (*s)[6]) {

int i,j;

char temp[6],*t=temp; for(i=0;i<9;i++) for(j=0;j<9-i;j++)

if(strcmp(s[j],s[j+1])>0) {

strcpy(t,s[j]);

strcpy(s[j],s[+j+1]); strcpy(s[j+1],t); } }

运行结果:

输入10个字符串 aaaaa sssss ddddd eeeee qqqqq wwwww zzzzz ggggg hhhhh yyyyy

排序号的字符串 aaaaa ddddd eeeee

ggggg hhhhh qqqqq sssss wwwww yyyyy zzzzz

Press any key to continue

10.18编写一个程序,打入月份号,输出该月的英文用名。 源代码:

#include void main() {

char *month_name[13]={\"illegal

month\",\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"}; int n;

printf(\"input month:\"); scanf(\"%d\",&n); if((n<=12)&&(n>=1))

printf(\"It is %s.\\n\",*(month_name+n)); else

printf(\"It is wrong.\\n\"); }运行结果: (1)

input month:2 It is February.

Press any key to continue (2)

input month:8 It is August.

Press any key to continue

#include #include #define N 20

void fun(int *a,int m) {

int i,n=0,*p;

for(i=1,p=a;pfor(p=a;pmain() {

int k=6; int b[N]; fun(b,k); }

用函数指针变量作参数,求最大值、最小值和两数之和 #include \"stdio.h\" void main() {

int a,b,max(int,int),

min(int,int),add(int,int); void process(int,int,int (*fun)()); printf(\"输入两个数:\"); scanf(\"%d,%d\",&a,&b); process(a,b,max); process(a,b,min); process(a,b,add); }

void process(int x,int y,int (*fun)()) {

int result;

result=(*fun)(x,y); printf(\"%d\\n\",result); }

max(int x,int y) {

printf(\"max=\"); return(x>y?x:y); }

min(int x,int y) {

printf(\"min=\"); return(x}

add(int x,int y) {

printf(\"sum=\"); return(x+y); }

用函数指针变量作参数,求两数之和,之差,之乘,之除 源代码:

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

int a,b,add(int,int),ajj(int,int),acc(int,int),ac(int,int); void process(int,int,int (*fun)()); printf(\"输入两个数:\"); scanf(\"%d,%d\ process(a,b,add); process(a,b,ajj); process(a,b,acc); process(a,b,ac); }

void process(int x,int y,int (*fun)()) {

int result;

result=(*fun)(x,y); printf(\"%d\\n\}

add(int x,int y) {

printf(\"相加=\"); return(x+y); }

ajj(int x,int y) {

printf(\"相减=\"); return(x-y); }

acc(int x,int y) {

printf(\"相乘=\"); return(x*y); }

ac(int x,int y)

{

printf(\"相除=\"); return(x/y); }

运行结果:

输入两个数:8,4 相加=12 相减=4 相乘=32 相除=2

Press any key to continue

11.1定义一个结构体变量(包括年月日)。计算该日在本年中第几天?注意闰年问题 源代码:

#include struct { int year; int month; int day; }date;

void main() { int i,days; int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; printf(\"输入年月日:\"); scanf(\"%d,%d,%d\ days=0; for(i=1;i=3) days=days+1; printf(\"输出结果:\"); printf(\"%d/%d is the %dth day in %d.\\n\}

运行结果: (1)

输入年月日:2006,10,1

输出结果:10/1 is the 274th day in 2006. Press any key to continue

(2)

输入年月日:2010,5,26

输出结果:5/26 is the 146th day in 2010. Press any key to continue

11.3编写一个函数print,打印一个学生的成绩数组,该数组中有5个学生的数据计录,每个记录包括num;name;score[3];用主函数记录这些数据,用print函数输出这些记录 源代码:

#include #define N 5

struct student { char num[6]; char name[8]; int score[4]; }stu[N];

void main() { void print(struct student stu[6]); int i,j; for(i=0;iprintf(\"\\n\"); }

printf(\"输出结果\"); print(stu); }

void print(struct student stu[6]) { int i,j; printf(\"\\n 学号 姓名 成绩1 成绩2 成绩3\\n\"); for(i=0;i运行结果:

输入学生信息 1: 学号.:101 姓名:li 成绩 1:99 成绩 2:99 成绩 3:99

输入学生信息 2: 学号.:102 姓名:ma 成绩 1:85 成绩 2:85 成绩 3:85

输入学生信息 3: 学号.:103 姓名:wu 成绩 1:90 成绩 2:90 成绩 3:90

输入学生信息 4: 学号.:104

姓名:hu 成绩 1:80 成绩 2:80 成绩 3:80

输入学生信息 5: 学号.:105 姓名:an 成绩 1:75 成绩 2:75 成绩 3:75

输出结果

学号 姓名 成绩1 成绩2 成绩3 101 li 99 99 99 102 ma 85 85 85 103 wu 90 90 90 104 hu 80 80 80 105 an 75 75 75 Press any key to continue

百钱买百鸡,鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;问鸡翁、母、雏各几何? 程序:

#include void main() { int x,y,z;

for(x=0;x<=19;x++) for(y=0;y<=33;y++) {z=100-x-y; if(15*x+9*y+z==300)

printf(\"鸡翁=%d鸡母=%d鸡雏=%d\\n\",x,y,z);} }

运行结果:

鸡翁=0鸡母=鸡雏=25 鸡翁=4鸡母=鸡雏=18 鸡翁=8鸡母=鸡雏=11 鸡翁=12鸡母=鸡雏=4

Press any key to continue

1、 某班有3个学生,每个学生3门功课,输入成绩,计算每个学生的总分,平均分并输出成绩。 程序:

#include void main() {

int s[3][5],i,j; for(i=0;i<3;i++) for(j=0;j<3;j++)

scanf(\"%d\",&s[i][j]);

printf(\"数学 物理 for(i=0;i<3;i++) {

s[i][3]=s[i][4]=0; for(j=0;j<3;j++) s[i][3]+=s[i][j]; s[i][4]=s[i][3]/3; }

for(i=0;i<3;i++) {

for(j=0;j<5 ;j++)

printf(\"%d\\",s[i][j]); printf(\"\\n\"); } }

运行结果; 1 1 1 2 2 2 3 3 3

数学 物理 英语 总分 平均 1 1 1 3 1 2 2 2 6 2 3 3 3 9 3 Press any key to continue

#include void main() { int s[5],j;

英语 总分平均\\n\"); for(j=0;j<3;j++) scanf(\"%d\{ s[3]=s[4]=0; for(j=0;j<3;j++) s[3]+=s[j]; s[4]=s[3]/3; }

printf(\"数学\物理\英语\总分\平均\\n\"); {

for(j=0;j<5;j++) printf(\"%d\\ printf(\"\\n\"); } }

运行结果; 1 1 1

数学 物理 英语 总分 平均 1 1 1 3 1 Press any key to continue

做一个循环显示菜单,输入相应数值,会显示相应的文字。 菜单

******************

1输入数据 2计算 3排序 4输出 0退出

****************** 请输入你的选择(0~4) #include void main() { int n=1; while(n!=0) { printf(\"\\菜单\\n\"); printf(\"\*******************\\n\"); printf(\"\ 1.输入数据\\n\");

}

}

printf(\"\ 2.计算\\n\"); printf(\"\ 3.排序\\n\"); printf(\"\ 4.输出\\n\"); printf(\"\ 0.退出\\n\");

printf(\"\*******************\\n\"); printf(\"\请输入你的选择(0~4):\"); scanf(\"%d\switch(n) { }

case 1:printf(\"输入数据\\n\");break; case 2:printf(\"计算\\n\");break; case 3:printf(\"排序\\n\");break; case 4:printf(\"输入\\n\");break; case 0:break;

default:printf(\"error\\n\");

#include void main() {

int n=1;

printf(\"\\菜单\\n\");

printf(\"\*******************\\n\"); printf(\"\ 1.输入数据\\n\"); printf(\"\ 2.计算\\n\"); printf(\"\ 3.排序\\n\"); printf(\"\ 4.输出\\n\"); printf(\"\ 0.退出\\n\");

printf(\"\*******************\\n\"); printf(\"\请输入你的选择(0~4):\"); scanf(\"%d\",&n); if(n==0)

printf(\"输入数据\\n\"); else if(n==1) printf(\"计算\\n\"); else if(n==2) printf(\"排序\\n\"); else if(n==3) printf(\"输入\\n\"); else

printf(\"退出\\n\");

}

做一个循环显示菜单,输入相应数值,进行计算输出并会显示相应的文字。 菜单

******************

1输入数据 2计算 3输出 0退出

****************** 源代码: (1)

#include void main() {

int n=1; while(n!=0) {

int s[3][5],i,j;

printf(\"\\菜单\\n\");

printf(\"\*******************\\n\"); printf(\"\ 1.输入数据\\n\"); printf(\"\ 2.进行计算\\n\"); printf(\"\ 3.输出\\n\"); printf(\"\ 0.退出\\n\");

printf(\"\*******************\\n\"); printf(\"\请输入你的选择(0~3):\"); scanf(\"%d\",&n); switch(n) {

case 1:printf(\"输入数据\\n\"); for(i=0;i<3;i++) for(j=0;j<3;j++)

scanf(\"%d\",&s[i][j]); break;

case 2:printf(\"计算\\n\"); for(i=0;i<3;i++) {

s[i][3]=s[i][4]=0; for(j=0;j<3;j++) s[i][3]+=s[i][j]; s[i][4]=s[i][3]/3; }

break;

case 3:printf(\"输出结果\\n\");

printf(\"数学 物理 英语 总分 平均\\n\"); for(i=0;i<3;i++) {

for(j=0;j<5 ;j++)

printf(\"%d\\",s[i][j]); printf(\"\\n\"); }

break;

case 0:break;

default:printf(\"error\\n\"); } } }

运行结果:

菜单 ******************* 1.输入数据 2.进行计算 3.输出 0.退出

******************* 请输入你的选择(0~3):1 输入数据 3 3 3 8 8 8 4 4 4

菜单

******************* 1.输入数据 2.进行计算 3.输出 0.退出

******************* 请输入你的选择(0~3):2 计算

菜单

*******************

1.输入数据 2.进行计算 3.输出 0.退出

******************* 请输入你的选择(0~3):3 输出结果

数学 物理 英语 总分 平均 3 3 3 9 3 8 8 8 24 8 4 4 4 12 4 菜单

******************* 1.输入数据 2.进行计算 3.输出 0.退出

******************* 请输入你的选择(0~3):0 Press any key to continue (2)

#include #define M 4

void input(int s[][M+2]); void js(int s[][M+2]);

void output(int s[][M+2]); void tc();

void main() { int s[3][M+2],a=1; while(a!=0) { int s[3][6],i,j; printf(\"\\菜单\\n\"); printf(\"\*******************\\n\"); printf(\"\ 1.输入数据\\n\"); printf(\"\ 2.进行计算\\n\"); printf(\"\ 3.输出\\n\"); printf(\"\ 0.退出\\n\"); printf(\"\*******************\\n\"); printf(\"\请输入你的选择(0~3):\"); scanf(\"%d\

switch(a) { case 1:input(s);break; case 2:js(s);break; case 3:output(s);break; case 0:tc();break; } } }

void input(int s[][M+2]) { int i,j; printf(\"输入数据\\n\"); for(i=0;i<3;i++) for(j=0;jvoid js(int s[][M+2]) { int i,j; printf(\"计算\\n\"); for(i=0;i<3;i++) { s[i][4]=s[i][M]=0; for(j=0;jvoid output(int s[][M+2]) { int i,j; printf(\"输出结果\\n\"); printf(\"数学 物理 for(i=0;i<3;i++) {

for(j=0;j英语 化学 平均\\n\"); 总分void tc() { printf(\" 谢谢使用本程序 \"); }

运行结果

菜单

******************* 1.输入数据 2.进行计算 3.输出 0.退出

******************* 请输入你的选择(0~3):1 输入数据 1 1 1 1 5 5 5 5 8 8 8 8

菜单

******************* 1.输入数据 2.进行计算 3.输出 0.退出

******************* 请输入你的选择(0~3):2 计算

菜单

******************* 1.输入数据 2.进行计算 3.输出 0.退出

******************* 请输入你的选择(0~3):3 输出结果

数学 物理 英语 化学 总分1 1 1 1 4 5 5 5 5 20 8 8 8 8 32 菜单

******************* 1.输入数据 2.进行计算 3.输出

平均 1 5 8 0.退出

******************* 请输入你的选择(0~3):0

谢谢使用本程序 Press any key to continue

1.编译,链接test.c,生成可执行文件test.exe; 2在DOS状态下运行(test.exe所在路径下)

#include

void main(int argc,char *argv[]) { while(argc>1) { ++argv; printf(\"%s\\n\ --argc; } }

运行结果:

Microsoft Windows XP [版本 5.1.2600] (C) 版权所有 1985-2001 Microsoft Corp.

C:\\Documents and Settings\\Administrator>dir 驱动器 C 中的卷没有标签。 卷的序列号是 6CC6-E923

C:\\Documents and Settings\\Administrator 的目录

2010-05-21 13:51

. 2010-05-21 13:51 .. 2010-05-21 13:48 130 1.c 2010-05-21 13:42 3,339 1.dsp 2010-05-21 13:48 25,600 1.ncb 2010-05-21 13:42 48,0 1.opt 2010-05-21 13:48 0 1.plg 2010-05-21 13:51 130 a.c 2010-05-21 13:50 3,339 a.dsp 2010-05-21 13:50 25,600 a.ncb 2010-05-21 13:51 721 a.plg 2010-05-21 13:50 Debug 2010-02-26 14:45 Favorites

2010-03-30 14:06

WINDOWS 2010-02-26 14:51 workspace 2010-02-01 20:38 「开始」菜单 2010-05-21 13:43 桌面 9 个文件 107,499 字节 8 个目录 11,133,218,816 可用字节

C:\\Documents and Settings\\Administrator>cd debug

C:\\Documents and Settings\\Administrator\\Debug>dir 驱动器 C 中的卷没有标签。 卷的序列号是 6CC6-E923

C:\\Documents and Settings\\Administrator\\Debug 的目录

2010-05-21 13:50

. 2010-05-21 13:50 .. 2010-05-21 13:39 175,484 1.pch 2010-05-21 13:51 155,716 a.exe 2010-05-21 13:51 160,536 a.ilk 2010-05-21 13:51 2,171 a.obj 2010-05-21 13:50 175,484 a.pch 2010-05-21 13:51 394,240 a.pdb 2010-05-21 13:51 33,792 vc60.idb 2010-05-21 13:51 45,056 vc60.pdb

8 个文件 1,142,479 字节 2 个目录 11,133,218,816 可用字节

C:\\Documents and Settings\\Administrator\\Debug>a hello world! hello world!

C:\\Documents and Settings\\Administrator\\Debug>

将5×5矩阵,调用3个函数(1)输入数据(2)计算每一行的和并放到一维数组中(3)将和从高到低排序(4)在主函数中输出排序结果

#include

void input(int a[5][5]);

void sum(int a[5][5],int b[5]); void px(int b[5]); void main() {

int a[5][5],b[5],i;

printf(\"input:\\n\"); input(a); sum(a,b); px(b);

for(i=0;i<5;i++)

printf(\"%d\\",b[i]); printf(\"\\n\"); }

void input(int a[5][5]) {

int i,j;

for(i=0;i<5;i++) for(j=0;j<5;j++)

scanf(\"%d\",&a[i][j]); }

void sum(int a[5][5],int b[5]) {

int i,j;

for(i=0;i<5;i++) {

b[i]=0;

for(j=0;j<5;j++) b[i]+=a[i][j]; } }

void px(int b[5]) {

int i,j,k,x; for(i=0;i<5;i++) {

k=i;

for(j=i+1;j<5;j++) if(b[j]>b[k]) k=j; if(k!=i) {

x=b[i];b[i]=b[k];b[k]=x; } } }

运行结果:

input: 1 1 1 1 1 3 3 3 3 3

2 2 2 2 2 5 5 5 5 5 4 4 4 4 4

25 20 15 10 5

Press any key to continue

11.5 有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩,从键盘输入10个学生数据,要求输出3门课程总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课程成绩、平均分数)。 源程序: 源程序:

#include #define N 10 struct student {

char num[6]; char name[20]; float score[3]; float avr; }stu[N];

void main() {

int i,j,maxi;

float sum,max,average; for(i=0;iprintf(\"输入学生数据%d\\n\ printf(\"学号:\");

scanf(\"%s\ printf(\"姓名:\");

scanf(\"%s\ for(j=0;j<3;j++) {

printf(\"成绩%d:\+1);

scanf(\"%f\&stu[i].score[j]);

} }

average=0;max=0;maxi=0; for(i=0;isum=0;

for(j=0;j<3;j++)

sum+=stu[i].score[j]; stu[i].avr=sum/3.0; if(sum>max) { max=sum; maxi=i; } }

average/=N;

printf(\" 学号 姓名 第1门成绩 第2门成绩 第3门成绩 平均分\\n\");

for(i=0;iprintf(\"%5s%10s\.num,stu[i].name); for(j=0;j<3;j++)

printf(\"%9.2f\.score[j]); printf(\" %8.2f\\n\.avr); }

printf(\"最高分学生信息:\\n学号:%s,姓名:%s\\n\.num,stu[maxi].name);

printf(\"学科成绩:\\n第一门成绩:%6.2f\\n第二门成绩:%6.2f\\n第三门成绩:%6.2f\\n平均分:%5.2f\\n\

stu[maxi].score[0],stu[maxi].score[1],stu[maxi].score[2],stu[maxi].avr); }

运行结果: 输入学生数据1 学号:101 姓名:li 成绩1:100 成绩2:100 成绩3:100

输入学生数据2 学号:102

姓名:la 成绩1:95 成绩2:95 成绩3:95

输入学生数据3 学号:103 姓名:lp 成绩1:90 成绩2:90 成绩3:90

输入学生数据4 学号:104 姓名:ln 成绩1:85 成绩2:85 成绩3:85

输入学生数据5 学号:105 姓名:lc 成绩1:80 成绩2:80 成绩3:80

输入学生数据6 学号:106 姓名:lk 成绩1:75 成绩2:75 成绩3:75

输入学生数据7 学号:107 姓名:lj 成绩1:70 成绩2:70 成绩3:70

输入学生数据8 学号:108 姓名:lq 成绩1:82 成绩2:82 成绩3:82

输入学生数据9 学号:109 姓名:lo 成绩1:96

成绩2:96 成绩3:96

输入学生数据10 学号:110 姓名:ll 成绩1:84 成绩2:84 成绩3:84

学号 姓名 第1门成绩 第2门成绩 第3门成绩 平均分 101 li 100.00 100.00 100.00 100.00 102 la 95.00 95.00 95.00 95.00 103 lp 90.00 90.00 90.00 90.00 104 ln 85.00 85.00 85.00 85.00 105 lc 80.00 80.00 80.00 80.00 106 lk 75.00 75.00 75.00 75.00 107 lj 70.00 70.00 70.00 70.00 108 lq 82.00 82.00 82.00 82.00 109 lo 96.00 96.00 96.00 96.00 110 ll 84.00 84.00 84.00 84.00 最高分学生信息: 学号:101,姓名:li 学科成绩:

第一门成绩:100.00 第二门成绩:100.00 第三门成绩:100.00 平均分:100.00

Press any key to continue

指针做法

#include #define N 3 struct student { char num[6]; char name[8]; float score[3]; float avr; }stu[N];

void input_js(struct student *p);

void output(struct student *p); void main() { input_js(stu); output(stu); }

void output(struct student *p) { int i,j; printf(\" NO. name score1 score2 for(i=0;ivoid input_js(struct student *p) { int i,j,maxi; float sum,max,average; average=0; max=0; maxi=0; for(i=0;iscore[j]; } p->avr=sum/3.0; average+=p->avr; if(sum>max) { max=sum; maxi=i; }

score3 average\\n\"); } average/=N; printf(\"average= %5.2f\\n\

printf(\"The highest score is:student %s,%s.\\n\ printf(\"His score are: %6.2f,%6.2f,%6.2f,average:%5.2f.\\n\ stu[maxi].score[1],stu[maxi].score[2],stu[maxi].avr); }

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

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务