谭浩强《C程序设计》例题练习补充练习中,如何设计一个长尾词?

2026-04-12 02:102阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计7620个文字,预计阅读时间需要31分钟。

谭浩强《C程序设计》例题练习补充练习中,如何设计一个长尾词?

《C语言学习笔记——蔡浩强《C程序设计》例题练习+补充练习1.1 要求在屏幕上输出这是C程序。》


C语言学习笔记——谭浩强《C程序设计》例题练习+补充练习

1.1要求在屏幕上输出“This is a C program.”

#include<stdio.h> int main() //int main后面忘记加() { printf("This is a C program.\n"); //换行是\n,在(“ “)里面,忘了加”;” return 0; //忘写return 0; }

1.2求两个整数之和,求123和456的和

#include<stdio.h> int a,b,sum; int main() { a=123; b=456; sum=a+b; printf("the sum is:%d\n",sum); //%d不能少,否则结果出不来,见1.2.1。输出,(“”,sum)中,sum前面不能加% return 0; }

1.3求两个整数中的较大者
方法一:

#include<stdio.h> int a,b,c; int main() { scanf("%d,%d",&a,&b); if(a>=b) c=a; else c=b; printf("%d",c); return c; } //不知道为什么没有用

方法二:

#include<stdio.h> int main() { int max(int x,int y); int a,b,c; scanf("%d.%d",&a,&b); c=max(a,b); printf("max=%d\n",c); return 0; //main函数中return语句指定的返回值一般为0 } int max(int x,int y) { int z; if(x>y)z=x; else z=y; return(z); //只有通过return语句才能把求出的z值作为函数的值并返回调用他的main函数中(第8行)。不要以为在max函数中求出最大值z后就会自动的作为函数值返回调用处 } //不知道为啥,还是没有用

2.1求12345
方法一

#include<stdio.h> int main() { int s,i; s=1; for(i=2;i<=5;i++) //for循环后面不要加;,()里面用;隔开 s=s*i; printf("%d",s); }

方法二:

#include<stdio.h> int main() { int s,i; s=1; i=2; while(i<=5) { s=s*i; i=i+1; } printf("%d",s); }

2.19求多项式1-1/2+1/3-1/4…+1/99-1/100
方法一:
(1)错误示范

#include<stdio.h> int main() { int sign=1,demo; //当分母定义为整形时,结果为1,结果不准确 double term,sum=1; for(demo=2;demo<=100;demo++) { sign=-1*sign; term=sign/demo; sum=sum+term; } printf("%f",sum); }

(2)正确示范

#include<stdio.h> int main() { int sign=1; double demo,term,sum=1; //分母demo要定义为双精度型 for(demo=2;demo<=100;demo++) { sign=-sign; term=sign/demo; sum=sum+term; } printf("%f\n",sum); return 0; }

方法二:

#include<stdio.h> int main() { int sign=1; double deno=2.0,sum=1.0,term; while(deno<=100) { sign=-sign; term=sign/deno; sum=sum+term; deno=deno+1; } printf("%f\n",sum); return 0; }

3.1有人用温度计测量出永华事法表示的温度(如64°F),今要求把它转换为亦设事发表示的温度(如17.8°C)。

#include<stdio.h> int main() { float f,c; scanf("%f",&f); c=(5.0/9)*(f-32); //用5.0才能得出正确结果。直接用5的话结果就是错误的 printf("%f\n",c); }

3.2计算存款利息。有1000元,想存一年。有3种方法可选:(1)活期,年利率为r1,0.0036;(2)一年期定期,年利率为r2,0.0225;(3)存两次半年定期,年利率为r3,0.0198;请分别计算出一年后按3种方法所得到的本息和。

#include<stdio.h> int main() { float p0=1000,r1=0.0036,r2=0.0225,r3=0.0198,p1,p2,p3; p1=p0*(1+r1); p2=p0*(1+r2); p3=p0+p0/2*r3*2; printf("%f\n%f\n%f\n",p1,p2,p3); }

3.3给定一个大写字母,要求要小写字母输出

谭浩强《C程序设计》例题练习补充练习中,如何设计一个长尾词?

#include<stdio.h> int main() { char a,b; scanf("%c",&a); b=a+32; printf("%c\n",b); return 0; }

3.4给出三角形的三边长,求三角形面积
错误示范:

#include<stdio.h> #include<math.h> int main() { double a,b,c,s,area; scanf("%f%f%f",&a,&b,&c); s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("area=%f\n",area); return 0; } //没有考虑a,b,c的范围,导致运行结果出错 ---178

正确示范:

#include<stdio.h> #include<math.h> void main() { float a,b,c,p; double s; printf("please input a,b and c:"); scanf("%f%f%f",&a,&b,&c); if(a+b>c && a+c>b && b+c>a) { p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c)); printf("the areas is:%f",s); } else printf ("the line is error\n"); } ---194

例题示范:

#include<stdio.h> #include<math.h> int main() { double a,b,c,s,area; a=3.67; b=5.43; c=6.21; s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("a=%f\tb=%f\tc=%f\n",a,b,c); printf("area=%f\n",area); return 0; } ---208

3.5求ax^2+bx+c=0方程的根。a,b,c由键盘输入,设b62-4ac>0
正确示范;
注意要考虑超出范围错误的情况

#include<stdio.h> #include<math.h> void main() { float a,b,c,x; double x1,x2; printf("please inputa,b,c:"); scanf("%f%f%f",&a,&b,&c); if(a==0) {x=-c/b; printf("x=%f\n",x); } else if((b*b-4*a*c)>=0) {x1=((-b)+sqrt(b*b-4*a*c))/(2*a); x2=((-b)-sqrt(b*b-4*a*c))/(2*a); printf("x1=%f\nx2=%f\n",x1,x2);} else printf("no answer\n"); } ---228

例题示范:

#include<stdio.h> #include<math.h> int main() { double a,b,c,disc,x1,x2,p,q; scanf("%1f%1f%1f",&a,&b,&c); disc=b*b-4*a*c; p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf("x1=%7.2f\nx2=%7.2f\n",x1,x2); //7.2表示指定数据占七列,其中小数占两列 return 0; } //按照书上敲出来运行有问题 ---242

3.6用%f输出实数,只能得到6位小数。

#include<stdio.h> int main() { double a=1.0; //a是双精度型 printf("%f\n",a/3); //a/3也是双精度性,但是用%f格式声明只能输出6位小数 } ---248

补充:用%f输出实数,得到15位小数。

#include<stdio.h> int main() { double a=1.0; printf("%20.15f\n",a/3); }

#include<stdio.h> int main() { double a=1.0; printf("%16.15f\n",a/3); }

3.7float型数据的有效位数

#include<stdio.h> int main() { float a; //fliat型数据只能保证6-7位有效数字 a=10000/3.0; //因此从左面开始的第7位数字(即第三位小数)以后的数字不保证正确 printf("%f\n",a); return 0; }

补充:

#include<stdio.h> int main() { double a; //将float改成double a=10000/3.0; printf("%f\n",a); //由于%f,得到6位小数 return 0; }

3.8先后输出BOY三个字符

#include<stdio.h> int main() { char a='B',b='O',c='Y'; putchar(a); putchar(b); putchar(c); putchar('\n'); return 0; }

补充,用ASCII码表示BOY

#include<stdio.h> int main() { int a=66,b=79,c=89; putchar(a); putchar(b); putchar(c); putchar('\n'); return 0; }

---296

补充练手

  1. 输入三角形的三边长,求三角形面积。

#include<stdio.h> #include<math.h> void main() { float a,b,c,p; double s; printf("please input a,b and c:"); scanf("%f%f%f",&a,&b,&c); if(a+b>c && a+c>b && b+c>a) { p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c)); printf("the areas is:%f",s); } else printf ("the line is error\n"); }

从键盘输入一个大写字母/小写字母,要求改用小写/大写字母输入。

#include<stdio.h> void main() { char a; printf("please input a word:"); scanf ("%c",&a); if(a>='A' && a<='Z') a=a+32; else if(a>='a' && a<='z') a=a-32; printf("%c\n",a); }

求解ax^2+bx+c=0方程的解

#include<stdio.h> #include<math.h> void main() { float a,b,c,x; double x1,x2; printf("please inputa,b,c:"); scanf("%f%f%f",&a,&b,&c); if(a==0) {x=-c/b; printf("x=%f\n",x); } else if((b*b-4*a*c)>=0) {x1=((-b)+sqrt(b*b-4*a*c))/(2*a); x2=((-b)-sqrt(b*b-4*a*c))/(2*a); printf("x1=%f\nx2=%f\n",x1,x2);} else printf("no answer\n"); }

根据输入年、月,判断该月有多少天

#include<stdio.h> #include<math.h> int main() { int year,month; printf("please input year,month:"); scanf("%i%i",&year,&month); if((year%4 == 0 && year%100!=0)||year%400==0) { switch(month) { case 2:printf("29\n");break; case 1: case 3: case 5: case 7: case 8: case 10: case 12:printf("31\n");break; case 4: case 6: case 9: case 11:printf("30\n");break; } } else { switch(month) { case 2:printf("28\n");break; case 1: case 3: case 5: case 7: case 8: case 10: case 12:printf("31\n");break; case 4: case 6: case 9: case 11:printf("30\n");break; } } } ---390

输出所有“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于数的本身。

#include<stdio.h> #include<math.h> int main() { int s; for(s=100;s<=999;s++) { if(s==(s%10)*(s%10)*(s%10)+(((s%100)-(s%10))/10)*(((s%100)-(s%10))/10)*(((s%100)-(s%10))/10)+((s-(s%100))/100)*((s-(s%100))/100)*((s-(s%100))/100)) printf("the figures are:%i\n",s); } } ---402

两乒乓球队进行比赛,各处三人。甲队为A,B,C三人,乙队为X,Y,Z三。以抽签决定比赛名单。有人向队员打听比赛名单,A说他不和X比,C说他不和X,Z比,请编程找出3赛手的名单

#include<stdio.h> void main() { char i,j,k;//i是A的对手,j是B的对手,k是C的对手 for (i = 'X'; i <= 'Z'; i++) { for (j = 'X'; j <= 'Z'; j++) { if (j!=i) { for (k = 'X'; k <= 'Z'; k++) { if (k != i&&k!= j) { if (i != 'X'&&k != 'X'&&k != 'Z') { printf("A--%c\nB--%c\nC--%c\n", i, j, k); } } } } } } } ----426

设有两个矩阵A、B,编写一程序求该矩阵的成绩

#include<stdio.h> #include<stdlib.h> #define M 100 int main(void) { int i,j,k,matrix1[M][M],matrix2[M][M],row1,col1,row2,col2,matrix[M][M]; /*为需要相乘的两个矩阵赋值:*/ printf("输入第一个矩阵的行数和列数:"); scanf("%d%d",&row1,&col1); printf("输入第一个矩阵:\n"); for(i=0;i<row1;i++){ for(j=0;j<col1;j++){ scanf("%d",&matrix1[i][j]); } } printf("输入第二个矩阵的行数和列数:"); scanf("%d%d",&row2,&col2); printf("输入第二个矩阵:\n"); for(i=0;i<row2;i++){ for(j=0;j<col2;j++){ scanf("%d",&matrix2[i][j]); } } /*初始化matrix:*/ for(i=0;i<row1;i++){ for(j=0;j<col2;j++){ matrix[i][j]=0; } } if(col1!=row2){ fprintf(stderr,"enput error!"); exit(EXIT_FAILURE); } printf("The result:\n"); for(i=0;i<row1;i++){ for(j=0;j<col2;j++){ for(k=0;k<col1;k++){ matrix[i][j]=matrix[i][j]+matrix1[i][k]*matrix2[k][j]; } } } for(i=0;i<row1;i++){ for(j=0;j<col2;j++){ printf("%d ",matrix[i][j]); } printf("\n"); } return 0; } ---526

输入年、月、日,计算该天是这一年的第多少天

#include<stdio.h> void main() { int plus(int year,int month,int day); int year,month,day,sum; printf("please input year,month,day:"); scanf("%d%d%d",&year,&month,&day); sum=fun(year,month,day); printf("%d",sum); } int plus(int year,int month,int day) { int sum,i; int a[2][12]={{31,29,31,30,31,30,31,31,30,31,30,31},{ 31,28,31,30,31,30,31,31,30,31,30,31}}; if(year%4==0&&year%100!=0||year%400==0) { sum=0; for(i=0;i<month-1;i++) { sum=sum+a[0][i]; } sum=sum+day; } else { sum=0; for(i=0;i<month-1;i++) { sum=sum+a[1][i]; } sum=sum+day; } return(sum); } ---560

用函数实现1!+2!+3!+……+N!

#include<stdio.h> int main() { int fac(int); int sum,n,i; sum=0; printf("please input N:"); scanf("%d",&n); for(i=n;i>0;i--) { sum=sum+fac(i); } printf("%d",sum); } int fac(int n) { int sum; if(n==1) { sum=1; } else { sum=fac(n-1)*n; } return(sum); } ---587

用函数实现对N个数进行排序

#include <stdio.h> #include<stdlib.h> int main() { int fun(int [10]); int i,a[10]; printf("排序前的顺序:"); for(i=0;i<10;i++) { a[i]=rand()%101; printf("%d ",a[i]); } fun(a); printf("排序后的顺序:"); for(i=0;i<10;i++) { printf("%d ",a[i]); } printf("\n"); return 0; } int fun(int arr[10]) { int i,j,temp; for(i=0;i<9;i++) for(j=0;j<9-i;j++) { if(arr[j]>arr[j+1]) { temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } return 0; } ---627

输入3个整数,按由小到大的顺序输出

#include<stdio.h> int main() { int a,b,c,*p1,*p2,*p3,p; printf("please input three numbers:"); scanf("%d%d%d",&a,&b,&c); p1=&a; p2=&b; p3=&c; if(a>b) {p=*p1; *p1=*p2; *p2=p;} if(a>c) {p=*p1; *p1=*p3; *p3=p;} if(b>c) {p=*p2; *p2=*p3; *p3=p;} printf("%d %d %d",a,b,c); } ---650

写一函数,将一个3*3整数矩阵转置

#include<stdio.h> #include<stdlib.h> int main() { void convert(int[3][3]); int a[3][3],i,j; printf("please input a matrix:"); printf("\n"); for(i=0;i<3;i++) for(j=0;j<3;j++) { a[i][j]=rand()%101; printf("%d ",a[i][j]); if(j==2) printf("\n"); } printf("\n"); printf("please input a conver matrix:"); printf("\n"); convert(a); for(i=0;i<3;i++) for(j=0;j<3;j++) { printf("%d ",a[i][j]); if(j==2) printf("\n"); } } void convert(int arr[3][3]) { int t; t=arr[0][1];arr[0][1]=arr[1][0];arr[1][0]=t; t=arr[0][2];arr[0][2]=arr[2][0];arr[2][0]=t; t=arr[1][2];arr[1][2]=arr[2][1];arr[2][1]=t; } ---685

有一个班N个学生,5门课程。求第1门课的平均分;找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩和平均分;找出平均成绩在90以上或全部课程成绩在85分以上的学生

#include<stdio.h> struct student { int num; char name[20]; float score[5]; float aver; }; int main() { void input(struct student stu[]); struct student 2bujige(struct student stu[]); struct student youxiu(struct student stu[]); struct student stu[3],*p=stu; input(p); 2bujige(p); youxiu(p); } void input(struct student stu[]) { int i; printf("请输入各位学生的信息:学号、姓名、五门课成绩:\n"); for(i=0;i<3;i++) { scanf("%d%s%f%f%f%f%f",&stu[i].num,stu[i].name,&stu[i].score[0], &stu[i].score[1],&stu[i].score[2],&stu[i].score[3],&stu[i].score[4]); stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3]+stu[i].score[4])/5; printf("\n"); } } struct student 2bujige(struct student stu[]) { int i,j; printf("两门以上课程不及格的:\n"); for(i=0;i<3;i++) { int count=0; for(j=0;j<5;j++) { if(stu[i].score[j]<60) { count++; if(count>2) printf("学号:%d\n姓名:%s\n五门课成绩:%5.lf,%5.lf,%5.lf,%5.lf,%5.lf\n平均成绩: %6.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].aver); } } } } struct student youxiu(struct student stu[]) { int i; printf("平均成绩90以上或者全部课程85以上的:\n"); for(i=0;i<3;i++) { if(stu[i].aver>90||stu[i].score[0]>85&&stu[i].score[1]>85&&stu[i].score[2]>85&&stu[i].score[3]>85&&stu[i].score[4]>85) printf("学号:%d\n姓名:%s\n五门课成绩:%5.lf,%5.lf,%5.lf,%5.lf,%5.lf\n平均成绩:%6.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].aver); printf("\n"); } } ---743

利用结构体知识,分析以下问题。
某班级有N个学生,本学期选修5门课程,每个学生信息包括:学号,姓名,出生日期,成绩。要求:1、根据学生总分,对成绩排序,输出学生信息;2、统计班级不及格人、门次数,将其输出。

#include<stdio.h> #define N 3 struct Student {int num; char name[20]; float score[3]; double aver; }; int main() {void input(struct Student stu[]); struct Student max(struct Student stu[]); void print(struct Student stu); struct Student stu[N],*p=stu; input(p); print(max(p)); return 0; } void input(struct Student stu[]) {int i; printf("请输入各学生的信息:学号、姓名、3门课成绩:\n"); for(i=0;i<N;i++) {scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]); stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0; } } struct Student max(struct Student stu[]) {int i,m=0; for(i=0;i<N;i++) if(stu[i].aver>stu[m].aver)m=i; return stu[m]; } void print(struct Student stud) {printf("\n成绩最高的学生是:\n"); printf("学号:%d\n姓名:%s\n三门课成绩:%5.1f,%5.1f,%5.1f\n平均成绩:%6.2f\n",stud.num,stud.name,stud.score[0],stud.score[1],stud.score[2],stud.aver); } ---778

3.10改写例3.3,使之可以适用于任何大写字母,把它转换位小写字母,然后用putchar函数输出该小写字母

#include<stdio.h> int main() { char c1,c2; c1=getchar(); c2=c1+32; putchar(c2); putchar('\n'); return 0; }

4.1在例3.5的基础上对程序进行改进。题目要求解得ax2+bx+c=0方程的根。由键盘输入a,b,c.假设a,b,c的值任意,并不保证b2-4ac>=0.需要在程序中进行判别,如果b2-4ac>=0,就计算并输出方程的两个实根,如果b2-4ac<0.就输出“此方程无实根”的信息

#include<stdio.h> #include<math.h> int main() { double a,b,c,disc,x1,x2,p,q; scanf("%1f%1f%1f",&a,&b,&c); disc=b*b-4*a*c; if(disc<0) printf("This equation hasn't real roots\n"); else { p=-b/(2.0 *a); q=sqrt(disc)/(2.0*a); x1=p+q;x2=p-q; printf("real roots:\nx1=%7.2f\nx2=%7.2f\n",x1,x2); } return 0; }

4.2输入两个师叔,按由小到大的顺序输出这两个数

#include<stdio.h> int main() { float a,b,t; scanf("%f%f",&a,&b); if(a>b) { t=a; a=b; b=t; } printf("%5.2f,%5.2f\n",a,b); return 0; }

4.3输入3个数a,b,c,要求按从小到大的顺序输出

#include<stdio.h> int main() { float a,b,c,t; scanf("%f%f%f",&a,&b,&c); if(a>b) { t=a; a=b; b=t; } if(a>c) { t=a; a=c; c=t; } if(b>c) { t=b; b=c; c=t; } printf("%5.2f,%5.2f,%5.2f\n",a,b,c); return 0; }

4.4输入一个字符,判别它是否为大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。

#include<stdio.h> int main() { char ch; scanf("%c",&ch); ch=(ch>='A'&&ch<='Z')?(ch+32):ch; printf("%c\n",ch); return 0; }

4.5有一阶跃函数y={-1(x<0);0(x=0);1(x>0),编译程序,输入一个x值,要求输出相应的y值。

#include<stdio.h> int main() { int x,y; scanf("%d",&x); if(x<0) y=-1; else if(x==0)y=0; else y=1; printf("x=%d,y=%d\n",x,y); return 0; }

4.6要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70-84分,C等为60-69分,D等为60分以下。成绩的等级由键盘输入。

#include<stdio.h> int main() { char grade; scanf("%c",&grade); printf("Your score:"); switch(grade) { case'A':printf("85-100\n");break; case'B':printf("70-84\n");break; case'C':printf("60-69\n");break; case'D':printf("<60\n");break; default:printf("enter data error!\n"); } return 0; }

4.7用switch语句处理菜单命令。在许多应用程序中,用菜单对流程进行控制,例如从键盘输入一个’A’或’a’字符,就会执行A操作,输入一个‘B’或’b’字符,就会执行B操作。可以按照以下思路编写程序。

#include<stdio.h> int main() { void action1(int,int),action2(int,int); char ch; int a=15,b=23; ch=getchar(); switch(ch) { case'a': case'A':action1(a,b);break; case'b': case'B':action2(a,b);break; default:putchar('\a'); } return 0; } void action1(int x,int y) { printf("x+y=%d\n",x+y); } void action2(int x,int y) { printf("x*y=%d\n",x*y); }

4.8写一程序,判断某一年是否为闰年。

#include<stdio.h> int main() { int year,leap; printf("enter year:"); scanf("%d",&year); if(year%4==0) { if(year%100==0) { if(year%400==0) leap=1; else leap=0; } else leap=1; } else leap=0; if(leap) printf("%d is",year); printf("a leap year.\n"); return 0; }

4.9求ax^2+bx+c=0方程的解

#include<stdio.h> #include<math.h> int main() { double a,b,c,disc,x1,x2,realpart,imagpart; scanf("%1f%1f%1f",&a,&b,&c); printf("the equation"); if(fabs(a)<=1e-6) printf("is not a quadratic\n"); else { disc=b*b-4*a*c; if(fabs(disc)<=1e-6) printf("has two equal roots:%8.4f\n",-b/(2*a)); else if(disc>1e-6) { x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); printf("has distinct real roots:%8.4f and %8.4f\n",x1,x2); } else { realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf("has complex roots:\n"); printf("%8.4f+%8.4fi\n",realpart,imagpart); printf("%8.4f-%8.4fi\n",realpart,imagpart); } } return 0; }

4.10运输公司对用户计算运输费用。路程越远,运费越低。标准如下。
S<250 没有折扣
250<=s<500 2%折扣
500<=s<1000 5%折扣
1000<=s<2000 8%折扣
2000<=s<3000 10%折扣
3000<=s 15%折扣

#include<stdio.h> int main() { int c,s; float p,w,d,f; printf("please enter price,weight,discount:"); scanf("%f%f%d",&p,&w,&s); if(s>=3000) c=12; else c=s/250; switch(c) { case0:d=0;break; case1:d=2;break; case2: case3:d=5;break; case4: case5: case6: case7:d=8;break; case8: case9: case10: case11:d=10;break; case12:d=15;break; } f=p*w*s*(1-d/100); printf("freight=%10.2f\n",f); return 0; }

5.1求1+2+3+…+100

#include<stdio.h> int main() { int i=1,sum=0; while(i<=100) { sum=sum+i; i++; } printf("sum=%d\n",sum); return 0; }

5.2用do…while语句求1+2+3+…+100

#include<stdio.h> int main() { int i=1,sum=0; do { sum=sum+i; i++; }; while(i<=100) printf("sum=%d\n",sum); return 0; }

5.4在全系1000名学生中举行慈善募捐,当总数达到10万元时就结束,统计此时捐款人数以及平均每人捐款的数目。

#include<stdio.h> #define SUM 100000 int main() { float amount,aver,total; int i; for(i=1,total=0;i<=1000;i++) { printf("please enter amount:"); scanf("%f",&amount); total=total+amount; if(total>=SUM)break; } aver=total/i; printf("num=%d\naver=%10.2f\n",i,aver); return 0; }

补充练习:
输入5名学生的分数并显示它们的总分和平均分

#include <stdio.h> int main(void) { int uchida; int satoh; int hiraki; int masaki; int sum = 0; puts("请输入分数。"); printf("1号:"); scanf("%d", &uchida); printf("2号:"); scanf("%d", &satoh); printf("3号:"); scanf("%d", &hiraki); printf("4号:"); scanf("%d", &masaki); printf("5号:"); scanf("%d", &masaki); sum += uchida; sum += satoh; sum += hiraki; sum += masaki; sum += masaki; printf("总分:%5d\n", sum); printf("平均分:%5.1f\n", (double)sum / 5); return (0); }

依次把1,2,3,4,5赋值给数组每个元素并显示

#include <stdio.h> int main(void) { int vc[5]; // 包含5个元素的数组 vc[0] = 1; vc[1] = 2; vc[2] = 3; vc[3] = 4; vc[4] = 5; printf("vc[0] = %d\n", vc[0]); printf("vc[1] = %d\n", vc[1]); printf("vc[2] = %d\n", vc[2]); printf("vc[3] = %d\n", vc[3]); printf("vc[4] = %d\n", vc[4]); return (0); }

依次把1/2/3/4/5赋值给数组每个元素并显示 (使用for语句)

#include <stdio.h> int main(void) { int i; int vc[5]; // 包含5个元素的数组 for (i = 0; i < 5; i++) vc[i] = i + 1; for (i = 0; i < 5; i++) printf("vc[%d] = %d\n", i, vc[i]); return (0); `这里写代码片` }

将数组的全部元素赋值为(0.0)并显示

#include <stdio.h> int main(void) { int i; double vd[5]; for (i = 0; i < 5; i++) vd[i] = 0.0; for (i = 0; i < 5; i++) printf("vd[%d] = %.1f\n", i, vd[i]); return (0); }

从头开始顺次为数组各元素进行初始化(1,2,3,4,5)并进行显示

#include <stdio.h> int main(void) { int i; int vc[5] = {1, 2, 3, 4, 5}; for (i = 0; i < 5; i++) printf("vc[%d] = %d\n", i, vc[i]); return (0); }

把数组中的全部元素赋值到另一个数组中

#include <stdio.h> int main(void) { int i; int va[5] = {15, 20, 30}; int vb[5]; for (i = 0; i < 5; i++) vb[i] = va[i]; puts(" va vb"); puts("------"); for (i = 0; i < 5; i++) printf("%3d%3d\n", va[i], vb[i]); return (0); }

输入数组元素的值并显示

#include <stdio.h> int main(void) { int i; int vx[5]; for (i = 0; i < 5; i++) { printf("vx[%d]:", i); scanf("%d", &vx[i]); } for (i = 0; i < 5; i++) printf("vx[%d]=%d\n", i, vx[i]); return (0); }

对数组中的全部元素进行倒序排列

#include <stdio.h> int main(void) { int i; int vx[5]; for (i = 0; i < 5; i++) { printf("vx[%d]:", i); scanf("%d", &vx[i]); } for (i = 0; i < 2; i++) { int temp = vx[i]; vx[i] = vx[4 - i]; vx[4 - i] = temp; } for (i = 0; i < 5; i++) printf("vx[%d]=%d\n", i, vx[i]); return (0); }

输入5名学生的分数并显示出它们的总分和平均分

#include <stdio.h> int main(void) { int i; int tensu[5]; // 5名学生的分数 int sum = 0; // 总分 puts("请输入学生的分数。"); for (i = 0; i < 5; i++) { printf("%2d号:", i + 1); scanf("%d", &tensu[i]); sum += tensu[i]; } printf("总分:%5d\n", sum); printf("平均分:%5.1f\n", (double)sum / 5); return (0); }

输入5名学生的分数并显示出其中的最高分和最低分

#include <stdio.h> #define NUMBER 5 // 学生人数 int main(void) { int i; int tensu[NUMBER]; // 5名学生的分数 int max, min; // 总分 puts("请输入学生的分数。"); for (i = 0; i < NUMBER; i++) { printf("%2d号:", i + 1); scanf("%d", &tensu[i]); } min = max = tensu[0]; for (i = 1; i < NUMBER; i++) { if (tensu[i] > max) max = tensu[i]; if (tensu[i] < min) min = tensu[i]; } printf("最高分:%d\n", max); printf("最低分:%d\n", min); return (0); }

输入5名学生的分数并显示出60分以上的一览表

#include <stdio.h> #define NUMBER 5 // 学生人数 int main(void) { int i; int snum = 0; // 及格学生人数 int tensu[NUMBER]; // NUMBER名学生的分数 int succs[NUMBER]; // 及格学生一览表(保存及格学生的下标) puts("请输入学生的分数。"); for (i = 0; i < NUMBER; i++) { printf("%2d号:", i + 1); scanf("%d", &tensu[i]); if (tensu[i] >= 60) succs[snum++] = i; // 添加到及格学生一览表中 } puts("及格学生一览表"); puts("--------------"); for (i = 0; i < snum; i++) printf("%2d号(%3d分)\n", succs[i] + 1, tensu[succs[i]]); return (0); }

输入学生的分数并显示出分布情况

#include <stdio.h> #define NUMBER 80 // 人数上限 int main(void) { int i, j; int num; // 实际的人数 int tensu[NUMBER]; // 学生的分数 int bunpu[11] = {0}; // 分布图 printf("请输入学生人数:"); do { scanf("%d", &num); if (num < 1 || num > NUMBER) printf("\a人数范围[1到%d] :", NUMBER); } while (num < 1 || num > NUMBER); puts("请输入学生的分数。"); for (i = 0; i < num; i++) { printf("%2d号:", i + 1); do { scanf("%d", &tensu[i]); if (tensu[i] < 0 || tensu[i] > 100) printf("\a分数范围[0到100]:"); } while (tensu[i] < 0 || tensu[i] > 100) ; bunpu[tensu[i] / 10]++; } puts("\n----分布图----"); printf(" 100:"); for (j = 0; j < bunpu[10]; j++) putchar('*'); putchar('\n'); for (i = 9; i >= 0; i--) { printf("%3d - %3d:", i * 10, i * 10 + 9); for (j = 0; j < bunpu[i]; j++) putchar('*'); putchar('\n'); } return (0); }

计算2行3列矩阵的和

#include <stdio.h> int main(void) { int i, j; int ma[2][3] = {{1, 2, 3}, {4, 5, 6}}; int mb[2][3] = {{6, 3, 4}, {5, 1, 2}}; int mc[2][3] ={0}; for (i = 0; i < 2; i++) for (j = 0; j < 3; j++) mc[i][j] = ma[i][j] + mb[i][j]; for (i = 0; i < 2; i++) { for (j = 0; j < 3; j++) printf("%3d", mc[i][j]); putchar('\n'); } return (0); }

计算出1000以内的质数(第1版)

#include <stdio.h> int main(void) { int i, no; unsigned long counter = 0; for (no = 2; no <= 1000; no++) { for (i = 2; i < no; i++) { // 能被整除的不是质数 counter++; // 退出上述循环 if (no % i == 0) break; } if (no == i) // 直到最后也未被整除 printf("%d\n", no); } printf("乘除运算的次数:%lu\n", counter); return (0); }

计算出1000以内的质数(第2版)

#include <stdio.h> int main(void) { int i, no; unsigned long counter = 0; no = 2; // 2是偶数中唯一的质数 printf("%d\n", no++); for (; no <= 1000; no += 2) { // 只把奇数作为判断对象 for (i = 2; i < no; i++) { // 能被整除的不是质数 counter++; // 退出上述循环 if (no % i == 0) break; } if (no == i) // 直到最后也未被整除 printf("%d\n", no); } printf("乘除运算的次数:%lu\n", counter); return (0); }

计算出1000以内的质数(第3版)

#include <stdio.h> int main(void) { int i, no; unsigned long counter = 0; no = 2; // 2是偶数中唯一的质数 printf("%d\n", no++); for (; no <= 1000; no += 2) { // 只把奇数作为判断对象 for (i = 3; i < no; i += 2) { // 只判断能否被奇数整除 counter++; // 退出上述循环 if (no % i == 0) break; } if (no == i) // 直到最后也未被整除 printf("%d\n", no); } printf("乘除运算的次数:%lu\n", counter); return (0); }

计算出1000以内的质数(第4版)

#include <stdio.h> int main(void) { int i, no; int prime[500]; // 用来保存质数的数组 int ptr = 0; // 已经的到的质数个数 unsigned long counter = 0; prime[ptr++] = 2; prime[ptr++] = 3; for (no = 5; no <= 1000; no += 2) { // 只把奇数作为判断对象 for (i = 1; i < ptr; i++) { // 尝试能否被已经得到的质数整除 counter++; if (no % prime[i] == 0) // 能被整除的不是质数 break; // 退出上述循环 } if (ptr == i) // 直到最后也未被整除 prime[ptr++] = no; // 添加到数组中 } for (i = 0; i < ptr; i++) printf("%d\n", prime[i]); printf("乘除运算的次数:%lu\n", counter); return (0); }

计算出1000以内的质数(第5版)

#include <stdio.h> int main(void) { int i, no; int prime[500]; // 用来保存质数的数组 int ptr = 0; // 已经的到的质数个数 unsigned long counter = 0; prime[ptr++] = 2; prime[ptr++] = 3; for (no = 5; no <= 1000; no += 2) { // 只把奇数作为判断对象 int flag = 0; for (i = 1; counter++, prime[i] * prime[i] <= no; i++) { counter++; if (no % prime[i] == 0) { // 能被整除的不是质数 flag = 1; break; } // 退出上述循环 } if (!flag) // 直到最后也未被整除 prime[ptr++] = no; // 添加到数组中 } for (i = 0; i < ptr; i++) printf("%d\n", prime[i]); printf("乘除运算的次数:%lu\n", counter); return (0); }

依次把0,1,2,3,4赋值给数组每个元素并显示 (使用for语句)

#include <stdio.h> int main(void) { int i; int vc[5]; // 包含5个元素的数组 for (i = 0; i < 5; i++) vc[i] = i; for (i = 0; i < 5; i++) printf("vc[%d] = %d\n", i, vc[i]); return (0); }

依次把5,4,3,2,1赋值给数组每个元素并显示 (使用for语句)

#include <stdio.h> int main(void) { int i; int vc[5]; // 包含5个元素的数组 for (i = 0; i < 5; i++) vc[i] = 5 - i; for (i = 0; i < 5; i++) printf("vc[%d] = %d\n", i, vc[i]); return (0); }

从头开始顺次为数组各元素进行初始化(5,4,3,2,1)并进行显示

#include <stdio.h> int main(void) { int i; int vc[5] = {5, 4, 3, 2, 1}; for (i = 0; i < 5; i++) printf("vc[%d] = %d\n", i, vc[i]); return (0); }

把数组中的全部元素倒序赋值到另一个数组中

#include <stdio.h> int main(void) { int i; int va[5] = {15, 20, 30}; int vb[5]; for (i = 0; i < 5; i++) vb[i] = va[4 - i]; puts(" va vb"); puts("------"); for (i = 0; i < 5; i++) printf("%3d%3d\n", va[i], vb[i]); return (0); }

对数组中的全部元素进行倒序排列

#include <stdio.h> int main(void) { int i; int vx[8]; for (i = 0; i < 8; i++) { printf("vx[%d]:", i); scanf("%d", &vx[i]); } for (i = 0; i < 5; i++) { int temp = vx[i]; vx[i] = vx[7 - i]; vx[7 - i] = temp; } for (i = 0; i < 8; i++) printf("vx[%d]=%d\n", i, vx[i]); return (0); } double类型赋值给int类型 int main(void) { double a; int b; a = b = 1.5; printf("a = %f\n", a); printf("b = %d\n", b); return (0); }

计算矩阵x和y的积

int main(void) { int x[2][3] = {{1, 2, 3}, {4, 5, 6},}; int y[3][2] = {{1, 5}, {5, 3}, {8, 1}}; int z[2][2] = {0}; int i, j; for (i = 0; i < 3; i++) z[0][0] += x[0][i] * y[i][0]; for (i = 0; i < 3; i++) z[0][1] += x[0][i] * y[i][1]; for (i = 0; i < 3; i++) z[1][0] += x[1][i] * y[i][0]; for (i = 0; i < 3; i++) z[1][1] += x[1][i] * y[i][1]; for (i = 0; i < 2; i++) { for (j = 0; j < 2; j++) printf("%3d", z[i][j]); putchar('\n'); } system("pause"); return (0); }


本文共计7620个文字,预计阅读时间需要31分钟。

谭浩强《C程序设计》例题练习补充练习中,如何设计一个长尾词?

《C语言学习笔记——蔡浩强《C程序设计》例题练习+补充练习1.1 要求在屏幕上输出这是C程序。》


C语言学习笔记——谭浩强《C程序设计》例题练习+补充练习

1.1要求在屏幕上输出“This is a C program.”

#include<stdio.h> int main() //int main后面忘记加() { printf("This is a C program.\n"); //换行是\n,在(“ “)里面,忘了加”;” return 0; //忘写return 0; }

1.2求两个整数之和,求123和456的和

#include<stdio.h> int a,b,sum; int main() { a=123; b=456; sum=a+b; printf("the sum is:%d\n",sum); //%d不能少,否则结果出不来,见1.2.1。输出,(“”,sum)中,sum前面不能加% return 0; }

1.3求两个整数中的较大者
方法一:

#include<stdio.h> int a,b,c; int main() { scanf("%d,%d",&a,&b); if(a>=b) c=a; else c=b; printf("%d",c); return c; } //不知道为什么没有用

方法二:

#include<stdio.h> int main() { int max(int x,int y); int a,b,c; scanf("%d.%d",&a,&b); c=max(a,b); printf("max=%d\n",c); return 0; //main函数中return语句指定的返回值一般为0 } int max(int x,int y) { int z; if(x>y)z=x; else z=y; return(z); //只有通过return语句才能把求出的z值作为函数的值并返回调用他的main函数中(第8行)。不要以为在max函数中求出最大值z后就会自动的作为函数值返回调用处 } //不知道为啥,还是没有用

2.1求12345
方法一

#include<stdio.h> int main() { int s,i; s=1; for(i=2;i<=5;i++) //for循环后面不要加;,()里面用;隔开 s=s*i; printf("%d",s); }

方法二:

#include<stdio.h> int main() { int s,i; s=1; i=2; while(i<=5) { s=s*i; i=i+1; } printf("%d",s); }

2.19求多项式1-1/2+1/3-1/4…+1/99-1/100
方法一:
(1)错误示范

#include<stdio.h> int main() { int sign=1,demo; //当分母定义为整形时,结果为1,结果不准确 double term,sum=1; for(demo=2;demo<=100;demo++) { sign=-1*sign; term=sign/demo; sum=sum+term; } printf("%f",sum); }

(2)正确示范

#include<stdio.h> int main() { int sign=1; double demo,term,sum=1; //分母demo要定义为双精度型 for(demo=2;demo<=100;demo++) { sign=-sign; term=sign/demo; sum=sum+term; } printf("%f\n",sum); return 0; }

方法二:

#include<stdio.h> int main() { int sign=1; double deno=2.0,sum=1.0,term; while(deno<=100) { sign=-sign; term=sign/deno; sum=sum+term; deno=deno+1; } printf("%f\n",sum); return 0; }

3.1有人用温度计测量出永华事法表示的温度(如64°F),今要求把它转换为亦设事发表示的温度(如17.8°C)。

#include<stdio.h> int main() { float f,c; scanf("%f",&f); c=(5.0/9)*(f-32); //用5.0才能得出正确结果。直接用5的话结果就是错误的 printf("%f\n",c); }

3.2计算存款利息。有1000元,想存一年。有3种方法可选:(1)活期,年利率为r1,0.0036;(2)一年期定期,年利率为r2,0.0225;(3)存两次半年定期,年利率为r3,0.0198;请分别计算出一年后按3种方法所得到的本息和。

#include<stdio.h> int main() { float p0=1000,r1=0.0036,r2=0.0225,r3=0.0198,p1,p2,p3; p1=p0*(1+r1); p2=p0*(1+r2); p3=p0+p0/2*r3*2; printf("%f\n%f\n%f\n",p1,p2,p3); }

3.3给定一个大写字母,要求要小写字母输出

谭浩强《C程序设计》例题练习补充练习中,如何设计一个长尾词?

#include<stdio.h> int main() { char a,b; scanf("%c",&a); b=a+32; printf("%c\n",b); return 0; }

3.4给出三角形的三边长,求三角形面积
错误示范:

#include<stdio.h> #include<math.h> int main() { double a,b,c,s,area; scanf("%f%f%f",&a,&b,&c); s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("area=%f\n",area); return 0; } //没有考虑a,b,c的范围,导致运行结果出错 ---178

正确示范:

#include<stdio.h> #include<math.h> void main() { float a,b,c,p; double s; printf("please input a,b and c:"); scanf("%f%f%f",&a,&b,&c); if(a+b>c && a+c>b && b+c>a) { p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c)); printf("the areas is:%f",s); } else printf ("the line is error\n"); } ---194

例题示范:

#include<stdio.h> #include<math.h> int main() { double a,b,c,s,area; a=3.67; b=5.43; c=6.21; s=(a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("a=%f\tb=%f\tc=%f\n",a,b,c); printf("area=%f\n",area); return 0; } ---208

3.5求ax^2+bx+c=0方程的根。a,b,c由键盘输入,设b62-4ac>0
正确示范;
注意要考虑超出范围错误的情况

#include<stdio.h> #include<math.h> void main() { float a,b,c,x; double x1,x2; printf("please inputa,b,c:"); scanf("%f%f%f",&a,&b,&c); if(a==0) {x=-c/b; printf("x=%f\n",x); } else if((b*b-4*a*c)>=0) {x1=((-b)+sqrt(b*b-4*a*c))/(2*a); x2=((-b)-sqrt(b*b-4*a*c))/(2*a); printf("x1=%f\nx2=%f\n",x1,x2);} else printf("no answer\n"); } ---228

例题示范:

#include<stdio.h> #include<math.h> int main() { double a,b,c,disc,x1,x2,p,q; scanf("%1f%1f%1f",&a,&b,&c); disc=b*b-4*a*c; p=-b/(2.0*a); q=sqrt(disc)/(2.0*a); x1=p+q; x2=p-q; printf("x1=%7.2f\nx2=%7.2f\n",x1,x2); //7.2表示指定数据占七列,其中小数占两列 return 0; } //按照书上敲出来运行有问题 ---242

3.6用%f输出实数,只能得到6位小数。

#include<stdio.h> int main() { double a=1.0; //a是双精度型 printf("%f\n",a/3); //a/3也是双精度性,但是用%f格式声明只能输出6位小数 } ---248

补充:用%f输出实数,得到15位小数。

#include<stdio.h> int main() { double a=1.0; printf("%20.15f\n",a/3); }

#include<stdio.h> int main() { double a=1.0; printf("%16.15f\n",a/3); }

3.7float型数据的有效位数

#include<stdio.h> int main() { float a; //fliat型数据只能保证6-7位有效数字 a=10000/3.0; //因此从左面开始的第7位数字(即第三位小数)以后的数字不保证正确 printf("%f\n",a); return 0; }

补充:

#include<stdio.h> int main() { double a; //将float改成double a=10000/3.0; printf("%f\n",a); //由于%f,得到6位小数 return 0; }

3.8先后输出BOY三个字符

#include<stdio.h> int main() { char a='B',b='O',c='Y'; putchar(a); putchar(b); putchar(c); putchar('\n'); return 0; }

补充,用ASCII码表示BOY

#include<stdio.h> int main() { int a=66,b=79,c=89; putchar(a); putchar(b); putchar(c); putchar('\n'); return 0; }

---296

补充练手

  1. 输入三角形的三边长,求三角形面积。

#include<stdio.h> #include<math.h> void main() { float a,b,c,p; double s; printf("please input a,b and c:"); scanf("%f%f%f",&a,&b,&c); if(a+b>c && a+c>b && b+c>a) { p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c)); printf("the areas is:%f",s); } else printf ("the line is error\n"); }

从键盘输入一个大写字母/小写字母,要求改用小写/大写字母输入。

#include<stdio.h> void main() { char a; printf("please input a word:"); scanf ("%c",&a); if(a>='A' && a<='Z') a=a+32; else if(a>='a' && a<='z') a=a-32; printf("%c\n",a); }

求解ax^2+bx+c=0方程的解

#include<stdio.h> #include<math.h> void main() { float a,b,c,x; double x1,x2; printf("please inputa,b,c:"); scanf("%f%f%f",&a,&b,&c); if(a==0) {x=-c/b; printf("x=%f\n",x); } else if((b*b-4*a*c)>=0) {x1=((-b)+sqrt(b*b-4*a*c))/(2*a); x2=((-b)-sqrt(b*b-4*a*c))/(2*a); printf("x1=%f\nx2=%f\n",x1,x2);} else printf("no answer\n"); }

根据输入年、月,判断该月有多少天

#include<stdio.h> #include<math.h> int main() { int year,month; printf("please input year,month:"); scanf("%i%i",&year,&month); if((year%4 == 0 && year%100!=0)||year%400==0) { switch(month) { case 2:printf("29\n");break; case 1: case 3: case 5: case 7: case 8: case 10: case 12:printf("31\n");break; case 4: case 6: case 9: case 11:printf("30\n");break; } } else { switch(month) { case 2:printf("28\n");break; case 1: case 3: case 5: case 7: case 8: case 10: case 12:printf("31\n");break; case 4: case 6: case 9: case 11:printf("30\n");break; } } } ---390

输出所有“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于数的本身。

#include<stdio.h> #include<math.h> int main() { int s; for(s=100;s<=999;s++) { if(s==(s%10)*(s%10)*(s%10)+(((s%100)-(s%10))/10)*(((s%100)-(s%10))/10)*(((s%100)-(s%10))/10)+((s-(s%100))/100)*((s-(s%100))/100)*((s-(s%100))/100)) printf("the figures are:%i\n",s); } } ---402

两乒乓球队进行比赛,各处三人。甲队为A,B,C三人,乙队为X,Y,Z三。以抽签决定比赛名单。有人向队员打听比赛名单,A说他不和X比,C说他不和X,Z比,请编程找出3赛手的名单

#include<stdio.h> void main() { char i,j,k;//i是A的对手,j是B的对手,k是C的对手 for (i = 'X'; i <= 'Z'; i++) { for (j = 'X'; j <= 'Z'; j++) { if (j!=i) { for (k = 'X'; k <= 'Z'; k++) { if (k != i&&k!= j) { if (i != 'X'&&k != 'X'&&k != 'Z') { printf("A--%c\nB--%c\nC--%c\n", i, j, k); } } } } } } } ----426

设有两个矩阵A、B,编写一程序求该矩阵的成绩

#include<stdio.h> #include<stdlib.h> #define M 100 int main(void) { int i,j,k,matrix1[M][M],matrix2[M][M],row1,col1,row2,col2,matrix[M][M]; /*为需要相乘的两个矩阵赋值:*/ printf("输入第一个矩阵的行数和列数:"); scanf("%d%d",&row1,&col1); printf("输入第一个矩阵:\n"); for(i=0;i<row1;i++){ for(j=0;j<col1;j++){ scanf("%d",&matrix1[i][j]); } } printf("输入第二个矩阵的行数和列数:"); scanf("%d%d",&row2,&col2); printf("输入第二个矩阵:\n"); for(i=0;i<row2;i++){ for(j=0;j<col2;j++){ scanf("%d",&matrix2[i][j]); } } /*初始化matrix:*/ for(i=0;i<row1;i++){ for(j=0;j<col2;j++){ matrix[i][j]=0; } } if(col1!=row2){ fprintf(stderr,"enput error!"); exit(EXIT_FAILURE); } printf("The result:\n"); for(i=0;i<row1;i++){ for(j=0;j<col2;j++){ for(k=0;k<col1;k++){ matrix[i][j]=matrix[i][j]+matrix1[i][k]*matrix2[k][j]; } } } for(i=0;i<row1;i++){ for(j=0;j<col2;j++){ printf("%d ",matrix[i][j]); } printf("\n"); } return 0; } ---526

输入年、月、日,计算该天是这一年的第多少天

#include<stdio.h> void main() { int plus(int year,int month,int day); int year,month,day,sum; printf("please input year,month,day:"); scanf("%d%d%d",&year,&month,&day); sum=fun(year,month,day); printf("%d",sum); } int plus(int year,int month,int day) { int sum,i; int a[2][12]={{31,29,31,30,31,30,31,31,30,31,30,31},{ 31,28,31,30,31,30,31,31,30,31,30,31}}; if(year%4==0&&year%100!=0||year%400==0) { sum=0; for(i=0;i<month-1;i++) { sum=sum+a[0][i]; } sum=sum+day; } else { sum=0; for(i=0;i<month-1;i++) { sum=sum+a[1][i]; } sum=sum+day; } return(sum); } ---560

用函数实现1!+2!+3!+……+N!

#include<stdio.h> int main() { int fac(int); int sum,n,i; sum=0; printf("please input N:"); scanf("%d",&n); for(i=n;i>0;i--) { sum=sum+fac(i); } printf("%d",sum); } int fac(int n) { int sum; if(n==1) { sum=1; } else { sum=fac(n-1)*n; } return(sum); } ---587

用函数实现对N个数进行排序

#include <stdio.h> #include<stdlib.h> int main() { int fun(int [10]); int i,a[10]; printf("排序前的顺序:"); for(i=0;i<10;i++) { a[i]=rand()%101; printf("%d ",a[i]); } fun(a); printf("排序后的顺序:"); for(i=0;i<10;i++) { printf("%d ",a[i]); } printf("\n"); return 0; } int fun(int arr[10]) { int i,j,temp; for(i=0;i<9;i++) for(j=0;j<9-i;j++) { if(arr[j]>arr[j+1]) { temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } return 0; } ---627

输入3个整数,按由小到大的顺序输出

#include<stdio.h> int main() { int a,b,c,*p1,*p2,*p3,p; printf("please input three numbers:"); scanf("%d%d%d",&a,&b,&c); p1=&a; p2=&b; p3=&c; if(a>b) {p=*p1; *p1=*p2; *p2=p;} if(a>c) {p=*p1; *p1=*p3; *p3=p;} if(b>c) {p=*p2; *p2=*p3; *p3=p;} printf("%d %d %d",a,b,c); } ---650

写一函数,将一个3*3整数矩阵转置

#include<stdio.h> #include<stdlib.h> int main() { void convert(int[3][3]); int a[3][3],i,j; printf("please input a matrix:"); printf("\n"); for(i=0;i<3;i++) for(j=0;j<3;j++) { a[i][j]=rand()%101; printf("%d ",a[i][j]); if(j==2) printf("\n"); } printf("\n"); printf("please input a conver matrix:"); printf("\n"); convert(a); for(i=0;i<3;i++) for(j=0;j<3;j++) { printf("%d ",a[i][j]); if(j==2) printf("\n"); } } void convert(int arr[3][3]) { int t; t=arr[0][1];arr[0][1]=arr[1][0];arr[1][0]=t; t=arr[0][2];arr[0][2]=arr[2][0];arr[2][0]=t; t=arr[1][2];arr[1][2]=arr[2][1];arr[2][1]=t; } ---685

有一个班N个学生,5门课程。求第1门课的平均分;找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩和平均分;找出平均成绩在90以上或全部课程成绩在85分以上的学生

#include<stdio.h> struct student { int num; char name[20]; float score[5]; float aver; }; int main() { void input(struct student stu[]); struct student 2bujige(struct student stu[]); struct student youxiu(struct student stu[]); struct student stu[3],*p=stu; input(p); 2bujige(p); youxiu(p); } void input(struct student stu[]) { int i; printf("请输入各位学生的信息:学号、姓名、五门课成绩:\n"); for(i=0;i<3;i++) { scanf("%d%s%f%f%f%f%f",&stu[i].num,stu[i].name,&stu[i].score[0], &stu[i].score[1],&stu[i].score[2],&stu[i].score[3],&stu[i].score[4]); stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3]+stu[i].score[4])/5; printf("\n"); } } struct student 2bujige(struct student stu[]) { int i,j; printf("两门以上课程不及格的:\n"); for(i=0;i<3;i++) { int count=0; for(j=0;j<5;j++) { if(stu[i].score[j]<60) { count++; if(count>2) printf("学号:%d\n姓名:%s\n五门课成绩:%5.lf,%5.lf,%5.lf,%5.lf,%5.lf\n平均成绩: %6.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].aver); } } } } struct student youxiu(struct student stu[]) { int i; printf("平均成绩90以上或者全部课程85以上的:\n"); for(i=0;i<3;i++) { if(stu[i].aver>90||stu[i].score[0]>85&&stu[i].score[1]>85&&stu[i].score[2]>85&&stu[i].score[3]>85&&stu[i].score[4]>85) printf("学号:%d\n姓名:%s\n五门课成绩:%5.lf,%5.lf,%5.lf,%5.lf,%5.lf\n平均成绩:%6.2f\n",stu[i].num,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].score[4],stu[i].aver); printf("\n"); } } ---743

利用结构体知识,分析以下问题。
某班级有N个学生,本学期选修5门课程,每个学生信息包括:学号,姓名,出生日期,成绩。要求:1、根据学生总分,对成绩排序,输出学生信息;2、统计班级不及格人、门次数,将其输出。

#include<stdio.h> #define N 3 struct Student {int num; char name[20]; float score[3]; double aver; }; int main() {void input(struct Student stu[]); struct Student max(struct Student stu[]); void print(struct Student stu); struct Student stu[N],*p=stu; input(p); print(max(p)); return 0; } void input(struct Student stu[]) {int i; printf("请输入各学生的信息:学号、姓名、3门课成绩:\n"); for(i=0;i<N;i++) {scanf("%d%s%f%f%f",&stu[i].num,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]); stu[i].aver=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0; } } struct Student max(struct Student stu[]) {int i,m=0; for(i=0;i<N;i++) if(stu[i].aver>stu[m].aver)m=i; return stu[m]; } void print(struct Student stud) {printf("\n成绩最高的学生是:\n"); printf("学号:%d\n姓名:%s\n三门课成绩:%5.1f,%5.1f,%5.1f\n平均成绩:%6.2f\n",stud.num,stud.name,stud.score[0],stud.score[1],stud.score[2],stud.aver); } ---778

3.10改写例3.3,使之可以适用于任何大写字母,把它转换位小写字母,然后用putchar函数输出该小写字母

#include<stdio.h> int main() { char c1,c2; c1=getchar(); c2=c1+32; putchar(c2); putchar('\n'); return 0; }

4.1在例3.5的基础上对程序进行改进。题目要求解得ax2+bx+c=0方程的根。由键盘输入a,b,c.假设a,b,c的值任意,并不保证b2-4ac>=0.需要在程序中进行判别,如果b2-4ac>=0,就计算并输出方程的两个实根,如果b2-4ac<0.就输出“此方程无实根”的信息

#include<stdio.h> #include<math.h> int main() { double a,b,c,disc,x1,x2,p,q; scanf("%1f%1f%1f",&a,&b,&c); disc=b*b-4*a*c; if(disc<0) printf("This equation hasn't real roots\n"); else { p=-b/(2.0 *a); q=sqrt(disc)/(2.0*a); x1=p+q;x2=p-q; printf("real roots:\nx1=%7.2f\nx2=%7.2f\n",x1,x2); } return 0; }

4.2输入两个师叔,按由小到大的顺序输出这两个数

#include<stdio.h> int main() { float a,b,t; scanf("%f%f",&a,&b); if(a>b) { t=a; a=b; b=t; } printf("%5.2f,%5.2f\n",a,b); return 0; }

4.3输入3个数a,b,c,要求按从小到大的顺序输出

#include<stdio.h> int main() { float a,b,c,t; scanf("%f%f%f",&a,&b,&c); if(a>b) { t=a; a=b; b=t; } if(a>c) { t=a; a=c; c=t; } if(b>c) { t=b; b=c; c=t; } printf("%5.2f,%5.2f,%5.2f\n",a,b,c); return 0; }

4.4输入一个字符,判别它是否为大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。

#include<stdio.h> int main() { char ch; scanf("%c",&ch); ch=(ch>='A'&&ch<='Z')?(ch+32):ch; printf("%c\n",ch); return 0; }

4.5有一阶跃函数y={-1(x<0);0(x=0);1(x>0),编译程序,输入一个x值,要求输出相应的y值。

#include<stdio.h> int main() { int x,y; scanf("%d",&x); if(x<0) y=-1; else if(x==0)y=0; else y=1; printf("x=%d,y=%d\n",x,y); return 0; }

4.6要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70-84分,C等为60-69分,D等为60分以下。成绩的等级由键盘输入。

#include<stdio.h> int main() { char grade; scanf("%c",&grade); printf("Your score:"); switch(grade) { case'A':printf("85-100\n");break; case'B':printf("70-84\n");break; case'C':printf("60-69\n");break; case'D':printf("<60\n");break; default:printf("enter data error!\n"); } return 0; }

4.7用switch语句处理菜单命令。在许多应用程序中,用菜单对流程进行控制,例如从键盘输入一个’A’或’a’字符,就会执行A操作,输入一个‘B’或’b’字符,就会执行B操作。可以按照以下思路编写程序。

#include<stdio.h> int main() { void action1(int,int),action2(int,int); char ch; int a=15,b=23; ch=getchar(); switch(ch) { case'a': case'A':action1(a,b);break; case'b': case'B':action2(a,b);break; default:putchar('\a'); } return 0; } void action1(int x,int y) { printf("x+y=%d\n",x+y); } void action2(int x,int y) { printf("x*y=%d\n",x*y); }

4.8写一程序,判断某一年是否为闰年。

#include<stdio.h> int main() { int year,leap; printf("enter year:"); scanf("%d",&year); if(year%4==0) { if(year%100==0) { if(year%400==0) leap=1; else leap=0; } else leap=1; } else leap=0; if(leap) printf("%d is",year); printf("a leap year.\n"); return 0; }

4.9求ax^2+bx+c=0方程的解

#include<stdio.h> #include<math.h> int main() { double a,b,c,disc,x1,x2,realpart,imagpart; scanf("%1f%1f%1f",&a,&b,&c); printf("the equation"); if(fabs(a)<=1e-6) printf("is not a quadratic\n"); else { disc=b*b-4*a*c; if(fabs(disc)<=1e-6) printf("has two equal roots:%8.4f\n",-b/(2*a)); else if(disc>1e-6) { x1=(-b+sqrt(disc))/(2*a); x2=(-b-sqrt(disc))/(2*a); printf("has distinct real roots:%8.4f and %8.4f\n",x1,x2); } else { realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf("has complex roots:\n"); printf("%8.4f+%8.4fi\n",realpart,imagpart); printf("%8.4f-%8.4fi\n",realpart,imagpart); } } return 0; }

4.10运输公司对用户计算运输费用。路程越远,运费越低。标准如下。
S<250 没有折扣
250<=s<500 2%折扣
500<=s<1000 5%折扣
1000<=s<2000 8%折扣
2000<=s<3000 10%折扣
3000<=s 15%折扣

#include<stdio.h> int main() { int c,s; float p,w,d,f; printf("please enter price,weight,discount:"); scanf("%f%f%d",&p,&w,&s); if(s>=3000) c=12; else c=s/250; switch(c) { case0:d=0;break; case1:d=2;break; case2: case3:d=5;break; case4: case5: case6: case7:d=8;break; case8: case9: case10: case11:d=10;break; case12:d=15;break; } f=p*w*s*(1-d/100); printf("freight=%10.2f\n",f); return 0; }

5.1求1+2+3+…+100

#include<stdio.h> int main() { int i=1,sum=0; while(i<=100) { sum=sum+i; i++; } printf("sum=%d\n",sum); return 0; }

5.2用do…while语句求1+2+3+…+100

#include<stdio.h> int main() { int i=1,sum=0; do { sum=sum+i; i++; }; while(i<=100) printf("sum=%d\n",sum); return 0; }

5.4在全系1000名学生中举行慈善募捐,当总数达到10万元时就结束,统计此时捐款人数以及平均每人捐款的数目。

#include<stdio.h> #define SUM 100000 int main() { float amount,aver,total; int i; for(i=1,total=0;i<=1000;i++) { printf("please enter amount:"); scanf("%f",&amount); total=total+amount; if(total>=SUM)break; } aver=total/i; printf("num=%d\naver=%10.2f\n",i,aver); return 0; }

补充练习:
输入5名学生的分数并显示它们的总分和平均分

#include <stdio.h> int main(void) { int uchida; int satoh; int hiraki; int masaki; int sum = 0; puts("请输入分数。"); printf("1号:"); scanf("%d", &uchida); printf("2号:"); scanf("%d", &satoh); printf("3号:"); scanf("%d", &hiraki); printf("4号:"); scanf("%d", &masaki); printf("5号:"); scanf("%d", &masaki); sum += uchida; sum += satoh; sum += hiraki; sum += masaki; sum += masaki; printf("总分:%5d\n", sum); printf("平均分:%5.1f\n", (double)sum / 5); return (0); }

依次把1,2,3,4,5赋值给数组每个元素并显示

#include <stdio.h> int main(void) { int vc[5]; // 包含5个元素的数组 vc[0] = 1; vc[1] = 2; vc[2] = 3; vc[3] = 4; vc[4] = 5; printf("vc[0] = %d\n", vc[0]); printf("vc[1] = %d\n", vc[1]); printf("vc[2] = %d\n", vc[2]); printf("vc[3] = %d\n", vc[3]); printf("vc[4] = %d\n", vc[4]); return (0); }

依次把1/2/3/4/5赋值给数组每个元素并显示 (使用for语句)

#include <stdio.h> int main(void) { int i; int vc[5]; // 包含5个元素的数组 for (i = 0; i < 5; i++) vc[i] = i + 1; for (i = 0; i < 5; i++) printf("vc[%d] = %d\n", i, vc[i]); return (0); `这里写代码片` }

将数组的全部元素赋值为(0.0)并显示

#include <stdio.h> int main(void) { int i; double vd[5]; for (i = 0; i < 5; i++) vd[i] = 0.0; for (i = 0; i < 5; i++) printf("vd[%d] = %.1f\n", i, vd[i]); return (0); }

从头开始顺次为数组各元素进行初始化(1,2,3,4,5)并进行显示

#include <stdio.h> int main(void) { int i; int vc[5] = {1, 2, 3, 4, 5}; for (i = 0; i < 5; i++) printf("vc[%d] = %d\n", i, vc[i]); return (0); }

把数组中的全部元素赋值到另一个数组中

#include <stdio.h> int main(void) { int i; int va[5] = {15, 20, 30}; int vb[5]; for (i = 0; i < 5; i++) vb[i] = va[i]; puts(" va vb"); puts("------"); for (i = 0; i < 5; i++) printf("%3d%3d\n", va[i], vb[i]); return (0); }

输入数组元素的值并显示

#include <stdio.h> int main(void) { int i; int vx[5]; for (i = 0; i < 5; i++) { printf("vx[%d]:", i); scanf("%d", &vx[i]); } for (i = 0; i < 5; i++) printf("vx[%d]=%d\n", i, vx[i]); return (0); }

对数组中的全部元素进行倒序排列

#include <stdio.h> int main(void) { int i; int vx[5]; for (i = 0; i < 5; i++) { printf("vx[%d]:", i); scanf("%d", &vx[i]); } for (i = 0; i < 2; i++) { int temp = vx[i]; vx[i] = vx[4 - i]; vx[4 - i] = temp; } for (i = 0; i < 5; i++) printf("vx[%d]=%d\n", i, vx[i]); return (0); }

输入5名学生的分数并显示出它们的总分和平均分

#include <stdio.h> int main(void) { int i; int tensu[5]; // 5名学生的分数 int sum = 0; // 总分 puts("请输入学生的分数。"); for (i = 0; i < 5; i++) { printf("%2d号:", i + 1); scanf("%d", &tensu[i]); sum += tensu[i]; } printf("总分:%5d\n", sum); printf("平均分:%5.1f\n", (double)sum / 5); return (0); }

输入5名学生的分数并显示出其中的最高分和最低分

#include <stdio.h> #define NUMBER 5 // 学生人数 int main(void) { int i; int tensu[NUMBER]; // 5名学生的分数 int max, min; // 总分 puts("请输入学生的分数。"); for (i = 0; i < NUMBER; i++) { printf("%2d号:", i + 1); scanf("%d", &tensu[i]); } min = max = tensu[0]; for (i = 1; i < NUMBER; i++) { if (tensu[i] > max) max = tensu[i]; if (tensu[i] < min) min = tensu[i]; } printf("最高分:%d\n", max); printf("最低分:%d\n", min); return (0); }

输入5名学生的分数并显示出60分以上的一览表

#include <stdio.h> #define NUMBER 5 // 学生人数 int main(void) { int i; int snum = 0; // 及格学生人数 int tensu[NUMBER]; // NUMBER名学生的分数 int succs[NUMBER]; // 及格学生一览表(保存及格学生的下标) puts("请输入学生的分数。"); for (i = 0; i < NUMBER; i++) { printf("%2d号:", i + 1); scanf("%d", &tensu[i]); if (tensu[i] >= 60) succs[snum++] = i; // 添加到及格学生一览表中 } puts("及格学生一览表"); puts("--------------"); for (i = 0; i < snum; i++) printf("%2d号(%3d分)\n", succs[i] + 1, tensu[succs[i]]); return (0); }

输入学生的分数并显示出分布情况

#include <stdio.h> #define NUMBER 80 // 人数上限 int main(void) { int i, j; int num; // 实际的人数 int tensu[NUMBER]; // 学生的分数 int bunpu[11] = {0}; // 分布图 printf("请输入学生人数:"); do { scanf("%d", &num); if (num < 1 || num > NUMBER) printf("\a人数范围[1到%d] :", NUMBER); } while (num < 1 || num > NUMBER); puts("请输入学生的分数。"); for (i = 0; i < num; i++) { printf("%2d号:", i + 1); do { scanf("%d", &tensu[i]); if (tensu[i] < 0 || tensu[i] > 100) printf("\a分数范围[0到100]:"); } while (tensu[i] < 0 || tensu[i] > 100) ; bunpu[tensu[i] / 10]++; } puts("\n----分布图----"); printf(" 100:"); for (j = 0; j < bunpu[10]; j++) putchar('*'); putchar('\n'); for (i = 9; i >= 0; i--) { printf("%3d - %3d:", i * 10, i * 10 + 9); for (j = 0; j < bunpu[i]; j++) putchar('*'); putchar('\n'); } return (0); }

计算2行3列矩阵的和

#include <stdio.h> int main(void) { int i, j; int ma[2][3] = {{1, 2, 3}, {4, 5, 6}}; int mb[2][3] = {{6, 3, 4}, {5, 1, 2}}; int mc[2][3] ={0}; for (i = 0; i < 2; i++) for (j = 0; j < 3; j++) mc[i][j] = ma[i][j] + mb[i][j]; for (i = 0; i < 2; i++) { for (j = 0; j < 3; j++) printf("%3d", mc[i][j]); putchar('\n'); } return (0); }

计算出1000以内的质数(第1版)

#include <stdio.h> int main(void) { int i, no; unsigned long counter = 0; for (no = 2; no <= 1000; no++) { for (i = 2; i < no; i++) { // 能被整除的不是质数 counter++; // 退出上述循环 if (no % i == 0) break; } if (no == i) // 直到最后也未被整除 printf("%d\n", no); } printf("乘除运算的次数:%lu\n", counter); return (0); }

计算出1000以内的质数(第2版)

#include <stdio.h> int main(void) { int i, no; unsigned long counter = 0; no = 2; // 2是偶数中唯一的质数 printf("%d\n", no++); for (; no <= 1000; no += 2) { // 只把奇数作为判断对象 for (i = 2; i < no; i++) { // 能被整除的不是质数 counter++; // 退出上述循环 if (no % i == 0) break; } if (no == i) // 直到最后也未被整除 printf("%d\n", no); } printf("乘除运算的次数:%lu\n", counter); return (0); }

计算出1000以内的质数(第3版)

#include <stdio.h> int main(void) { int i, no; unsigned long counter = 0; no = 2; // 2是偶数中唯一的质数 printf("%d\n", no++); for (; no <= 1000; no += 2) { // 只把奇数作为判断对象 for (i = 3; i < no; i += 2) { // 只判断能否被奇数整除 counter++; // 退出上述循环 if (no % i == 0) break; } if (no == i) // 直到最后也未被整除 printf("%d\n", no); } printf("乘除运算的次数:%lu\n", counter); return (0); }

计算出1000以内的质数(第4版)

#include <stdio.h> int main(void) { int i, no; int prime[500]; // 用来保存质数的数组 int ptr = 0; // 已经的到的质数个数 unsigned long counter = 0; prime[ptr++] = 2; prime[ptr++] = 3; for (no = 5; no <= 1000; no += 2) { // 只把奇数作为判断对象 for (i = 1; i < ptr; i++) { // 尝试能否被已经得到的质数整除 counter++; if (no % prime[i] == 0) // 能被整除的不是质数 break; // 退出上述循环 } if (ptr == i) // 直到最后也未被整除 prime[ptr++] = no; // 添加到数组中 } for (i = 0; i < ptr; i++) printf("%d\n", prime[i]); printf("乘除运算的次数:%lu\n", counter); return (0); }

计算出1000以内的质数(第5版)

#include <stdio.h> int main(void) { int i, no; int prime[500]; // 用来保存质数的数组 int ptr = 0; // 已经的到的质数个数 unsigned long counter = 0; prime[ptr++] = 2; prime[ptr++] = 3; for (no = 5; no <= 1000; no += 2) { // 只把奇数作为判断对象 int flag = 0; for (i = 1; counter++, prime[i] * prime[i] <= no; i++) { counter++; if (no % prime[i] == 0) { // 能被整除的不是质数 flag = 1; break; } // 退出上述循环 } if (!flag) // 直到最后也未被整除 prime[ptr++] = no; // 添加到数组中 } for (i = 0; i < ptr; i++) printf("%d\n", prime[i]); printf("乘除运算的次数:%lu\n", counter); return (0); }

依次把0,1,2,3,4赋值给数组每个元素并显示 (使用for语句)

#include <stdio.h> int main(void) { int i; int vc[5]; // 包含5个元素的数组 for (i = 0; i < 5; i++) vc[i] = i; for (i = 0; i < 5; i++) printf("vc[%d] = %d\n", i, vc[i]); return (0); }

依次把5,4,3,2,1赋值给数组每个元素并显示 (使用for语句)

#include <stdio.h> int main(void) { int i; int vc[5]; // 包含5个元素的数组 for (i = 0; i < 5; i++) vc[i] = 5 - i; for (i = 0; i < 5; i++) printf("vc[%d] = %d\n", i, vc[i]); return (0); }

从头开始顺次为数组各元素进行初始化(5,4,3,2,1)并进行显示

#include <stdio.h> int main(void) { int i; int vc[5] = {5, 4, 3, 2, 1}; for (i = 0; i < 5; i++) printf("vc[%d] = %d\n", i, vc[i]); return (0); }

把数组中的全部元素倒序赋值到另一个数组中

#include <stdio.h> int main(void) { int i; int va[5] = {15, 20, 30}; int vb[5]; for (i = 0; i < 5; i++) vb[i] = va[4 - i]; puts(" va vb"); puts("------"); for (i = 0; i < 5; i++) printf("%3d%3d\n", va[i], vb[i]); return (0); }

对数组中的全部元素进行倒序排列

#include <stdio.h> int main(void) { int i; int vx[8]; for (i = 0; i < 8; i++) { printf("vx[%d]:", i); scanf("%d", &vx[i]); } for (i = 0; i < 5; i++) { int temp = vx[i]; vx[i] = vx[7 - i]; vx[7 - i] = temp; } for (i = 0; i < 8; i++) printf("vx[%d]=%d\n", i, vx[i]); return (0); } double类型赋值给int类型 int main(void) { double a; int b; a = b = 1.5; printf("a = %f\n", a); printf("b = %d\n", b); return (0); }

计算矩阵x和y的积

int main(void) { int x[2][3] = {{1, 2, 3}, {4, 5, 6},}; int y[3][2] = {{1, 5}, {5, 3}, {8, 1}}; int z[2][2] = {0}; int i, j; for (i = 0; i < 3; i++) z[0][0] += x[0][i] * y[i][0]; for (i = 0; i < 3; i++) z[0][1] += x[0][i] * y[i][1]; for (i = 0; i < 3; i++) z[1][0] += x[1][i] * y[i][0]; for (i = 0; i < 3; i++) z[1][1] += x[1][i] * y[i][1]; for (i = 0; i < 2; i++) { for (j = 0; j < 2; j++) printf("%3d", z[i][j]); putchar('\n'); } system("pause"); return (0); }