12月12随笔
%p输出地址
int arr[1]; printf("%p",arr1); //打印数组首地址
键盘缓冲区
scanf和getchar 函数是在缓冲区里取东西的,如果缓冲区中为空才会等待取东西。
scanf("password"); //这里scanf会从缓冲区拿走\n之前的值,留下一个\n
//fflush(stdin); //刷新缓冲区
while((ch = getchar()) != '\n'){} //手动刷新缓冲区
repassword = getchar(); //不刷新缓冲区的话,getchar会把\n拿走
int 定义ch,getchar()返回的就是int值
int ch = 0;
while(ch = getchar() != EOF){};
逗号表达式
逗号表达式从左到右依次计算,最后将最右边值赋给表达式
存在的意义:这个纯粹就是为了在只能写一条表达式的地方写多条表达式而设计的
for(i = 0 ,j = 0; j<2, j<5 ;i++, j++){ //在条件判断中,j<5 是判断条件
printf();
}
练习1.输出菱形
#include <stdio.h>
#define n 7
int main(){
int i,j,k;
for (i = 1 ;i <=n;i++){
for(j = 0;j <n- i;j++){
printf(" ");
}
for(k = 0;k < 2*i-1;k++){
printf("*");
}
printf("\n");
}
for( i = n-1;i >= 1;i--){
for(j = 0;j <n - i;j++){
printf(" ");
}
for(k = 0;k < 2*i-1;k++){
printf("*");
}
printf("\n");
}
}
2.
求出0~999之间的所有“水仙花数”并输出。“水仙花数”是指一个三位数,其各位数字的立方和确好等于该数本身,如;153=1+5+3?,则153是一个“水仙花数”
#include <stdio.h>
int main(){
int l,m,n,i;
for (i = 0;i<=999;i++){
l = i%100%10; //个位
m = (i/10)%10; //十位
n = i/100; //百位
//printf("%d = %d %d %d \n",i,l ,m,n);
if(l*l*l+m*m*m+n*n*n == i){
printf("%d\n",i);
}
}
}
3.求Sn=a+aa+aaa+aaaa+aaaaa的前5项之和,其中a是一个数字,例如:2+22+222+2222+22222
#include <stdio.h>
#define n 9
int main(){
int i,j,tmp,sum = 0;
for(i =0; i<5;i++){
for(j =0,tmp= 0;j<=i;j++){
tmp*=10;
tmp+=n;
}
printf("%d\n",tmp);
sum += tmp;
}
printf("sum = %d",sum);
}
4.编写一个程序,它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现
#include <stdio.h>
int main(){
int balance = 0;
int i=0;
int ch = 0;
// FILE *fp;
// fp = fopen("test.c","r");
freopen("test.c","r",stdin); //重定向
while(scanf("%c",&ch) != EOF){ //用getchar()不行 ??
//printf("%c",ch);
if(ch=='{'){
balance +=1;
}
else if(ch== '}'){
balance -=1;
}
i++;
}
// fclose(fp);
if(balance == 0){
printf("括号成对出现!!");
}
else if(balance > 0)
printf("也许多了一个左括号哦");
else
printf("也许多了一个右括号哦");
}