【C/C++ 经典小程序(一)】

【1】九九乘法表

  • 输出9*9口诀。共9行9列,i控制行,j控制列。
#include <stdio.h>
void main()
{int i,j,result;

for (i=1;i<10;i++)

{ for(j=1;j<i;j++)

{

result=i*j;

printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/

}

printf("\n");/*每一行后换行*/

}

}

【2】斐波那契数列

//第一种,直接计算
#include<iostream>
using namespace std;
unsigned int Fib(unsigned int n)
{
    unsigned int fib1 = 1;
    unsigned int fib2 = 1;
    unsigned int fib;
    for(int i=3; i<=n; ++i)//
    {
        fib = fib1 + fib2;
        fib1 = fib2;
        fib2 = fib;
    }
    return fib;
}
void main()
{
    unsigned int n;
    cout<<"请输入n:";
    cin>>n;
    cout<<"第"<<n<<"项的斐波那契值为:>"<<Fib(n)<<endl;
}
//第二种,递归算法

#include<iostream>
using namespace std;
unsigned int Fib(unsigned int n)
{
    if(n==1 || n==2)
        return 1;
    else
        return Fib(n-1)+Fib(n-2);
}
void main()
{
    unsigned int n;
    cout<<"请输入n:";
    cin>>n;
    cout<<"第"<<n<<"项的斐波那契值为:>"<<Fib(n)<<endl;
}

【3】判素数

  • 判断101-200之间有多少个素数,并输出所有素数及素数的个数。
//思路1
#include <stdio.h>
void main(){
int a=0;//素数个数
int n=0;//输入的整数
printf("enter a int:");
scanf("%d",&n);
for(int i=0;i<n;i++){
if(n%i==0)
 a++;
if(a==0)
 printf("%d是素数",n);
else
 printf("%d不是素数",n);
}

}
//思路2
#include <stdio.h>
#include <math.h>
void main(){
int n;//输入的整数
int i;//循环
int k;//开根号
printf("enter a int:");
scanf("%d",&n);
k=(int)sqrt((double)n);//sqrt()的参数是double类型
for(i=0;i<=k;i++){
if(n%i==0)
 break;
}
//如果完成所有循环,那么n为素数
if(i>k){
printf("%d是素数。",n);
}
else
{
printf("%d不是素数。",n);

}
}

【4】判完数

一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.

  • 编程找出1000以内的所有完数。
#include <stdio.h>
void main(){
int n,sum,i;
for(n=1;n<1000;n++){
sum=0;
 for(i=0;i<n;i++){
  if(n%i==0) sum+=i;
}
 if(sum==n) {
  printf("%4d",n);
}
}
}

【5】数组进行逆时针旋转90度

将一个4×4的数组进行逆时针旋转90度后输出,要求原始数组的数据随机输入,新数组以4行4列的方式输出。

#include <stdio.h>
void main(){
int a[4][4],b[4][4],i,j;
printf("enter 16 nums:");
for(i=0;i<4;i++){
 for(j=0;j<4;j++){
  scanf("%d",&a[i][j]);
  b[3-j][i]=a[i][j];
}
}

printf("array b:");
for(i=0;i<4;i++){
 for(j=0;h<4;j++){
  printf("%d",&b[i][j]);
}
}
}

【6】杨辉三角形

  • 输出一个10行的杨辉三角形

在这里插入图片描述

#include <stdio.h>
void main(){
int a[10][10],i,j;
a[0][0]=1;
for(i=0;i<10;i++){
a[i][0]=a[0][0];//每行的第一个元素为1
for(j=0;j<=i;j++){
if(j==0) a[i][j]=a[0][0];//判断第一列
else if(i>=1&&j>=1&&(i!=j)){//判断是否为中间元素(不是第一列,也不是最后一列)
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
else if(j==i){//判断是否为最后一列
a[i][j]=a[i-1][j-1];
}
}
}
//输出杨辉三角
for(i=0;i<10;i++){
for(j=0;j<=i;j++){
printf("%5d",a[i][j]);
}
printf("\n");
}
}

【7】求平均成绩

通过键盘输入3名学生4门课程的成绩,

分别求每个学生的平均成绩和每门课程的平均成绩。

要求所有成绩均放入一个4行5列的数组中,输入时同一人数据间用空格,不同人用回车

其中最后一列和最后一行分别放每个学生的平均成绩、每门课程的平均成绩及班级总平均分。

#include <stdio.h>
void main(){
float a[4][5],s1,s2
int i,j;
for(i=0;i<3;i++){
for(j=0;j<4;j++){
scanf("%f",&a[i][j]);
}
}
for(i=0;i<3;i++){
s1=0;
for(j=0;j<4;j++){
 s1+=a[i][j];
}
a[i][4]=s1/4;
}
for(j=0;j<5;j++){
s2=0;
for(i=0;i<3;i++){
 s2+=a[i][j];
}
a[3][j]=s2/3;
}
for(i=0;i<4;i++){
for(j=0;j<5;j++){
printf("%6.2f",a[i][j]);
}
printf("\n");
}
}

【8】字符串反序输出

实现输入的字符串反序输出

  • 输入windows 输出swodniw
//方法一
#include <stdio.h>
#include <string.h>
void main(){
char c[200],c1;
int i,j,k;
printf("enter a string:");
scanf("%s",c);
k=strlen(c);
for(i=0,j=k-1;i<k/2;i++,j--){
c1=c[i];
c[i]=c[j];
c[j]=c1;
}
printf("%s",c);
}
//方法二:指针
void invert(char *s){
char t;
int i,j,k;
k=strlen(s);
for(i=0,j=k-1;i<k/2;i++,j--){
t=*(s+i);
*(s+i)=*(s+k);
*(s+k)=t;
}
}

void main(){
char c[200],*s;
*s=c;
printf("enter a string:");
scanf("%s",c);
invert(s);
printf("%s",c);
}

【9】从字符数组s中删除存放在c中的字符

  • 从字符数组s中删除存放在c中的字符
#include <stdio.h>
void main(){
char s[100],c;
int j,k;
printf("enter a string\n");
gets(s);
printf("enter a character");
c=getchar();
for(j=k=0;s[j]!='\0';j++){
if(s[j]!=c){
s[k++]=s[j];
}
s[k]='\0';
}
printf("\n%s",s);
}

【10】数组排序+文件输出

编写一个void sort(int *x,int n)实现将x数组中的n个数据从大到小排序。
n及数组元素在主函数中输入。将结果显示在屏幕上并输出到文件p9_1.out中。

#include <stdio.h>
#include <cstdio>
void sort(int *x,int n){
int i,j,k,t;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++){
if(x[j]>x[k]) k=j;
}
if(k!=i){
t=x[i];
x[i]=x[k];
x[k]=t;
}
}
}
void main(){
FILE *fp;
int *p,a[10],i;
p=a;
fp=fopen("p9_1.out","w");
printf("enter 10 nums:");
for(i=0;i<10;i++){
scanf("%d",p++);
}
p=a;
sort(p,10);
for(;p<a+10;p++){
printf("%d",*p);
fprintf(fp,"%d",*p);
}
system("pause");
fclose(fp);
}

【11】插入数组

已知数组a中的元素已按由小到大顺序排列,以下程序的功能是将输入的一个数插入数组a中,插入后,数组a中的元素仍然由小到大顺序排列。

#include <stdio.h>

void main(){
    
    int a[10]={0,1,2,4,5,6,7};//a[0]为工作b单元,从a[1]开始存放数据
    int x,i,j=6;//j是元素个数
    printf("enter a num:");
    scanf("%d",&x);
    a[0]=x;
    i=j;//从最后一个单元开始
    while(a[i]>x)//把比x大的数往后移动一个位置
    {
        a[i+1]=a[i];
        i--;
    }
    a[i+1]=x;
    j++;//插入x后元素总数增加
    for(i=1;i<=j;i++){
        printf("%8d",a[i]);
    }
    printf("\n");
}

【12】字符替换+文件输出

编写函数replace(char *s,char c1,char c2)实现将s所指向的字符串中所有字符c1用c2替换,字符串、字符c1和c2均在主函数中输入,将原始字符串和替换后的字符串显示在屏幕上,并输出到文件p10_2.out中。

#include <stdio.h>
void replace(char *s,char c1,char c2)
{
    while(*s!='\0'){
        if(*s==c1){
            *s=c2;
        }
        s++;
    }
}
void main(){
    FILE *fp;
    char str[100],a,b;
    if((fp=fopen("p10_2.out", "w"))==NULL)
    {
        printf("cannot open the file\n");
        exit(0);
    }
    printf("enter a string:\n");
    gets(str);
    printf("enter a&&b:\n");
    scanf("%c,%c",&a,&b);
    printf("%s\n",str);
    fprintf(fp, "%s\n",str);
    replace(str, a, b);
    printf("The new string is---%s\n",str);
    fprintf(fp, "The new string is---%s\n",str);
    fclose(fp);
   
}

【13】查找字符子串

在一个字串s1中查找一子串s2,若存在则返回子串在主串中的起始位置,不存在则返回-1。

#include <stdio.h>

int search(char s1[],char s2[]){
    int i=0,j,len=strlen(s2);
    while (s1[i]) {
        for(j=0;j<len;j++){
            if(s1[i+j]!=s2[j]) break;
        }
            if(j>=len) return i;
            else i++;
        
    }
    return -1;
}

void main(){
  
    char s1[16]="this is";
    char s2[5]="is";
    printf("%d\n",search(s1,s2));
}

【14】用指针变量输出结构体数组元素

用指针变量输出结构体数组元素

#include <stdio.h>
struct Student{
    int num;
    char *name;
    char sex;
    int age
}stu[5]={{1001,"liu",'F',18},{1002,"wang",'M',18},{1003,"huang",'F',19},{1004,"sun",'M',18},{1005,"chen",'F',18}};
void main(){
    int i;
    struct Student *ps;
    printf("Num \tName\t\t\tSex\tAge\t\n");
    //用指针变量输出结构体数组元素
    for (ps=stu; ps<stu+5; ps++) {
        printf("%d\t%-10s\t\t%c\t%d\t\n",ps->num,ps->name,ps->sex,ps->age);
    }
    //数组下标法输出结构体数组元素学号和年龄
    for (i=0; i<5; i++) {
        printf("%d\t%d\t\n",stu[i].num,stu[i].age);
    }
}

【15】建立链表

建立一个有三个结点的简单链表

#include <stdio.h>
struct Student{
    int num;
    char *name;
    int age;
    struct Student *next;
};
void main(){
    struct Student a,b,c,*head,*p;
    a.num=1001;a.name="liu";a.age=18;
    b.num=1002;b.name="wang";b.age=18;
    c.num=1003;c.name="li";c.age=19;
    head=&a;
    a.next=&b;
    b.next=&c;
    c.next=NULL;
    //输出链表
    p=head;
    do{
        printf("%5d,%s,%3d\n",p->num,p->name,p->age);
        p=p->next;
    }while(p!=NULL);
}

【16】判断回文字符串

输入一个字符串,判断其是否为回文。回文字符串是指从左到右读和从右到左读完全相同的字符串。

#include <stdio.h>
#include <string.h>
void main(){
    char s[100];
    int i,j,n;
    printf("输入字符串:");
    gets(s);
    n=strlen(s);
    for(i=0,j=n-1;i<j;i++,j--){
        if(s[i]!=s[j]) break;
    }
    if(i>=j)printf("是回文字符串\n");
    else printf("不是回文字符串\n");
}

【17】冒泡排序

== 冒泡排序==,从小到大,排序后结果输出到屏幕。

0.如果遇到相等的值不进行交换,那这种排序方式是稳定的排序方式。
1.原理:比较两个相邻的元素,将值大的元素交换到右边
2.思路:依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面。
    (1)第一次比较:首先比较第一和第二个数,将小数放在前面,将大数放在后面。
    (2)比较第2和第3个数,将小数 放在前面,大数放在后面。
    …
    (3)如此继续,直到比较到最后的两个数,将小数放在前面,大数放在后面,重复步骤,直至全部排序完成
    (4)在上面一趟比较完成后,最后一个数一定是数组中最大的一个数,所以在比较第二趟的时候,最后一个数是不参加比较的。
    (5)在第二趟比较完成后,倒数第二个数也一定是数组中倒数第二大数,所以在第三趟的比较中,最后两个数是不参与比较的。
    (6)依次类推,每一趟比较次数减少依次

N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-1-i)次

#include <stdio.h>
void fun(int a[],int n){
    int i,j,t;
    for(i=0;i<n-1;i++){//n个数,总共n-1趟排序
        for (j=0; j<n-1-i; j++) {//每轮比较n-1-i次
            if (a[j]>a[j+1]) {
                  t=a[j];
                  a[j]=a[j+1];
                  a[j+1]=t;
            }
        }
    }
}
void main(){
    
    int a[]={6,5,4,3,2,1,0,8,9,7};
    int n;
    int i;
    n=sizeof(a)/sizeof(int);//sizeof返回值以字节为单位
    fun(a, n);
    for (i=0; i<n; i++) {
        printf("%4d",a[i]);
    }
    printf("\n");
}

【18】选择排序

算法思想:选择排序,从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。

#include <stdio.h>
void main(){
    int i,j,t,k,a[10]={5,9,3,6,7,8,0,2,1,4};
    int n;
    n=sizeof(a)/sizeof(int);
    for (i=0; i<n-1; i++) {
        k=i;
        for (j=i+1; j<n; j++) {
            if (a[k]>a[j]) {
                k=j;
            }
        }
        if (k!=i) {
            t=a[i];
            a[i]=a[k];
            a[k]=t;
        }
    }
    for (i=0; i<n; i++) {
        printf("%4d",a[i]);
    }
    printf("\n");
}

【19】计算π的近似值

编写函数countpi,利用公式:

在这里插入图片描述

计算π的近似值,当某一项的值小于10-5时,认为达到精度要求。将结果显示在屏幕上。
\Gamma(z) = \int_0^\infty t{z-1}e{-t}dt,.

#include <stdio.h>
double countpi(double eps)//eps:允许误差(某一项的值要小于eps)
{
    int m=1;
    double temp=1.0,s=0;
    while (temp>=eps) {
        s+=temp;
        temp=temp*m/(2*m+1);
        m++;
    }
    return (2*s);//s=π/2
}
void main(){
    double eps=1e-5,pi;
    pi=countpi(eps);
    printf("pi=%f\n",pi);
}
  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值