1 有一个函数, 写一段程序,输入的值,输出的值。
#include <stdio.h> void main() { int x,y; printf("输入x:"); scanf("%d",&x); if(x<0||x>100) /* x<0或x>100*/ { y=-1; printf("x=%3d, y=%d " ,x,y); } else if(x==0) /* x=0*/ { y=0; printf("x=%d, y=%d ",x,y); } else /* 0<x<=100 */ { y=1; printf("x=%d, y=%d ",x,y); } }2 输入3个数a,b,c,按大由到小的顺序输出
#include <stdio.h> void main ( ) { float a,b,c,t; printf("please enter a,b,c:"); 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("%7.2f%7.2f%7.2f ",a,b,c); }3 输入4个数,输出4个数中的最大值、最小值。
#include <stdio.h> void main() { float t,a,b,c,d; printf("请输入四个数:"); scanf("%f,%f,%f,%f",&a,&b,&c,&d); if (a<b) { t=a; a=b; b=t; } if (a<c) { t=a; a=c; c=t; } if (a<d) { t=a; a=d; d=t; } if (b<c) { t=b; b=c; c=t; } if (b<d) { t=b; b=d; d=t; } if (c<d) { t=c; c=d; d=t; } printf("最大值和最小值分别为: "); printf("max=%5.2f min=%5.2f",a,d); }4 输入成绩,要求输出成绩等级A、B、C、D、E或error。90分以上为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分为‘D’,0~60分为‘E’。若输入成绩低于0分和高于100分则输出error。
#include <stdio.h> void main() { float score; char grade; printf("请输入学生成绩:"); scanf("%f",&score); if (score>100||score<0) printf("error "); else { switch((int)(score/10)) { case 10: case 9: grade='A'; break; case 8: grade='B'; break; case 7: grade='C'; break; case 6: grade='D'; break; case 5: case 4: case 3: case 2: case 1: case 0: grade='E'; } printf("成绩是 %5.1f,相应的等级是%c. ",score,grade); } }5 有一个函数:写一段程序,输入x的值,输出y的值。
#include <stdio.h> void main() { int x,y; printf("输入x:"); scanf("%d",&x); if(x<1) /* x<1 */ { y=x; printf("x=%3d, y=x=%d " ,x,y); } else if(x<10||x>10) /* 1=<x<10 */ { y=2*x-1; printf("x=%d, y=2*x-1=%d ",x,y); } else /* x>=10 */ { y=3*x-11; printf("x=%d, y=3*x-11=%d ",x,y); } }6 输出300~400之间的全部素数,并按每行5个数输出。
方法一:
#include "stdio.h" #include"math.h" void main() { int prime(int); int i,k,m; printf("300~400之间的素数为: "); for(i=300; i<=400; i++) { m=prime(i); if(m==1) { k++; printf("%5d",i); if(k%5==0) printf(" "); } } } /*判断是否是素数 素数又称质数。所谓素数是指除了1和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被2~16的任一整数整除。 思路1):因此判断一个整数m是否是素数,只需把m被 2 ~ m-1 之间的每一个整数去除,如果都不能被整除,那么m就是一个素数。 思路2):另外判断方法还可以简化。m不必被 2 ~ m-1 之间的每一个整数去除,只需被 2 ~ √m 之间的每一个整数去除就可以了。如果m不能被 2 ~ √m 间任一整数整除,m必定是素数。例如判别17是是否为素数,只需使17被2~4之间的每一个整数去除,由于都不能整除,可以判定17是素数。 原因:因为如果m能被 2 ~ m-1 之间任一整数整除,其二个因子必定有一个小于或等于,另一个大于或等于。例如16能被2,4,8整除,16=2*8,2小于4,8大于4,16=4*4,4=√16,因此只需判定在2~4之间有无因子即可。 */ int prime(int i) { int j,flag=1; for(j=2; j<=sqrt(i); j++) if(i%j==0) flag=0; return(flag); }方法二:
# include <stdio.h> # include <math.h> void main() { int m,k,i,n=0; for(m=300; m<=400; m=m+1) { k=sqrt(m); for (i=2; i<=k; i++) if (m%i==0) break; if (i>=k+1) { printf("%d ",m); n=n+1; } //每五个一行输出 if(n%5==0) printf(" "); } printf (" "); }7求Fibonacci数列的前20个数,并将其分5行输出
扩展:求 F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)
#include <stdio.h> #include <stdlib.h> int fun(int x) { if(x == 0 || x == 1) return 1; if(x > 1) return fun(x - 1)+fun(x - 2); } void main() { int n,f; printf("请输入n:"); scanf("%d",&n); f = fun(n); printf("%d",f); }#include<stdio.h> int main() { int i; int f[20] = { 1,1 }; for (i = 2; i < 20; i++) f[i] = f[i - 2] + f[i - 1]; //打印输出 for (i = 0; i < 20; i++) { if(i%5==0) printf(" "); printf("%d ",f[i]); } return 0; }8 求(1!+3)+(2!+3)+(3!+3)+......+(n!+3)
#include <stdio.h> void main() { double t=1,sum=0; int n,i; printf("输入n:"); scanf("%d",&n); for (i=1; i<=n; i++) { t=t*i; //求n! sum=t+3+sum; } printf("1!+3+...+%d!+3=%f ",n,sum); }9 有一分数序列,求其前20项的和
#include <stdio.h> void main() { int i,n=20; double a=2,b=1,s=0,t; for (i=1; i<=n; i++) { //a是分母,b是分子 s=s+b/a; // t=a, a=a+b, b=t; } printf("sum=%16.10f ",s); }10 输出小于500的所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。例如,153是一个水仙花数,因为
#include <stdio.h> void main() { int i,j,k,n; printf("parcissus numbers are "); for (n=100; n<500; n++) { i=n/100; //百位数 j=n/10-i*10; //十位数 k=n%10; //个位数 if (n==i*i*i + j*j*j + k*k*k) printf("%d ",n); } printf(" "); }11 给一个不多于6位的正整数,要求:①求出它是几位数;②分别输出每一位数字;③按逆序输出各位数字,例如原数为158,应输出851。
#include "stdio.h" void main() { int n,m; printf("输入一个不多于六位的数字:"); scanf("%d",&n); if(n<1000000&&n>99999) printf("它是六位数 "); if(n<100000&&n>9999) printf("它是五位数 "); if(n<10000&&n>999) printf("它是四位数 "); if(n<1000&&n>99) printf("它是三位数 "); if(n<100&&n>9) printf("它是二位数 "); if(n<10&&n>=0) printf("它是一位数 "); printf("各位数字按逆序输出为: "); while(n!=0) { m=n%10; n=n/10; printf("%3d",m); } }12 求5+55+555+5555+55555的值。
#include <stdio.h> void main() { int a=5,n=5,i=1,sn=0,tn=0; for(i=1; i<=n; i++) { tn=tn+a; /*赋值后的tn为i个 a组成数的值*/ sn=sn+tn; /*赋值后的sn为多项式前i项之和*/ a=a*10; } printf("a+aa+..+aaaaa=%d ",sn); }13 输入10个整型整数,用起泡法对这10个数排序,并该由小到大顺序在屏幕上输出。
方法一:
#include "stdio.h" void main() { int a[10]; int i,j,t; printf("input 10 number: "); for(i=0; i<10; i++) scanf("%d",&a[i]); //冒泡排序 for(i=0; i<9; i++) //n-1趟 for(j=0;j<9-i;j++) // if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; }; for(i=0; i<10; i++) printf("%5d ",a[i]); printf(" "); }方法二:
#include "stdio.h" void main() { int a[10]; int i,j,t; printf("input 10 number: "); for(i=0; i<10; i++) scanf("%d",&a[i]); for(i=0; i<10; i++) for(j=i; j<9; j++) if(a[i]>a[j+1]) { t=a[i]; a[i]=a[j+1]; a[j+1]=t; }; for(i=0; i<10; i++) printf("%5d ",a[i]); printf(" "); }14 将一个二维数组a的行和列的元素互换(即行列互换),存到另一个二维数组b中。
#include "stdio.h" void main() { int a[4][5],b[5][4]; int i,j; for(i=0; i<4; i++) for(j=0; j<5; j++) scanf("%d",&a[i][j]); for(i=0; i<5; i++) for(j=0; j<4; j++) b[i][j]=a[j][i]; printf("该数组的新序列为: "); for(i=0; i<5; i++) { for(j=0; j<4; j++) printf("%5d",b[i][j]); printf(" "); } }
15 在一个3*4的二维数组a中,要求编程求出其中值最大的那个元素的值,并输出其所在的行号和列号。
#include "stdio.h" void main() { int a[3][4],i,j,max; //输入数据 for(i=0; i<3; i++) for(j=0; j<4; j++) scanf("%d",&a[i][j]); //求最大值 max=a[0][0]; for(i=0; i<3; i++) for(j=0; j<4; j++) if(max<a[i][j]) max=a[i][j]; printf("max=%d ",max); //求最大值的行列号 for(i=0; i<3; i++) for(j=0; j<4; j++) if(a[i][j]==max) printf("行=%2d,列=%2d ",i+1,j+1); }16 输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。
#include "stdio.h" void main() { int i,j=0; char str[80]; gets(str); for(i=0; str[i]!=' '; i++) if(str[i+1]==' '||str[i+1]==' ') j++; printf("单词个数为%d ",j); }17 有3个字符串,要求找出其中最大者。
#include "stdio.h" #include <string.h> void main() { char str1[80],str2[80],str3[80],longest[80]; gets(str1); printf(" "); gets(str2); printf(" "); gets(str3); /* strcmp(s1,s2)字符串比较函数,按字典排序的方式进行比较 s1 == s2,返回0 s1 > s2,返回正整数 s1 < s2,返回负整数 strcpy(s1,s2):字符串复制函数 */ strcpy(longest,str1); if(strcmp(str1,str2)<0) strcpy(longest,str2); if(strcmp(str2,str3)<0) strcpy(longest,str3); printf("the longest is %s",longest); }18 输入两个整数,要求用一个函数求出其中的大者,并在主函数中输出此值。
方法一:
#include "stdio.h" void main() { int f(int a,int b); int m,n,max; printf("请输入两个数:"); scanf("%d,%d",&m,&n); max=f(m,n); printf("max=%d",max); } int f(int a,int b) { int c; c=a>b?a:b; return(c); }方法二:
#include "stdio.h" void main() { int f(int a,int b); int m,n,max; printf("请输入两个数:"); scanf("%d,%d",&m,&n); max=f(m,n); printf("max=%d",max); } int f(int a,int b) { int c; if(a>b) c=a; else c=b; return(c); }19 输入两个整数,要求用一个函数求出其最大公约数和最小公倍数,并在主函数中调用该子函数。链接
#include <stdio.h> void main() { int hcf(int,int); int lcd(int,int,int); int u,v,h,l; scanf("%d,%d",&u,&v); h=hcf(u,v); printf("最大公约数=%d ",h); l=lcd(u,v,h); printf("最小公倍数=%d ",l); } //最大公约数 int hcf(int u,int v) { int t,r; //保证u是最大的 if (v>u) { t=u; u=v; v=t; } //辗转相除法 while ((r=u%v)!=0) { u=v; v=r; } return(v); } //最小公倍数 int lcd(int u,int v,int h) { return(u*v/h); }20 输入4个整数,找出其中最大的数。用函数的嵌套调用来处理
#include <stdio.h> void main() { int max_4(int a,int b,int c,int d); int a,b,c,d,max; printf("Please enter 4 interger numbers:"); scanf("%d %d %d %d",&a,&b,&c,&d); max=max_4(a,b,c,d); printf("max=%d ",max); } int max_4(int a,int b,int c,int d) { int max_2(int a,int b); int m; m=max_2(a,b); m=max_2(m,c); m=max_2(m,d); return(m); } int max_2(int a,int b) { return(a>b?a:b); }21 求5!
方法一【递归】:
#include <stdio.h> void main() { long fac(int n); long y; y=fac(5); printf("5!=%ld ",y); } long fac(int n) { long f; if(n<0) printf("n<0,data error!"); else if(n==0,n==1) f=1; else f=fac(n-1)*n; return(f); }方法二【非递归】:
#include <stdio.h> void main() { long fac(int n); long y; y=fac(5); printf("5!=%ld ",y); } long fac(int n) { long f=1; int i; if(n<0) printf("n<0,data error!"); else if(n==0,n==1) f=1; else for(i=1;i<=5;i++) { f=i*f; } return(f); }22 编写一个函数,用来分别求数组score_1(有5个元素)和数组score_2(有10个元素)各元素的平均值。
#include "stdio.h" void main() { float f(float score[],int n); float score_1[5],score_2[10],aver_1,aver_2; int i; printf("score_1: "); for(i=0; i<5; i++) scanf("%f",&score_1[i]); printf("score_2: "); for(i=0; i<10; i++) scanf("%f",&score_2[i]); aver_1=f(score_1,5); aver_2=f(score_2,10); printf("aver_1=%f,aver_2=%f ",aver_1,aver_2); } float f(float score[],int n) { int i; float aver,sum=0; for(i=0; i<n; i++) sum=sum+score[i]; aver=sum/n; return(aver); }23 将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1改后成为1,4,5,6,8。
代码:
#include "stdio.h" void main() { int a[6],b[6],i; printf("请输入一个数组:"); for(i=0; i<6; i++) scanf("%d",&a[i]); printf("逆序排列后的数组是:"); for(i=0; i<6; i++) { b[i]=a[5-i]; printf("%4d ",b[i]); } }24 用递归法将一个整数n转换成字符串。例如,输入483,应输出字符串“483”,n的位数不确定,可以是任意位数的整数
#include <stdio.h> void main() { void convert(int n); int number; printf("input an integer: "); scanf("%d",&number); printf("output: "); //若是一个负数 if (number<0) { putchar('-'); putchar(' '); /* 先输出一个‘-’号和空格 */ number=-number; } convert(number); printf(" "); } void convert(int n) { int i; if ((i=n/10)!=0) convert(i); putchar(n%10+'0'); putchar(32);// putchar(32) 差不多是 putchar(' '); 的意思,输出一个空格 }25 用指针实现输入3个整数并按从小到大的顺序输出
#include "stdio.h" void main() { void exchange(int * p1,int * p2,int * p3); int n1,n2,n3; int * p1,* p2,* p3; printf("input three integer n1,n2,n3:"); scanf("%d,%d,%d",&n1,&n2,&n3); p1=&n1; p2=&n2; p3=&n3; exchange(p1,p2,p3); printf("Now,the order is:%d,%d,%d",n1,n2,n3); } void exchange(int * p1,int * p2,int * p3) { void swap(int * p1,int * p2); if(* p1>* p2) swap( p1, p2); if(* p1>* p3) swap(p1,p3); if(* p2>* p3) swap(p2,p3); } void swap(int * p1,int * p2) { int p; p=* p1; * p1=* p2; * p2=p; }26 用指针实现输入3个整数并按从大到小的顺序输出
#include <stdio.h> void main ( ) { void paixu(int * p1,int * p2); int a,b,c,* p1,* p2,* p3; printf("please enter a,b,c:"); scanf("%d,%d,%d",&a,&b,&c); p1=&a; p2=&b; p3=&c; if(a<b) paixu(p1,p2); if(a<c) paixu(p1,p3); if(b<c) paixu(p2,p3) ; printf("%5d%5d%5d ",a,b,c); } void paixu(int * p1,int * p2) { int t; t=* p1; * p1=* p2; * p2=t; }27 用指针实现将数组b[10]中的元素按逆序存放
#include <stdio.h> void main() { void sort (int *p,int m); int i; int *p,num[10]; printf("please input these numbers: "); for (i=0; i<10; i++) { scanf("%d",&num[i]); } p=&num[0]; sort(p,10); printf("Now,the sequence is: "); for (i=0; i<10; i++) { printf("%d ",num[i]); } printf(" "); } void sort (int *p,int m) { int i; int temp, *p1,*p2; for (i=0; i<m/2; i++) { p1=p+i; p2=p+(m-1-i); temp=*p1; *p1=*p2; *p2=temp; } }28 用冒泡法实现对10个整数按从大到小的顺序排序输出(要求用指针实现)
#include "stdio.h" void main() { void swap(int * p1,int * p2); int a[10],* p ,i,j; printf("input 10 number: "); for(i=0; i<10; i++) scanf("%d",&a[i]); p=a; for(i=0; i<10; i++) for(j=i; j<9; j++) if(a[i]<a[j+1]) swap(p+i,p+j+1); for(i=0; i<10; i++) printf("%5d ",a[i]); printf(" "); } void swap(int * p1,int * p2) { int t; t=* p1; * p1=* p2; * p2=t; }29 用选择法实现对10个整数按从小到大的顺序排序输出(要求用指针实现)。
#include "stdio.h" void main() { void swap(int * p1,int * p2); int a[10],* p ,i,j; printf("input 10 number: "); for(i=0; i<10; i++) scanf("%d",&a[i]); p=a; for(i=0; i<10; i++) for(j=0; j<9-i; j++) if(a[j]>a[j+1]) swap(p+j,p+j+1); for(i=0; i<10; i++) printf("%5d ",a[i]); printf(" "); } void swap(int * p1,int * p2) { int t; t=* p1; * p1=* p2; * p2=t; }30 定义一个结构体变量(包括年、月、日)。计算当天是本年中的第几天,注意闰年问题。
#include <stdio.h> struct { int year; int month; int day; } date; void main() { int days; printf("input year,month,day:"); scanf("%d,%d,%d",&date. year,&date.month,&date.day); switch(date.month) { case 1: days=date.day; break; case 2: days=date.day+31; break; case 3: days=date.day+59; break; case 4: days=date.day+90; break; case 5: days=date.day+120; break; case 6: days=date.day+151; break; case 7: days=date.day+181; break; case 8: days=date.day+212; break; case 9: days=date.day+243; break; case 10: days=date.day+273; break; case 11: days=date.day+304; break; case 12: days=date.day+334; break; } //判断是否是闰年 if ((date.year %4== 0 && date.year % 100 != 0 ||date.year % 400 == 0) && date.month >=3) days+=1; printf("%d/%d is the %dth day in %d. ",date.month,date.day,days,date.year); }31. 设计候选人得票统计程序,要求有4个侯选人(分别是Zhang 、Wang 、Li、 Zhao),选民每次输入一个被选人的姓名,最后统计出各人的得票结果。
#include <string.h> #include <stdio.h> struct person { char name[20]; int count; } leader[4]= {"zhang",0,"wang",0,"li",0,"zhao",0}; void main() { int i,j; char leader_name[20]; for (i=1; i<=10; i++) { scanf("%s",leader_name); for(j=0; j<4; j++) if(strcmp(leader_name,leader[j].name)==0)//strcmp字符串比较函数 leader[j].count++; } printf(" Resoult: "); for(i=0; i<4; i++) printf("%5s:%d ",leader[i].name,leader[i].count); }32 定义一个包括学号、姓名、年龄的学生结构体,要求实现三个学生信息的输入输出,并输出平均年龄
#include <stdio.h> #define N 3 struct student { char num[6]; char name[20]; int age; } stu[N]; void main() { int i,aver=0; for(i=0; i<N; i++) { printf("input scores of student %d: ",i+1); printf("NO.:"); scanf("%s",stu[i].num); printf("name:"); scanf("%s",stu[i].name); printf("age :"); scanf("%d",&stu[i].age); } printf(" NO. name age "); for (i=0; i<N; i++) { printf("%5s%10s%9d",stu[i].num,stu[i].name,stu[i].age); printf(" "); } //输出平均成绩 for(i=0; i<N; i++) aver=aver+stu[i].age; aver=aver/3; printf("aver=%d",aver); }33 定义一个包括教师编号、姓名、工资的教师结构体,要求实现三个教师信息的输入输出,并输出平均工资。
#include <stdio.h> #define N 3 struct teacher { char num[6]; char name[20]; float pay; } tea[N]; void main() { int i; float aver=0; for(i=0; i<N; i++) { printf("input scores of student %d: ",i+1); printf("NO.:"); scanf("%s",tea[i].num); printf("name:"); scanf("%s",tea[i].name); printf("pay :"); scanf("%f",&tea[i].pay); } printf(" NO. name pay "); for (i=0; i<N; i++) { printf("%5s%10s%9.2f",tea[i].num,tea[i].name,tea[i].pay); printf(" "); } for(i=0; i<N; i++) aver=aver+tea[i].pay; aver=aver/N; printf("aver=%f",aver); }34 定义一个包括职员号、姓名、工资的职员结构体,要求实现三个职员信息的输入输出,并输出平均工资
#include <stdio.h> #define N 3 struct worker { char num[6]; char name[20]; float pay; } work[N]; void main() { int i; float aver=0; for(i=0; i<N; i++) { printf("input scores of worker %d: ",i+1); printf("NO.:"); scanf("%s",work[i].num); printf("name:"); scanf("%s",work[i].name); printf("pay :"); scanf("%f",&work[i].pay); } printf(" NO. name pay "); for (i=0; i<N; i++) { printf("%5s%10s%9.2f",work[i].num,work[i].name,work[i].pay); printf(" "); } for(i=0; i<N; i++) aver=aver+work[i].pay; aver=aver/N; printf("aver=%f",aver); }35 建立动态数组,输入5个学生的成绩,另外用一个函数检查其中有无低于60分的,输出不合格的成绩。
#include <stdio.h> #include <stdlib.h> void main() { void check(int *); //函数声明 int *p1,i; p1=(int *)malloc(5*sizeof(int));// 动态数组 for(i=0; i<5; i++) scanf("%d",p1+i); check(p1); free(p1); } void check(int *p) { int i; printf("They are fail:"); for(i=0; i<5; i++) if (p[i]<60) printf("%d ",p[i]); printf(" "); }36 写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度(要求用指针实现)。
#include <stdio.h> void main() { int length(char *p); int len; char str[20]; printf("input string: "); scanf("%s",str); len=length(str); printf("The length of string is %d. ",len); } int length(char *p) { int n; n=0; while (*p!=' ') { n++; p++; } return(n); }37 有一个一维数组score,内放10个学生成绩,用一个函数求平均成绩,并将10个成绩中不及格(小于60)的成绩和该成绩在数组中的序号输出。
#include "stdio.h" void main() { void fail(float score[],int n); float score[10]; int i; for(i=0; i<10; i++) scanf("%f",&score[i]); averfail(score,10); } void averfail(float score[],int n) { int i; float averscore=0; for(i=0; i<n; i++) { averscore = averscore+score[i]; if(score[i]<60) printf("成绩为%f,序号为%d ",score[i],i+1); } averscore=averscore/n; printf("平均成绩:%f",averscore); }38. 有一个一维数组内放10个数,设计函数,求出10个数中的最大值、最小值、平均值。
#include "stdio.h" void main() { int a[10],i,max,min,sum=0; float average; printf("input 10 number: "); for(i=0; i<10; i++) scanf("%d",&a[i]); //求最大值,平均值 max=a[0]; for(i=0; i<10; i++) { sum=sum+a[i]; if(a[i]>max) max=a[i]; } average=sum/10.0; //求最小值 min=a[0]; for(i=0; i<10; i++) { if(a[i]<min) min=a[i]; } printf("max=%d,average=%f,min=%d",max,average,min); }39. 【有问题】找出一个2维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。
#include "stdio.h" int main() { int a[4][5]; int i,j,k,m; for(i=0; i<4; i++) { for(j=0; j<5; j++) { scanf("%d",&a[i][j]); } } for(i=0; i<4; i++) { for(j=0; j<5; j++) { //列比大小 for(m=0; m<4; m++) { if(a[i][j]<a[m][j]) { //行比大小 for(k=0; k<5; k++) { if(a[i][j]>a[i][k]) continue; } } } } } printf("i=%d,j=%d",i,j); return 0; }40. 输入8个学生4门课的成绩,分别用函数实现如下功能:
(1) 计算每个学生平均分;
(2) 计算每门课的平均分;
(3) 找出32个分数中最高分所对应的学生和课程。
#include <stdio.h> #define N 8 #define M 4 float score[N][M]; float a_stu[N],a_cour[M]; int r,c; void main() { int i,j; float h; float highest(); void input_stu(void); void aver_stu(void); void aver_cour(void); //输入成绩 input_stu(); //计算学生的平均成绩 aver_stu(); //计算课程的平均成绩 aver_cour(); //输出学生的平均成绩 printf(" NO. cour1 cour2 cour3 cour4 aver "); for(i=0; i<N; i++) { printf(" NO %2d ",i+1); for(j=0; j<M; j++) printf("%8.2f",score[i][j]); printf("%8.2f ",a_stu[i]); } //输出课程的平均成绩 printf(" average:"); for (j=0; j<M; j++) printf("%8.2f",a_cour[j]); printf(" "); //输出最好成绩的学生和课程 h=highest(); printf("highest:%7.2f NO. %2d course %2d ",h,r,c); } void input_stu(void) { int i,j; for (i=0; i<N; i++) { printf(" input score of student%2d: ",i+1); for (j=0; j<M; j++) scanf("%f",&score[i][j]); } } void aver_stu(void) { int i,j; float s; for (i=0; i<N; i++) { for (j=0,s=0; j<M; j++) s+=score[i][j]; a_stu[i]=s/5.0; } } void aver_cour(void) { int i,j; float s; for (j=0; j<M; j++) { s=0; for (i=0; i<N; i++) s+=score[i][j]; a_cour[j]=s/(float)N; } } float highest() { float high; int i,j; high=score[0][0]; for (i=0; i<N; i++) for (j=0; j<M; j++) if (score[i][j]>high) { high=score[i][j]; r=i+1; c=j+1; } return(high); }41 用一个函数实现将一行字符串中的最长的单词输出。此行字符串从主函数传递给该函数
#include <stdio.h> #include <string.h> void main() { int alphabetic(char); int longest(char []); int i; char line[100]; printf("input one line: "); gets(line); printf("The longest word is :"); for (i=longest(line); alphabetic(line[i]); i++) printf("%c",line[i]); printf(" "); } int alphabetic(char c) { if ((c>='a' && c<='z')||(c>='A'&&c<='z')) return(1); else return(0); } int longest(char string[]) { int len=0,i,length=0,flag=1,place=0,point; for (i=0; i<=strlen(string); i++) if (alphabetic(string[i])) if (flag) { point=i; flag=0; } else len++; else { flag=1; if (len>=length) { length=len; place=point; len=0; } } return(place); }42.输出金字塔图案(要求用循环实现
#include <stdio.h> void main() { /* i 0~2*i 0~2-i * 上半部分 0 *1个 0~2*0 空6/2=3 0~2-0 *** 1 *3个 0~2*1 空4/2=2 0~2-1 ***** 2 *5个 0~2*2 空2/2=1 0~2-2 ******* 3 *7个 0~2*3 空0 0~2-3 ***** 下半部分 0 *5个 0~4-2*0 空2/2=1 0~0 *** 1 *3个 0~4-2*1 空4/2=2 0~1 * 2 *1个 0~4-2*2 空6/2=3 0~2 0~4-2*i 0~i */ int i,j,k; //上半部分 for (i=0; i<=3; i++) { for (j=0; j<=2-i; j++) printf(" "); for (k=0; k<=2*i; k++) printf("*"); printf(" "); } //下半部分 for (i=0; i<=2; i++) { for (j=0; j<=i; j++) printf(" "); for (k=0; k<=4-2*i; k++) printf("*"); printf(" "); } }43 要有一个已排好序的数组,求输入一个数后,按原来排序的规律将她插入数组中
#include "stdio.h" void main() { int a[10]; int b[11]; int i,m,j; printf("请输入一个数组: "); for(i=0; i<10; i++) scanf("%d",&a[i]); printf("请输入一个任意的整数:"); scanf("%d",&m); //找到插入位置 for(i=0; i<10; i++) if(m<a[i]) break; for(j=0; j<11; j++) { //将插入位置前的复制到b中 if(i>j) b[j]=a[j]; //将插入位置后的复制到b中 else if(i<j) b[j]=a[j-1]; //将插入位置复制到b中 else b[j]=m; } printf("该数组的重新排序为:"); for(j=0; j<11; j++) printf("%d ",b[j]); }44 写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息
#include "stdio.h" #include "math.h" void main() { int prime(int n); int m; printf("please input a integer: "); scanf("%d",&m); if(prime(m)) printf("%d is a prime",m); else printf("%d is not a prime",m); } int prime(int i) { int flag=1,n; for(n=2; n<=sqrt(i); n++) { if(i%n==0) flag=0; } return(flag); }45 有一篇文章,共有4行文章,每行有60个字符。要求分别统计出其中英文大写字符、小写字母、数字、空格以及其他字符的个数
#include <stdio.h> void main() { int i,j,upp,low,dig,spa,oth; char text[4][60]; upp=low=dig=spa=oth=0; for (i=0; i<4; i++) { printf("please input line %d: ",i+1); gets(text[i]); for (j=0; j<60 && text[i][j]!=' '; j++) { if (text[i][j]>='A'&& text[i][j]<='Z') upp++; else if (text[i][j]>='a' && text[i][j]<='z') low++; else if (text[i][j]>='0' && text[i][j]<='9') dig++; else if (text[i][j]==' ') spa++; else oth++; } } printf(" upper case: %d ",upp); printf("lower case: %d ",low); printf("digit : %d ",dig); printf("space : %d ",spa); printf("other : %d ",oth); }46. 有一行电文,已按下面规律译成密码:
A→Z a→z
B→Y b→y
C→X c→x/
即第1个字母变成第26个字母,第i个字母变成第(26 – i + 1)个字母。非字母符号不变。要求编程序将密码译回原文,并输出密码和原文。
#include <stdio.h> void main() { int j,n; char ch[80],tran[80]; printf("input cipher code:"); gets(ch); printf(" cipher code :%s",ch); j=0; while (ch[j]!=' ') { if ((ch[j]>='A') && (ch[j]<='Z')) tran[j]=155-ch[j]; // else if ((ch[j]>='a') && (ch[j]<='z')) tran[j]=219-ch[j]; // else tran[j]=ch[j]; j++; } n=j; printf(" original text:"); for (j=0; j<n; j++) putchar(tran[j]); printf(" "); }47 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下来的是原来第几号的那位(要求用指针知识实现)。【见2015年笔试题】
#include <stdio.h> void main() { int i,k,m,n,num[50],*p; printf("input number of person: n="); scanf("%d",&n); p=num; for (i=0; i<n; i++) *(p+i)=i+1; i=0; k=0; m=0; while (m<n-1) { if (*(p+i)!=0) k++; if (k==3) { *(p+i)=0; k=0; m++; } i++; if (i==n) i=0; } while(*p==0) p++; printf("The last one is NO.%d ",*p); }48 有10个学生,每个学生的数据包括学号、姓名、3门课程的成绩,从键盘输入10个学生数据,要求输出3门课程总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课程成绩、平均分数)(用结构体)。
#include <stdio.h> #define N 10 struct student { char num[6]; char name[8]; float score[3]; float avr; } stu[N]; void main() { int i,j,maxi; float sum,max,average; for (i=0; i<N; i++) { printf("input scores of student %d: ",i+1); printf("NO.:"); scanf("%s",stu[i].num); printf("name:"); scanf("%s",stu[i].name); for (j=0; j<3; j++) { printf("score %d:",j+1); scanf("%f",&stu[i].score[j]); } } average=0; max=0; maxi=0; for (i=0; i<N; i++) { sum=0; for (j=0; j<3; j++) sum+=stu[i].score[j]; stu[i].avr=sum/3.0; average+=stu[i].avr; if (sum>max) { max=sum; maxi=i; } } average/=N; printf(" NO. name score1 score2 score3 average "); for (i=0; i<N; i++) { printf("%5s%10s",stu[i].num,stu[i].name); for (j=0; j<3; j++) printf("%9.2f",stu[i].score[j]); printf(" %8.2f ",stu[i].avr); } printf("average=%5.2f ",average); printf("The highest score is : student %s,%s ",stu[maxi].num,stu[maxi].name); printf("his scores are:%6.2f,%6.2f,%6.2f,average:%5.2f. ", stu[maxi].score[0],stu[maxi].score[1],stu[maxi].score[2],stu[maxi].avr); }49 写一个函数,将一个字符串中的元音字母复制到另一个字符串,然后输出
#include "stdio.h" void main() { void copy(char s[3],char m[2]); char str[80],c[80]; printf("input str: " ); gets(str); copy(str, c); printf("the vovel letters are:%s ",c); } void copy(char s[3],char m[2]) { int i,j; for(i=0,j=0; s[i]!=' '; i++) if(s[i]=='a'||s[i]=='A'||s[i]=='o'||s[i]=='O'||s[i]=='u'||s[i]=='U'||s[i]=='i'||s[i]=='I'||s[i]=='e'||s[i]=='E') { m[j]=s[i]; j++; } m[j]=' '; }50 编一程序,输入月份号,输出该月的英文月名。例如,输入3,则输出March,要求用指针数组处理。
#include <stdio.h> 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. ",*(month_name+n)); else printf("It is wrong. "); }