C/C++程序举例
打印素数表
// 输出前500个素数
#include<stdio.h>
#include<math.h>
#define N 500 //判断是否为素数
int isprime(int y)
{int i,ret=1;for(i=2;i<=sqrt(y);i++){ if(y%i==0){ret=0;break;}}return ret;
}//求第n个素数
int ThePrime(int n){int num = 0;int cur = 2;while(num < n) {if(isprime(cur))num++;cur++;}cur--;return cur;
}打印前N个素数
void test2(){int i;for(i = 1;i < N+1;i++){printf("%6d",ThePrime(i));if(i%10 == 0)printf("\n");} }
int main()
{test2();
}
结果如下
图案输出
//按照金字塔输出从A到Z的26个字母,用+填充空白
#include<stdio.h>
#include<math.h>
main()
{int i,j,k,n=9;char c='A'-1; for(i=1;i<=2*n-1;i++){k=n-abs(n-i);for(j=1;j<=abs(n-i)+1;j++){printf("+");} for(j=1;j<=2*k-1;j++){c++;printf("%c",c);if(c=='Z')c=c-26;}for(j=1;j<=abs(n-i)+1;j++){printf("+");}printf("\n");}return 0;
}
结果如下
4种方式打印九九乘法表
#include<iostream>
#include<iomanip>
using namespace std;void print1();
void print2();
void print3();
void print4();
int main(){print1();cout<<endl;print2();cout<<endl;print3();cout<<endl;print4(); return 0;
}void print1(){for(int i = 1;i < 10;i++){for(int j = 1;j < i+1;j++)cout<<i<<"*"<<j<<"="<<i*j<<" ";cout<<endl;}
}void print2(){for(int i = 1; i < 10;i++){for(int j = 1; j <= 9;j++){if(j < i) {cout<<"\t";continue;}cout<<setw(1)<<i<<"*"<<setw(1)<<j<<"="<<setw(2)<<i*j<<" ";}cout<<endl; } } void print3(){for(int i = 1;i < 10;i++){for(int j = 9;j >= i;j--)cout<<i<<"*"<<j<<"="<<setw(2)<<i*j<<" ";cout<<endl;}
}void print4(){for(int i = 1;i < 10;i++){for(int j = 1;j <= 9;j++){if(j <= 9-i)cout<<"\t";elsecout<<i<<"*"<<j<<"="<<i*j<<"\t";}cout<<endl;}
}
结果如下
螺旋阵
螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环.
#include<iostream>
#include<iomanip>
#define N 15
using namespace std;int main(){int i,j,k,n,s;int ret = 1;int a[N][N] = {0}; for(i = 0;i < N/2;i++){for(j = i;j < N-i-1;j++)a[i][j]=ret++;//上横 for(k = i;k < N-i-1;k++)a[k][j]=ret++;// 右竖 for(n = N-i-1; n > i;n--)a[k][n]=ret++;//下横 for(s = N-i-1;s > i;s--)a[s][n]=ret++;//左竖 }if(N%2)a[N/2][N/2]=ret;//N为奇数时,给中心点赋值 for(int p = 0;p < N;p++){for(int q = 0;q < N;q++){cout<<setw(5)<<a[p][q];}cout<<endl;}return 0;
}
汉诺塔
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
#include<stdio.h>
void hanoi(int n,char x,char y,char z);
void move(char x,int n,char y);
main()
{hanoi(4,'a','b','c');
}
void hanoi(int n,char x,char y,char z)
{if(n == 1)move(x,1,z);else{hanoi(n-1,x,z,y);move(x,n,z);hanoi(n-1,y,x,z);}
}
void move(char x,int n,char y){printf("%c->%c\n",x,y);
}
结果如下
猜数游戏
//猜1个一百以内的整数,共5次机会
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main()
{srand((unsigned)time(0));int num;int guess;//用户猜数 int right;//正确答案 int count;//已猜次数 while(1){count = 0;right = 0;num = rand()%100;printf("请猜一个数:");while(count++ < 5){scanf("%d",&guess);//小于5次,不断猜数 if(guess == num){right = 1;printf("恭喜猜对!\n");break;} else if(guess>num)printf("大.\n");elseprintf("小.\n");}if(right == 0)printf("尝试5次,失败\n");printf("是否继续?y/n:");int c; fflush(stdin);c = getchar();if(c == 'n' || c == 'N')break; }return 0;
}
打印ASCII码表可见字符
#include <stdio.h>
int main(void){int c;printf("\tCharacter Code\n");int i = 0;for (c=33; c<=126; c++){if(i%4==0)printf("\n");printf("\t%c\t%d", c, c);i++ ;}
}
进制转换
//进制转换
#include<stdio.h>
//字符转数字
int char2num(char ch)
{if(ch >= '0' && ch <= '9')return ch - '0';elsereturn ch - 'a' + 10;
}
//数字转字符
char num2char(int num)
{if(num >=0 && num <= 9)return num + '0';elsereturn num - 10 + 'a';
}// 转化为目标进制
long source2decimal(char tmp[],int source)
{int len = 0;int num = 0;for(;tmp[len] != '\0';len++){num = num * source;num += char2num(tmp[len]);}return num;}//取余存放在数组
int decimal2obj(char tmp[],long decimal,int obj)
{int len = 0;int rem;while(decimal){rem = decimal % obj;tmp[len++] = num2char(rem);decimal = decimal / obj; }tmp[len] = '\0';return len;
}void output(char tmp[],int len)
{int i;for(i = len-1 ;i >= 0;i--)printf("%c",tmp[i]);printf("\n");
}int main()
{char tmp[100];int source;int obj;int flag = 1;int dec_num;int len;while(flag){printf("input a number:");scanf("%s",tmp);printf("input source:") ;scanf("%d",&source);printf("input object:");scanf("%d",&obj);dec_num = source2decimal(tmp,source);len = decimal2obj(tmp,dec_num,obj);output(tmp,len);printf("continue?1/0:");scanf("%d",&flag);}return 0;
}
自动发牌程序
#include<stdlib.h>
#include<stdio.h>
int comp(const void *j, const void *i);
void p(int b[], char n[]);
int main(void)
{static char n[]={'2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K', 'A'};int a[53], b1[13], b2[13], b3[13], b4[13];int b11=0, b22=0, b33=0, b44=0, t=1, m, flag, i;while( t<=52 ) /*控制发52张牌*/{m=rand()%52; /*产生0到51之间的随机数*/for(flag=1,i=1; i<=t&&flag; i++) /*查找新产生的随机数是否已经存在*/if(m==a[i])flag=0; /*flag=1表示产生的是新的随机数,flag=0表示新产生的随机数已经存在*/if(flag){a[t++]=m; /*如果产生了新的随机数,则存入数组*//*根据t的模值,判断当前的牌应存入哪个数组中*/if(t%4==0)b1[b11++]=a[t-1];elseif(t%4==1)b2[b22++]=a[t-1];elseif(t%4==2)b3[b33++]=a[t-1];elseif(t%4==3)b4[b44++]=a[t-1];}}qsort(b1, 13, sizeof(int), comp); /*将每个人的牌进行排序*/qsort(b2, 13, sizeof(int), comp);qsort(b3, 13, sizeof(int), comp);qsort(b4, 13, sizeof(int), comp);p(b1, n); /*分别打印每个人的牌*/p(b2, n);p(b3, n);p(b4, n);return 0;
}
void p(int b[], char n[])
{int i;printf("\n\006 "); /*打印黑桃标记*/for(i=0; i<13; i++) /*将数组中的值转换为相应的花色*/if(b[i]/13==0) /*找到该花色对应的牌*/printf("%c ", n[b[i]%13]);printf("\n\003 "); /*打印红桃标记*/for(i=0; i<13; i++)if((b[i]/13)==1)printf("%c ", n[b[i]%13]);printf("\n\004 "); /*打印方块标记*/for(i=0; i<13; i++)if(b[i]/13==2)printf("%c ", n[b[i]%13]);printf("\n\005 "); /*打印梅花标记*/for(i=0; i<13; i++)if(b[i]/13==3 || b[i]/13==4)printf("%c ", n[b[i]%13]);printf("\n");
}
int comp(const void *j, const void *i) /*qsort调用的排序函数*/
{return(*(int*)i-*(int*)j);
}
差不多就到这里了,欢迎大家指正,这是我初学C语言时积累的一下代码,时隔久远,仍要守住一份初心,坚持学好算法,解决更多问题。