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

article/2025/9/3 15:08:44

【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;elsereturn 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);
elseprintf("%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);
}

http://chatgpt.dhexx.cn/article/RExYf0W6.shtml

相关文章

c语言编写简单实用的小程序,C语言编写一个小程序

用C/C编写一个小程序 #include using namespace std; int main() { int b[6]{1,2,2,3,4,5},i,j,k,l,m,n,p,c,d,*a[6]; for(j0;j<6;j) a[j]&b[j]; for(j0;j<6;j) { a[0]&b[j]; for(k0;k<6;k) { if(kj) continue; a[1]&b[k]; for(l0;l<6;l) { if(lj||lk)…

编写C语言的最简单小程序Hello world和函数使用

编写C语言的最简单小程序Hello world 一、示例一 1、编写demo.c程序 #include<stdio.h> int main() {printf("Hello world!");return 0; } 程序的第一行 #include <stdio.h> 是预处理器指令&#xff0c;告诉 C 编译器在实际编译之前要包含 stdio.h 文…

C语言小程序:通讯录(文件版)

在静态版本的通讯录里面实现了通讯录的基本逻辑&#xff0c;但是空间大小是固定的&#xff0c;这样子就会显得很不灵活&#xff0c;会有浪费空间和空间不足的问题&#xff0c;所以在动态版本的通讯里面我们通过动态内存开辟使用malloc函数给通讯录动态的开辟一块空间&#xff0…

C语言有趣的小程序

最近闲着没事写了一个C语言小程序,就当作是玩玩。 本小程序的各个功能都是通过dos命令来实现的。 运行结果如下图: 该小程序有以下几个功能: 1、启动计算器 2、新建记事本 3、打开画图板 4、定时关机(15s、30s、60s) 5、显示系统时间或修改 6、重启计算机 小程序源代码…

C语言小程序:通讯录(静态版)

哈喽各位老铁们&#xff0c;今天给大家带来一期通讯录的静态版本的实现&#xff0c;何为静态版本后面会做解释&#xff0c;话不多说&#xff0c;直接开始&#xff01; 关于通讯录&#xff0c;其实也就是类似于我们手机上的通讯录一样&#xff0c;有着各种各样的功能&#xff0c…

C语言小程序分享

本文为大一时所写的文章&#xff08;2017/4/23&#xff09;&#xff0c;文笔还很生疏&#xff0c;在很多问题上认识不深&#xff0c;算是在学校的微信公众号上的一个编程探究模块上的投稿&#xff0c;本人当时也参与了本模块的维护和管理。补档。 上个周末的一个下午&#xff0…

C语言小程序-学生成绩统计系统

C语言小程序-学生成绩统计系统 参考了 另一位博主的代码(https://blog.csdn.net/qq_36503589/article/details/53106983) 我后来写的成绩排序版本链接&#xff1a;https://blog.csdn.net/qq_43617268/article/details/103491760 功能介绍&#xff1a;本程序可以输入50人以内的…

C语言10个经典小程序——小白必备!

网上有很多的人说编程有多么多么无聊。。。。So Boring ! 。。。其实小编想说:不要管别人怎么说,别人说什么,做你自己喜欢做的事就好。坚持下来,你会发现编程的乐趣的。。。。当然,如果你觉得学习编程语言很痛苦,坚持了一段时间后无果,南无果断放弃未必不是一个好的选择…

C语言小程序:如何用代码“画”出一个爱心

利用ASCII编码第三个字符&#xff0c;作为基础&#xff0c;然后利用三个多重循环画出一个爱心出来。要使用控制台改变运行框大小和文字的颜色&#xff0c;黑白的爱心不免有些诡异。 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <math.h> #inclu…

我的第一个c语言小程序

标题&#xff1a;判断题答题小程序 Author: plc6666 软工专业 工科男 格言&#xff1a;总有人间一两风&#xff0c;填我十万八千梦。 文章目录 标题&#xff1a;判断题答题小程序 一.程序的由来二.程序的状况1.程序实现了颜色转换的功能2.程序能随机抽20题&#xff0c;不重复3.…

C语言10个经典小程序

【程序1】 题目&#xff1a;有1、2、3、4个数字&#xff0c;能组成多少个互不相同且无重复数字的三位数&#xff1f;都是多少&#xff1f; 1.程序分析&#xff1a;可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去       掉不满足条件的排列。 2.程序源…

用 C语言的写出几个小程序

系列文章目录 前言 1、第一章&#xff1a;求出一个整型数组中的最大值 2、第二章&#xff1a;打印出100~999之间所有的水仙花数 3、第三章&#xff1a;输入一个数&#xff0c;打印出n行杨辉三角 4、第四章&#xff1a;小只因跳楼梯问题 5、第五章&#xff1a;创建一个含是…

C语言小程序

1、猜数字游戏 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <time.h>//猜数字游戏 int main() {int guess 0;//生成随机数//0~99 --> 1~100int ret rand() % 100 1;//生成随机数的函数printf("请猜数字 …

服务器登录原理,单点登陆(单点登录原理)

单点登录简介 SSO&CAS是什么 单点登录适合什么场景 单点登录的三种实现方式 CAS的几个重要知识点 CAS的实现过程 单点登录简介 单点登录(SingleSignOn&#xff0c;SSO)&#xff0c;就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后&#xff0c;即可获得…

单点登陆 SSO

参考文章 同域下的单点登录 &#xff08;sso.a.com、app1.a.com、app2.a.com&#xff09; 统一通过sso.a.com 登录&#xff0c;但有以下两个问题&#xff1a; 1、Cookie是不能跨域的&#xff0c;我们Cookie的domain属性是sso.a.com&#xff0c;在给app1.a.com和app2.a.com发送…

五、微服务版单点登陆系统(SSO)

微服务版单点登陆系统(SSO)实践 文章目录 微服务版单点登陆系统(SSO)实践一、单点登陆系统简介1. 背景分析2. 单点登陆系统概述3. 单点登陆系统解决方案设计 二、单点登陆系统初步设计1. 服务设计2. 工程结构设计 三、系统基础服务工程设计及实现1. 业务描述2. 表结构设计3. 工…

单点登陆(SSO)

一、背景 在企业发展初期&#xff0c;企业使用的系统很少&#xff0c;通常一个或者两个&#xff0c;每个系统都有自己的登录模块&#xff0c;运营人员每天用自己的账号登录&#xff0c;很方便。但随着企业的发展&#xff0c;用到的系统随之增多&#xff0c;运营人员在操作不同的…

08单点登陆+Oauth2

详情&#xff1a;如看不懂跳转此地 1.1单点登录系统 每个站点都实现了专用登录模块。各站点的登录状态相互不认可&#xff0c;各站点需要逐一手工登录 这样的系统&#xff0c;我们又称之为多点登陆系统。应用起来相对繁琐&#xff08;每次访问资源服务都需要重新登录认证和授…

微服务版单点登陆系统(SSO)

单体架构中的用户的状态的存储是如何实现的? 单点登陆系统概述 单点登录&#xff0c;英文是 Single Sign On&#xff08;缩写为 SSO&#xff09;。即多个站点共用一台认证授权服务器&#xff0c;用户在其中任何一个站点登录后&#xff0c;可以免登录访问其他所有站点。而且&a…

SpringBoot跨系统单点登陆的实现

什么是单点登陆 单点登录&#xff08;英语&#xff1a;Single sign-on&#xff0c;缩写为 SSO&#xff09;&#xff0c;又译为单一签入&#xff0c;一种对于许多相互关连&#xff0c;但是又是各自独立的软件系统&#xff0c;提供访问控制的属性。当拥有这项属性时&#xff0c;…