1.
int func(int a) { int b; switch (a) { case 1: b = 30; case 2: b = 20; case 3: b = 16; default: b = 0; } return b; }
switch的每个case之后如果没有加break语句,当前case执行结束后,会继续执行紧跟case中的语句。
func(1)可知,在调用func时形参a的值为1,switch(a)<==>switch(1),case 1被命中,因为该switch语句中所有分支下都没有增加break语句,因此会从上往下顺序执行,最后执行default中语句返回。
2.#include<stdio.h>
int main() {
int i = 0;
int k = 0;
for (i = 0, k = 0;k = 0;i++, k++) {
k++;
}
return 0;
}
由于k=0的意义为将0赋值给k,0恒为假,不会进入循环
3.int i=0;int j=0;
for( ;i<10;i++){
for( ;j<10;j++){
printf("hehe\n'');
}}
如果i,j不在for循环中进行初始化,则只会打印10个hehe,进行初始化则会打印100个hehe
4.switch语句中表达式的类型只能是:整形和枚举类型,例如int,long,char,而像float这样的浮点类型则不能
5.#include <stdio.h>
int main() {
int x = 3;
int y = 3;
switch (x % 2) { // x%2的结果为1,因此执行case1
case 1:
switch (y) // y是3,因此会执行case3,而case3不存在,那只能执行default
{
case 0:
printf("first");
case 1:
printf("second");
break;
default: printf("hello"); // 打印hello,打印完之后,内部switch结束,此时外部case1结束
} // 因为外部case1之后没有添加break语句,所以继续执行case2
case 2: // 打印third
printf("third"); // 外部switch结束
}
return 0;
}
即:先在内部switch的default位置打印hello,紧接着在外部case2中打印third
6.
while(条件表达式)
循环体
while循环中,当条件表达式成立时,才会执行循环体中语句,每次执行期间,都会对循环因子进行修改(否则就成为死循环),修改完成后如果while条件表达式成立,继续循环,如果不成立,循环结束
故:while循环条件将会比循环体多执行一次。
7.Switch中的default子句可以放在任意位置,但一般还是放在最后,没有规定case要放在default之前,而且case表达式不要求顺序。case语句后一般放整形结果的常量表达式或者枚举类型,枚举类型也可以看成是一种特殊的常量。
8.打印100~200之间的素数
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<math.h>
int main() {
int i = 0;
int count = 0;
int j = 0;
for (i = 101;i <= 200;i += 2) {
for (j = 2;j < sqrt(i);j++) {
if (i % j == 0) {
break;
}
}
if (j > sqrt(i)) {
printf("%d ", i);
count++;
}
}
printf("%d", count);
}
9.最大公约数 -辗转相除法
#include<stdio.h>
int main()
{
int a = 18;
int b = 24;
int c = 0;
while (c = a % b)
{
a = b;
b = c;
}
printf("%d\n", b);
return 0;
}
10.srand((unsigned)time(NULL))//返回的是时间戳,设置了随机数的生成器
int a=rand();
11.goto语句,一次跳出两层或多层循环时
#include<stdio.h>
int main(){
char input[10]={0};
system("shutdown -t -s 60");
again: printf("电脑将在1分钟内关机");
scanf("%s",&input);
if(0==strcmp(input,"我是大神")){
system("shutdown -a");
}
else{
goto again;
}
return 0;
}
12.如果出现逗号表达式:
Y = (X1, X2, X3, X4, ... Xn)
那么会分别计算X1, X2, X3, X4, ... Xn表达式的值,但是最后赋给Y的值是Xn表达式的值。
如果在函数调用里出现:
int
add(
int
x,
int
y)
{
...
}
形参中的逗号只是用于分隔不同变量,不能算是逗号表达式。
如果还有其它变量需要用逗号分隔的情况下,要使用逗号表达式得加上括号,就像这题:
exec((v1, v2),(v3,v4), v5, v6);
实际上等价于exec(v2, v4, v5, v6);
一共有4个实参。
13.#include <stdio.h> int i; int main() { i--; if (i > sizeof(i)) { printf(">\n"); } else { printf("<\n"); } return 0; }
//首先,,全局变量如果没有规定大小则默认为0,sizeof(i)因为i是int类型所以大小为4,i在与sizeof(i)比较时,sizeof(i)是一个无符号数,比较时会将i也当做无符号数来比较,-1补码为
1111 1111 1111 1111 1111 1111 1111 1111如果当做无符号数,首位的1不再代表符号位,是一个很大的数