文章目录

  • C语言常考类型
  • 经典代码
    • 1) 兔子问题
    • 2) 斐波那契数列
    • 3) 百元买百鸡
    • 4) 实心菱形
    • 5) 空心菱形
    • 6) 十进制转换为二进制
    • 7) 水仙花
    • 8) 大数相加
    • 9) 冒泡排序
    • 10) 选择排序
    • 11) 打印字母V
    • 12) 打印空心等腰三角形
    • 13) 打印大写字母Y
    • 14 ) 判断输入字符是否为回文数
    • 15) 利用sort函数进行排序
    • 16) 利用函数实现两个数的相加
    • 17) 利用函数实现两个数的交换
    • 18) 解一元二次方程组
    • 19)冒泡排序与交换排序的结合
    • 20) 倒序输出
    • 21)八皇后问题
    • 22)汉诺塔问题
    • 23)数组的行列互换
    • 24)求1000内的完全数
    • 25) 辗转相除法
    • 26) 回文串
    • 27)采用非strcat和strcat方式实现字符串的连接
    • 28)用宏定义计算两个数的和
    • 29)逆序输出

C语言常考类型

(1)求及格人数或平均成绩或最大最小成绩,素数,水仙花,完数,选择排序,加密(字母循环移动),自定义函数的定义与调用,求阶乘
(2)最大公约数和最小公倍数,文件读写,递归函数与递归调用,Fibonacci数列
(3)指针变量做函数参数,数组做函数参数, 结构体类型定义以及结构体变量的定义, 联合,指针与结构体变量,二重循环,指针与一维数组,二维数组
(4)自增运算++,自减运算–,基础知识(背诵),求累加和,交换两个变量的值,switch, 一维数组
函数的调用

#include<stdio.h>
int fun(int x, int y);  // 函数声明,如果函数写在被调用处之前,可以不用声明
void main()
{int a=1, b=2, c;c = fun(a, b);      // 函数的调用,调用自定义函数fun,其中a,b为实际参数,传递给被调用函数的输入值
}
// 自定义函数fun
int fun(int x, int y)   // 函数首部
{                       // {}中的语言为函数体return x>y ? x : y; // 返回x和y中较大的一个数
}

自加与自减

a++        //是先执行表达式后再自增,执行表达式时使用的是a的原值。
++a         //先自增再执行表达示,执行表达式时使用的是自增后的a。
int a=0
printf("%d",a++); //输出0,执行完后a=1int a=0
printf("%d",++a);//输出1,执行完后a=1

经典代码

1) 兔子问题

#include<stdio.h>
int main() {int f1=1,f2=1;int i;for(i=1; i<20; i++) {printf("%12d %12d",f1,f2);if(i%2==0)printf("\n");f1=f1+f2;f2=f2+f1;}return 0;
}

2) 斐波那契数列

#include<iostream>
using namespace std;
int main() {int f1=0,f2=1,t,n=1;cout<<"数列第1个:"<<f1<<endl;cout<<"数列第2个:"<<f2<<endl;for(n=3; n<=20; n++) {t=f2;f2=f1+f2;f1=t;cout<<"数列第"<<n<<"个:"<<f2<<endl;}cout<<endl;return 0;
}

斐波那契数列的应用

#include<stdio.h>
int main() {int i,m;int n;printf("输入要求的项数:");scanf("%d",&n);float num1=2,num2=1,sum=0;for(i=1; i<=n; i++) {sum=sum+num1/num2;m=num1;num1=num1+num2;num2=m;}printf("sum=%.2f",sum);
}

3) 百元买百鸡

#include <stdio.h>
#include <math.h>void swap(int x,int y,int z) {for(x=1; x<=20; x++)for(y=1; y<=33; y++) {z=100-x-y;if(x*5+y*3+z/3.0==100)printf("x=%d y=%d z=%d\n",x,y,z);}
}
int main() {int x,y,z;swap(x,y,z);return 0;
}

4) 实心菱形

#include<iostream>
using namespace std;
int main() {int i,j,k;int N;//控制菱形的大小N;cin>>N;//先打上边的N行for(i=1; i<=N; i++) {for(j=1; j<=N-i; j++) {cout<<" ";//打印的空格数}for(k=1; k<=2*i-1; k++)cout<<"*";//星号数cout<<endl;}//下边的N-1行for(i=N-1; i>=0; i--) {for(j=1; j<=N-i; j++) {cout<<" ";//打印的空格数}for(k=1; k<=2*i-1; k++)cout<<"*";//星号数cout<<endl;}return 0;
}

5) 空心菱形

方法一:

#include<stdio.h>
int main() {int a,n,i;scanf("%d",&a);for(n=1; n<=a/2+1; n++) { //n是行for(i=1; i<=a-n; i++)printf(" ");printf("*");for(i=1; i<=2*n-3; i++) {printf(" ");}if(n>1)printf("*");printf("\n");}for(n=a/2; n>0; n--) { //n是个数for(i=1; i<=a-n; i++) //这是个函数!a-n斜率为-1,a-n/2斜率为-2!printf(" ");printf("*");for(i=1; i<=2*n-3; i++) {printf(" ");}if(n>1)printf("*");printf("\n");}return 0;
}

方法二:

#include<stdio.h>
int main() {int i,j,k,line,m;printf("请输入行数:");scanf("%d",&line);m=(line+1)/2;for(i=1; i<=m; i++) {for(k=0; k<m-i; k++) {printf(" ");}printf("*");if(i==1) {printf("\n");continue;}for(j=0; j<2*i-3; j++){printf(" ");}printf("*");printf("\n");}for(i=m-1; i>0; i--) {for(k=0; k<m-i; k++) {printf(" ");}printf("*");if(i==1) {printf("\n");continue;}for(j=0; j<2*i-3; j++) {printf(" ");}printf("*");printf("\n");}return 0;
}

方法三:

#include"stdio.h"
#include"math.h"
int main() {int i,j,n;scanf("%d",&n);for(i=-n; i<=n; i++) {for(j=-n; j<=n; j++)if(abs(i)+abs(j)==n) printf("*");else printf(" ");printf("\n");}
}

6) 十进制转换为二进制

#include<stdio.h>
int main() {int a,i=2,j=0;int b[100];scanf("%d",&a);while(i>=1) {i=a/2;if(i*2==a) {b[j++]=0;} else {b[j++]=1;}a=i;}for(j-=1; j>=0; j--)printf("%d",b[j]);return 0;
}

7) 水仙花

#include<iostream>
using namespace std;void a1() {int count =0;int x,backNum,befNum,t,num;cout<<"请输入一个三位数:"<<endl;cin>>x;t=x;for(int i=1; i<=3; i++) {backNum=x%10;befNum=x/10;x=befNum;num=backNum*backNum*backNum;count+=num;}cout<<"x="<<t<<endl;cout<<"count="<<count<<endl;if(count==t) {cout<<"Yes"<<endl;} else cout<<"No"<<endl;
}int main() {a1();return 0;
}

8) 大数相加

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;string addStringString(string a, string b) {string s = "";reverse(a.begin(), a.end());reverse(b.begin(), b.end());int i = 0, m=0, k = 0;while(a[i] && b[i]) {m = a[i] - '0' + b[i] - '0' + k;k = m/10;s += m%10 + '0';i++;}if(i == a.size()) {while(i != b.size()) {m = b[i] - '0' + k;k = m/10;s += m%10 + '0';i++;}if(k != 0) {s += (k+'0');}} else if(i == b.size()) {while(i != a.size()) {m = a[i] - '0' + k;k = m/10;s += m%10 + '0';i++;}if(k != 0) {s += (k+'0');}}reverse(s.begin(), s.end());return s;
}
int main() {string a;string b;cin >> a >> b;cout << addStringString(a,b) << endl;
}

9) 冒泡排序

1)一维冒泡

#include<stdio.h>
int main()
{ int a[10]={1,2,3,4,5,6,7,8,10,9};int i=0,j=0;int t;for(i=0;i<10;i++){for(j=0;j<10-1;j++){if(a[j]>a[j+1]){int t=a[j];a[j]=a[j+1];a[j+1]=t;}}}printf("排好的数列为:\n");for(i=0;i<10;i++){printf("%2d ",a[i]);}}

2)二维冒泡:

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

10) 选择排序

#include <stdio.h>
int main() {int i,j,t,a[11];      //定义变量及数组为基本整型printf("请输入10个数:\n");for(i=1; i<11; i++)scanf("%d",&a[i]);      //从键盘中输入要排序的10个数字for(i=1; i<10; i++)for (j=i+1; j<11; j++)if(a[i]>a[j]) {    //如果前一个数比后一个数大,则利用中间变量t实现两值互换t=a[i];a[i]=a[j];a[j]=t;}printf("排序后的顺序是:\n");for(i=1; i<11; i++)printf("%5d", a[i]);      //输出排序后的数组printf("\n");return 0;
}

11) 打印字母V

#include<stdio.h>
int main() {int line;int i;scanf("%d",&line);int n=(line+1)/2;for(int i=n; i>0; i--) {for(int k=0; k<n-i; k++) {printf(" ");}printf("*");if(i==1) {printf("\n");continue;}for(int j=0; j<2*i-3; j++) {printf(" ");}printf("*");printf("\n");}}

12) 打印空心等腰三角形

#include <iostream>
#include <string>
using namespace std;void PriTriangle(int n) {for(int i=1; i<=n; ++i) {for(int j=1; j<=n-i; ++j) {cout<<" ";}for(int k=1; k<=2*i-1; ++k) {if(i==1 || i==n)cout<<"*";else {if(k==1 || k==2*i-1)cout<<"*";elsecout<<" ";}}cout<<"\n";}
}int  main() {cout<<"please input a number: ";int n;cin>>n;PriTriangle(n);}

13) 打印大写字母Y

#include<iostream>
using namespace std;
int main() {int n;cin>>n;int m=(n+1)/2;for(int i=m; i>=1; i--) {for(int k=1; k<=m-i; k++)cout<<" ";for(int j=1; j<=2*i-1; j++) {if(j==1||j==2*i-1) {cout<<"*";} else {cout<<" ";}}cout<<endl;}for(int i=0; i<m; i++) {for(int k=1; k<=m-1; k++) {cout<<" ";}cout<<"*"<<endl;}return 0;
}

14 ) 判断输入字符是否为回文数

#include<stdio.h>
#include<string.h>
int main() {char s[100];int i,j,n;printf("输入字符串:\n");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");elseprintf("不是回文串\n");return 0;
}

15) 利用sort函数进行排序

#include<iostream>
#include<string>
#include<algorithm>using namespace std;
//bool cmp(int a,int b)
//{//  return a>b;
//}
int main()
{int a[10]={5,1,0,3,7,8,4,6,9,2};sort(a,a+10);
//  sort(a,a+10,cmp);for(int i=0;i<10;i++){cout<<a[i]<<" ";}return 0;
}

16) 利用函数实现两个数的相加

#include<stdio.h>
float add(float x,float y) {float z;z=x+y;return (z);
}
int main() {float add(float x,float y);float a,b,c;scanf("%f%f",&a,&b);c=add(a,b);printf("sum is %f",c);return 0;
}

17) 利用函数实现两个数的交换

#include<stdio.h>
void swap(int *a,int *b) {int temp;temp = *a;*a = *b;*b = temp;
}
int main() {int a,b;scanf("%d%d",&a,&b);swap(&a,&b);printf("%d %d\n",a,b);return 0;
}

18) 解一元二次方程组

#include<stdio.h>
#include<math.h>
int main() {double a,b,c,disc,x1,x2,p,q;scanf("%lf%lf%lf",&a,&b,&c);disc=b*b-4*a*c;p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;printf("x1=%7.2f\nx2=%7.2f\n",x1,x2);return 0;
}

19)冒泡排序与交换排序的结合

#include<stdio.h>
void swap(int *a,int *b) {int temp=*a;*a=*b;*b=temp;
}void b_sort(int a[]) {int t;for(int i=0; i<10; i++) {for(int j=0; j<9; j++) {if(a[j]>a[j+1]) {//          t=a[j];
//          a[j]=a[j+1];
//          a[j+1]=t;swap(&a[j],&a[j+1]);}}}}
int main() {int a[10]= {1,2,3,4,-5,6,7,8,9,10};b_sort(a);for(int i=0; i<10; i++) {printf("%4d",a[i]);}}

20) 倒序输出

#include<stdio.h>
int main()
{int i,j;int t;int a[8];printf("请输入7个数:"); for(i=1;i<8;i++)scanf("%d",&a[i]);for(i=0;i<8;i++)for(j=1;j<7;j++)if(a[i]>a[j]){t=a[i];a[i]=a[j];a[j]=t;}printf(" ");for(i=1;i<=7;i++)printf("%5d",a[i]);   }

21)八皇后问题

#include <iostream>
#include <cmath>
#define N 8
using namespace std;
int board[N+1],cnt;
bool judge(int l,int n) { //判断在第l行第n个位置放是否合法for(int i=1; i<=l-1; ++i)if(board[i]==n||abs(board[i]-n)==abs(i-l))return false;return true;
}
void print() {for(int i=1; i<=N; ++i) {for(int j=1; j<board[i]; ++j)cout<<'*';cout<<'Q';for(int j=board[i]+1; j<=N; ++j)cout<<'*';cout<<endl;}cout<<endl;
}
void dfs(int l) {for(int i=1; i<=N; ++i) {if(judge(l,i)) {board[l]=i;if(l==N) {print();++cnt;} elsedfs(l+1);}}
}
int main() {dfs(1);cout<<cnt;//输出答案总数return 0;
}

22)汉诺塔问题

#include<stdio.h>
int main()
{void hanoi(int n,char one,char two,char three);int m;printf("input the number of diskes:");scanf("%d",&m);printf("The step to move %d diskes:\n",m);hanoi(m,'A','B','C'); } void hanoi(int n,char one,char two,char three){void move(char x,char y);if(n==1)move(one,three);else{hanoi(n-1,one,three,two);move(one,three);hanoi(n-1,two,one,three);}}
void move(char x,char y)
{printf("%c->%c\n",x,y);
}

23)数组的行列互换

#include<iostream>
using namespace std;
main() {int t,i,j,r[3][3]= {{1,2,3},{7,8,9}}; //定义要交换的数组r,大小为3*3,实际只使用了2*3for(i=0; i<2; i++) { //r的大小是2*3,把2*3变为3*2for(j=i; j<3; j++) {t=r[i][j];r[i][j]=r[j][i];r[j][i]=t;//交换过程,相当于交换了下标}}for(i=0; i<3; i++) { //显示,因为2*3已经是3*2了for(j=0; j<2; j++)printf("%d ",r[i][j]);printf("\n");}
}

24)求1000内的完全数

#include<stdio.h>
#define N 1000
int main()
{int i,m,g;for(m=2;m<=N;m++){g=0;for(i=1;i<m;i++){if(m%i==0)g=g+i;    } if(g==m){printf("完数%d的因子是:\n",m);          for(i=1;i<m;i++){if(m%i==0){printf("%d\t\n",i);}}}}return 0;}

25) 辗转相除法

#include<stdio.h>int main() {int u=32;int v=26;while(v!=0) {int temp=u%v;u=v;v=temp;}printf("%d",u);return 0;
}

如果v等于0,计算结束,u就是最大公约数
如果v不等于0,那么计算u除以v的余数,让u等于v,而v等于那个余数
回到第一步

26) 回文串

#include<iostream>
#include<string.h>
using namespace std;int main() {//char str[20];string str;int i,n;cin>>str;//scanf("%s",str);//n=strlen(str);n = str.length();cout<<n<<endl;for(i=0; i<=n/2; i++) {if(str[i]!=str[n-1-i]) {printf("N\n");break;} else {if(i==n/2)printf("Y\n");}}return 0;}

27)采用非strcat和strcat方式实现字符串的连接

本题要求编写程序,实现两个字符串的连接,并将连接后的字符串输出。

输入格式:
输入一行以回车结束的非空字符串(不超过20个字符),再输入一行以回车结束的非空字符串(不超过20个字符)。

输出格式:
一行输出俩字符串连接后新的字符串。

输入样例:
Hello_
China
输出样例:
Hello_China

解题一:

非空字符串但是字符串中可能含有空格,用scanf不会通过,采用gets函数。

#include<stdio.h>
#include<string.h>
int main(){char a[100],b[100];gets(a);gets(b);int extent=strlen(a);int extent2=strlen(b);int i=0;while(i<=extent2){a[extent++]=b[i++];}puts(a);}

解题二:
采用strcat函数实现字符串的连接

#include<stdio.h>
#include<string.h>
int main(){char a[100],b[100];
//  strcpy(a,"Hello_");
//  strcpy(b,"China");scanf("%s",&a);scanf("%s",&b);strcat(a,b);printf("%s",a);return 0;
}

28)用宏定义计算两个数的和

#include <cstdio>
#include <iostream>
#define lol long long int
#define A using
#define Long namespace
#define time std
#define ago ;
#define Here int
#define was main
#define a ()
#define monkey {
#define called lol x,y;
#define Jack cin>>x>>y;
#define ak cout<<x+y;
#define ioi return 0;
#define Orz }
A Long time ago Here was a monkey called Jack ak ioi Orz

输出结果图如下:

29)逆序输出

#include<stdio.h>
#include<string.h>
int main()
{char s[10];scanf("%s",s);int len=strlen(s);int flag=0;for(int i=len-1;i>=0;i--){if(s[i]=='0' && !flag)continue;if(s[i]!='0' && !flag) {printf("%c",s[i]);flag=1;continue;}printf("%c",s[i]);} printf("\n");return 0;
}
#include<stdio.h>int main(){int a=1;
//  printf("%d %d %d",++a,a++,a);printf("%d %d %d",a++,++a,a);return 0;
}

C / C++ 经典代码和常考类型相关推荐

  1. 《sizeof和strlen进阶笔试常考类型》

    <sizeof和strlen进阶,笔试常考类型> 1.sizeof和strlen的区别 2.各种数据类型具体的含义 总结 1.sizeof和strlen的区别 (1)关键字 sizeof ...

  2. 前端笔试常考设计模式,操作系统,数据结构,ACM模板,经典算法,正则表达式,常用方法

    考试时允许使用草稿纸,请提前准备纸笔.考试过程中允许上厕所等短暂离开,但请控制离开时间 笔试得分60%一般通过,面试答对80%才能通过 合集:2023年最全前端面试题考点HTML5+CSS3+JS+V ...

  3. 笔试面试常考数据结构-单链表常用操作编程实现

    单链表是笔试以及面试手写代码中常考的数据结构之一.下面实现了单链表的常见操作:创建单链表.删除节点.打印单链表(包括正向打印以及逆向打印).反转单链表.找出单链表的倒数第K个节点.合并两个有序单链表等 ...

  4. 《大厂算法面试题目与答案汇总,剑指offer等常考算法题思路,python代码》V1.0版...

    为了进入大厂,我想很多人都会去牛客.知乎.CSDN等平台去查看面经,了解各个大厂在问技术问题的时候都会问些什么样的问题. 在看了几十上百篇面经之后,我将算法工程师的各种类型最常问到的问题都整理了出来, ...

  5. @entity 不限字节长度的类型_面试常考,项目易错,长文详解C/C++中的字节对齐...

    面试常考,项目易错,长文详解C/C++中的字节对齐​mp.weixin.qq.com 引入主题,看代码 我们先来看看以下程序 //编译器:https://tool.lu/coderunner/ //来 ...

  6. 分解例题及解析_【高考物理】考前梳理,高中物理经典常考例题(带解析),收藏起来考试不低于90+!...

    物理应该是理综里最让同学们头疼的一科.最后的压轴大题更是让很多人不知道该怎么下手,题型复杂难理解,简直是丢分"小能手". 别怕!学姐来拯救你们了!高中物理经典常考例题(带解析),考 ...

  7. 3个常考的SQL数据分析题(含数据和代码)

    在数据类岗位招聘过程中,经常会考察求职者的SQL能力,这里整理了3个常考的SQL数据分析题,按照由简单到复杂排序,一起来测试一下你掌握了么? PS:以下SQL代码在MySQL8.0及其以上版本运行. ...

  8. 机器学习(Machine Learning)、深度学习(Deep Learning)、NLP面试中常考到的知识点和代码实现

    网址:https://github.com/NLP-LOVE/ML-NLP 此项目是机器学习(Machine Learning).深度学习(Deep Learning).NLP面试中常考到的知识点和代 ...

  9. 教你如何写四级高分作文!!!大学英语四级常考各种类型作文模板-范文

    文章目录: 补充:英语四级常用web 一:写作文必备知识点 二:高分作文标志 三:写出一篇好作文注意事项 四:英语四级作文高级替换词汇词组 1.替换词汇 2.替换词组 五:英语四级4大类作文类型及其模 ...

最新文章

  1. ios项目文件结构 目录的整理
  2. R语言绘制环形树状图
  3. 不讲码德!坏味道偷袭我这个老码农
  4. linux docker中gdb调试断点不停
  5. c语言无效参数视为严重错误,C语言编译错误:错误:‘-’参数类型无效(有‘int’)...
  6. 安装linux并卸载windows,如何在安装双启动后卸载 Windows 或者 Linux
  7. ASP.NET Core在Azure Kubernetes Service中的部署和管理
  8. Spring Boot : ApplicationListner
  9. JQuery Mobile iscroll插件使用教程及注意事项
  10. Harmony OS — Picker滑动选择器
  11. CentOS下MYSQL数据库的安装
  12. 时间戳与全球唯一性标识
  13. OpenSSL密码库算法笔记——第5.4章 椭圆曲线点的简介
  14. Python实现CART决策树
  15. Bandizip去除广告,注册图标,状态栏文本
  16. python 批量转换docx只转换了一个出现pywintypes.com_error被调用的对象已与其客户端断开连接
  17. saprk 提交远程作业_如何准备远程作业搜索
  18. html em加粗,HTML5 :b/strong加粗,i/em倾斜区别
  19. 图像的超分辨率重建SRGAN与ESRGAN
  20. semi-colon expectedcss(css-semicolonexpected)报错解决

热门文章

  1. 数据传输完整性_电缆监测数据传输系统分析与设计
  2. java 电子编号生成器_业务编号生成器
  3. java浮点数数转二进制的数吗_深入理解计算机系统(2.7)-二进制小数和IEEE浮点标准 - Java 技术驿站-Java 技术驿站...
  4. vue vant Area组件使用详解
  5. Could not load oracle/sql/converter_xcharset/lx20354.glb.
  6. 企业级实战03_真实项目实战SpringMVC整合ActiveMQ
  7. Git分支创建、合并、上传等命令
  8. oracle怎么查语句消耗时常,Oracle 查找常见耗性能的语句
  9. 取某个单元格的值_vba中如何进行单元格复制,Copy方法使用介绍,一定要学
  10. java 读取控制台_Java从控制台读入数据的几种方法总结