这次写了一些老师上课提到的....
//冒泡排序#include <stdio.h> const int N=4; void output(char x[], int n); // 函数声明 void sort(char x[],int n); int main() { char string[N] = {'2','0','1','9'}; int i; printf("排序前: \n"); output(string, N); sort(string,N); printf("\n排序后: \n"); output(string, N); printf("\n"); return 0; } void sort(char x[],int n){ for(int i=N;i>=0;--i){ for(int j=0;j<i;++j){ if(x[j]<x[j+1]){ int tmp=x[j]; x[j]=x[j+1]; x[j+1]=tmp; } } } } void output(char x[], int n) { int i; for(i=0; i<N; i++) printf("%c", x[i]); }
//输出为偶数的余数#include <stdio.h> void fun(int k,int bb[]) { int i; int j=0; for(i=1; i<=k; i++) { if(k%(++i)==0) bb[j++]=i; } for(i=j-1; i>=0; i--) // blank3 printf("%d ",bb[i]); } int main() { int x, *t; scanf("%d", &x); t = (int *) malloc(sizeof(int)*x); fun(x,t); return 0; }
//输出特殊矩形#include<stdio.h> #define N 100 void fun(int a[N][N],int n) { int i,j; for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(j==i) a[i][j]=i; else a[i][j]=(i>j?j:i); } int main() { int n,i,j,a[N][N]; scanf("%d",&n); fun(a,n); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) printf("%d ",a[i][j]); printf("\n"); } return 0; }
#include <stdio.h> #define N 1000 int fun(int n,int m,int bb[N]) { int i,j,k=0,flag; for(j=n;j<=m;j++) { flag=1; for(i=2;i<j;i++) if(j%i==0) { flag=0; break; } if(flag) bb[k++]=j; } return k; } int main(){ int n=0,m=0,i,k,bb[N]; scanf("%d",&n); scanf("%d",&m); for(i=0;i<m-n;i++) bb[i]=0; k=fun(n,m,bb); for(i=0;i<k;i++) printf("%4d",bb[i]); return 0; }
//杨辉三角形 #include<stdio.h> int main (){ int n; scanf("%d",&n); int t[n][n]; int line=n; for(int i=0;i<=line-1;++i){ t[i][0]=1; printf("%4d",t[i][0]); for(int k=1;k<i;++k){ t[i][k]=t[i-1][k-1]+t[i-1][k]; printf("%4d",t[i][k]); } t[i][i]=1; if(i) printf("%4d\n",t[i][i]); else printf("\n"); } return 0; }
//矩阵加法#include<stdio.h> int main(){ int i,j; scanf("%d %d",&i,&j); int a[i][j],b[i][j],c[i][j]; printf("input a"); for(int m=0;m<i;++m){ for(int n=0;n<j;++n) scanf("%d",&a[m][n]); } printf("\ninput b="); for(int m=0;m<i;++m){ for(int n=0;n<j;++n) scanf("%d",&b[m][n]); } for(int m=0;m<i;++m){ for(int n=0;n<j;++n){ c[m][n]=a[m][n]+b[m][n]; printf("%4d",c[m][n]); } printf("\n"); } return 0; }这道题更应该用函数来简化的,(手懒了.....
//求余数 在一定范围内,用了另一种方法 #include<stdio.h> int fun(int n); int main(){ int n; scanf("%d",&n); fun(n); return 0; } int fun(int n){ int a[n]={0}; for(int i=0;i<n;++i){ if(n%(i+1)==0){ a[i]=i+1; printf("%d\n",a[i]); } } }
//最大公倍数 #include<stdio.h> int main(){ int m,n; scanf("%d %d",&n,&m);//把n设成大数 if(n<m){ int tmp=0; tmp=m; m=n; n=tmp; } for(int i=n;;++i){ if(i%n==0&&i%m==0){ printf("%d",i); break; } } return 0; }
//任意大的数相加,数组进位 //在输入的时候我去网上找了别人是怎么做的,然后又自己写了一遍 #include<stdio.h> #include<string.h> #define Q 200 void fun(char c[],char d[],int,int); int main (){ char a[Q],b[Q],c[Q],d[Q]; int ma=0,mb=0; printf("a="); gets(a);//嗯,学到了 printf("b="); gets(b); ma=strlen(a); mb=strlen(b);//一开始我还在傻乎乎的用循环计数233 for(int i=0;i<ma;i++) c[ma-i-1]=a[i]-'0';//这个/-'0'是我对比自己的程序的时候发现必须要加上的 for(int i=0;i<mb;i++) d[mb-i-1]=b[i]-'0';//但是不知道为什么....(想知道为什么.... /*把c数组与d数组倒序,因为加法要从最后一位到第一位*/ fun(c,d,ma,mb); return 0; } void fun(char c[],char d[],int ma,int mb){ int x=0,tmp; if(mb>ma){ tmp=mb; ma=tmp;}//防止结果出现0char f[ma]; for(int i=0;i<ma;++i){ f[i]=(c[i]+d[i]+x)%10; x=(c[i]+d[i]+x)/10; if(i==ma-1&&x>0)//最后一个数的进位 f[ma-1]=x;//把十位数输到最后一个格子 } for(int i=ma-1;i>=0;--i)//结果也是要逆序 printf("%d",f[i]); return; }