C语言题型归纳

请认真掌握背记并自行编程一遍,运行是检验程序正确的唯一标准!!!

数的交换

:利用第三个变量来实现数值的交换

int tmp;

        tmp = a;

      a = b;

      b = tmp;

数的整除

 同时被两个数整除

a%b==0 && a%c==0

数的分解与合并

如水仙花数

#include<stdio.h>

 

int main()

{

    int i,x,y,z;

    for(i=100;i<1000;i++)

    {

        x=i%10;

        y=i/10%10;

        z=i/100%10;

        

        if(i==(x*x*x+y*y*y+z*z*z))

        printf("%d\n",i);

        

    }

    return 0;

}

判断奇数

int i;

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

        if(i%2==1){

            printf("%d为奇数\n",i);

        }

    }

判断偶数

int i;

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

        if(i%2==0){

            printf("%d为偶数\n",i);

        }

    }

将千位和十位.百位和个位的数字交换

#include <stdio.h>

int main()

{

    int a = 6351;

    int n1 = a/1000;

    int n2 = a%1000/100;

    int n3 = a%100/10;

    int n4 = a%10;

    printf("%d",n4*1000 + n3*100 + n2*10+ n1);

}

累加求和

int sum = 0;

for (int i = 1; i <= 100; i++) {

sum = sum + i;

}

 累乘求积

int a, b = 1;

for (a = 1; a <= 100; a++)

{

b *= a;

}

计算1+1/2!+1/3!+1/4! +…+1/n!的值

#include <stdio.h>

int f(int a) {        ///运用递归函数进行分母的阶乘

if (a == 1)

return 1;

else

return a * f(a - 1);

}

double fun(int n) {   //调用f函数,累加求和

int i;

double sum;

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

sum += 1.0 / f(i);

}

return sum;

}

int main() {

int n = 20;

double s;

s = fun(n);

printf("%lf", s);

return 0;

}

素数

用哥德巴赫猜想举例 证明任何一个充分大的偶数(大于等于6),总可以表示成两个素数(质数)之和。

#include <stdio.h>

int s(int a) {                                         //判断是否为素数

int i;

for (i = 2; i < a; i++) {

if (a % i == 0) {

return 0;                         // 不是素数  返还0

}

}

if (i == a)

return 1;                                   //是素数 返还1

}

int main() {

int j, b, k = 9;

scanf("%d", &j);

if (j < 6 || j % 2 == 1) {

printf("输入错误!!!!!\n");

} else {

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

if (s(b) == 1 && s(j - b) == 1) {

printf("猜想正确 %d  %d", b, j - b);

break;

}

}

}

return 0;

}

 数组

:最大值,最小值

#include <stdio.h>

int main() {

int i,k, max, min;

int a[10] ;

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

scanf("%d", &a[i]); //定义数组并赋初值

max = a[0];

min = a[0]; //先认为a[0]最大

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

if (a[i] > max) { //如果某元素大于max,就取代max的原值

max = a[i];

k = i + 1; //记下此元素的行号;

}

printf("k=%d\nmax=%d\n",  k, max);

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

if (a[i] < min) { //如果某元素小于min,就取代min的原值

min = a[i];

k = i + 1; //记下此元素的行号;

}

printf("k=%d\nmin=%d\n",  k, min);

:冒泡排序:

#include <stdio.h>

#define N 5

int main() {

int a[N];

int i = 0, j = 0, t = 0;

for (i = 0; i < N; i++)

scanf("%d", &a[i]);

for (i = 0; i < N ; i++) //比较趟数

for ( j = 0; j < N - 1 - i; j++) { //比较次数

if (a[j] > a[j + 1]) { //进行交换

t = a[j + 1];

a[j + 1] = a[j];

a[j] = t;

}

}

for (i = 0; i < N; i++)

printf("%d ", a[i]);

}

选择排序:

#include <stdio.h>

#define N 5

main()

{

int a[N];

int i = 0, j = 0, t = 0;

for (i = 0; i < N; i++)

scanf("%d", &a[i]);

for (i = 1; i < N; i++)  //比较趟数

for ( j = i; j < N; j++) //比较次数

{

if (a[i - 1] > a[j])  //进行交换

{

t = a[i - 1];

a[i - 1] = a[j];

a[j] = t;

}

}

for (i = 0; i < 5; i++)

printf("%d ", a[i]);

}

折半查找:

#include <stdio.h>

int binarySearch(int arr[], int target, int left, int right) {

    while (left <= right) {

        int mid = left + (right - left) / 2;

        // 如果目标元素在中间位置

        if (arr[mid] == target) {

            return mid;

        }

        // 如果目标元素比中间位置的元素小,在左半部分继续查找

        if (arr[mid] > target) {

            right = mid - 1;

        }

        // 如果目标元素比中间位置的元素大,在右半部分继续查找

        else {

            left = mid + 1;

        }

    }

    // 目标元素不存在于数组中

    return -1;

}

int main() {

    int arr[] = {1, 3, 5, 7, 9, 11, 13, 15, 17};

int n = sizeof(arr) / sizeof

插入:

#include <stdio.h>

#define N 10

int main() {

int e[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, f[N + 2];

int i, j, k, a, b;

scanf("%d", &a);//插入位置

a = a - 1;

scanf("%d", &b);//插入数

for (i = 0; i < a; i++)

f[i] = e[i];

f[i] = b;//插入

for (i = a; i < N; i++)

f[i + 1] = e[i];

}

//删除:

#include <stdio.h>

#define N 10

int main() {

int i = 0, a, e[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

scanf("%d", &a);//删除位置

a = a - 1;

if (N > a) {

for (; a < N; a++)

e[a] = e[a + 1];

e[N - 1] = '\0';//在整型数组中没有必要,但在字符串中一定不要忘记结尾加‘\0’

for (i = 0; i <  N - 1; i++)

printf("%d ", e[i]);

} else

printf("输入错误");

}

例子 二维数组左下角元素进行数乘

#include <stdio.h>

main() {

int a[3][3] = {1, 9, 7, 2, 3, 8, 4, 5, 6}, i, j, n;

for (i = 0; i < 3; i++) {

for (j = 0; j < 3; j++)

printf("%d ", a[i][j]);

printf("\n");

}

scanf("%d", &n);

for (i = 0; i < 3; i++)

for (j = 0; j <= i; j++)

a[i][j] = (a[i][j]) * n;

for (i = 0; i < 3; i++) {

for (j = 0; j < 3; j++)

printf("%d ", a[i][j]);

printf("\n");

}

  二维数组求解n个字符串中最大者

#include <stdio.h>

#include <string.h>

main() {

char a[3][20], str[20];

int i;

for (i = 0; i < 3; i++)

gets(a[i]);

if (strcmp(a[0], a[1]) > 0)

strcpy(str, a[0]);

else

strcpy(str, a[1]);

if (strcmp(a[2], str) > 0)

strcpy(str, a[2]);

printf("最大的字符串为;%s", str);

    说明:二维数组求解杨辉三角

#include <stdio.h>

main() {

int a[9][9], i, j;

for (i = 0; i < 9; i++) {

a[i][0] = 1;//定义第一列元素全为1

a[i][i] = 1;//定义行列数相同的元素全为1

}

for (i = 2; i < 9; i++) { //从第三行开始遍历

for (j = 1; j <= i - 1; j++)//第一行开始遍历

a[i][j] = a[i - 1][j] + a[i - 1][j - 1];//元素值为上一行该列元素与上一行上一列元素相加

}

for (i = 0; i < 9; i++) {

for (j = 0; j <= i; j++)

printf("%d\t", a[i][j]);

printf("\n");

}

}

字符串数组统计单词个数

#include <stdio.h>

main() {

char str[80], c;

int i, num = 0, word;

gets(str);

for (i = 0; (c = str[i]) != '\0'; i++) { //对输入的字符串进行遍历

if (c == ' ')//遇到空格字符,使word为0

word = 0;

else if (word == 0) {

word = 1;

num++;

}

}

printf("单词总数为;%d", num);

 字符串删除首位星号

#include <stdio.h>

#define N 80

#include <string.h>

main() {

char a[N], b[N];

int i, j = 0, d, c;

gets(a);

for (i = 0; i < N; i++) {

if (a[i] == '*')

continue;

else {

d = i;

break;

}//从头开始判断到不为星号的元素取其下标

}

for (i = strlen(a) - 1; i > 0; i--) {

if (a[i] == '*')

continue;

else {

c = i;

break;

}//从尾开始判断到不为星号的元素取其下标

}

for (i = d; i <= c; i++) {

b[j++] = a[i];

}

b[j] = '\0';

puts(b);

fun()的功能是移动一维数组中的内容,若数组中有n个整数,要求把下标为0-k(含k,k不大于n-1)的数组元素平移到数组的最后。

例如:一维数组中的原始内容为1,2,3,4,5,6,7,8,9,10;p的值为3。移动后,一维数组中的内容为5,6,7,8,9,10,1,2,3,4

#include <stdio.h>

#define N 80

void fun(int *w, int k, int n) {

int b[N], i, j = 0;

for (i = 0; i <= k; i++) {//前k+1项存起来

b[i] = w[i];

}

for (i = 0; i < n - k; i++)//后几项往前覆盖

w[i] = w[k + i + 1];

for (i = n - k - 1 ; i < n; i++)//再把前k+1项放到w后面

w[i] = b[j++];

}

int main() {

int a[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};

int i, k, n = 15;

printf("The original data:\n");

for (i = 0; i < n; i++)

printf("%3d", a[i]);

printf("\n\nEnter k:");

scanf("%d", &k);

fun(a, k, n);

printf("\nThe data after moving:\n");

for (i = 0; i < n; i++)

printf("%3d", a[i]);

printf("\n\n");

return 0;

}删除数组中重复元素:编写函数fun(),该函数的功能是删除一维数组中所有相同的元素,使之只剩一个。数组中的元素已按照由小到大的顺序排列,函数返回删除后数组中元素的个数。

例:

一维数组元素是

2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10

删除后,数组中元素应该是

2 3 4 5 6 7 8 9 10

#include <stdio.h>

#define N 80

int fun(int a[], int n) {

int i, j = 0;

for (i = 1; i < n; i++) {     //遍历数组

if (a[j] != a[i])     //如果前后两项不一致

a[++j] = a[i];//j项往后一个元素就用来存放这个不一样的a[i]元素

}

n = j + 1;//更新删除多余元素后的数组长度

return n;

}

int main() {

int a[N] = {2, 2, 2, 3, 4, 4, 5, 6, 6, 6, 6, 7, 7, 8, 9, 9, 10, 10, 10, 10}, i, n = 20;

printf("The original data:\n");

for (i = 0; i < n; i++)

printf("%3d", a[i]);

n = fun(a, n);

printf("\n\nThe data after deleted:\n");

for (i = 0; i < n; i++)

printf("%3d", a[i]);

printf("\n\n");

return 0;

}

在程序中,已建立一个带头结点的单向链表,链表中的各结点按结点数据域中的数据递增有序链接。函数fun的功能是:把形参x的值放入一个新节点并插入链表中,使插入后各结点数据域中的数据仍保持递增有序。

#include    <stdio.h>

#include    <stdlib.h>

#define    N    8

typedef  struct list

{  int  data;

   struct list  *next;

} SLIST;

void fun( SLIST  *h, int  x)

{  SLIST  *p, *q, *s;

   s=(SLIST *)malloc(sizeof(SLIST));

/**********found**********/

   s->data=___1___;/// x     s是你所要添加的链表

   q=h;

   p=h->next;

   while(p!=NULL && x>p->data) {

/**********found**********/

      q=___2___;//q->next     向后遍历

      p=p->next;

   }

   s->next=p;///跳出循环 说明找到S链表应该插入的位置,把S的尾巴和下一链表连起来

/**********found**********/

   q->next=___3___;///上一条把尾部连好后,再把前一链表的尾巴跟S链表连起来

}

SLIST *creatlist(int  *a)

{  SLIST  *h,*p,*q;      int  i;

   h=p=(SLIST *)malloc(sizeof(SLIST));

   for(i=0; i<N; i++)

   {  q=(SLIST *)malloc(sizeof(SLIST));

      q->data=a[i];  p->next=q;  p=q;

   }

   p->next=0;

   return  h;

}

void outlist(SLIST  *h)

{  SLIST  *p;

   p=h->next;

   if (p==NULL)  printf("\nThe list is NULL!\n");

   else

   {   printf("\nHead");

       do { printf("->%d",p->data);  p=p->next;  } while(p!=NULL);

       printf("->End\n");

   }

}

void main()

{  SLIST  *head;      int  x;

   int  a[N]={11,12,15,18,19,22,25,29};

   head=creatlist(a);

   printf("\nThe list before inserting:\n");  outlist(head);

   printf("\nEnter a number :  ");  scanf("%d",&x);

   fun(head,x);

   printf("\nThe list after inserting:\n");  outlist(head);

}

函数fun()的功能是将不带头结点的单向链表节点数据域从头至尾的数据10、4、2、8、6,排序后链表节点数据域从头至尾的数据为2、4、6、8、10

#include <stdio.h>

#include <stdlib.h>

#define N 6

typedef struct node {

int data;

struct node *next;

} NODE;

void fun(NODE *h) {

NODE *p, *q;

int t;

p = h;

while (p) {

q = p->next;   //准备比较p,q中元素的大小

while (q) {

if (p->data > q->data) {

t = p->data;

p->data = q->data;

q->data = t;

}//按小到大排

q = q->next; 更新q的位置 向后遍历

}

p = p->next;//判断完初始位置的p中的元素后,向后遍历 准备对下一位置进行排序

}

}

NODE *creatlist(int a[]) {

NODE *h, *p, *q;

int i;

h = NULL;

for (i = 0; i < N; i++) {

q = (NODE *)malloc(sizeof(NODE));

q->data = a[i];

q->next = NULL;

if (h == NULL)

h = p = q;

else {

p->next = q;

p = q;

}

}

return h;

}

void outlist(NODE *h) {

NODE *p;

p = h;

if (p == NULL)

printf("The list is NULL!\n");

else {

printf("\nHead");

do {

printf("->%d", p->data);

p = p->next;

} while (p != NULL);

printf("->End\n");

}

}

int main() {

NODE *head;

int a[N] = {0, 10, 4, 2, 8, 6};

head = creatlist(a);

printf("\nThe original list:\n");

outlist(head);

fun(head);

printf("\nThe list after inverting:\n");

outlist(head);

return 0;

}

感谢通读全文。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/646118.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

23111 网络编程 面试题

1.进程与线程的区别 进程之间资源是独立的&#xff0c;是资源分配的最小单位&#xff0c;进程的pid是FILE函数的返回的句柄&#xff0c;子进程初始资源是拷贝父进程的&#xff0c;进程分为用户空间和内核空间&#xff1b; 同一进程下的线程之间共享资源&#xff0c;是任务分配…

做FP独立站怎么引流?这个引流法宝收好了!

近年来&#xff0c;由于卖家数量飙升导致平台竞争持续升级&#xff0c;卖家之间的恶性循环竞争以及平台政策的不断调整等&#xff0c;造成了众多亚马逊等跨境卖家纷纷从平台转向独立站。可是&#xff0c;转型做独立站前要先考虑清楚独立站与平台二者之间的区别。 如果在第三方平…

EXCEL VBA网抓技巧-复制网页表格,不用遍历单元格

EXCEL VBA网抓技巧-复制网页表格&#xff0c;不用遍历单元格 对应表格复制 Sub tableTest()Set winhttp CreateObject("winhttp.WinHttpRequest.5.1")Set HTML CreateObject("htmlfile")Set oWindow HTML.ParentWindowUrl "https://www.taiwanlo…

内网穿透、远程桌面、VPN的理解

最近在研究内网穿透的相关技术&#xff0c;然后回想起一些相关的技术&#xff0c;比如说要远程桌面公司的电脑&#xff0c;VPN连入内网等。然后想着在此处记录一下&#xff0c;各个的区别&#xff0c;这个纯粹是从技术层面的理解&#xff0c;此处不详细解释怎么去实现或者用什么…

el-table在鼠标移动到单元格时变为下拉框,否则是普通文本

el-table将多个单元格改为下拉框&#xff0c;导致渲染卡顿&#xff0c;解决方法在鼠标移动到单元格时变为下拉框&#xff0c;否则是普通文本 <el-table-column label"显示方向" width"150px" align"center" key"direction" prop&q…

Jmeter分布式压测过程常见问题

1、JMeter分布式压测试&#xff0c;结果树响应数据为空 解决&#xff1a;打开主控机的jmeter-bin,打开jmeter-properties,将modeStandard 前面的#去掉&#xff0c;保存重启jmeter 2、JMeter压力测试报Address already in use: connect错误 方法一&#xff1a; cmd中&#x…

Javascript--流程控制

目录 数据类型转换 自动类型转换 强制类型转换 流程控制语句 顺序流程 选择流程 单分支 双分支 多分支 switch 循环流程 for循环 while循环 do...while循环 如何选择 continue和break 循环案例 数据类型转换 由于 javascrip 这个语言它是弱类型语言&#xff0c…

SpringBoot实现热部署

一、热部署&#xff08;Hot Swap&#xff09; 从Java1.4起&#xff0c;JVM引入了HotSwap&#xff0c;能够在Debug的时候更新类的字节码。所以使用热部署&#xff0c;可以实现修改代码后&#xff0c;无须重启服务就可以加载修改的代码&#xff0c;但是它只能用来更新方法体。 实…

Git学习笔记:3 git tag命令

文章目录 git tag 基本用法1. 创建标签2. 查看标签3. 删除标签4. 推送标签到远程仓库5. 检出标签 普通提交和标签的区别1. 提交&#xff08;Commit&#xff09;2. 标签&#xff08;Tag&#xff09; git tag 基本用法 git tag 是 Git 中用于管理和操作标签&#xff08;tag&…

2023-2024年重庆职业院校技能大赛“信息安全管理与评估”比赛样题

2023 年重庆职业院校技能大赛&#xff08;高等职业教育&#xff09; “信息安全管理与评估”样题任务书 第一阶段&#xff1a;任务 1 网络平台搭建&#xff08;50 分&#xff09;任务 2 网络安全设备配置与防护&#xff08;250 分&#xff09; 第二阶段&#xff1a;第一部分 网…

web蓝桥杯真题--14、关于你的欢迎语

介绍 营销号&#xff0c;有时候需要一些特定的欢迎语&#xff0c;但针对特定的用户&#xff0c;我们希望可以个性化一点。本题需要在项目文件中修改代码存在的问题&#xff0c;实现根据模版生成特定用户的欢迎语。 准备 本题已经内置了初始代码&#xff0c;打开实验环境&…

Backend - Django URL 路由 重定向

目录 一、url 的 <> 作用 &#xff08;一&#xff09;操作流程 &#xff08;二&#xff09;前端设置链接 1. 包括&#xff1a; 2. 比如 &#xff08;三&#xff09;后端匹配路由 1. 理解 2. 比如 &#xff08;三&#xff09;后端视图的 get( )的参数 1. 理解 …

python绘图创建两个坐标轴 共享一个x轴

在Matplotlib中&#xff0c;可以使用twiny()或者twinx()方法创建一个共享一条轴线的第二个坐标轴&#xff0c;从而实现绘制两个坐标轴的效果 import matplotlib.pyplot as plt import numpy as np# 创建一些示例数据 x np.linspace(0, 10, 100) y1 np.sin(x) y2 np.cos(x)#…

第十四届蓝桥杯国赛 C++ B 组 G 题——AB路线(AC)

目录 1. AB路线1. 问题描述2. 输入格式3. 输出格式4. 样例输入5. 样例输出6. 样例说明7. 评测用例规模与约定8. 原题链接 2. 解题思路3. AC_Code 1. AB路线 前置知识点&#xff1a;BFS (广度优先搜索) 1. 问题描述 有一个由 N M N \times M NM 个方格组成的迷宫&#xff0…

flutter-相关个人记录

1、flutter 安卓打包打包报错 flutter build apk -v --no-tree-shake-icons 2、获取华为指纹证书命令 keytool -list -v -keystore ***.jks 3、IOS项目中私有方法查找隐藏文件中 1、cd 项目目录地址 2、grep -r xerbla. "xerbla"为需要查找的关键字 3…

【秒剪】如何一键恢复至素材原长?

Step1:点击下方【剪辑】 Step2:点击【时长截取】 Step3:点击【恢复至原长】 Step4:点击【恢复所有片段到原长】

推荐一个还可以的windows ssh工具

1.下载 https://github.com/kingToolbox/WindTerm/releases 2.解压 3.使用 上传 下载都很快 比cmd窗口好用 当然和finalshell有点像

JAVASE进阶(设计模式、设计原则)

目录 一、注解 内置注解:JAVA中已经定义好的注解。 元注解:修饰注解的注解。 自定义注解。 二、克隆 JAVA中对clone的实现? 浅克隆 深克隆 那么该如何做到深克隆呢? 三、常用设计模式 1、创建型模式 单例模式 工厂模式 工厂方法模式 抽象工厂模式 原型模式 一、注…

系统登录的时候的密码如何做到以加密的形式进行登录【java.security包下的api】工具类。

/** description: 将普通的publicKey转化得到一个RSAPublicKey* author: zkw* date: 2024/1/24 16:17* param: publicKey 普通的publicKey* return: RSAPublicKey 得到一个新的RSAPublicKey**/public static RSAPublicKey getPublicKey(String publicKey) throws NoSuchAlgorit…

oracle数据库插入或者更新判断是否存在记录的SQL

oracle数据库插入或者更新判断是否存在记录的SQL 1、插入的时候判断是否存在&#xff0c;若存在则忽略&#xff0c;若不存在则插入 写法① insert into student(id,name,sex) select 111,张三,女 from dual where not exists (select 1 from student where id 111)写法② …