仅作参考,请指正
一、编程题
1、学分绩计算
#include <stdio.h> int main() { printf("Input math1, English and math2:"); int math1, English,math2; scanf("%d,%d,%d",&math1,&English,&math2); double score =(math1 * 5 + English * 1.5 + math2 * 3.5) / 10; printf("Final score = %.2f\n",score); return 0; }
2、一尺之捶,日取其半
#include <stdio.h> #include <math.h> int main() { printf("Input length and days:"); float length; int days; scanf("%f,%d",&length,&days); printf("length=%.5f\n",length*pow(0.5,days)); return 0; }
3、网购打折商品V1.0
#include <stdio.h> int main() { printf("Input payment p:"); float payment,price; scanf( "%f",&payment); price = payment*(1-0.08); printf("price = %.1f\n",price); return 0; }
4、计算时间差V1.0
#include <stdio.h> //#include <math.h> #include <stdlib.h> int main() { int h1,h2,m1,m2,r; printf("Input time one(hour, minute):"); scanf("%d,%d",&h1,&m1); printf("Input time two(hour, minute):"); scanf("%d,%d",&h2,&m2); r = abs((h1*60+m1) - (h2*60+m2)); printf("%d hour %d minute\n", r/60,r%60); return 0; }
5、分数比较
#include <stdio.h> #include <math.h> int main() { printf("Input a/b, c/d:"); int a,b,c,d; scanf("%d/%d,%d/%d",&a,&b,&c,&d); double e = (double)a/b-(double)c/d; if(fabs(e)<=1e-6){ printf("%d/%d=%d/%d\n",a,b,c,d); } else if(e>1e-6){ printf("%d/%d>%d/%d\n",a,b,c,d); } else{ printf("%d/%d<%d/%d\n",a,b,c,d); } return 0; }
6、存款利率计算器v2.0
#include <stdio.h> #include <math.h> int main() { printf("Input rate, year, capital:"); int year; double rate,capital; scanf("%lf,%d,%lf",&rate,&year,&capital); printf("Compound interest (Y/N)?" ); char ch; scanf(" %c",&ch); if(ch=='Y'||ch=='y'){ printf("deposit = %.4f\n",capital*pow((1+rate),year)); } else{ printf("deposit = %.4f\n",capital* (1 + rate * year)); } return 0; }
7、存款利率计算器v3.0
#include <stdio.h> #include <math.h> int main() { //1. printf("Input capital, year:"); double capital,rate,deposit; int year; scanf( "%lf,%d",&capital,&year); //2. int flag = 0; if( year == 1){ rate = 0.0225; } else if(year == 2){ rate = 0.0243; } else if(year == 3){ rate = 0.0270; } else if(year == 5){ rate = 0.0288; } else if(year == 8){ rate = 0.0300; } else{ flag = 1; } //3. printf("Compound interest (Y/N)?"); char ch; scanf(" %c",&ch); if(ch=='Y'||ch=='y'){ deposit = capital*pow((1+rate),year); } else{ deposit = capital* (1 + rate * year); } //4. if(flag){ printf( "Error year!\n"); } else{ printf("rate = %.4f, deposit = %.4f\n",rate,deposit); } return 0; }
8、博弈论之Best Response
#include <stdio.h> #include <math.h> int main() { printf("Input percent of A and B:"); double aPercent,bPercent; scanf("%lf%lf",&aPercent,&bPercent); double complete = 10*aPercent+6*bPercent; double standard = 8*aPercent+10*bPercent; printf("compete = %.4f\nstandard = %.4f\n",complete,standard); if(complete-standard>1e-6){ printf("The Best Response is compete!"); } else{ printf("The Best Response is standard!"); } return 0; }
9、马克思手稿中的趣味数学题
#include<stdio.h> int main() { int men,women,baby; printf("Man Women Children\n"); //! for(men=0;men<=10;men++)//men+women+baby=30 3men+2women+baby=50 { women=20-2*men; baby=30-men-women; if(3*men+2*women+baby==50) { //printf("Man Women Children\n"); // printf("%3d%8d%8d\n",men,women,baby); //break; } } return 0; //! }
10、猜神童年龄
#include <stdio.h> int tenBit(int n,int *a); int main() { for(int x=10;x<=22;++x) { int a[10]={0}; int boo = tenBit(x*x*x,a)&&tenBit(x*x*x*x,a); if(boo){ printf("age=%d\n",x); break; } } return 0; } int tenBit(int n,int *a){ while(n) { if(++a[n%10]>1) return 0; n/=10; } return 1; }
11、闰年相关的问题v3.0——计算有多少闰年
#include <stdio.h> #include <stdlib.h> int main() { int count=0,birthYear,thisYear; printf("Input your birth year:"); scanf("%d",&birthYear); printf("Input this year:"); scanf("%d",&thisYear); for(int i=birthYear;i<=thisYear;++i){ if(i%4==0&&i%100!=0||i%400==0){ printf("%d\n",i); count++; } } printf("count=%d\n",count); return 0; }
12、闰年相关的问题v4.0——计算心跳数
#include <stdio.h> #include <stdlib.h> int main() { int birthYear,thisYear,cnt=0; printf("Input your birth year:"); scanf("%d",&birthYear); printf("Input this year:"); scanf("%d",&thisYear); int year = thisYear-birthYear; for(int i=birthYear;i<thisYear;++i){ if(i%4==0&&i%100!=0||i%400==0){ cnt++; } } printf("The heart beats in your life: %lu",(year*365+cnt)*24*60*75); return 0; }
13、计算阶乘的和v2.0
#include <stdio.h> long Fact(int n); int main() { for(int m=100;m<=999;++m) { int a = m/100; int b = m/10%10; int c = m%10; if(m==Fact(a)+Fact(b)+Fact(c)){ printf("%d\n",m); } } return 0; } long Fact(int n){ int result = 1; for(int i = 1;i<=n; ++i){ result *= i; } return result; }
14、计算最大的三位约数
#include <stdio.h> int Func(int n); int main() { printf("Input n:"); int n; scanf("%d",&n); if(n<1000||n>1000000){ printf("Input error!\n"); } else{ printf("%d\n",Func(n)); } return 0; } int Func(int n){ for(int i=999; i>=100; --i){ if(n%i==0) return i; } return 1; }
15、孔融分梨
#include <stdio.h> int Gcd(int a, int b); int main() { printf("Input m,n:"); int m, n, x; scanf("%d,%d", &m, &n); x = Gcd(m,n); //if ( m<1 || n>10000) if(-1 == x) { printf("Input error!\n"); } else { printf("%d/%d\n", m/x,n/x); } return 0; } int Gcd(int a, int b) { int r; //if (a<=0 || b<=0){ if ( a<1 || b>10000){ return -1; } do{ r = a % b; a = b; b = r; }while (r!=0); return a; }
16、素数求和
#include <stdio.h> #include <math.h> int IsPrime(int x); int main() { printf("Input n:"); int n; scanf("%d",&n); int sum =0; while(n>=2){ if(IsPrime(n)){ sum += n; } n--; } printf("sum=%d\n",sum); return 0; } int IsPrime(int x){ for(int i=2;i <= sqrt(x);++i){ if(x%i==0){ return 0; } } return 1; }
17、n层嵌套平方根的计算
#include <stdio.h> #include <stdlib.h> #include <math.h> double Y(double x, int n) { if (n == 0){ return 0; } else{ return (sqrt(x +Y(x,n-1))); } } int main() { printf("Please input x and n:"); double x; int n; scanf("%lf,%d",&x,&n); printf("Result=%.2f\n",Y(x,n)); return 0; }
18、递归法求和
#include <stdio.h> #include <stdlib.h> #include <math.h> int sum(int n){ if(n==1){ return 1; } else{ return n+sum(n-1); } } int main() { printf("Please input n:"); int n; scanf("%d",&n); if(n<1){ printf("data error!\n"); } else{ printf("sum=%d\n",sum(n)); } return 0; }
19、猴子吃桃程序_扩展3
#include <stdio.h> #include <stdlib.h> #include <math.h> int Monkey(int n, int x); int main() { printf("Input days n:"); int n; scanf("%d",&n); int x = 1; printf("x=%d\n",Monkey(n,x)); return 0; } int Monkey(int n, int x){ if(n==1){ return x; } else{ return Monkey(n-1,2*(x+1)); } }
20、网购打折商品V2.0
#include <stdio.h> #include <stdlib.h> #include <math.h> float Price(float payment); int main() { printf("Input payment:"); float payment; scanf("%f",&payment); printf("price = %.1f\n",Price(payment)); return 0; } float Price(float payment){ float rate; int c = payment/100; if(c<1){ rate = 0.0; } else if(c<2&&c>=1){ rate = 0.05; } else if(c<5&&c>=2){ rate = 0.08; } else if(c<10&&c>=5){ rate = 0.1; } else{ rate = 0.15; } return payment - payment * rate; }
21、摘苹果
#include <stdio.h> int GetApple(int a[], int height, int n); int main() { int a[10]={0}; for(int i=0;i<10;++i){ scanf("%d",&a[i]); } int height; scanf("%d",&height); height += 30; int n = 10; int cnt = GetApple(a,height,n); printf("%d",cnt); return 0; } int GetApple(int a[], int height, int n){ int cnt = 0; for(int i=0;i<n;++i){ if(a[i]<=height){ cnt++; } } return cnt; }
22、好数对
#include <stdio.h> int main() { int a[1000] = {0}; int n; scanf("%d",&n); for(int i=0;i<n;++i){ scanf("%d",&a[i]); } int count = 0; for(int i=0;i<n-1;++i) for(int j=i+1;j<n;++j) for(int k=0; k<n; ++k) if(a[k] == a[i]+a[j]) count++; printf("%d",count); return 0; }
23、组合三位数
#include<stdio.h> int f(int array[],int a) { while(a) { array[a%10]++; if(array[a%10]>1) { return 0; } a/=10; } return 1; } int main() { int num1=0,num2=0,num3=0; for(int i=102;num1=i,num2=i*2,num3=i*3,i*=3,i<987;i=num1+1) { int array[10]={0}; if(f(array,num1)&&f(array,num2)&&f(array,num3)) { printf("%d,%d,%d\n",num1,num2,num3); } } return 0; }
24、求100以内的最大素数
#include<stdio.h> #include<math.h> int isPrime(int n){ int k=(int)sqrt(n); for(int i=2;i<=k;i++){ if(n%i==0){ return 0; } } return 1; } int main() { printf("Input n(n<=500):"); int n; scanf("%d",&n); int count = 0,sum = 0; for(int i=n;i>1&&count!=10;--i){ if(isPrime(i)){ printf("%6d",i); count++; sum+=i; } } printf("\nsum=%d\n",sum); return 0; }
25、重复数字检查
#include <stdio.h> int CountRepeatNum(int count[], int n); int main() { printf("Input n:\n"); long int n; scanf("%ld",&n); int num[10]={0}; if(CountRepeatNum(num,n)){ printf("Repeated digit!\n"); } else{ printf("No repeated digit!\n"); } return 0; } int CountRepeatNum(int count[], int n) { while(n) { if(++count[n%10]>1){ return 1; } n/=10; } return 0; }
26、教授的课
#include <stdio.h> #define N 32 int IsCancel(int a[], int n, int k); int main() { printf("Input n,k:\n"); int n,k; scanf("%d,%d",&n,&k); int array[N]={0}; for(int i=0;i<n;++i){ scanf("%d",&array[i]); } if(IsCancel(array,n,k)){ printf("YES"); } else{ printf("NO"); } return 0; } int IsCancel(int a[], int n, int k){ int cnt=0; for(int i=0;i<n;++i){ if(a[i]<=0){ cnt++; } } if(cnt<k){ return 1; } return 0; }
27、寻找鞍点
#include <stdio.h> #define N 32 void FindSaddlePoint(int a[][N], int m, int n); int main() { printf( "Input m,n:\n"); int m,n; scanf("%d,%d",&m,&n); printf( "Input matrix:\n" ); int array[N][N]={0}; for(int i=0;i<m;++i){ for(int j=0;j<n;++j){ scanf("%d",&array[i][j]); } } FindSaddlePoint(array,m,n); return 0; } void FindSaddlePoint(int a[][N], int m, int n) { int find = 0; for(int i=0;i<m;++i) { int rowPos=i,columnPos=0,flag = 1; for(int j=1;j<n;++j) { if(a[i][j]>a[rowPos][columnPos]){ rowPos = i; columnPos = j; } } for(int k=0;k<m;++k){ if(a[k][columnPos]<a[rowPos][columnPos]){ flag = 0; break; } } if(flag){ printf("a[%d][%d] is %d\n",rowPos,columnPos,a[rowPos][columnPos]); find = 1; } } if(!find){ printf("No saddle point!\n"); } }
28、计算三位阶乘和数
#include <stdio.h> int main() { int array[10]={0}; int result = 1; array[0]=1; for(int i=1;i<10;++i){ result *= i; array[i] = result; } for(int j=100;j<=999;++j){ int a = j/100,b=j/10%10,c=j%10; if(j==array[a]+array[b]+array[c]){ printf("%ld\n",j); } } return 0; }
29、数字字符串转换为整型数
#include<stdio.h> int Myatoi(char str[]); int main(void) { printf("Input a string:"); char a[10] = ""; scanf("%7s",a); printf("%d\n",Myatoi(a)); return 0; } int Myatoi(char str[]){ int sum = 0; for(char *p = str; *p!='\0'; ++p){ if(*p>=48&&*p<=57){ sum = sum*10 + *p-48; } } return sum; }
30、查找子串
#include<stdio.h> #include<string.h> int SearchString(char s[], char d[]); int main(void) { char a[80] = "",b[40] = ""; printf("Input a string:"); gets(a); printf("Input another string:"); gets(b); int ret = SearchString(a,b); if(-1 == ret){ printf( "Not found!\n"); } else{ printf("Searching results:%d\n",ret); } return 0; } int SearchString(char a[], char b[]){ char *s1 = NULL, *s2 = NULL, *pa = a; while(*pa)/**< pa指向了字符串a的尾部退出循环*/ { s1 = pa; s2 = b; while(*s1&&*s2&&!(*s1-*s2)){ s1++, s2++; } if(!*s2)/**< s1指向了字符串a的尾部找到了*/ return pa - a + 1; pa++;/**< 指针pa右移 */ } return -1; }
31、统计重复字符
#include<stdio.h> #include<string.h> int CountRepeatStr(char str[], int *tag); int main(void) { char a[80] = ""; int tag = 0; printf("Input a string:\n"); gets(a); int max = CountRepeatStr(a,&tag); printf("%c:%d\n",a[tag],max); return 0; } int CountRepeatStr(char str[], int *tag) { int max = 1,count = 1; for(int i=1;i<strlen(str);++i) { if(str[i-1] == str[i]){ count++; } if(count>max){ max = count; *tag = i; } if(str[i-1] != str[i]){ count = 1; } } return max; }
32、凯撒密码
#include<stdio.h> #include<string.h> #define N 100 void Caesar(char c[]); int main(void) { char a[N] = ""; printf("Input a string:"); gets(a); Caesar(a); return 0; } void Caesar(char c[]) { char b[N] = ""; for(int i=0;i<strlen(c);++i){ b[i]=(c[i]-'a'+3)%26 + 'a'; } puts(b); }
33、山地训练
#include <stdio.h> #include <string.h> #define N 5000 long Fun(long M, long T, long U, long F, long D, char str[]); int main() { printf("Input M,T,U,F,D:"); long M,T,U,F,D; scanf( "%ld%ld%ld%ld%ld",&M,&T,&U,&F,&D); printf("Input conditions of road:"); char str[N] = {0}; scanf("%s",str); long num = Fun(M,T,U,F,D,str); printf("num=%ld\n",--num); /**< 难道路段计数从0开始! */ return 0; } long Fun(long M, long T, long U, long F, long D, char str[]) { long int sum = 0, num = 0; while(M>sum&&num<T)/**< 往返时间足够,且最多跑完T个路段 */ { if(str[num]=='u'||str[num]=='d'){ sum += U+D; } else{ sum += 2*F; } num++;/**< 往返一次 */ if(M<sum){ /**< 时间不够用了,num-- */ num--; } } return num; }
34、奇偶数分离
#include <stdio.h> #include <string.h> #define N 100 void Seperate(int a[], int n); int main() { printf("Input n:"); int n; scanf("%d",&n); printf("Input numbers:"); int a[N] = {0}; for(int i=0; i<n; ++i){ scanf("%d",&a[i]); } Seperate(a,n); return 0; } void Seperate(int a[], int n) { int cnt = 0; for(int i=0; i<n; ++i){ if(a[i]%2!=0){ cnt++; if(cnt!=1){ printf(","); } printf("%d",a[i]); } } printf("\n"); cnt = 0; for(int i=0; i<n; ++i){ if(a[i]%2==0){ cnt++; if(cnt!=1){ printf(","); } printf("%d",a[i]); } } }
35、子串判断
#include <stdio.h> #include <string.h> #define N 100 int IsSubString(char a[], char b[]); int main() { printf( "Input the first string:"); char a[N] = ""; gets(a); printf("Input the second string:"); char b[N] = ""; gets(b); if(IsSubString(a,b)){ printf("Yes\n"); } else{ printf( "No\n"); } return 0; } int IsSubString(char a[], char b[]) { if(strstr(a,b)){ return 1; } return 0; }
36、星期查找
#include <stdio.h> #include <string.h> #define N 100 int IsSubString(char a[], char b[]); int main() { char *weekday[] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; printf("Please enter a string:\n"); char b[N] = ""; gets(b); int flag = 0; for(int i=0; i<7;++i){ if(strcmp(weekday[i],b)==0){ printf("%s is %d\n",weekday[i],i); flag = 1; } } if(!flag){ printf("Not found!\n"); } return 0; }
37、计算时间差V2.0
#include <stdio.h> #include <stdlib.h> typedef struct clock { int hour; int minute; int second; } CLOCK; CLOCK CalculateTime(CLOCK t1, CLOCK t2); int main() { CLOCK time1,time2; printf("Input time one:(hour,minute):"); scanf("%d,%d",&time1.hour,&time1.minute); printf( "Input time two: (hour,minute):"); scanf("%d,%d",&time2.hour,&time2.minute); CLOCK c = CalculateTime(time1,time2); printf("%dhour,%dminute\n",c.hour,c.minute); return 0; } CLOCK CalculateTime(CLOCK t1, CLOCK t2) { CLOCK res; int sum = abs((t1.hour * 60 + t1.minute) - (t2.hour * 60 + t2.minute)); res.hour = sum / 60; res.minute = sum%60; return res; }
38、奖学金发放
#include <stdio.h> #define N 100 typedef struct winners { char name[20]; int finalScore; int classScore; char work; char west; int paper; int scholarship; } WIN; void Addup(WIN stu[], int n); int FindMax(WIN student[], int n); int main() { int n; printf("Input n:"); scanf("%d",&n); WIN stu[N]; Addup(stu,n); int index = FindMax(stu,n); printf("%s get the highest scholarship %d\n",stu[index].name, stu[index].scholarship); return 0; } void Addup(WIN stu[], int n) { for(int i = 0; i<n; ++i) { printf("Input name:"); scanf("%s",stu[i].name); printf("Input final score:"); scanf("%d",&stu[i].finalScore); printf("Input class score:"); scanf("%d",&stu[i].classScore); printf("Class cadre or not?(Y/N):"); scanf(" %c",&stu[i].work); printf("Students from the West or not?(Y/N):"); scanf(" %c",&stu[i].west); printf("Input the number of published papers:"); scanf("%d",&stu[i].paper); stu[i].scholarship = 0; if(stu[i].finalScore>80&&stu[i].paper>=1){ stu[i].scholarship += 8000; } if(stu[i].finalScore>85&&stu[i].classScore>80){ stu[i].scholarship += 4000; } if(stu[i].finalScore>90){ stu[i].scholarship += 2000; } if(stu[i].finalScore>85&&stu[i].west=='Y'){ stu[i].scholarship += 1000; } if(stu[i].classScore>80&&stu[i].work=='Y'){ stu[i].scholarship += 850; } printf("name:%s,scholarship:%d\n",stu[i].name,stu[i].scholarship); } } int FindMax(WIN student[], int n) { int index = 0; for(int i =1; i<n; ++i){ if(student[i].scholarship>student[index].scholarship){ index = i; } } return index; }
39、评选最牛群主v1.0
#include <stdio.h> #include <string.h> #define N 3 typedef struct vote { char name[20]; int cnt; } VOTE; int main() { enum{tom,jack,rose}; VOTE v[N] = {{"tom",0},{"jack",0},{"rose",0}}; printf("Input the number of electorates:"); int n; scanf("%d",&n); char name[20]; for(int i=0; i<n; ++i){ printf("Input vote %d:",i+1); scanf("%s",name); if(strcmp(name,v[tom].name)==0){ v[tom].cnt++; } else if(strcmp(name,v[jack].name)==0){ v[jack].cnt++; } else if(strcmp(name,v[rose].name)==0){ v[rose].cnt++; } } printf("Election results:\n"); int index=0, max = 0; for(;index<3; ++index){ printf("%s:%d\n",v[index].name,v[index].cnt); if(v[index].cnt>v[max].cnt) max = index; } printf("%s wins\n",v[max].name); return 0; }
40、星期判断
#include <stdio.h> #include <string.h> int main() { char ch1, ch2 = '\0'; char *weekday[] = {"sunday","monday","tuesday", "wednesday","thursday","friday","saturday"}; char **p = weekday; printf("please input the first letter of someday:\n"); scanf(" %c",&ch1); if(ch1>='A'&&ch1<='Z'){ ch1 += 32; } int n = 1; if('s'== ch1||'t'== ch1){ n = 2; printf("please input second letter:\n"); scanf(" %c",&ch2); } char str[3] = {ch1,ch2}; int cnt = sizeof(weekday)/sizeof(char*); int flag = 0; while(cnt--) { if(strncmp(*p,str,n)==0){ printf("%s\n",*p); flag = 1; break; } p++; } if(!flag){ printf("data error\n"); } return 0; }
二、练兵区
1、hello world!
#include <stdio.h> int main() { printf("hello world!\n"); return 0; }
2、在屏幕上输出多行信息
#include <stdio.h> int main() { printf("hello world!\nhello hit!\nhello everyone!\n"); return 0; }
3、计算半圆弧长及半圆的面积
#include <stdio.h> #define PI 3.14159 #define R 5.3 int main() { printf( "Area=%.5f\n", PI * R * R/2); printf("circumference=%.5f\n", 2 * PI * R/2); return 0; }
4、计算长方体体积
#include <stdio.h> int main() { const double l = 1.2; const double w = 4.3; const double h = 6.4; printf( "volume=%.3f\n", l * w * h); return 0; }
5、输出逆序数
#include <stdio.h> #include <math.h> int main() { int x,y = 0; printf("Input x:\n"); scanf("%d",&x); x = fabs(x); y = y*10 + x%10; x/=10; y = y*10 + x%10; x/=10; y = y*10 + x%10; printf("y=%d\n",y); return 0; }
6、计算总分和平均分
#include <stdio.h> #include <math.h> int main() { double total,average; total = (86+74+92+77+82)*0.3 + (81+87+90+62+88)*0.7; average = total/5; printf("total=%.2f\n",total); printf("average=%.2f\n",average); printf("average=%d\n",(int)average); return 0; }
7、存款利率计算器V1.0
#include <stdio.h> #include <math.h> int main() { double rate,capital; int n; printf("Please enter rate, year, capital:\n"); scanf("%lf,%d,%lf", &rate, &n, &capital); double deposit = capital*pow((1+rate),n); printf("deposit=%.3f\n",deposit); return 0; }
8、数位拆分v1.0
#include <stdio.h> #include <math.h> int main() { int n= 4321; int a = n/100; int b = n%100; printf("a=%d,b=%d\n",a,b); printf("a+b=%d\n",a+b); printf("a-b=%d\n",a-b); printf("a*b=%d\n",a*b); printf("a/b=%.2f\n",(float)a/b); printf("a%%b=%d\n",a%b); return 0; }
9、求正/负余数
#include <stdio.h> #include <math.h> int main() { printf("negative: %d\n",(-11)%5); printf("positive: %d\n",(-11)%5+5); return 0; }
10、身高预测
#include <stdio.h> #include <math.h> int main() { int faHeight_m=175, moHeight_m=162; int faHeight_f=169, moHeight_f=153; int h1 = (faHeight_m + moHeight_m)*0.54; int h2 = (faHeight_f*0.923 + moHeight_f)/2; printf("Height of xiao ming:%d\n",h1); printf("Height of xiao hong:%d\n",h2); return 0; }
11、求一元二次方程的根
#include <stdio.h> #include <math.h> int main() { float a =2.0,b = 3.0,c=1.0; float x1,x2; x1 = -b/(2*a) + sqrt(b*b-4*a*c)/(2*a); x2 = -b/(2*a) - sqrt(b*b-4*a*c)/(2*a); printf("x1=%.4f\n",x1); printf("x2=%.4f\n",x2); return 0; }
12、日期显示
#include <stdio.h> #include <math.h> int main() { printf("Enter a date (mm/dd/yy):\n"); int m,d,y; scanf( "%d/%d/%d",&m,&d,&y); printf("You entered the date: %04d.%02d.%02d\n",y,m,d); return 0; }
13、产品信息格式化
#include <stdio.h> #include <math.h> int main() { printf("Enter item number:\n"); int n; scanf("%d",&n); printf("Enter unit price:\n"); float price; scanf("%f",&price); printf("Enter purchase date (mm/dd/yy):\n"); int m,d,y; scanf("%d/%d/%d",&m,&d,&y); printf("Item Unit Purchase\n"); printf("%-9d$ %-9.2f%02d%02d%02d\n",n,price,m,d,y); return 0; }
14、计算两个数的平方和
#include <stdio.h> #include <math.h> int main() { printf("Please input x and y:\n"); float x,y; scanf("%f,%f",&x,&y); float result = pow(x,2)+pow(y,2); printf("Result=%.2f\n",result); return 0; }
15、逆序数的拆分计算
#include <stdio.h> #include <math.h> int main() { printf("Input x:\n"); int x; scanf( "%d",&x); x = abs(x); int y = 0; y = y*10+x%10; x/=10; y = y*10+x%10; x/=10; y = y*10+x%10; x/=10; y = y*10+x%10; x/=10; printf("y=%d\n",y); int a,b; a = y/100; b = y%100; printf("a=%d,b=%d\n",a,b); int result = pow(a,2)+pow(b,2); printf("result=%d\n",result); return 0; }
16、拆分英文名
#include <stdio.h> #include <math.h> int main() { printf("Input your English name:\n"); char a,b,c; scanf( "%c%c%c",&a,&b,&c); printf("%c%c%c\n",a-32,b,c); printf("%c:%d\n",a,a-'a'+1); printf("%c:%d\n",b,b-'a'+1); printf("%c:%d\n",c,c-'a'+1); return 0; }
17、计算体指数
#include <stdio.h> #include <math.h> int main() { printf("Input weight, height:\n"); int weight,height; scanf( "%d,%d",&weight,&height); printf("weight=%d\n",weight*2); printf("height=%.2f\n",height/100.0); printf("t=%.2f\n",weight/pow(height/100.0,2)); return 0; }
18、检测用户错误输入
#include <stdio.h> #include <math.h> int main() { int a,b; if(2 == scanf("%d %d",&a,&b)){ printf("a = %d, b = %d\n",a,b); } else{ printf("Input error!"); } return 0; }
19、闰年判断
#include <stdio.h> #include <math.h> int main() { int year; if(1 == scanf("%d",&year)&&year>0){ if(year%4==0&&year%100!=0||year%400==0){ printf("Yes\n"); } else{ printf("No\n"); } } else{ printf("Input error!\n"); } return 0; }
20、程序改错v1.0
#include <stdio.h> #include <stdlib.h> int main() { int score; printf("Please input score:\n"); if (scanf("%d", &score) == 0 ||score < 0 || score > 100 ) printf("Input error!\n"); else if (score >= 90) printf("grade: A\n"); else if (score >= 80) printf("grade: B\n"); else if (score >= 70) printf("grade: C\n"); else if (score >= 60) printf("grade: D\n"); else printf("grade: E\n"); return 0; }
21、字符类型判断
#include <stdio.h> #include <stdlib.h> int main() { printf("Input simple:\n"); char ch; scanf("%c",&ch); if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z'){ printf("It is an English character.\n"); } else if(ch>='0'&&ch<='9'){ printf("It is a digit character.\n"); } else{ printf("It is other character.\n"); } return 0; }
22、快递费用计算
#include <stdio.h> #include <math.h> int main() { int area; float price,weight; scanf("%d,%f",&area,&weight); int w = ceil(weight)-1; switch(area){ case 0: price = 10+w*3; break; case 1: price = 10+w*4; break; case 2: price = 15+w*5; break; case 3: price = 15+w*6.5; break; case 4: price = 15+w*10; break; default: price = 0; printf("Error in Area\n"); } printf("Price: %5.2f\n",price); return 0; }
23、数位拆分v2.0
#include <stdio.h> #include <math.h> int main() { printf("Please input n:\n"); int n; scanf("%d",&n); int a = n/100; int b = n%100; printf("%d,%d\n",a,b); printf("sum=%d,sub=%d,multi=%d\n",a+b,a-b,a*b); if(b==0){ printf("The second operator is zero!"); } else{ printf("dev=%.2f,mod=%d\n",(float)a/b,a%b); } return 0; }
24、出租车计价
#include <stdio.h> #include <math.h> int main() { printf("Input distance and time:"); float distance,fee; int time; scanf("%f,%d",&distance,&time); int d = distance; if(d<=3){ fee = 8; } else if(d>3&&d<=10){ fee = 8 + (distance-3)*2; } else if(d>10){ fee = 8 + (10-3)*2 + (distance-10)*3; } if(time>=5){/**< 重复代码合并处理 */ fee +=time/5*2; } printf("fee = %.0f\n" ,fee); return 0; }
25、数据区间判断
#include <stdio.h> #include<math.h> int main(){ printf("Please enter the number:\n"); int n; scanf( "%d",&n); if(n>=10000||n<=0){ printf("error!\n"); } else if(n/10==0){ printf("%d: 0-9\n",n); } else if(n/100==0){ printf("%d: 10-99\n",n); } else if(n/1000==0){ printf("%d: 100-999\n",n); } else{ printf("%d: 1000-9999\n",n); } return 0; }
26、计算一元二次方程的根v2.0
#include <stdio.h> #include<math.h> int main(){ printf("Please enter the coefficients a,b,c:\n"); float a,b,c,x1,x2; scanf("%f,%f,%f",&a,&b,&c); float delte = b*b-4*a*c; if(delte>1e-6||fabs(delte)<=1e-6){ x1 = -b/(2*a)+pow(delte,0.5)/(2*a); x2 = -b/(2*a)-pow(delte,0.5)/(2*a); printf( "x1=%7.4f, x2=%7.4f\n",x1,x2); } else{ printf("error!\n"); } return 0; }
27、判断一个整型数据有几位v2.0
#include <stdio.h> #include <stdlib.h> int main() { printf("Please enter the number:\n"); int x,cnt=0; int num[10]={0}; scanf("%d",&x); int t = x; t = abs(t); while(t){ num[t%10]++; t /=10; cnt++; } printf("%d: %d bits\n",x,cnt); for(int i=0;i<10;i++){ if(num[i]>0){ printf("%d: %d\n",i,num[i]); } } return 0; }
28、奖金计算
#include <stdio.h> #include <stdlib.h> int main() { long profits,bonus; scanf("%ld",&profits); int bonus1,bonus2,bonus3,bonus4,bonus5; bonus1 = 100000*0.1; bonus2 = bonus1 + (200000-100000)*0.075; bonus3 = bonus2 + (400000-200000)*0.05; bonus4 = bonus3 + (600000-400000)*0.03; bonus5 = bonus4 + (1000000-600000)*0.015; if(profits<=100000){ bonus = profits*0.1; } else if(profits<=200000){ bonus = bonus1 + (profits-100000)*0.075; } else if(profits<=400000){ bonus = bonus2 + (profits-200000)*0.05; } else if(profits<=600000){ bonus = bonus3 + (profits-400000)*0.03; } else if(profits<=1000000){ bonus = bonus4 + (profits-600000)*0.015; } else{ bonus = bonus5 + (profits-1000000)*0.01; } printf("bonus=%ld\n",bonus); return 0; }
29、程序修改—1
#include <stdio.h> int main() { int i, j, sum = 0, n=100; scanf("%d",&n); for (i=0,j=n; i<=j; i++,j--) { sum = sum + i + j; } printf( "sum = %d" , sum); return 0; }
30、程序修改—2
#include <stdio.h> int main() { int sum = 0, m; printf( "Input m:\n"); scanf("%d", &m); while (m != 0){ sum = sum + m; printf( "sum = %d\n", sum); printf( "Input m:\n"); scanf("%d", &m); } return 0; }
31、程序改错-1
#include <stdio.h> int main() { int x, y, z; for (x=0; x<=20; x++) { for (y=0; y<=33; y++) { z = 100 - x - y; if (z%3==0&&5*x + 3*y + z/3 == 100) { printf("x=%d, y=%d, z=%d\n", x, y, z); } } } return 0; }
32、程序改错-2
#include <stdio.h> #include <math.h> int main() { int n, i; printf("Input n:\n"); scanf("%d", &n); int flag = 1; if(n<=1){ flag = 0; goto EXIT; } for (i=2; i<=sqrt(n); i++) { if (n % i == 0) { flag = 0; break; } } EXIT: if(flag){ printf("Yes!\n"); } else { printf("No!\n"); } return 0; }
33、程序改错-3
#include <stdio.h> int main() { int x1, x2; int n; do{ printf("Input x1, x2:\n"); if((n=scanf( "%d,%d", &x1, &x2))!=2){ while(getchar()!='\n'); } }while (x1 * x2 >= 0||n!=2); printf( "x1=%d,x2=%d\n", x1, x2); return 0; }
34、猴子吃桃程序_扩展1
#include <stdio.h> int main() { printf("Input days:\n"); int days,x=1; scanf("%d",&days); while(--days){ x = 2*(x+1); } printf("x=%d\n",x); return 0; }
35、猴子吃桃程序_扩展2
#include <stdio.h> int main() { int days,x=1,n=0; do{ printf("Input days:\n"); if((n=scanf("%d",&days))==0){ while(getchar()!='\n'); } }while(n==0||days<1); while(--days){ x = 2*(x+1); } printf("x=%d\n",x); return 0; }
36、6位密码输入检测
#include <stdio.h> int main() { printf("Input your password:\n"); char ch; int n = 6,cnt=0; while(n){ scanf("%c",&ch); if(ch>='0'&&ch<='9'){ n--; cnt++; printf("%c, you have enter %d-bits number\n",ch,cnt); } else{ printf("error\n"); } getchar(); } return 0; }
37、判断一个整型数据有几位v1.0
#include <stdio.h> int main() { printf("Please enter the number:\n"); int x,n; scanf("%d",&n); int cnt=0; x=n; while(x--){ x/=10; cnt++; } printf("%d: %d bits\n",n,cnt); return 0; }
38、检测输入数据中奇数和偶数的个数
#include <stdio.h> #include <stdlib.h> int main() { printf("Please enter the number:\n"); int x,totalOdd=0,totalEven=0; scanf( "%d",&x); if(x==-1){ printf("over!\n"); } while(x!=-1){ if(x%2==0){ printf("%d:even\n",x); totalEven++; } else{ printf("%d:odd\n",x); totalOdd++; } scanf( "%d",&x); } printf("The total number of odd is %d\n",totalOdd); printf("The total number of even is %d\n",totalEven); return 0; }
39、计算球的反弹高度
#include <stdio.h> #include <stdlib.h> int main() { printf("Input:\n"); int n,times=1; float length=100,heigh=100/2; scanf("%d",&n); while(--n){ length +=heigh*2; heigh /=2; times++; } printf("%d times:\n",times); printf("%.3f\n",length); printf("%.3f\n",heigh); return 0; }
40、绘制金字塔
/*绘制金字塔*/ #include <stdio.h> #include <stdlib.h> void PrintChar(char letter){ int line=0; for(;line<=letter-'A';line++)/**< 逐行打印 */ { //1.输出一行"-" for(int i=0;i<=letter-'A'-line;i++){ printf(" "); } //2.升序输出字母 char ch='A'; for(;ch<=('A'+line);ch++){ printf("%c",ch); } //3.降序输出字母 ch-=2; while(ch!='A'-1){ printf("%c",ch--); } //4. printf("\n"); } } int main() { printf("Please input a capital:\n"); char letter; scanf("%c",&letter); PrintChar(letter); return 0; }
41、循环嵌套的应用
#include <stdio.h> #include <stdlib.h> int main() { int line=0; for(;line<='F'-'A';line++)/**< 逐行打印 */ { char ch='F'; for(int i=0;i<=line;++i){/**< 每行打印字母数 */ printf("%c",ch--); } printf("\n"); } return 0; }
42、利用泰勒级数计算sinx的值
#include<stdio.h> #include<math.h> int main() { int n=1,count=1; float x; double sum,term; printf("Input x:\n"); scanf("%f",&x); sum = x; term = x; do{ term = -term * x *x/((n+1)*(n+2)); sum += term; n+=2; count++; }while(fabs(term)>=1e-5); printf("sin(x)=%.3f,count=%d\n",sum,count); return 0; }
43、计算100~200之间的所有素数之和
#include <stdio.h> #include <stdlib.h> #include <math.h> int fun(int m); int main() { int sum =0; for(int i=100;i<=200;++i){ if(fun(i)){ sum +=i; } } printf( "sum=%d\n",sum); return 0; } int fun(int m){ for(int i=2;i<=sqrt(m);++i){ if(m%i==0){ return 0; } } return 1; }
44、编程实现一个输入指定范围内的整数的函数
#include <stdio.h> #include <stdlib.h> #include <math.h> int getint(int min, int max); int main() { printf("Please enter min,max:\n"); int min,max; scanf("%d,%d",&min,&max); printf("The integer you have entered is:%d\n",getint(min,max)); return 0; } int getint(int min, int max) { int x; do{ printf("Please enter an integer [%d..%d]:\n",min,max); scanf("%d",&x); }while(x<min||x>max); return x; }
45、程序改错v2.0
#include<stdio.h> int main() { int score; char grade; printf("Please input score:\n"); while(0==scanf("%d", &score) ||score < 0 || score > 100) { printf("Input error!\n"); printf("Please input score:\n"); getchar(); } if (score >= 90) grade = 'A'; else if (score >= 80) grade = 'B'; else if (score >= 70) grade = 'C'; else if (score >= 60) grade = 'D'; else grade = 'E'; printf("grade: %c\n", grade); return 0; }
46、编程计算a+aa+aaa+…+aa…a(n个a)的值
#include<stdio.h> int main() { printf ("Input a,n:\n"); int n,a; scanf ("%d,%d",&a,&n); long sum=0; int aa=0; while (n--){ aa=aa*10+a; sum+=aa; } printf("sum=%ld\n",sum); return 0; }
47、搬砖问题
#include<stdio.h> int main() { printf( "Input n(27<n<=77):\n"); int n; scanf("%d",&n); int i,j,k; for(i=0;i<=77/4;++i){ for(j=0;j<=77/3;++j){ k = 36-i-j; if(k%2==0&&i*4+j*3+k/2==n){ printf("men=%d,women=%d,children=%d\n",i,j,k); } } } return 0; }
48、编程输出某年某月有多少天(考虑到闰年)
#include<stdio.h> int main() { printf("Input year,month:\n"); int year,month; scanf("%d,%d",&year,&month); int flag = 0; if(year%4==0&&year%100!=0||year%400==0){ flag = 1; } switch(month){ case 1: printf("31 days\n"); break; case 2: if(flag){ printf("29 days\n"); } else{ printf("28 days\n"); } break; case 3: printf("31 days\n"); break; case 4: printf("30 days\n"); break; case 5: printf("31 days\n"); break; case 6: printf("30 days\n"); break; case 7: case 8: printf("31 days\n"); break; case 9: printf("30 days\n"); break; case 10: printf("31 days\n"); break; case 11: printf("30 days\n"); break; case 12: printf("31 days\n"); default: printf("Input error!\n"); } return 0; }
49、谐均值计算
#include <stdio.h> #include <stdlib.h> #include <math.h> double Calculate(double x,double y); int main() { printf("Input two doubles:\n"); double x,y; scanf("%lf%lf",&x,&y); printf("1/((1/x+1/y)/2) = %0.3f\n",Calculate(x,y)); return 0; } double Calculate(double x,double y){ return 1/((1/x+1/y)/2); }
50、输出指定行列数的字符
#include <stdio.h> #include <stdlib.h> #include <math.h> void Chline(char ch, int column, int row); int main() { printf("input a char:\n"); char ch; scanf("%c",&ch); printf("input column and row:\n"); int column,row; scanf("%d%d",&column,&row); Chline(ch,column,row); return 0; } void Chline(char ch, int column, int row){ while(row--){ for(int i=0;i<column;++i){ printf("%c",ch); } printf("\n"); } }
51、魔术师猜数
#include <stdio.h> #include <stdlib.h> #include <math.h> int Magic(int m); int main() { int n; scanf("%d",&n); int number = Magic(n); if(-1 == number){ printf("The sum you calculated is wrong!\n"); } else{ printf("The number is %d\n",number); } return 0; } int Magic(int m){ int a,b,c; for(a=1;a<=9;++a){ for(b=0;b<=9;++b){ for(c=0;c<=9;++c){ if((a+2*b+2*c)*100 + (2*a+b+2*c)*10 + 2*a+2*b+c==m) { return a*100+b*10+c; } } } } return -1; }
52、计算礼炮声响次数
#include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int count=0; for(int i=5;i<=7*21;++i){ if(i%5==0&&i%6==0&&i<=105)count++; if(i%5==0&&i%7==0&&i<=105)count++; if(i%6==0&&i%7==0&&i<=126)count++; if(i%5==0&&i%6==0&&i%7==0&&i<=105)count+=2; } printf("n=%d",21*3-count); return 0; }
53、水手分椰子
#include<stdio.h> #include<stdlib.h> #include <math.h> int coco(int t,int x,int n); int main() { printf("Input n(1<n<=5):\n"); int n; scanf("%d",&n); if(n<=1||n>5){ printf("Error!\n"); return 0; } int t = n; /**< n为 "n等分" ,程序中值不变,t为水手数 */ int x = 1; /**< x 为一个等分 假定初始值1 */ int y = coco(t,x,n);/**< 从最后,前推上次留下来的椰子 */ while(y == -1){/**< 一旦上次留下来的椰子在上次不能等分 那么,假设最后一次等分值x不正确,++ */ x++; t = n; /**< 重新定义等分值 还原t */ y = coco(t,x,n);/**< 再次计算上次留下来的椰子数 */ } printf("y=%d\n",y); return 0; } int coco(int t,int x,int n) { if(t == 1){/**< 尾递归,第1个水手,直接返回*/ return x*n+1; } else{ if((x*n+1)%(n-1)!=0){/**< 上次留下来的椰子在上次是否可以等分 即(x*n+1)为(n-1)整除 否则x的初值需要改变*/ return -1; } else{ return coco(t-1,(x*n+1)/(n-1),n); } } }
54、递归法计算游戏人员的年龄
#include <stdio.h> #include <stdlib.h> #include <math.h> unsigned int ComputeAge(unsigned int n); int main() { unsigned int n; scanf("%u",&n); printf( "The person's age is %u\n",ComputeAge(n)); return 0; } unsigned int ComputeAge(unsigned int n){ if(n==1){ return 10; } else{ return 2 + ComputeAge(n-1); } }
55、递归法计算两个数的最大公约数
#include <stdio.h> #include <stdlib.h> #include <math.h> int Gcd(int a, int b); int main() { printf("Input a,b:"); int a,b; scanf("%d,%d",&a,&b); if(a<=0||b<=0){ printf("Input error!\n"); } else{ printf("%d\n",Gcd(a,b)); } return 0; } int Gcd(int a, int b){ if(a==b){ return a; } else if(a>b){ return Gcd(a-b,b); } else{ return Gcd(a,b-a); } }
56、寻找中位数v1.0
#include <stdio.h> #include <stdlib.h> #include <math.h> int mid(int a, int b, int c); int main() { int a,b,c; scanf("%d%d%d",&a,&b,&c); printf("The result is %d\n",mid(a,b,c)); return 0; } int mid(int a, int b, int c){ if (a>b&&a<c||a>c&&a<b)return a; else if (b>a&&b<c||b>c&&b<a)return b; else return c; }
57、还原算术表达式
#include <stdio.h> #include <stdlib.h> #include <math.h> int main() { printf("Input n(n<1000):\n"); int n; scanf("%d",&n); int flag = 1; for(int x=1;x<=9;++x){ for(int y=1;y<=9;++y){ for(int z=0;z<=9;++z){ if(2*z+10*(y+z)+100*(x+y)==n){ printf("X=%d,Y=%d,Z=%d\n",x,y,z); flag = 0; } } } } if(flag){ printf("Invalid\n"); } return 0; }
58、三天打渔两天晒网
#include<stdio.h> int inputdate(); int main() { int n = inputdate(); if(-1==n){ printf("Invalid input"); } else if(n%5==0||n%5==4){ printf("He is having a rest"); } else{ printf("He is working"); } return 0; } int inputdate() { int year,month,day; int n = scanf("%4d-%2d-%2d",&year,&month,&day); if(3 != n||year<1990||month>12||month<=0||day>31||day<=0){ return -1; } int date[2][12]={{31,28,31,30,31,30,31,31,30,31,30,31}, {31,29,31,30,31,30,31,31,30,31,30,31}}; int sum = 0, flag =(year%4==0&&year%100!=0)||(year%400==0); for(int i=0;i<month-1;++i){ sum +=date[flag][i]; } return sum+day; }
59、统计用户输入
#include<stdio.h> int main() { int space = 0,newline=0,others=0; printf("Please input a string end by #:\n"); char ch; do{ ch = getchar(); if(ch==' ') space++; else if(ch=='\n') newline++; else if(ch!='#') others++; }while(ch!='#'); printf( "space: %d,newline: %d,others: %d\n",space,newline,others); return 0; }
60、统计正整数中指定数字的个数
#include<stdio.h> int main() { printf("Input m,n:\n"); int m,n; scanf("%d,%d",&m,&n); int count = 0; while(m){ if(m%10==n){ count++; } m/=10; } printf( "%d\n",count); return 0; }
61、玫瑰花数
#include<stdio.h> #include <math.h> int main() { for(int i=1000;i<=9999;++i){ int n1=i/1000,n2=i/100%10,n3=i%100/10,n4=i%10; // if(i==(int)pow(n1,4)+(int)pow(n2,4) // +(int)pow(n3,4)+(int)pow(n4,4)){ // printf("%d\n",i); // } if(i==n1*n1*n1*n1+n2*n2*n2*n2+n3*n3*n3*n3+n4*n4*n4*n4) printf("%d\n",i); } return 0; }
62、四位反序数
#include<stdio.h> #include <math.h> int main() { for(int i=1000;i<=9999;++i){ int n = i,number=0; while(n){ number =number*10+n%10; n/=10; } if(i*9==number){ printf("%d\n",i); } } return 0; }
63、8除不尽的自然数
#include<stdio.h> #include <math.h> int main() { for(int x = 8*64;;++x){ if(x%8==1&&(x/8)%8==1&&(x/8/8)%8==7 &&(x/8/8/8)*2==(x/17/17)&&x%17==4&&(x/17)%17==15) { printf("%d\n",x); break; } } return 0; }
64、矩阵转置v1.0
#include<stdio.h> #include <math.h> int main() { printf("Input n:"); int n; scanf("%d",&n); int array[n][n]; printf("Input %d*%d matrix:\n",n,n); for(int i=0;i<n;++i){ for(int j=0;j<n;++j){ scanf("%d",&array[i][j]); } } for(int i=0;i<n-1;++i){ for(int j=i+1;j<n;++j){ int temp = array[i][j]; array[i][j]=array[j][i]; array[j][i]=temp; } } printf("The transposed matrix is:\n"); for(int i=0;i<n;++i){ for(int j=0;j<n;++j){ printf("%4d",array[i][j]); } printf("\n"); } return 0; }
65、兔子生崽问题
//兔子生崽问题 #include <stdio.h> int rabbit (int n); int main() { printf ("Input n(n<=12):\n"); int n; scanf ("%d",&n); for (int i=1;i<=n;i++){ printf ("%4d",rabbit(i)); } printf ("\nTotal=%d\n",rabbit(n)); return 0; } int rabbit (int n){ if (n==0||n==1){ return 1; } else { return rabbit(n-1)+rabbit(n-2); } }
66、抓交通肇事犯
#include <stdio.h> int main() { int m,k; for (int i=0;i<=9;i++){ for (int j=0;j<=9;j++){ k=1000*i + 100*i + 10*j + j; for (m=32;m*m<=9999;m++){ if (k==m*m){ printf ("k=%d,m=%d\n",k,m); } } } } return 0; }
67、检验并打印幻方矩阵
#include <stdio.h> #define N 5 void input_square (int a[][N]); int row_sum(int a[][N],int b[],int index); int column_sum(int a[][N],int b[],int index); int diagonal_sum(int a[][N],int b[],int index); int back_diagonal_sum(int a[][N],int b[],int index); int judge_square (int a[][N],int b[]); void print (int a[][N]); int main() { int a[N][N]={0}; int b[2*(N+1)]={0}; input_square (a); if (judge_square (a,b)){ printf ("It is not a magic square!\n"); } else { printf ("It is a magic square!\n"); print (a); } return 0; } /**< 输入矩阵 */ void input_square (int a[][N]){ for (int i=0;i<N;i++){ for (int j=0;j<N;j++){ scanf ("%d",&a[i][j]); } } } /**< 行元素和 */ int row_sum(int a[][N],int b[],int index){ int sum = 0; for (int i=0;i<N;i++){ for (int j=0;j<N;j++){ sum += a[i][j]; } b[index++]=sum; sum = 0; } return index; } /**< 列元素和 */ int column_sum(int a[][N],int b[],int index){ int sum = 0; for (int i=0;i<N;i++){ for (int j=0;j<N;j++){ sum += a[j][i]; } b[index++]=sum; sum = 0; } return index; } /**< 对角线之和 */ int diagonal_sum(int a[][N],int b[],int index){ int i = 0,sum = 0; while(i<N){ sum += a[i][i]; i++; } b[index++]=sum; return index; } /**< 反对角线之和 */ int back_diagonal_sum(int a[][N],int b[],int index){ int i = N-1,j = 0,sum = 0; while(j<N){ sum += a[i--][j++]; } b[index++]=sum; return index; } /**< 判断矩阵 */ int judge_square (int a[][N],int b[]){ int index = 0; index = row_sum(a,b,index); index = column_sum(a,b,index); index = diagonal_sum(a,b,index); index = back_diagonal_sum(a,b,index); for (int i=0;(i+1)<2*(N+1);i++){ if (b[i]!=b[i+1]){ return 1; } } return 0; } /**< 打印矩阵 */ void print (int a[][N]){ for (int i=0;i<N;i++){ for (int j=0;j<N;j++){ printf ("%4d",a[i][j]); } printf ("\n"); } }
68、二分法求根
#include<stdio.h> #include<math.h> #define EPS 1e-6 float Root(float x) { return x*x*x - x - 1; } int main() { float min,max,mid; scanf("%f,%f",&min,&max); do{ mid=(max+min)/2.0; if( Root(mid) > EPS) max = mid; if( Root(mid) < EPS) min = mid; }while(fabs( Root(mid) ) > EPS); printf("x=%6.2f\n",mid); return 0; }
69、矩阵转置
#include <stdio.h> #define N 5 int main() { int array[N][N]={0}; int n; scanf("%d",&n); printf("The original matrix is:\n"); for(int i=0;i<n;++i){ for(int j=0;j<n;++j){ array[i][j] = i * n + j + 1; printf("%3d",array[i][j]); } printf("\n"); } for(int i=0;i<n;++i){ for(int j=0;j<i;++j){ int temp = array[i][j]; array[i][j] = array[j][i]; array[j][i] = temp; } } printf("The changed matrix is:\n"); for(int i=0;i<n;++i){ for(int j=0;j<n;++j){ printf("%3d",array[i][j]); } printf("\n"); } return 0; }
70、程序改错
#include <stdio.h> #define ARR_SIZE 10 void MaxMinExchang(int *a, int n); int main() { int a[ARR_SIZE], i, n; printf("Input n(n<=10):\n"); scanf("%d", &n); printf("Input %d Numbers:\n", n); for (i=0; i<n; i++) { scanf("%d", &a[i]); } MaxMinExchang(a, n); printf("After MaxMinExchange:\n"); for (i=0; i<n; i++) { printf("%d ", a[i]); } printf("\n"); return 0; } void MaxMinExchang(int *a, int n) { int maxValue = a[0], minValue = a[0], maxPos=0, minPos=0; int i, temp; for (i=0; i<n; i++) { if (a[i] > maxValue) { maxValue = a[i]; maxPos = i; } if (a[i] < minValue) { minValue = a[i]; minPos = i; } } temp = a[maxPos]; a[maxPos] = a[minPos]; a[minPos] = temp; }
71、蛇形矩阵
#include <stdio.h> #define N 100 int main() { int a[N][N]={0}; printf("Input n:\n"); int n; if(1 != scanf("%d",&n)||n>100||n<=0){ printf("Input error!\n"); return 0; } int i,j,k,sum; for (i=1;i<=n;i++) for (j=1;j<=n+1-i;j++) { k=i+j-2; sum=(k+1)*k/2; if (k%2)//如果前面的对角线个数是奇数 a[i][j]=sum+i; else a[i][j]=sum+j; } for (i=1;i<=n;i++) for (j=n-i+2;j<=n;j++) a[i][j]=n*n+1-a[n+1-i][n+1-j]; for (i=1;i<=n;i++) { for (j=1;j<=n;j++) printf("%4d",a[i][j]); printf("\n"); } return 0; }
72、亲密数_1
#include <stdio.h> int sum(int num){ int sum = 0; for(int i=1;i<num;++i){ if(num%i==0){ sum+=i; } } return sum; } int main() { printf("Input m, n:\n"); int m,n; scanf("%d,%d",&m,&n); if(sum(m)==n&&sum(n)==m){ printf("Yes!\n"); } else{ printf( "No!\n"); } return 0; }
73、亲密数_2
#include <stdio.h> #include <stdlib.h> int sum(int num){ int sum = 0; for(int i=1;i<num;++i){ if(num%i==0){ sum+=i; } } return sum; } int main() { printf("Input n:\n"); int n; scanf("%d",&n); for(int A=2; A<n; A++) { int B = sum(A); if(A<B&&A==sum(B)) { printf("(%d,%d)\n",A,B); } } return 0; }
74、完全数
#include <stdio.h> #include <stdlib.h> #define N 100 int main() { printf("Input m:\n"); int m; scanf("%d",&m); int a[100] = {0},cnt = 0; int sum = 0; for(int i=1;i<m;++i){ if(m%i==0){ sum += i; a[cnt++] = i; } } if(sum==m){ printf("Yes!\n"); for(int j=0;j<cnt;++j){ if(j!=0){ printf(","); } printf("%d",a[j]); } } else{ printf("No!\n"); } return 0; }
75、回文素数
#include <stdio.h> #include <stdlib.h> #include <math.h> #define N 1000 int isPrime(int n){ for(int i=2;i<sqrt(n);++i) { if(n%i==0)return 0; } return 1; } int main() { printf("Input n:\n"); int n; scanf("%d",&n); int a[N] = {0}; int i,count = 0; for(int j=11;j<n;j++){ if(isPrime(j)){ a[count++] = j; } } int cnt=0; for(i=0;i<count;i++){ int t = a[i],sum = 0; while(t){ sum = sum*10 + t%10; t /= 10; } if(sum==a[i]){ if(cnt!=2) //! printf("%4d",sum); cnt++; } } if(cnt>1)cnt--; // ! printf("\ncount=%d\n",cnt); return 0; }
76、梅森尼数
#include <stdio.h> int isPrime(double x){ for(long j=3;j<sqrt(x)+1;j+=2) if(x/j == (int)(x/j)) { return 0; } return 1; } void f(int n){ double sum =2;int count=0; for(int i=2;i<n;++i){ sum *= 2; if(isPrime(sum -1)){ printf("2^%d-1=%.0f\n",i,sum-1); count++; } } printf( "count=%d\n",count); } int main() { printf("Input n:\n"); int n; scanf("%d",&n); f(n); return 0; }
77、工资统计
#include<stdio.h> void Input(float wage[], int n); float Compute(float wage[], int n, float *pmaxwage, float *pminwage); int main() { float wage[50],maxwage,minwage,avewage; int n; printf("Please input n:\n"); scanf("%d",&n); Input(wage,n); avewage=Compute(wage,n,&maxwage,&minwage); printf("maxwage=%.2f, minwage=%.2f, avewage=%.2f\n",maxwage,minwage,avewage); return 0; } void Input(float wage[], int n) { for(int i=0;i<n;++i){ scanf("%f",&wage[i]); } } float Compute(float wage[], int n, float *pmaxwage, float *pminwage) { *pmaxwage = *pminwage = wage[0]; float sum = wage[0]; for(int i=1;i<n;++i){ sum +=wage[i]; if(wage[i]>*pmaxwage){ *pmaxwage = wage[i]; } if(wage[i]<*pminwage){ *pminwage = wage[i]; } } return sum/n; }
78、有趣的“回文”检测
#include <stdio.h> #include <string.h> #define N 100 int isPalindrome(char a[]){ char *pStart = a ,*pEnd = a + strlen(a)-1; while(pStart<=pEnd){ if(*pStart!=*pEnd){ return 0; } pStart++,pEnd--; } return 1; } int main() { printf("Input string:"); char a[N]=""; gets(a); if(isPalindrome(a)){ printf("Yes!\n"); } else{ printf("No!\n"); } return 0; }
79、学生成绩管理系统V1.0
#include <stdio.h> #include <stdlib.h> #include <math.h> /**< 定义结构 */ #define STU_NUM 100 typedef struct stu STUDENT; struct stu { long num; float score; }; STUDENT student[100]; /**< 函数声明 */ int Menu(); void InputRecord(int n); void TotalAverageScore(int n); void SortRecord(int n, int (*f)(STUDENT,STUDENT)); int DescendingScore(STUDENT x,STUDENT y); int AscendingNumber(STUDENT x,STUDENT y); void SearchByNumber(int n); int BinSearch(int n,STUDENT x,int (*f)(STUDENT,STUDENT)); int CompareNumber(STUDENT x,STUDENT y); int CompareScore(STUDENT x,STUDENT y); void StatisticAnalysis(int n); void ListRecord(int n); /**< 主函数 */ int main() { /**< 输入人数 */ printf("Input student number(n<30):\n"); int n; scanf("%d",&n); /**< 菜单选项 */ int choice; do{ choice= Menu(); switch(choice) { case 0:printf("End of program!\n");break; case 1:InputRecord(n);break; case 2:TotalAverageScore(n);break; case 3:printf("Sort in descending order by score:\n"); SortRecord(n,DescendingScore); ListRecord(n);break; case 4:printf("Sort in ascending order by number:\n"); SortRecord(n,AscendingNumber); ListRecord(n);break; case 5:SortRecord(n,AscendingNumber); SearchByNumber(n); break; case 6:StatisticAnalysis(n);break; case 7:ListRecord(n);break; default:printf("Input error!\n"); } }while(choice!=0); return 0; } /**< 菜单 */ int Menu() { printf("Management for Students' scores\n"); printf("1.Input record\n"); printf("2.Caculate total and average score of course\n"); printf("3.Sort in descending order by score\n"); printf("4.Sort in ascending order by number\n"); printf("5.Search by number\n"); printf("6.Statistic analysis\n"); printf("7.List record\n"); printf("0.Exit\n"); printf("Please Input your choice:\n"); int choice; scanf("%d",&choice); return choice; } /**< 1.输入数据 */ void InputRecord(int n) { printf("Input student's ID, name and score:\n"); for(int i=0; i<n; ++i){ scanf("%ld%f",&student[i].num,&student[i].score); } } /**< 2.计算总分 平均分*/ void TotalAverageScore(int n) { float sum = 0.0; for(int i=0; i<n; ++i){ sum += student[i].score; } printf("sum=%.0f,aver=%.2f\n",sum,sum/n); } /**< 3.4.排序(交换法) */ void SortRecord(int n, int (*f)(STUDENT,STUDENT)) { for(int i=0; i<n-1; ++i){ for(int j=i+1; j<n;++j){ if((*f)(student[i],student[j])){ STUDENT temp = student[i]; student[i] = student[j]; student[j] = temp; } } } } /**< 按成绩升序 */ int DescendingScore(STUDENT x,STUDENT y) { return x.score<y.score; } /**< 按ID降序 */ int AscendingNumber(STUDENT x,STUDENT y) { return x.num>y.num; } /**< 5.按学号查找 */ void SearchByNumber(int n) { printf("Input the number you want to search:\n"); STUDENT x; scanf("%ld",&x.num); int index = BinSearch(n,x,CompareNumber); if(index==-1){ printf("Not found!\n"); } else{ printf("%ld\t%.0f\n",student[index].num,student[index].score); } } /**< 二分查找(排序) */ int BinSearch(int n,STUDENT x,int (*f)(STUDENT,STUDENT)) { int low = 0, heigh = n-1, mid; while(low<=heigh) { mid = (low+heigh)/2; int compare = (*f)(x,student[mid]); if(compare==1){ low = mid + 1; } else if(compare==-1){ heigh = mid - 1; } else{ return mid; } } return -1; } /**< 按学号比较 */ int CompareNumber(STUDENT x,STUDENT y) { if(x.num>y.num) return 1; if(x.num<y.num) return -1; if(x.num==y.num) return 0; } /**< 按分数比较 */ int CompareScore(STUDENT x,STUDENT y) { if(x.score>y.score) return 1; if(x.score<y.score) return -1; if(fabs(x.score-y.score)<=1e-6) return 0; } /**< 6.统计占比 */ void StatisticAnalysis(int n) { int grade[6]={0}; for(int i=0;i<n;++i){ if(student[i].score<60) grade[0]++; else if(student[i].score<70) grade[1]++; else if(student[i].score<80) grade[2]++; else if(student[i].score<90) grade[3]++; else if(student[i].score<100) grade[4]++; else if(student[i].score==100) grade[5]++; } float percent[6]={0}; int j; for(j=0;j<6;++j){ percent[j] = grade[j]*100.0/n; } int k=60;j = 0; printf("<60\t%d\t%.2f%%\n",grade[j],percent[j]); for(j=1;k<100;k+=10,j++){ printf("%d-%d\t%d\t%.2f%%\n",k,k+9,grade[j],percent[j]); } printf("%d\t%d\t%.2f%%\n",k,grade[j],percent[j]); } /**< 7.输出数据 */ void ListRecord(int n) { for(int i=0; i<n; ++i){ printf("%ld\t%.0f\n",student[i].num,student[i].score); } }
80、程序改错——1
#include <stdio.h> #include <string.h> #define N 100 //1. char* MyStrcat(char *dest, char *source);//2. int main(void) { char first[2*N+1]="", second[N]="", *result = NULL;//3. printf("Input the first string:\n"); gets(first); printf("Input the second string:\n"); gets(second); result = MyStrcat(first, second); printf("The result is : %s\n", result); return 0; } char* MyStrcat(char *dest, char *source) { int i = 0; while (*(dest+i)!='\0') i++; for (int j=0; *(source+j)!='\0'; i++,j++)//4. { *(dest+i) = *(source+j); } return dest; }
81、程序改错——2
#include<stdio.h> #define ARR_SIZE 5 void YH(int a[][ARR_SIZE], int n); void PrintYH(int a[][ARR_SIZE], int n); int main(void) { int a[ARR_SIZE][ARR_SIZE]; YH(a, ARR_SIZE-1); //! PrintYH(a, ARR_SIZE); return 0; } void YH(int a[][ARR_SIZE], int n) { int i, j ; for (i=1; i<=n; i++) { a[i][1] = 1; a[i][i] = 1; } for (i=3; i<=n; i++) { for (j=2; j<=i-1; j++) { a[i][j] = a[i-1][j-1] + a[i-1][j]; } } } void PrintYH(int a[][ARR_SIZE], int n) { int i , j ; for (i=1; i<n; i++) { for (j=1; j<=i; j++) { printf("%4d", a[i][j]); } printf("\n"); } }
82、出售金鱼
# include <stdio.h> int main() { int x = 11; int count = 5; x = (x*count+1)/(count-1); //printf("%d,%d\n",x,count); while(--count>=2) { x = (x*count+1)/(count-1); //printf("%d,%d\n",x,count); } printf("There are %d fishes at first.\n",x); return 0; }
83、找最值
#include<stdio.h> #include<string.h> int FindMax(int num[], int n, int *pMaxPos); int FindMin(int num[], int n, int *pMinPos); int main(void) { printf("Input 10 numbers:\n"); int a[10]={0}; for(int i=0;i<10;++i){ scanf("%d",&a[i]); } int maxPos = 0,minPos = 0; FindMax(a,10,&maxPos); FindMin(a,10,&minPos); printf("Max=%d,Position=%d,Min=%d,Position=%d\n", a[maxPos],maxPos,a[minPos],minPos); return 0; } int FindMax(int num[], int n, int *pMaxPos) { int max = num[*pMaxPos]; for(int i=*pMaxPos;i<n;++i){ if(num[i]>max){ max=num[i]; *pMaxPos=i; } } return *pMaxPos; } int FindMin(int num[], int n, int *pMinPos) { int min = num[*pMinPos]; for(int i=*pMinPos;i<n;++i){ if(num[i]<min){ min=num[i]; *pMinPos=i; } } return *pMinPos; }
84、杨辉三角形
#include<stdio.h> #define ARR_SIZE 10 void YH(int a[][ARR_SIZE], int n); void PrintYH(int a[][ARR_SIZE], int n); int main(void) { int a[ARR_SIZE][ARR_SIZE]; printf("Input n (n<=10):\n"); int n; scanf("%d",&n); YH(a, n+1); PrintYH(a, n+1); return 0; } void YH(int a[][ARR_SIZE], int n) { int i, j ; for (i=1; i<=n; i++) { a[i][1] = 1; a[i][i] = 1; } for (i=3; i<=n; i++) { for (j=2; j<=i-1; j++) { a[i][j] = a[i-1][j-1] + a[i-1][j]; } } } void PrintYH(int a[][ARR_SIZE], int n) { int i , j ; for (i=1; i<n; i++) { for (j=1; j<=i; j++) { printf("%4d", a[i][j]); } printf("\n"); } }
1 #include<stdio.h> 2 #define ARR_SIZE 20 3 void YH(int a[][ARR_SIZE], int n); 4 void PrintYH(int a[][ARR_SIZE], int n); 5 int main(void) 6 { 7 int a[ARR_SIZE][ARR_SIZE]; 8 printf("Input n (n<=10):\n"); 9 int n = 9; 10 //scanf("%d",&n); 11 YH(a, n); 12 PrintYH(a, n); 13 return 0; 14 } 15 void YH(int a[][ARR_SIZE], int n) 16 { 17 int i, j ; 18 for (i=0; i<n; i++) //n行 19 { 20 a[i][0] = a[i][i] = 1; //每行第一个及最后一个元素赋值1 21 } 22 for (i=0; i<n; i++) // n行 23 { //每行除了第0列和第n-1列 每个元素值是其上面行左边及同列的元素之和 24 for (j=1; j<i; j++) 25 { 26 a[i][j] = a[i-1][j-1] + a[i-1][j]; 27 } 28 } 29 } 30 void PrintYH(int a[][ARR_SIZE], int n) 31 { 32 int i , j ; 33 for (i=0; i<n; i++) 34 { 35 for (j=0; j<=i; j++) 36 { 37 printf("%4d", a[i][j]); 38 } 39 printf("\n"); 40 } 41 }
85、颠倒句子中的单词顺序
#include<stdio.h> #include<string.h> #define N 100 int Inverse(char str1[], char str2[][N]); int main(void) { printf("Input a sentence:"); char str1[N] = "", str2[N][N] = {0}; gets(str1); int ret = Inverse(str1, str2); for(int i=ret; i>0; --i){ printf("%s ", str2[i]); } printf("%s\n",str2[0]);/**< 因为处理了标点符号 */ return 0; } int Inverse(char str1[], char str2[][N]) { int i = 1, row = 0, column = 0;/**< 为了while里判断不越界 */ str2[row][column++] = str1[0]; while (str1[i]!='\0') { if (str1[i-1] != ' ' && str1[i] == ' ') { row++; /**<行++, 列置0 */ column = 0; } if(str1[i] != ' '){ str2[row][column++] = str1[i]; } i++; } str2[0][strlen(str2[0])] = str2[row][column-1]; /**< 对标点符号进行处理 */ str2[row][column-1] = '\0'; return row; }
86、找出按字典顺序排在最前面的国名
#include <stdio.h> #include <string.h> #define N 100 int main() { printf("Input five countries' names:\n"); char a[5][20]; for(int i=0; i<5; ++i){ gets(a[i]); } char *p = a[0]; for(int i=0; i<5; ++i){ if(strcmp(a[i],p)<0){ p = a[i]; } } printf("The minimum is:%s\n",p); return 0; }
87、学生成绩管理系统V2.0
#include <stdio.h> #include <stdlib.h> #include <math.h> /**< 定义结构 */ #define STU_NUM 100 typedef struct stu STUDENT; struct stu { long num; float score; }; STUDENT student[100]; /**< 函数声明 */ int Menu(); void InputRecord(int n); void TotalAverageScore(int n); void SortRecord(int n, int (*f)(STUDENT,STUDENT)); int DescendingScore(STUDENT x,STUDENT y); int AscendingScore(STUDENT x,STUDENT y); int AscendingNumber(STUDENT x,STUDENT y); void SearchByNumber(int n); int BinSearch(int n,STUDENT x,int (*f)(STUDENT,STUDENT)); int CompareNumber(STUDENT x,STUDENT y); int CompareScore(STUDENT x,STUDENT y); void StatisticAnalysis(int n); void ListRecord(int n); /**< 主函数 */ int main() { /**< 输入人数 */ printf("Input student number(n<30):\n"); int n; scanf("%d",&n); /**< 菜单选项 */ int choice; do{ choice= Menu(); switch(choice) { case 0:printf("End of program!\n");break; case 1:InputRecord(n);break; case 2:TotalAverageScore(n);break; case 3:printf("Sort in descending order by score:\n"); SortRecord(n,DescendingScore); ListRecord(n);break; case 4:printf("Sort in ascending order by score:\n"); SortRecord(n,AscendingScore); ListRecord(n);break; case 5:printf("Sort in ascending order by number:\n"); SortRecord(n,AscendingNumber); ListRecord(n);break; case 6:SortRecord(n,AscendingNumber); SearchByNumber(n); break; case 7:StatisticAnalysis(n);break; case 8:ListRecord(n);break; default:printf("Input error!\n"); } }while(choice!=0); return 0; } /**< 菜单 */ int Menu() { printf("Management for Students' scores\n"); printf("1.Input record\n"); printf("2.Caculate total and average score of course\n"); printf("3.Sort in descending order by score\n"); printf("4.Sort in ascending order by score\n"); printf("5.Sort in ascending order by number\n"); printf("6.Search by number\n"); printf("7.Statistic analysis\n"); printf("8.List record\n"); printf("0.Exit\n"); printf("Please Input your choice:\n"); int choice; scanf("%d",&choice); return choice; } /**< 1.输入数据 */ void InputRecord(int n) { printf("Input student's ID and score:\n"); for(int i=0; i<n; ++i){ scanf("%ld%f",&student[i].num,&student[i].score); } } /**< 2.计算总分 平均分*/ void TotalAverageScore(int n) { float sum = 0.0; for(int i=0; i<n; ++i){ sum += student[i].score; } printf("sum=%.0f,aver=%.2f\n",sum,sum/n); } /**< 3.4.5.排序(交换法) */ void SortRecord(int n, int (*f)(STUDENT,STUDENT)) { for(int i=0; i<n-1; ++i){ for(int j=i+1; j<n;++j){ if((*f)(student[i],student[j])){ STUDENT temp = student[i]; student[i] = student[j]; student[j] = temp; } } } } /**< 按成绩升序 */ int DescendingScore(STUDENT x,STUDENT y) { return x.score<y.score; } /**< 按成绩降序 */ int AscendingScore(STUDENT x,STUDENT y) { return x.score>y.score; } /**< 按ID降序 */ int AscendingNumber(STUDENT x,STUDENT y) { return x.num>y.num; } /**< 6.按学号查找 */ void SearchByNumber(int n) { printf("Input the number you want to search:\n"); STUDENT x; scanf("%ld",&x.num); int index = BinSearch(n,x,CompareNumber); if(index==-1){ printf("Not found!\n"); } else{ printf("%ld\t%.0f\n",student[index].num,student[index].score); } } /**< 二分查找(排序) */ int BinSearch(int n,STUDENT x,int (*f)(STUDENT,STUDENT)) { int low = 0, heigh = n-1, mid; while(low<=heigh) { mid = (low+heigh)/2; int compare = (*f)(x,student[mid]); if(compare==1){ low = mid + 1; } else if(compare==-1){ heigh = mid - 1; } else{ return mid; } } return -1; } /**< 按学号比较 */ int CompareNumber(STUDENT x,STUDENT y) { if(x.num>y.num) return 1; if(x.num<y.num) return -1; if(x.num==y.num) return 0; } /**< 按分数比较 */ int CompareScore(STUDENT x,STUDENT y) { if(x.score>y.score) return 1; if(x.score<y.score) return -1; if(fabs(x.score-y.score)<=1e-6) return 0; } /**< 7.统计占比 */ void StatisticAnalysis(int n) { int grade[6]={0}; for(int i=0;i<n;++i){ if(student[i].score<60) grade[0]++; else if(student[i].score<70) grade[1]++; else if(student[i].score<80) grade[2]++; else if(student[i].score<90) grade[3]++; else if(student[i].score<100) grade[4]++; else if(student[i].score==100) grade[5]++; } float percent[6]={0}; int j; for(j=0;j<6;++j){ percent[j] = grade[j]*100.0/n; } int k=60;j = 0; printf("<60\t%d\t%.2f%%\n",grade[j],percent[j]); for(j=1;k<100;k+=10,j++){ printf("%d-%d\t%d\t%.2f%%\n",k,k+9,grade[j],percent[j]); } printf("%d\t%d\t%.2f%%\n",k,grade[j],percent[j]); } /**< 8.输出数据 */ void ListRecord(int n) { for(int i=0; i<n; ++i){ printf("%ld\t%.0f\n",student[i].num,student[i].score); } }
88、月份表示
#include <stdio.h> #include <stdlib.h> #include <math.h> #define STU_NUM 100 int main() { char *month[] = {"Illegal month","January","February","March","April", "May","June","July","August","September","October", "November","December"}; printf("Input month number:\n"); int n; scanf("%d",&n); if(n>12||n<1){ printf("%s\n",month[0]); } else{ printf("month %d is %s\n",n,month[n]); } return 0; }
89、程序改错——1
#include <stdio.h> #define STUD 30 //最多可能的学生人数 #define COURSE 5 //最多可能的考试科目数 void Total(int *score, int sum[], float aver[], int m, int n); void Print(int *score, int sum[], float aver[], int m, int n); int main(void) { int i, j, m, n, score[STUD][COURSE], sum[STUD]; float aver[STUD]; printf("Enter the total number of students and courses:\n"); scanf("%d%d",&m,&n); printf("Enter score:\n"); for (i=0; i<m; i++) { for (j=0; j<n; j++) { scanf("%d", &score[i][j]); } } Total(*score, sum, aver, m, n); Print(*score, sum, aver, m, n); return 0; } void Total(int *score, int sum[], float aver[], int m, int n) { int i, j; for (i=0; i<m; i++) { sum[i] = 0; for (j=0; j<n; j++) { sum[i] = sum[i] + *(score + i * COURSE + j); } aver[i] = (float) sum[i] / n; } } void Print(int *score, int sum[], float aver[], int m, int n) { int i, j; printf("Result:\n"); for (i=0; i<m; i++) { for (j=0; j<n; j++) { printf("%4d", *(score + i * COURSE + j)); } printf("%5d%6.1f\n", sum[i], aver[i]); } }
90、程序改错——2
#include <stdio.h> #include <string.h> #define M 150 /* 最多的字符串个数 */ #define N 10 /* 字符串最大长度 */ void SortString(char *ptr[], int n); int main() { int i, n; char *pStr[M]; printf("How many countries?\n"); scanf("%d",&n); getchar(); /* 读走输入缓冲区中的回车符 */ printf("Input their names:\n"); char ch[M][N]; for (i=0; i<n; i++) { gets(ch[i]); /* 输入n个字符串 */ pStr[i] = ch[i]; } SortString(pStr, n); /* 字符串按字典顺序排序 */ printf("Sorted results:\n"); for (i=0; i<n; i++) { puts(pStr[i]); /* 输出排序后的n个字符串 */ } return 0; } void SortString(char *ptr[], int n) { int i, j; char *temp = NULL; for (i=0; i<n-1; i++) { for (j=i+1; j<n; j++) { if (strcmp(ptr[j], ptr[i]) < 0) { temp = ptr[i]; ptr[i] = ptr[j]; ptr[j] = temp; } } } }
91、找数组最值
#include <stdio.h> #include <string.h> #define N 100 void InputArray(int *p, int m, int n); int FindMax(int *p, int m, int n, int *pRow, int *pCol); int main() { printf("Input m,n:\n"); int m,n; scanf("%d,%d",&m,&n); printf( "Input %d*%d array:\n",m,n); int array[N][N] = {0}; InputArray(array[0],m,n); int row,col; int max = FindMax(array[0],m,n,&row,&col); printf("max=%d,row=%d,col=%d\n",max,row,col); return 0; } void InputArray(int *p, int m, int n) { for(int i=0; i<m; ++i){ for(int j=0; j<n; ++j){ scanf("%d",&p[i*N+j]); } } } int FindMax(int *p, int m, int n, int *pRow, int *pCol) { int max = p[0]; for(int i=0; i<m; ++i){ for(int j=0; j<n; ++j){ if(p[i*N+j]>max){ max = p[i*N+j]; *pRow = i; *pCol = j; } } } return max; }
92、冒泡排序
#include <stdio.h> #include <string.h> #define N 100 int main() { printf("Input n:"); int n; scanf("%d",&n); printf("Input %d numbers:",n); int a[N] = {0}; for(int i=0; i<n; ++i){ scanf("%d",&a[i]); } /**< 冒泡排序 */ for(int i=0;i<n; ++i){ for(int j=1; j<n-i; ++j){ if(a[j]<a[j-1]){ int temp = a[j-1]; a[j-1] = a[j]; a[j] = temp; } } } printf("Sorting results:"); for(int i=0; i<n; ++i){ printf("%4d",a[i]); } return 0; }
93、删除字符串中与某字符相同的字符
#include <stdio.h> #include <string.h> #define N 100 void DelChar(char a[],char b) { int i=0; for(; i<strlen(a); ++i){ if(a[i]==b){ while(a[i]){ a[i] = a[i+1]; ++i; } } } a[i] = '\0'; } int main() { printf( "Input a string:\n"); char a[N] = ""; gets(a); printf("Input a character:\n"); char b = getchar(); DelChar(a,b); printf("Results:%s\n",a); return 0; }
94、求最大数和最小数的最大公约数
#include <stdio.h> #include <string.h> #define N 100 int f(int a[],int *max,int *min); int gcd(int a,int b); int main() { printf("Input 10 numbers:\n"); int a[10] = {0}; for(int i=0; i<10; ++i){ scanf("%d",&a[i]); } int max,min; int gcd = f(a,&max,&min); printf("maxNum=%d\n",max); printf("minNum=%d\n",min); if(gcd){ printf("%d",gcd); } return 0; } int f(int a[],int *max,int *min) { *max = *min = a[0]; for(int i=0; i<10; ++i){ if(a[i]>*max) *max = a[i]; if(a[i]<*min) *min = a[i]; } if(*min==0){ return 0; } return gcd(*max,*min); } int gcd(int a,int b) { return b==0?a:gcd(b,a%b); }
95、数列合并
#include <stdio.h> #include <stdlib.h> #include <string.h> #define N 100 void BubbleSort(int a[],int n); void Merge(int a[], int b[], int c[], int m, int n); int main() { printf("Input m,n:"); int m,n; scanf("%d,%d",&m,&n); printf("Input array a:"); int a[N] = {0}; for(int i=0; i<m; ++i){ scanf("%d",&a[i]); } printf("Input array b:"); int b[N] = {0}; for(int j=0; j<n; ++j){ scanf("%d",&b[j]); } int c[2*N] = {0}; Merge(a,b,c,m,n); for(int i=0; i<m+n; ++i){ printf("%4d",c[i]); } return 0; } void Merge(int a[], int b[], int c[], int m, int n) { BubbleSort(a,m),BubbleSort(b,n); int *pa=a,*pb=b,i=0; while(*pa&&*pb){ if(*pa>*pb){ c[i++] = *pa++; } else if(*pa<*pb){ c[i++] = *pb++; } else{ c[i++] = *pa++; } } while(*pa&&!(*pb)){ c[i++] = *pa++; } while(*pb&&!(*pa)){ c[i++] = *pb++; } } void BubbleSort(int a[],int n) { for(int i=0;i<n; ++i){ for(int j=1; j<n-i; ++j){ if(a[j]>a[j-1]){ int temp = a[j-1]; a[j-1] = a[j]; a[j] = temp; } } } }
96、大奖赛现场统分
#include <stdio.h> #include <math.h> #define N 100 /**< 评分,评委编号及评分 */ typedef struct judscore{ int number; float score; }JUDSCORE; /**< 选手,选手编号、得分及平均分 */ typedef struct athletes{ int number; JUDSCORE judge[N]; float ave; }ATHLETES; /**< 评委,评委编号、评分误差及评价 */ typedef struct judValue{ int number; float score[N]; float ave; }JUDVALUE; int main() { printf("How many Athletes?\n");/**< 输入选手人数、评委人数 */ int n; scanf("%d",&n); printf("How many judges?\n"); int m; scanf("%d",&m); printf("Scores of Athletes:\n"); ATHLETES player[N]; /**< 选手及评委评分输入、计算平均分 */ for(int i=0; i<n; ++i) { printf("Athlete %d is playing.\n",i+1); printf("Please enter his number code:\n"); scanf("%d",&player[i].number); float min = 10, max = 0, sum = 0; for(int j=0; j<m; ++j) { printf("Judge %d gives score:\n",j+1); player[i].judge[j].number = j+1; scanf("%f",&player[i].judge[j].score); if(player[i].judge[j].score>max){ max = player[i].judge[j].score; } if(player[i].judge[j].score<min){ min = player[i].judge[j].score; } sum += player[i].judge[j].score; } printf("Delete a maximum score:%.1f\n",max); printf("Delete a minimum score:%.1f\n",min); player[i].ave = (sum-max-min)/(m-2); printf("The final score of Athlete %d is %.3f\n", player[i].number,player[i].ave); } /**< 选手按得分排序 */ printf("Order of Athletes:\n"); for(int i=0; i<n; ++i) { for(int j=1; j<n-i; ++j) { if(player[j-1].ave<player[j].ave){ ATHLETES temp = player[j-1]; player[j-1] = player[j]; player[j] = temp; } } } /**< 输出排序后的选手 */ printf("order\tfinal score\tnumber code\n"); for(int i=0; i<3; ++i){ printf("%5d\t%11.3f\t%6d\n",i+1,player[i].ave,player[i].number); } /**< 评委,评分误差、定量评价计算*/ JUDVALUE value[N]; for(int j=0; j<m; ++j){ float sum = 0; for(int i=0; i<n; ++i){ value[j].number = player[i].judge[j].number;/**<编号 */ float result = player[i].judge[j].score - player[i].ave;/**<误差 */ value[j].score[i] = result*result; sum += value[j].score[i];/**< 误差汇总 */ } value[j].ave = 10 -sqrt(sum/n) ;/**< 评价 */ } /**< 按评价评委排序 */ printf("Order of judges:\n"); for(int i=0; i<m; ++i) { for(int j=1; j<m-i; ++j) { if(value[j-1].ave<value[j].ave){ JUDVALUE temp = value[j-1]; value[j-1] = value[j]; value[j] = temp; } } } /**< 评委输出 */ printf("order\tfinal score\tnumber code\n"); for(int i=0; i<m; ++i){ printf("%5d\t%11.3f\t%6d\n",i+1,value[i].ave,value[i].number); } printf("Over!Thank you!\n"); return 0; }
97、学生成绩管理系统V3.0
/**< 第十二周练习区编程题2,学生成绩管理系统V3.0 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> /**< 定义结构 */ #define STU_NUM 100 #define NAME_SIZE 30 typedef struct stu STUDENT; struct stu { long num; char name[NAME_SIZE]; float score; }; STUDENT student[STU_NUM]; int Menu();/**< 菜单 */ void InputRecord(int n);/**< 录入学生信息 */ void TotalAverageScore(int n);/**< 总分平均分 */ void SortRecord(int n, int (*f)(STUDENT,STUDENT));/**< 排序 */ int DescendingScore(STUDENT x,STUDENT y); int AscendingScore(STUDENT x,STUDENT y); int AscendingNumber(STUDENT x,STUDENT y); int AscendingName(STUDENT x,STUDENT y); void SearchBy(int n,STUDENT x, int(*f)(STUDENT,STUDENT));/**< 查询 */ STUDENT InputNumber(); STUDENT InputName(); int CompareNumber(STUDENT x,STUDENT y); int CompareName(STUDENT x,STUDENT y); void StatisticAnalysis(int n);/**< 成绩占比 */ void ListRecord(int n);/**< 输出 */ /**< 主函数 */ int main() { /**< 输入人数 */ printf("Input student number(n<30):\n"); int n; scanf("%d",&n); /**< 菜单选项 */ int choice; do{ choice= Menu(); switch(choice) { case 0:printf("End of program!\n");break; case 1:InputRecord(n);break; case 2:TotalAverageScore(n);break; case 3:printf("Sort in descending order by score:\n"); SortRecord(n,DescendingScore); ListRecord(n);break; case 4:printf("Sort in ascending order by score:\n"); SortRecord(n,AscendingScore); ListRecord(n);break; case 5:printf("Sort in ascending order by number:\n"); SortRecord(n,AscendingNumber); ListRecord(n);break; case 6:printf("Sort in dictionary order by name:\n"); SortRecord(n,AscendingName); ListRecord(n);break; case 7:SearchBy(n,InputNumber(),CompareNumber); break; case 8:SearchBy(n,InputName(),CompareName); break; case 9:StatisticAnalysis(n);break; case 10:ListRecord(n);break; default:printf("Input error!\n"); } }while(choice!=0); return 0; } /**< 菜单 */ int Menu() { printf("Management for Students' scores\n"); printf("1.Input record\n"); printf("2.Caculate total and average score of course\n"); printf("3.Sort in descending order by score\n"); printf("4.Sort in ascending order by score\n"); printf("5.Sort in ascending order by number\n"); printf("6.Sort in dictionary order by name\n"); printf("7.Search by number\n"); printf("8.Search by name\n"); printf("9.Statistic analysis\n"); printf("10.List record\n"); printf("0.Exit\n"); printf("Please Input your choice:\n"); int choice; scanf("%d",&choice); return choice; } /**< 1.输入数据 */ void InputRecord(int n) { printf("Input student's ID, name and score:\n"); for(int i=0; i<n; ++i){ scanf("%ld%s%f",&student[i].num,student[i].name, &student[i].score); } } /**< 2.计算总分 平均分*/ void TotalAverageScore(int n) { float sum = 0.0; for(int i=0; i<n; ++i){ sum += student[i].score; } printf("sum=%.0f,aver=%.2f\n",sum,sum/n); } /**< 3.4.5.6排序(交换法) */ void SortRecord(int n, int (*f)(STUDENT,STUDENT)) { for(int i=0; i<n-1; ++i){ for(int j=i+1; j<n;++j){ if((*f)(student[i],student[j])){ STUDENT temp = student[i]; student[i] = student[j]; student[j] = temp; } } } } /**< 按成绩升序 */ int DescendingScore(STUDENT x,STUDENT y) { return x.score<y.score; } /**< 按成绩降序 */ int AscendingScore(STUDENT x,STUDENT y) { return x.score>y.score; } /**< 按学号降序 */ int AscendingNumber(STUDENT x,STUDENT y) { return x.num>y.num; } /**< 按姓名降序 */ int AscendingName(STUDENT x,STUDENT y) { return strcmp(x.name,y.name)>0; } /**< 7.8.查询 */ void SearchBy(int n, STUDENT x, int (*f)(STUDENT,STUDENT)) { int index = -1; for(int i=0;i<n;++i){ if((*f)(student[i],x)){ index = i; break; } } if(index==-1){ printf("Not found!\n"); } else{ printf("%ld\t%s\t%.0f\n",student[index].num, student[index].name, student[index].score); } } /**< 输入姓名 */ STUDENT InputName() { printf("Input the name you want to search:\n"); STUDENT x; scanf("%s",x.name); return x; } /**< 按姓名比较 */ int CompareName(STUDENT x,STUDENT y) { return strcmp(x.name,y.name)==0; } /**< 输入学号 */ STUDENT InputNumber() { printf("Input the number you want to search:\n"); STUDENT x; scanf("%ld",&x.num); return x; } /**< 按学号比较 */ int CompareNumber(STUDENT x,STUDENT y) { return x.num == y.num; } /**< 9.统计占比 */ void StatisticAnalysis(int n) { int grade[6]={0}; for(int i=0;i<n;++i){ if(student[i].score<60) grade[0]++; else if(student[i].score<70) grade[1]++; else if(student[i].score<80) grade[2]++; else if(student[i].score<90) grade[3]++; else if(student[i].score<100) grade[4]++; else if(student[i].score==100) grade[5]++; } float percent[6]={0}; int j; for(j=0;j<6;++j){ percent[j] = grade[j]*100.0/n; } int k=60;j = 0; printf("<60\t%d\t%.2f%%\n",grade[j],percent[j]); for(j=1;k<100;k+=10,j++){ printf("%d-%d\t%d\t%.2f%%\n",k,k+9,grade[j],percent[j]); } printf("%d\t%d\t%.2f%%\n",k,grade[j],percent[j]); } /**< 10.输出数据 */ void ListRecord(int n) { for(int i=0; i<n; ++i){ printf("%ld\t%s\t%.0f\n",student[i].num, student[i].name,student[i].score); } }
98、单词接龙
#include <stdio.h> #define N 16 int main() { char a[30] = "", b[30] = ""; scanf("%s%s",a,b); char *pa = a, *pb = b, *t = a; while(*t){ pa = t; pb = b; while(*pa&&*pb&&!(*pa-*pb)){ pa++,pb++; } if(!*pa){ printf("%s\n",t); } t++; } return 0; }
99、分数比较
#include <stdio.h> #include <stdlib.h> #include <math.h> int Compare(int a, int b, int c, int d) { double x = (double)a/b; double y = (double)c/d; if(x>y) return 1; if(x<y) return -1; if(fabs(x-y)<=1e-6) return 0; } int main() { printf("Input two FENSHU:\n"); int a, b, c, d; scanf("%d/%d,%d/%d",&a,&b,&c,&d); int ret = Compare(a,b,c,d); if(ret==1) printf("%d/%d>%d/%d\n",a,b,c,d); if(ret==-1) printf("%d/%d<%d/%d\n",a,b,c,d); if(ret==0) printf("%d/%d=%d/%d\n",a,b,c,d); return 0; }
100、百万富翁的换钱计划
#include <stdio.h> #include <stdlib.h> #include <math.h> int main() { double toStranger = 0.0,toRichman = 0.0, ts = 0.01, tr = 100000; for(int i=1; i<=30; ++i){ toStranger += ts; toRichman += tr; ts *=2; } printf("to Stranger: %.2f yuan\n",toStranger); printf("to Richman: %.2f yuan\n",toRichman); return 0; }
101、用计数控制的循环实现正数累加求和
#include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int count = 0, sum = 0, number = 0; do{ printf("Input a number:\n"); scanf("%d",&number); if(number>0){ sum += number; count++; } }while(number!=0); printf("sum=%d,count=%d\n",sum,count); return 0; }
102、平方根表
#include <stdio.h> #include <stdlib.h> #include <math.h> int main() { printf("Input n(n<=10):\n"); int n; scanf("%d",&n); for(int i=0; i<n; ++i){ printf("%7d",i); } printf("\n"); for(int i=0; i<n; ++i){ printf("%d",i); int j = 0; while(j<n){ printf("%7.3f",sqrt(10*i+j)); j++; } printf("\n"); } return 0; }
103、最大公约数
#include <stdio.h> #include <string.h> #define N 80 int CommonFactors(int a, int b) { static int t,a1,b1,count; if(a<=0||b<=0){ return -1; } if(a1 != a && b1 != b){ a1 = a; b1 = b; t = a>b?b:a; count = 1; } while((a%t)||(b%t)){ t--; } printf( "Common factor %d is %d\n",count++,t); return t--; } int main() { printf("Input a and b:\n"); int a,b; scanf("%d,%d",&a,&b); int t = CommonFactors(a,b); while(t>1){ t = CommonFactors(a,b); } return 0; }
104、23根火柴游戏
#include <stdio.h> #include <stdlib.h> #include <math.h> int main() { printf("Game start!\n"); printf("Note: the maximum number is 3\n"); int matches = 23; while(matches) { int youMove; do{ printf("Please enter the number of matches you are moving:\n"); scanf("%d",&youMove); if(youMove>3){ printf("The number you entered is wrong,please re-enter!\n"); } }while(youMove>3); matches -= youMove; if(!matches){ printf("I'm sorry. You lost!\n"); break; } printf("The number of matches you are moving is:%d\n",youMove); printf("The number of matches left is:%d\n",matches); int computerMove = matches%3 + 1; if(matches<3){ computerMove = 1; } printf("The number of matches that have been moved by the computer is:%d\n",computerMove); matches -= computerMove; printf("The number of matches left is:%d\n",matches); if(!matches){ printf("Congratulations!You won!\n"); break; } } return 0; }
105、学生成绩管理系统V4.0
/**< 第十二周练习区编程题2,学生成绩管理系统V4.0 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> /**< 定义结构 */ #define STU_NUM 30 #define MAX_LEN 10 #define COURSE_NUM 6 typedef struct stu STUDENT; struct stu { long num; char name[MAX_LEN]; float score[COURSE_NUM]; float sum; float ave; }; STUDENT student[STU_NUM]; /**< 定义人数 科目数 */ int n,m; int Menu();/**< 菜单 */ void InputRecord();/**< 录入学生信息 */ void TotalAverageScore();/**< 总分平均分 */ void TotalAverageScoreStu();/**< 总分平均分 */ void SortRecord(int (*f)(STUDENT,STUDENT));/**< 排序 */ int DescendingScore(STUDENT x,STUDENT y); int AscendingScore(STUDENT x,STUDENT y); int AscendingNumber(STUDENT x,STUDENT y); int AscendingName(STUDENT x,STUDENT y); void SearchBy(STUDENT x, int(*f)(STUDENT,STUDENT));/**< 查询 */ STUDENT InputNumber(); STUDENT InputName(); int CompareNumber(STUDENT x,STUDENT y); int CompareName(STUDENT x,STUDENT y); void StatisticAnalysis();/**< 成绩占比 */ void ListRecord();/**< 输出 */ /**< 主函数 */ int main() { /**< 输入人数 */ printf("Input student number(n<30):\n"); scanf("%d",&n); /**< 菜单选项 */ int choice; do{ choice= Menu(); switch(choice) { case 0:printf("End of program!");break; case 1:InputRecord();break; case 2:TotalAverageScore();break; case 3:TotalAverageScoreStu();break; case 4:printf("Sort in descending order by score:\n"); SortRecord(DescendingScore); ListRecord();break; case 5:printf("Sort in ascending order by score:\n"); SortRecord(AscendingScore); ListRecord();break; case 6:printf("Sort in ascending order by number:\n"); SortRecord(AscendingNumber); ListRecord();break; case 7:printf("Sort in dictionary order by name:\n"); SortRecord(AscendingName); ListRecord();break; case 8:SearchBy(InputNumber(),CompareNumber); break; case 9:SearchBy(InputName(),CompareName); break; case 10:for(int i=0; i<m; ++i) StatisticAnalysis(i); break; case 11:ListRecord();break; default:printf("Input error!\n"); } }while(choice!=0); return 0; } /**< 菜单 */ int Menu() { printf("Management for Students' scores\n"); printf("1.Input record\n"); printf("2.Caculate total and average score of every course\n"); printf("3.Caculate total and average score of every student\n"); printf("4.Sort in descending order by score\n"); printf("5.Sort in ascending order by score\n"); printf("6.Sort in ascending order by number\n"); printf("7.Sort in dictionary order by name\n"); printf("8.Search by number\n"); printf("9.Search by name\n"); printf("10.Statistic analysis\n"); printf("11.List record\n"); printf("0.Exit\n"); printf("Please Input your choice:\n"); int choice; scanf("%d",&choice); return choice; } /**< 1.输入数据 */ void InputRecord() { printf("Input course number(m<=%d):\n",n); scanf("%d",&m); printf("Input student's ID, name and score:\n"); for(int i=0; i<n; ++i){ scanf("%ld%s",&student[i].num,student[i].name); for(int j=0; j<m; ++j){ scanf("%f",&student[i].score[j]); } } } /**< 2.计算总分 平均分*/ void TotalAverageScore() { for(int j=0; j<m; ++j){ float sum = 0.0; for(int i=0; i<n; ++i){ sum += student[i].score[j]; } printf("course %d:sum=%.0f,aver=%.0f\n",j+1,sum,sum/n); } } /**< 3.计算每个学生的总分 平均分 */ void TotalAverageScoreStu() { for(int i=0; i<n; ++i){ float sum = 0.0; for(int j=0; j<m; ++j){ sum += student[i].score[j]; } student[i].sum = sum; student[i].ave = sum/m; printf("student %d:sum=%.0f,aver=%.0f\n",i+1, student[i].sum,student[i].ave); } } /**< 4.5.6.7排序(交换法) */ void SortRecord(int (*f)(STUDENT,STUDENT)) { for(int i=0; i<n-1; ++i){ for(int j=i+1; j<n;++j){ if((*f)(student[i],student[j])){ STUDENT temp = student[i]; student[i] = student[j]; student[j] = temp; } } } } /**< 按每个学生的总分升序 */ int DescendingScore(STUDENT x,STUDENT y) { return x.sum<y.sum; } /**< 按每个学生的总分降序 */ int AscendingScore(STUDENT x,STUDENT y) { return x.sum>y.sum; } /**< 按学号降序 */ int AscendingNumber(STUDENT x,STUDENT y) { return x.num>y.num; } /**< 按姓名降序 */ int AscendingName(STUDENT x,STUDENT y) { return strcmp(x.name,y.name)>0; } /**< 8.9.查询 */ void SearchBy(STUDENT x, int (*f)(STUDENT,STUDENT)) { int index = -1; for(int i=0;i<n;++i){ if((*f)(student[i],x)){ index = i; break; } } if(index==-1){ printf("Not found!\n"); } else{ printf("%ld\t%s\t",student[index].num, student[index].name); for(int i=0; i<m; ++i) printf("%.0f\t",student[index].score[i]); printf("%.0f\t%.0f\n",student[index].sum, student[index].ave); } } /**< 输入姓名 */ STUDENT InputName() { printf("Input the name you want to search:\n"); STUDENT x; scanf("%s",x.name); return x; } /**< 按姓名比较 */ int CompareName(STUDENT x,STUDENT y) { return strcmp(x.name,y.name)==0; } /**< 输入学号 */ STUDENT InputNumber() { printf("Input the number you want to search:\n"); STUDENT x; scanf("%ld",&x.num); return x; } /**< 按学号比较 */ int CompareNumber(STUDENT x,STUDENT y) { return x.num == y.num; } /**< 10.统计占比 */ void StatisticAnalysis(int index) { printf("For course %d:\n",index+1); int grade[6]={0}; for(int i=0;i<n;++i){ if(student[i].score[index]<60) grade[0]++; else if(student[i].score[index]<70) grade[1]++; else if(student[i].score[index]<80) grade[2]++; else if(student[i].score[index]<90) grade[3]++; else if(student[i].score[index]<100) grade[4]++; else if(student[i].score[index]==100) grade[5]++; } float percent[6]={0}; int j; for(j=0;j<6;++j){ percent[j] = grade[j]*100.0/n; } int k=60;j = 0; printf("<60\t%d\t%.2f%%\n",grade[j],percent[j]); for(j=1;k<100;k+=10,j++){ printf("%d-%d\t%d\t%.2f%%\n",k,k+9,grade[j],percent[j]); } printf("%d\t%d\t%.2f%%\n",k,grade[j],percent[j]); } /**< 11.输出数据 */ void ListRecord() { for(int i=0; i<n; ++i){ printf("%ld\t%s\t",student[i].num,student[i].name); for(int j=0; j<m; ++j){ printf("%.0f\t",student[i].score[j]); } printf("%.0f\t%.0f\n",student[i].sum, student[i].ave); } }
106、寻找最高分成绩的学生
#include <stdio.h> #include <stdlib.h> void InputScore(int *p, int m, int n); int FindMax(int *p, int m, int n, int *pRow, int *pCol); int main() { int *pScore, m, n, maxScore, row, col; printf("Input array size m,n:\n"); scanf("%d,%d", &m, &n); pScore = (int *)malloc(m*n*sizeof(int)); /* 申请动态内存 */ if (pScore == NULL) { printf("No enough memory!\n"); exit(0); } InputScore(pScore, m, n); maxScore = FindMax(pScore,m,n,&row,&col); printf("maxScore = %d, class = %d, number = %d\n", maxScore, row+1, col+1); free(pScore); /* 释放动态内存 */ return 0; } /* 函数功能:输入m行n列二维数组的值 */ void InputScore(int *pScore, int m, int n) { int i, j; printf("Input %d*%d array:\n", m, n); for (i=0; i<m; i++) { for (j=0; j<n; j++) { scanf("%d", &pScore[i*n+j]); } } } /* 函数功能:计算任意m行n列二维数组中元素的最大值,并指出其所在行列下标值 */ int FindMax(int *p, int m, int n, int *pRow, int *pCol) { int i, j, max = p[0]; // __________; // // __________; for (i=0; i<m; i++) { for (j=0; j<n; j++) { if (p[i*n+j]>max) { max = p[i*n+j]; *pRow = i; /*记录行下标*/ *pCol = j; /*记录列下标*/ } } } return max; }
107、程序改错
#include <stdio.h> #define STUD 30 /* 最多可能的学生人数 */ #define COURSE 5 /* 最多可能的考试科目数 */ void Total(int *pScore, int sum[], float aver[], int m, int n); void Print(int *pScore, int sum[], float aver[], int m, int n); int main() { int i, j, m, n, score[STUD][COURSE], sum[STUD]; float aver[STUD]; printf("How many students?\n"); scanf("%d", &m); printf("How many courses?\n"); scanf("%d", &n); printf("Input scores:\n"); for (i=0; i<m; i++) { for (j=0; j<n; j++) { scanf("%d", &score[i][j]); } } Total(*score, sum, aver, m, n); Print(*score, sum, aver, m, n); return 0; } void Total(int *pScore, int sum[], float aver[], int m, int n) { int i, j; for (i=0; i<m; i++) { sum[i] = 0; for (j=0; j<n; j++) { sum[i] = sum[i] + pScore[i*COURSE+j]; } aver[i] = (float) sum[i] / n; } } void Print(int *pScore, int sum[], float aver[], int m, int n) { int i, j; printf("Result:\n"); for (i=0; i<m; i++) { for (j=0; j<n; j++) { printf("%4d", pScore[i*COURSE+j]); } printf("%5d%6.1f\n", sum[i], aver[i]); } }
108、矩阵转置
#include <stdio.h> #define M 10 #define N 10 void Transpose(int *a, int *at, int m, int n); void InputMatrix(int *a, int m, int n); void PrintMatrix(int *at, int n, int m); int main() { int s[M][N], st[N][M], m, n; printf("Input m, n:\n"); scanf("%d,%d", &m, &n); InputMatrix(*s, m, n); Transpose(*s,*st,m,n); printf("The transposed matrix is:\n"); PrintMatrix(*st, n, m); return 0; } /* 函数功能:计算m*n矩阵a的转置矩阵at */ void Transpose(int *a, int *at, int m, int n) { int i, j; for (i=0; i<m; i++) { for (j=0; j<n; j++) { at[j*M+i] = a[i*N+j]; } } } /* 函数功能:输入m*n矩阵a的值 */ void InputMatrix(int *a, int m, int n) { int i, j; printf("Input %d*%d matrix:\n", m, n); for (i=0; i<m; i++) { for (j=0; j<n; j++) { scanf("%d", &a[i*N+j]); } } } /* 函数功能:输出n*m矩阵at的值 */ void PrintMatrix(int *at, int n, int m) { int i, j; for (i=0; i<n; i++) { for (j=0; j<m; j++) { printf("%-5d", at[i*N+j]); } printf("\n"); } }
109、在升序排序的数组中插入一个元素
#include <stdio.h> #include <stdlib.h> int main() { printf("Input array size:\n"); int n; scanf("%d",&n); int *p = (int *)malloc(sizeof(int)*n); if(p == NULL){ return 0; } printf("Input array:\n"); for(int i=0; i<n; ++i){ scanf("%d",&p[i]); } printf("Input x:\n"); int x; scanf("%d",&x); p = (int *)realloc(p,sizeof(int)*(n+1)); if(p == NULL){ return 0; } for(int j=0; j<n+1; ++j){ if(p[j]>x){ int i = n+1; while(i>=j){ p[i] = p[i-1]; --i; } p[j] = x; break; } } printf("After insert %d:\n",x); for(int j=0; j<n+1; ++j) printf("%4d",p[j]); free(p); return 0; }
110、计算平均数、中位数和众数
#include <stdio.h> #include <stdlib.h> int main() { printf("Input the feedbacks of 40 students:\n"); int sum = 0, array[11] = {0}; int *p = (int *)malloc(sizeof(int)*40); for(int i=0; i<40; ++i){ scanf("%d",&p[i]); sum += p[i]; array[p[i]]++; } for(int i=0; i<40; ++i){ for(int j=i+1; j<40; ++j){ if(p[i]>p[j]){ int temp = p[i]; p[i] = p[j]; p[j] = temp; } } } int max = 0; for(int i=1; i<11; ++i){ if(array[i]>array[max]){ max = i; } } printf("Mean value=%d\n",sum/40); printf("Median value=%d\n",(p[20]+p[19])/2); printf("Mode value=%d\n",max); free(p); return 0; }
111、学生成绩管理系统V5.0
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_LEN 10 /* 字符串最大长度 */ #define STU_NUM 30 /* 最多的学生人数 */ #define COURSE_NUM 6 /* 最多的考试科目数 */ typedef struct student { long num; /* 每个学生的学号 */ char name[MAX_LEN]; /* 每个学生的姓名 */ float score[COURSE_NUM]; /* 每个学生COURSE_NUM门功课的成绩 */ float sum; /* 每个学生的总成绩 */ float aver; /* 每个学生的平均成绩 */ }STU; int Menu(void); void ReadScore(STU stu[], int n, int m); void AverSumofEveryStudent(STU stu[], int n, int m); void AverSumofEveryCourse(STU stu[], int n, int m); void SortbyScore(STU stu[],int n,int m,int (*compare)(float a,float b)); int Ascending(float a, float b); int Descending(float a, float b); void AsSortbyNum(STU stu[], int n, int m); void SortbyName(STU stu[], int n, int m); void SearchbyNum(STU stu[], int n, int m); void SearchbyName(STU stu[], int n, int m); void StatisticAnalysis(STU stu[], int n, int m); void PrintScore(STU stu[], int n, int m); int main() { char ch; int n = 0, m = 0; /* 学生人数为n,课程门数为m */ STU stu[STU_NUM]; printf("Input student number(n<=30):\n", STU_NUM); scanf("%d", &n); while (1) { ch = Menu(); /* 显示菜单,并读取用户输入 */ switch (ch) { case 1: printf("Input course number(m<=%d):\n",COURSE_NUM); scanf("%d", &m); ReadScore(stu,n,m); break; case 2: AverSumofEveryCourse(stu,n,m); break; case 3: AverSumofEveryStudent(stu,n,m); break; case 4: SortbyScore(stu,n,m,Descending); printf("Sort in descending order by score:\n"); PrintScore(stu,n,m); break; case 5: SortbyScore(stu,n,m,Ascending); printf("Sort in ascending order by score:\n"); PrintScore(stu,n,m); break; case 6: AsSortbyNum(stu,n,m); printf("Sort in ascending order by number:\n"); PrintScore(stu,n,m); break; case 7: SortbyName(stu,n,m); printf("Sort in dictionary order by name:\n"); PrintScore(stu,n,m); break; case 8: SearchbyNum(stu,n,m); break; case 9: SearchbyName(stu,n,m); break; case 10: StatisticAnalysis(stu,n,m); break; case 11: PrintScore(stu,n,m); break; case 0: printf("End of program!"); exit(0); default: printf("Input error!\n"); } } return 0; } /* 函数功能:显示菜单并获得用户键盘输入的选项 */ int Menu(void) { printf("Management for Students' scores\n"); printf("1.Input record\n"); printf("2.Caculate total and average score of every course\n"); printf("3.Caculate total and average score of every student\n"); printf("4.Sort in descending order by score\n"); printf("5.Sort in ascending order by score\n"); printf("6.Sort in ascending order by number\n"); printf("7.Sort in dictionary order by name\n"); printf("8.Search by number\n"); printf("9.Search by name\n"); printf("10.Statistic analysis\n"); printf("11.List record\n"); printf("0.Exit\n"); printf("Please Input your choice:\n"); int choice; scanf("%d",&choice); return choice; } /* 函数功能:输入n个学生的m门课成绩 */ void ReadScore(STU stu[], int n, int m) { printf("Input student's ID, name and score:\n"); for(int i=0; i<n; ++i){ scanf("%ld%s",&stu[i].num,stu[i].name); for(int j=0; j<m; ++j){ scanf("%f",&stu[i].score[j]); } } } /* 函数功能:计算每个学生各门课程的总分和平均分 */ void AverSumofEveryStudent(STU stu[], int n, int m) { for(int i=0; i<n; ++i){ float sum = 0.0; for(int j=0; j<m; ++j){ sum += stu[i].score[j]; } stu[i].sum = sum; stu[i].aver = sum/m; printf("student %d: sum=%.0f,aver=%.0f\n",i+1, stu[i].sum,stu[i].aver); } } /* 函数功能:计算每门课程的总分和平均分 */ void AverSumofEveryCourse(STU stu[], int n, int m) { for(int j=0; j<m; ++j){ float sum = 0.0; for(int i=0; i<n; ++i){ sum += stu[i].score[j]; } printf("course %d:sum=%.0f,aver=%.0f\n",j+1,sum,sum/n); } } /* 函数功能:按选择法将数组sum的元素值排序 */ void SortbyScore(STU stu[], int n, int m, int (*compare)(float a, float b)) { for(int i=0; i<n-1; ++i){ int k = i; for(int j=i+1; j<n;++j){ if((*compare)(stu[j].sum,stu[k].sum)) k = j; } if(k!=i){ STU temp = stu[i]; stu[i] = stu[k]; stu[k] = temp; } } } /* 使数据按升序排序 */ int Ascending(float a, float b) { return a < b; } /* 使数据按降序排序 */ int Descending(float a, float b) { return a > b; } /* 函数功能:按选择法将数组num的元素值按从低到高排序 */ void AsSortbyNum(STU stu[], int n, int m) { for(int i=0; i<n-1; ++i){ int k = i; for(int j=i+1; j<n;++j){ if(stu[j].num<stu[k].num) k = j; } if(k!=i){ STU temp = stu[i]; stu[i] = stu[k]; stu[k] = temp; } } } /* 函数功能:交换法实现字符串按字典顺序排序 */ void SortbyName(STU stu[], int n, int m) { for(int i=0; i<n-1; ++i){ int k = i; for(int j=i+1; j<n;++j){ if(strcmp(stu[j].name,stu[k].name)<0) k = j; } if(k!=i){ STU temp = stu[i]; stu[i] = stu[k]; stu[k] = temp; } } } /* 函数功能:按学号查找学生成绩并显示查找结果 */ void SearchbyNum(STU stu[], int n, int m) { printf("Input the number you want to search:\n"); long t; scanf("%ld",&t); int index = -1; for(int i=0;i<n;++i){ if(stu[i].num == t){ index = i; break; } } if(index==-1){ printf("Not found!\n"); } else{ printf("%ld\t%s\t",stu[index].num, stu[index].name); for(int i=0; i<m; ++i) printf("%.0f\t",stu[index].score[i]); printf("%.0f\t%.0f\n",stu[index].sum, stu[index].aver); } } /* 函数功能:按姓名的字典顺序排出成绩表 */ void SearchbyName(STU stu[], int n, int m) { printf("Input the name you want to search:\n"); char t[MAX_LEN] = ""; scanf("%s",t); int index = -1; for(int i=0;i<n;++i){ if(strcmp(stu[i].name,t)==0){ index = i; break; } } if(index==-1){ printf("Not found!\n"); } else{ printf("%ld\t%s\t",stu[index].num, stu[index].name); for(int i=0; i<m; ++i) printf("%.0f\t",stu[index].score[i]); printf("%.0f\t%.0f\n",stu[index].sum, stu[index].aver); } } /* 函数功能:统计各分数段的学生人数及所占的百分比 */ void StatisticAnalysis(STU stu[], int n, int m) { for(int index=0; index<m; ++index) { printf("For course %d:\n",index+1); int grade[6]={0}; for(int i=0;i<n;++i){ if(stu[i].score[index]<60) grade[0]++; else if(stu[i].score[index]<70) grade[1]++; else if(stu[i].score[index]<80) grade[2]++; else if(stu[i].score[index]<90) grade[3]++; else if(stu[i].score[index]<100) grade[4]++; else if(stu[i].score[index]==100) grade[5]++; } float percent[6]={0}; int j; for(j=0;j<6;++j){ percent[j] = grade[j]*100.0/n; } int k=60;j = 0; printf("<60\t%d\t%.2f%%\n",grade[j],percent[j]); for(j=1;k<100;k+=10,j++){ printf("%d-%d\t%d\t%.2f%%\n",k,k+9,grade[j],percent[j]); } printf("%d\t%d\t%.2f%%\n",k,grade[j],percent[j]); } } /* 函数功能: 打印学生成绩 */ void PrintScore(STU stu[], int n, int m) { for(int i=0; i<n; ++i){ printf("%ld\t%s\t",stu[i].num,stu[i].name); for(int j=0; j<m; ++j){ printf("%.0f\t",stu[i].score[j]); } printf("%.0f\t%.0f\n",stu[i].sum, stu[i].aver); } }
112、字符串中的字符排序
#include <stdio.h> #include <stdlib.h> #include <string.h> void InsertionSort( char *p); int main() { printf("Input a string:\n"); char *p = (char *)malloc(sizeof(char)*20); if(p==NULL){ printf("No enough memory!\n"); exit(0); } gets(p); InsertionSort(p); printf("%s",p); free(p); return 0; } void InsertionSort( char *p)/* 插入排序 */ { int i, j; char Tmp; for ( j=1; p[j]; j++ ) { Tmp = p[j]; /* 取出未排序序列中的第一个元素*/ for ( i=j; i>0 && p[i-1]>Tmp; i-- ) p[i] = p[i-1]; /*依次与已排序序列中元素比较并右移*/ p[i] = Tmp; /* 放进合适的位置 */ } }
113、纯数字字符串检验
#include <stdio.h> #include <stdlib.h> #include <string.h> int IsAllDigit( char *p); int main() { printf("Please input a string:\n"); char *p = (char *)malloc(sizeof(char)*20); if(p==NULL){ printf("No enough memory!\n"); exit(0); } gets(p); if(!IsAllDigit(p)) printf("The string is not digit string."); else printf("The string is digit string."); free(p); return 0; } int IsAllDigit( char *p) { for (int j=0; p[j]; j++ ) { if(p[j]<'0'||p[j]>'9') return 0; } return 1; }
114、孪生素数
#include <stdio.h> #include <stdlib.h> #include <string.h> long IsPrime( long c); int main() { printf("please input c,d(c>2):\n"); long c,d; scanf("%ld,%ld",&c,&d); int total = 0, x = 0, y = 0; while(c<=d) { while(!IsPrime(c)) c++; y = c++; if(y-x == 2){ total++; printf("(%ld,%ld)\n",x,y); } x = y; } printf( "total=%d\n",total); return 0; } long IsPrime( long c) { for(long i=2; i<c;++i) if(c%i==0) return 0; return 1; }
115、求解不等式
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> int main() { printf("Input n:\n"); double n; scanf("%lf",&n); double s = 0.0; int m = 0; while(s<n){ int t = ++m; s = 0.0; while(t<=2*m) s += sqrt(t++); } printf("Result:m>=%d\n",m); printf("s=%.2f\n",s); return 0; }
116、计算零件数
#include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int x = 14; while(!(x%4==2&&x%7==3&&x%9==5)) x++; printf("%d",x); return 0; }
117、走台阶
#include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int a1 = 1, a2 = 2, t = 0; int n = 8; while(n--) { t = a2; a2 = a1 + a2; a1 = t; } printf("Result=%d",a2); return 0; }
118、将数据按照奇偶排序
#include <stdio.h> #include <string.h> #define N 10 int main() { //freopen("E:\\桌面\\test.txt","r",stdin); int a[N] = {0}, b[N] = {0}; printf("Input 10 numbers:\n"); for(int i=0; i<N; ++i){ scanf("%d",&a[i]); } /**< 选择排序 */ for(int i=0; i<N-1; ++i){ int k = i; for(int j=i+1; j<N; ++j){ if(a[k]>a[j]) { k = j; } } if(i!=k){ int t = a[i]; a[i] = a[k]; a[k] = t; } } int *p = b; for(int i=0; i<N; ++i){ if(a[i]%2) *p++ = a[i]; } for(int i=0; i<N; ++i){ if(a[i]%2==0) *p++ = a[i]; } printf("Output: "); int i=0; for(; i<N-1; ++i){ if(i) printf(","); printf("%d",b[i]); } printf(",%d\n",b[i]); return 0; }
119、三色球分组
#include <stdio.h> #include <string.h> #define N 10 int Fun (void); int main() { //freopen("E:\\桌面\\test.txt","r",stdin); printf("sum=%4d\n",Fun()); return 0; } int Fun (void) { int sum = 0; printf("The result:\n"); for(int i=1; i<=3; ++i){ for(int j=1; j<=5; ++j){ int black = 8-i-j; printf("red:%4d white:%4d black:%4d\n",i,j,black); sum++; } } return sum; }
120、同构数
#include <stdio.h> #include <stdlib.h> #include <math.h> int main() { int n = 10; for(int m=1; m<=99; ++m){ if(m>=10) n = 100; if(m*m%n==m) printf("m=%3d\t\tm*m=%6d\n",m,m*m); } return 0; }
三、课程相关
1、百鸡问题
#include <stdio.h> int main() { int x, y, z; for (x=0; x<=20; x++) { for (y=0; y<=33; y++)//1. { z = 100 - x - y;//2. if (5*x + 3*y + z/3.0 == 100)//3. { printf("x=%d, y=%d, z=%d\n", x, y, z); } } } return 0; }
2、最大值和最小值(指针变量参数)
#include <stdio.h> int FindMax(int num[], int n, int *pMaxPos); int FindMin(int num[], int n, int *pMinPos); int main() { int num[10], maxValue, maxPos, minValue, minPos, i; printf("Input 10 numbers:\n"); for (i=0; i<10; i++) { scanf("%d", &num[i]); // 输入10个数 } maxValue = FindMax(num, 10, &maxPos); // 找最大值及其所在下标位置 minValue = FindMin(num, 10, &minPos); // 找最小值及其所在下标位置 printf("Max=%d,Position=%d,Min=%d,Position=%d\n", maxValue, maxPos, minValue, minPos); return 0; } //函数功能:求有n个元素的整型数组num中的最大值及其所在下标位置,函数返回最大值 int FindMax(int num[], int n, int *pMaxPos) //1. { int i, max; max = num[0];//假设num[0]为最大值 *pMaxPos = 0;//假设最大值在数组中的下标位置为0 //2. for (i=1; i<n; i++) { if (num[i] > max) { max = num[i]; *pMaxPos = i; //pMaxPos指向最大值数组元素的下标位置//3. } } return max ;//4. } //函数功能:求有n个元素的整型数组num中的最小值及其所在下标位置,函数返回最小值 int FindMin(int num[], int n, int *pMinPos)//5. { int i, min; min = num[0]; //假设num[0]为最小 *pMinPos = 0; //假设最小值在数组中的下标位置为0 //6. for (i=1; i<10; i++) { if (num[i] < min) { min = num[i]; *pMinPos = i; //pMinPos指向最小值数组元素的下标位置//7. } } return min;//8. }
3、10阶台阶
#include<stdio.h> int main() { int i = 0, a[10]; a[0] = 1; a[1] = 2; for (i = 2; i < 10; ++i)//1 { a[i] = a[i - 1] + a[i - 2];//2. } printf("Result=%d", a[9]);//3. return 0; }
4、最大公约数
#include <stdio.h> int MaxCommonFactor(int a, int b); int main() { int a, b, x; printf("Input a,b:"); scanf("%d,%d", &a, &b); x =MaxCommonFactor(a, b);//1. if (x != -1) { printf("MaxCommonFactor = %d\n", x); } else { printf("Input error!\n"); } return 0; } //函数功能: 计算两个正整数的最大公约数,-1表示没有最大公约数 int MaxCommonFactor(int a, int b) { int r; if (a<=0 || b<=0) return -1; // 保证输入的参数为正整数 do{ r = a % b;//2 a = b; b = r;//3. }while (r != 0);//4. return a; }
5、判断素数
#include <math.h> #include <stdio.h> int IsPrimeNumber(int number); int main() { int n, ret; printf("Input n:"); scanf("%d", &n); ret = IsPrimeNumber(n); if (ret != 0)//1. { printf("%d is a prime number\n", n); } else { printf("%d is not a prime number\n", n); } return 0; } //函数功能:判断number是否是素数,函数返回非0值,表示是素数,否则不是素数 int IsPrimeNumber(int number) { int i; if (number <= 1) return 0; // 负数、0和1都不是素数 for (i=2; i<=sqrt(number); i++)//2. { if (number % i == 0) // 被整除,不是素数 //3. return 0; } return 1; }
6、四位分离之和
#include <stdio.h> #include <math.h> int main() { int i1, i2, i3, i4, k, n; printf("Input data is:"); scanf("%d", &n); k = fabs(n); //取绝对值 i1 = k / 1000; //分离出千位 //1. i2 = (k - i1 * 1000) / 100; //分离出百位//2. i3 = (k - i1 * 1000 - i2 * 100) / 10; //分离出十位//3. i4 = k % 10; //分离出个位//4. printf("The sum of the total bit is %d\n", i1 + i2 + i3 + i4); return 0; }
7、判断三角形
#include <stdio.h> #include <math.h> int main() { float a, b, c, s, area; printf("Input a,b,c:"); scanf("%f,%f,%f", &a, &b, &c); if (a+b>c && b+c>a && a+c>b)//1. { s = (float)(a + b + c) / 2; area = sqrt(s * (s - a) * (s - b) * (s - c));//2. printf("area = %f\n", area); } else { printf("It is not a triangle\n"); } return 0; }
8、判断闰年
#include <stdio.h> int main() { int year, flag; printf("Input a year:"); scanf("%d", &year); if (year%4 == 0 && year%100 != 0 || year%400 == 0) //1. flag = 1; /* 如果year是闰年,则标志变量flag置1 */ else flag = 0; /* 否则,标志变量flag置0 */ if (flag)//2. printf("%d is a leap year!\n",year); /* 打印“是闰年”*/ else printf("%d is not a leap year!\n",year); /* 打印“不是闰年”*/ return 0; }
9、递归函数
int Sum(int n) { if (n <= 0) printf("data error\n"); if (n == 1)return 1;//1. else return n+Sum(n-1);//2. }
10、累加和
#include <stdio.h> int Fun(int b[],int m,int n)//1. { int i,s=0; for( i=m;i<=n;i++) //2. s=s+b[i]; return s;//3. } int main() { int x,a[]={1,2,3,4,5,6,7,8,9}; x=Fun(a,3,7); printf("%d\n",x); return 0; }
11、杨辉三角
#include<stdio.h> #define N 20 void CaculateYH(int a[][N], int n); void PrintYH(int a[][N], int n); int main() { int a[N][N] = {0}, n; printf("Input n(n<20):"); scanf("%d", &n); CaculateYH(a, n); PrintYH(a, n); return 0; } /* 函数功能:计算杨辉三角形前n行元素的值 */ void CaculateYH(int a[][N], int n)//1. { int i, j; for (i=0; i<n; i++) { a[i][0] = 1; a[i][i] = 1; //2. } for (i=2; i<n; i++)//3. { for (j=1; j<=i-1; j++) { a[i][j] = a[i-1][j-1] + a[i-1][j];//4. } } } /* 函数功能:输出杨辉三角形前n行元素的值 */ void PrintYH(int a[][N], int n) { int i, j; for (i=0; i<n; i++) { for (j=0; j<=i; j++)//5. { printf("%4d", a[i][j]); } printf("\n"); } }
12、邮票组合
#include <stdio.h> int main() { int i,j,k,s,n=0; int a[100]={0}; for(i=0;i<=5;i++)//1. for(j=0;j<=5;j++)//2. { s=2*i+3*j;//3. for(k=0;a[k]!=0;k++) if(s==a[k]) break;//4. if(a[k]==0&&s>0) { a[k]=s;//5. n++; } } printf("\n %d kinds:",n); for(k=0;a[k];k++) printf("%2d,",a[k]); return 0; }
13、sizeof与strlen
#include <stdio.h> #include <string.h> int main( ) { char a[]="abcdefg",b[10]="abcdefg"; printf("%d %d\n",sizeof(a) ,sizeof(b)); /*1.测量字符数组a,b的长度,并输出*/ printf("%d %d\n",strlen(a) ,strlen(b)); /*2.测量字符数组a,b中存放的字符串的长度,并输出*/ return 0; }
14、矩阵转置
#include <stdio.h> #define M 10 #define N 10 void Transpose(int a[][N], int at[][M], int m, int n); void InputMatrix(int a[][N], int m, int n); void PrintMatrix(int at[][M], int n, int m); int main() { int s[M][N], st[N][M], m, n; printf("Input m, n:"); scanf("%d,%d", &m, &n); InputMatrix(s, m, n); Transpose(s, st, m, n); printf("The transposed matrix is:\n"); PrintMatrix(st, n, m); return 0; } /* 函数功能:计算m*n矩阵a的转置矩阵at */ void Transpose(int a[][N], int at[][M], int m, int n) { int i, j; for (i=0; i<m; i++) { for (j=0; j<n; j++) { at[j][i] = a[i][j];//1. } } } /* 函数功能:输入m*n矩阵a的值 */ void InputMatrix(int a[][N], int m, int n) { int i, j; printf("Input %d*%d matrix:\n", m, n); for (i=0; i<m; i++) { for (j=0; j<n; j++) { scanf("%d", &a[i][j]); } } } /* 函数功能:输出n*m矩阵at的值 */ void PrintMatrix(int at[][M], int n, int m) { int i, j; for (i=0; i<n; i++)//2. { for (j=0; j<m; j++)//3. { printf("%d\t", at[i][j]); } printf("\n");//4. } }
15、同构数
#include <stdio.h> int main() { int m; for (m = 1; m <= 99; m++) { if ( m*m % 10 == m || m*m % 100 == m)//1. { printf("m=%3d\t\tm*m=%6d\n", m, m*m); } } return 0; }