C语言---程序设计练习题目及学习方法1

embedded/2024/9/18 0:40:48/ 标签: c语言, 学习方法, 算法

学习方法

  1. 要多练习
    • 在这些题目中的代码和题目 自己动手去敲
    • 练习也是在熟悉语法,写代码第一步就是熟悉语法
    • 练习是在锻炼编程思维,把实际问题转换为代码的能力
  2. 学会画图
    • 画图去理解内存,理解指针这些比较难懂的知识
    • 画图可以更好的理清思路
    • 辅助理解,强化理解
  3. 学会调试
    • 借助调试,更好的理解代码和感知代码
    • 找出代码中的bug和程序逻辑
(1)自增自减运算符
	int a=5,b,c,i=10;b=a++;c=++b;printf("a = %d, b = %d, c = %d\n",a,b,c);  //a = 6, b = 6, c = 6 printf("%d\n",++i);  //11 printf("%d\n",--i);  //9 printf("%d\n",i++);	 //10 printf("%d\n",i--);  //10 printf("%d\n",-i++); //9 printf("%d\n",-i--); //9 getchar();

变量定义这里就不赘述
b=a++;
这里执行操作是

  • b=a (先把a的值赋给b)
  • a=a+1 (a再自增1)

c=++b;

  • b=b+1
  • c=b

要清楚
++在前和++在后
之间不同的运算顺序

(2)包含while和for循环
#include <stdio.h>
int main() {int i,b,k=0;for(i=1;i<=5;i++){b=i%2;while(b-->=0)k++;}printf("%d,%d",k,b);return 0;
}

程序运行结果为()?

分析:
首先声明了三个整型变量ibk
并初始化k为0。
for循环中,
i=1开始,
i小于或等于5时执行循环体,
每次循环结束后i的值增加1。

    b = i % 2;

计算i除以2的余数,
并将其赋值给变量b
(用于判断奇偶数)

    while(b-- >= 0)k++;

while循环,
条件是b的值递减直到小于0。
每次循环,
k的值增加1。

  1. i=1时,b=1,进入while循环,b递减到0,k增加1次,b变为-1,退出while循环。
  2. i=2时,b=0,进入while循环,b递减到-1,k增加1次,退出while循环。
    ·············

所以,
k的值在每次i为奇数时增加1,
i为偶数时也增加1,
总共循环5次,
k增加5次。
最后结果
输出8,-2

(3)判断一个数是否为奇数
int a=0;scanf("%d",&a);   if(a%2==0){printf("不是奇数"); }elseprintf("是奇数");

很简单

(4)三个数比较大小
	int a, b, c, t;  // 定义四个整数变量a, b, c用于存储输入的三个数字,t用于交换时的临时存储// 输入三个数字scanf("%d%d%d", &a, &b, &c);// 如果a大于b,交换a和bif (a > b) {  t = a;  // 使用t作为中间变量,首先将a的值保存起来a = b;  // 将b的值赋给ab = t;  // 将t(原来a的值)赋给b,完成交换}  // 如果a大于c,交换a和c if (a > c) {  t = a;  // 同上,使用t作为中间变量进行交换a = c;  c = t;  } // 如果b大于c,交换b和c if (b > c) {  t = b;  // 再次使用t作为中间变量进行交换b = c;  c = t;  // 现在b和c的值被交换,确保c是最大的}// 确保a是最小的,b是次大的,c是最大的printf("最大的数是:%d\n", t); 

利用伪代码写出算法
S1: if a>b,将a和b对换 (交换后,a是a,b中的最小者)
S2: if a>c,将a和c对换 (交换后,a是a,c中的最小者,因此a是三者中的最小者)
S3: if b>c,将b和c对换 (交换后,b是b,c中的最小者,也是三者中的次小者)
S4:顺序输出abc

(5)求绝对值
int x;printf("请输入一个数:");scanf("%d",&x);//scanf("请输入一个数:",&x);  这里有错误的 if(x<0){x = -x;}printf("X的绝对值为%d",x);  //注意输入输出格式 

思考:输入两个实数,按代数值由小到大次序输出这两个数

(6)局部变量的作用域
//作用域较小的局部变量隐藏作用域较大的局部变量 int x=1,y=1;{int y=2;x=3;printf("x=%d,y=%d\n",x,y);}printf("x=%d,y=%d\n",x,y);
输出结果为:
x=3,y=2
x=3,y=1
(7)练习

输出1900-2000年中是闰年的月份,符合下面两个条件之一:
(1)能被4整除,但不能被100整除
(2)能被100整除且能被400整除
分析:

  • 涉及到的知识-循环结构、运算符
  • 定义变量int n
  • n能被4整除 n%4=0
  • 不能被100整除 n%100!=0
  • 能被100整除且能被400整除
  • (year % 100 != 0) || (year % 400 == 0))
#include <stdio.h> 
int main() 
{     int n; // 遍历1900年到2000年 for (year = 1900; year <= 2000; year++) { // 判断是否为闰年 if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))        printf("%d\n", year);} return 0; 
}
(8)输入10个数,输出其中最大的一个数
#include <stdio.h>int main() {int numbers[10]; // 定义一个数组来存储10个整数int i, max;// 输入10个数printf("请输入10个整数:\n");// 循环读取输入的数for (i = 0; i < 10; i++) {printf("输入第 %d 个数:", i + 1);scanf("%d", &numbers[i]);}// 假设第一个数是最大的max = numbers[0];// 循环遍历数组中的每个数,找出最大的数for (i = 1; i < 10; i++) {if (numbers[i] > max) {max = numbers[i];}}// 输出最大的数printf("最大的数是:%d\n", max);return 0;
}
(9) 求5!的阶乘
	int i,t;t=1;i=2;while(i<=5){t=t*i;i++;} printf("%d\n",t);
(10) 求所占字节大小
	int a=1;float b=1;char c=1;double d=1;printf("%d",sizeof(a));    //int占用字节4 printf("%d",sizeof(b));    //float占用字节4 printf("%d",sizeof(c));    //char占用字节1printf("%d",sizeof(d));    //double占用字节8

http://www.ppmy.cn/embedded/111284.html

相关文章

数据结构 栈 队列

系统栈&#xff1a; 保护局部变量 函数的形参和返回值 函数的调用关系&#xff08;保护现场&#xff0c;恢复现场操作&#xff0c;遵循先进后出&#xff0c;后进先出&#xff09; 数据结构栈&#xff08;顺序栈&#xff0c;链式栈&#xff09;&#xff1a; 同样遵遵循先进…

Web开发:基础Web开发的支持

创建项目&#xff1a; 添加依赖: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://mav…

按键学院往期视频

按键学院第五期 网游实战系列课程 按键学院第四期 网游实战系列课程01-回合制网游的特点:测试游戏后台按键图色 网游实战系列课程02-神武新手任务的识别与处理:字库识别任务 网游实战系列课程03-神武自动组队与攻击 网游实战系列课程04-神武自动逛地图与攻击 网游实战系列课程0…

【Tools】大模型中的BERT概念

摇来摇去摇碎点点的金黄 伸手牵来一片梦的霞光 南方的小巷推开多情的门窗 年轻和我们歌唱 摇来摇去摇着温柔的阳光 轻轻托起一件梦的衣裳 古老的都市每天都改变模样 &#x1f3b5; 方芳《摇太阳》 BERT&#xff08;Bidirectional Encoder Representations…

微服务CI/CD实践(五)Jenkins Docker 自动化构建部署Java微服务

微服务CI/CD实践系列&#xff1a; 微服务CI/CD实践&#xff08;一&#xff09;环境准备及虚拟机创建 微服务CI/CD实践&#xff08;二&#xff09;服务器先决准备 微服务CI/CD实践&#xff08;三&#xff09;Jenkins部署及环境配置 微服务CI/CD实践&#xff08;四&#xff09;…

视频监控平台是如何运作的?EasyCVR视频汇聚平台的高效策略与实践

随着科技的飞速发展&#xff0c;视频监控平台在社会安全、企业管理、智慧城市构建等领域发挥着越来越重要的作用。一个高效的视频监控平台&#xff0c;不仅依赖于先进的硬件设备&#xff0c;更离不开强大的视频处理技术作为支撑。这些平台集成了多种先进的视频技术&#xff0c;…

《C++位域:在复杂数据结构中的精准驾驭与风险规避》

在 C的广阔编程世界中&#xff0c;位域作为一种强大的工具&#xff0c;可以在复杂数据结构中实现高效的内存利用和特定的数据表示。然而&#xff0c;若使用不当&#xff0c;位域也可能带来未定义行为&#xff0c;成为程序中的潜在隐患。本文将深入探讨 C位域在复杂数据结构中的…

力扣474-一和零(Java详细题解)

题目链接&#xff1a;474. 一和零 - 力扣&#xff08;LeetCode&#xff09; 前情提要&#xff1a; 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 最近刚学完01背包&#xff0c;所以现在的题解都是以01背包问题为基础再来写的。 如果大家不懂01背包的话&#…

linux系统下PostgreSQL的使用

文章目录 前言一、安装pgsql数据库二、安装c和c驱动三、使用1、头文件2、源文件3、main文件4、编译 前言 最近工作中使用到了pgsql,主要是使用其c驱动完成数据库创建及增删改查等操作… 一、安装pgsql数据库 使用命令如下: sudo apt-get install postgresql安装完成,使用如…

Python | Leetcode Python题解之第394题字符串解码

题目&#xff1a; 题解&#xff1a; class Solution:def decodeString(self, s: str) -> str:def dfs(s, i):res, multi "", 0while i < len(s):if 0 < s[i] < 9:multi multi * 10 int(s[i])elif s[i] [:i, tmp dfs(s, i 1)res multi * tmpmulti…

【ARM compiler】生成ELF文件中包含了那些内容

【更多软件使用问题请点击亿道电子官方网站】 文档目标&#xff1a;用于了解ARM compiler生成的ELF文件中存储的内容进行了解 问题场景&#xff1a;ELF文件主要用于通过调试软件对于代码的运行顺序和数据链接等内容进行分析。了解一下ARM compiler生成ELF文件包含那些内容。 软…

凸优化学习(2)——梯度类方法求解(gradient descent)

&#x1f345; 写在前面 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;这里是hyk写算法了吗&#xff0c;一枚致力于学习算法和人工智能领域的小菜鸟。 &#x1f50e;个人主页&#xff1a;主页链接&#xff08;欢迎各位大佬光临指导&#xff09; ⭐️近…

各种无人机飞行服务技术详解

随着科技的飞速发展&#xff0c;无人机&#xff08;Unmanned Aerial Vehicles, UAVs&#xff09;技术已成为推动多个行业变革的重要力量。从军事侦察到商业应用&#xff0c;再到日常生活中的娱乐拍摄&#xff0c;无人机的身影无处不在。本文将详细解析无人机飞行服务所涉及的关…

计算机科学基础 -- 超流水线

超流水线的概念 超流水线是一种进一步提高处理器性能的技术&#xff0c;它在传统流水线的基础上&#xff0c;将多个流水线组合在一起&#xff0c;能够在同一个时钟周期内同时执行多条指令。这种设计允许处理器的多个功能单元并行处理不同的指令&#xff0c;从而提高指令级并行…

前端---对MVC MVP MVVM的理解

就需要从前端这些年的从无到有、从有到优的变迁过程讲一下。 1. Web1.0时代 在web1.0时代并没有前端的概念&#xff0c;开发一个web应用多数采用ASP.NET/Java/PHP编写&#xff0c;项目通常用多个aspx/jsp/php文件构成&#xff0c;每个文件中同时包含了HTML、CSS、JavaScript、…

k8s--pod控制器--1

Pod控制器介绍 Pod是kubernetes的最小管理单元&#xff0c;在kubernetes中&#xff0c;按照pod的创建方式可以将其分为两类&#xff1a; 自主式pod&#xff1a;kubernetes直接创建出来的Pod&#xff0c;这种pod删除后就没有了&#xff0c;也不会重建 控制器创建的pod&#xf…

数据结构2 :双向链表和内核链表

1.双向链表是一种链表数据结构&#xff0c;其中每个节点包含三个部分&#xff1a;一个数据域&#xff08;存储节点的数据&#xff09;、一个前驱指针&#xff08;指向列表中的前一个节点&#xff09;和一个后继指针&#xff08;指向列表中的下一个节点&#xff09;。这种结构使…

axure循环介绍

一直在犹豫要不要写关于axure循环方面的介绍&#xff0c;因为循环的场景用其它方法都是可以实现的&#xff0c;今天还是用上次手机号码判断的案例来写一下循坏吧。 1、页面新建元件&#xff0c;手机号码输入框重命名为【手机号码输入框】按钮重命名为【按钮】再在页面拖动上来一…

开源直播平台录屏Bililive-go本地Windows环境部署并实现远程录屏

文章目录 前言1. Bililive-go与套件下载1.1 获取ffmpeg1.2 获取Bililive-go1.3 配置套件 2. 本地运行测试3. 录屏设置演示4. 内网穿透工具下载安装5. 配置Bililive-go公网地址6. 配置固定公网地址 前言 本文主要介绍如何在Windows系统电脑本地部署直播录屏工具Bililive-go&…