逆序输出
#include<stdio.h>
#define maxn 105
int a[maxn];
int main()
{
int x, n = 0;
while(scanf("%d", &x) == 1)//scanf返回的是输入的数据的个数,每次读入一个,读入成功则==1,继续执行while循环内语句,scanf对于数据的输入,例如%d,可自动忽略若干个数据中的空白符
a[n++] = x; //{a[n]=x,n=n+1(a[0]、a[1]...将x值存入数组}
for(int i = n-1; i >= 1; i--)
printf("%d ", a[i]);
printf("%d\n", a[0]);
return 0;
}
scanf("%d",&x)
其返回值为正确输入的变量个数. 正确执行时会成功给x赋值,即赋值了一个变量. 返回1.
当出错的时候,比如输入了字母,那么就会返回0.
当遇到文件结束标记EOF的时候,会返回-1.
所以,这个代码,不一定要ctrl +z 输入任意非数字字符就可以终止循环了.
ctrl +Z 就是windows上输入EOF标记的方法,会引起scanf返回-1
开灯问题。有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2
的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯
将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着?输
入n和k,输出开着的灯的编号。k≤n≤1000。
样例输入:
7 3
样例输出:
1 5 6 7
#include<stdio.h>
#include<string.h>
#define maxn 1010
int a[maxn];
int main()
{
int n, k, first = 1;
memset(a, 0, sizeof(a));//清零数组a,需加string 赋初值0或-1
scanf("%d%d", &n, &k);
for(int i = 1; i <= k; i++) //k-人 n-灯 人
for(int j = 1; j <= n; j++)// 灯
if(j % i == 0) a[j] = !a[j];//非零即真,将为0的数取1,不为1的数赋0
for(int i = 1; i <= n; i++)
if(a[i]) //灯的开关编号
{
if(first) first = 0; //第一个变量前 不应有空格
else printf(" ");
printf("%d", i);
}
printf("\n");
return 0;
}
strlen(char *)
作用:检测字符串实际长度。
如:char s[]="1234567";
int a=strlen(s);//a=7
实际上strlen(char *)检测的是'\0',strlen(char *)碰到'\0'就返回'\0'以前的字符数。
又如:
char f[]="123456\01111";
int b=strlen(f);//b=6,因为遇到了'\0'
9
\后面跟八进制数,所以后面的数最大是7;
\x后面跟十六进制数,所以后面跟的字母最大是F或f。
可以这里理解 \ddd 是八进制的字符 为什么128 不能连一起 因为八进制是0-7
#include<stdio.h>
#include<string.h>
int main()
{
char s[]="a\128b\\\tcd\n";
printf("%d",strlen(s));
return 0;
}
https://blog.csdn.net/u013812502/article/details/81198452
C语言基础——sizeof的用法总结
#include<stdio.h>
#include<string.h>
int main()
{
char s[7]="a0\0a0\0";
int i,j;
i=sizeof(s);
j=strlen(s);
printf("%d %d",i,j);
return 0;
}
https://blog.csdn.net/nanhuaibeian/article/details/87566715 字符数组补充
https://blog.csdn.net/jolin678/article/details/49535039
isalpha是一种函数:判断字符ch是否为英文字母,若为英文字母,返回非0(小写字母为2,大写字母为1)。若不是字母,返回0。在标准c中相当于使用“ isupper( ch ) || islower( ch ) ”做测试。