学习方法
- 要多练习
- 在这些题目中的代码和题目 自己动手去敲
- 练习也是在熟悉语法,写代码第一步就是熟悉语法
- 练习是在锻炼编程思维,把实际问题转换为代码的能力
- 学会画图
- 画图去理解内存,理解指针这些比较难懂的知识
- 画图可以更好的理清思路
- 辅助理解,强化理解
- 学会调试
- 借助调试,更好的理解代码和感知代码
- 找出代码中的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;
}
程序运行结果为()?
分析:
首先声明了三个整型变量i
、b
和k
,
并初始化k
为0。
for循环中,
从i=1
开始,
当i
小于或等于5时执行循环体,
每次循环结束后i
的值增加1。
b = i % 2;
计算i
除以2的余数,
并将其赋值给变量b
。
(用于判断奇偶数)
while(b-- >= 0)
k++;
while循环,
条件是b
的值递减直到小于0。
每次循环,
k
的值增加1。
- 当
i=1
时,b=1
,进入while循环,b
递减到0,k
增加1次,b
变为-1,退出while循环。 - 当
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("不是奇数");
}
else
printf("是奇数");
很简单
(4)三个数比较大小
int a, b, c, t;
// 定义四个整数变量a, b, c
用于存储输入的三个数字,
t用于交换时的临时存储
// 输入三个数字
scanf("%d%d%d", &a, &b, &c);
// 如果a大于b,交换a和b
if (a > b) {
t = a; // 使用t作为中间变量,首先将a的值保存起来
a = b; // 将b的值赋给a
b = 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占用字节1
printf("%d",sizeof(d)); //double占用字节8