整理一下之前写的程序
1.关于switch的用法
:每种情况结束一定要写break,不然下面的情况也会被执行。
#include<stdio.h>
int main()
{ int a;
scanf("%d",&a);
switch(a)
{ case 0:printf("%d\n",a+1);
case 1:printf("%d\n",a+1);break;
default:printf("%d",a);
case 2:
case 3:
case 4:printf("%d\n",a+1);
}
return 0;
}
以下代码可以运行,当n=‘1’时,运行case’1’,当n=0时运行case 48.这说明,在n为字符时,case后可跟字符,也可跟其ascii码。
#include<stdio.h>
int main()
{
char n;
scanf("%d",&n);
switch(n) {
case'1':printf("Yes");break;
case 48:printf("No");
}
return 0;
}
2.研究循环输入的方法
(1)
#include<stdio.h>
int main()
{
int n;
while(scanf("%d",&n))//原以为这种方式能实现:当输入数据时判断 n是否为真,如果为真则终止循环,否则继续输入
{ printf("%d\n",n);//当输入2 3 4 -1时,输出只是2
if(n) //可以理解为,这种只能输入并判断一个数;
{
printf("%d",n);break;
}
else printf("请输入正整数:");
}
(2)
while(1)
{ scanf("%d",&n);
//printf("%d\n",n);
if(n)break;/*真实情况是输入除0外的数,程序就结束,只需改成if(n>0)就好了*/
else printf("请输入正整数:\n");
}
用while(1){…}中间设置跳出循环的条件是可以达到目的的。这里要提一点,上面代码的if(n)用在此处不恰当。下面附上if(n)的正确含义:
if(n):
如果n为boolean类型,则判断n是否为true,如果是true执行if后语句,否则执行else后语句;
如果n为整型,则判断n是否为0,如果是0执行else后语句,否则执行if后语句;
如果n为字符类型,则判断字符n对应的ASCII码值是否为0,若果是执行else后语句,否则执行if后语句
(3)设置循环变量
scanf("%d",&n);int t=0;
while(n>=1)
{ t+=n;
n--;
}
printf("%d",t);
(4)密码文,用数组与不用
int i,n;
for(i=0;i<100;i++){
if(a[i]!='0'){
if(a[i]!='x'&&a[i]!='y'&&a[i]!='z'&&a[i]!='X'&&a[i]!='Y'&&a[i]!='Z'){
a[i]+=3;
}
else a[i]-=23;
}
else{
n=i;break;
}
}
int j;
//printf("%c\n",a[n]);
for(j=0;j<n;j++){
printf("%c",a[j]);
}
char a;
while(1){
scanf("%c",&a);
if(a=='\n')break;
else {
if(a!='x'&&a!='y'&&a!='z'&&a!='X'&&a!='Y'&&a!='Z'){
a+=3;
}
else a-=23;
printf("%c",a);
}
(5)花了大力气搞出来的实心菱形
int n;
scanf("%d",&n);
int i,j,k;
for(i=1;i<=n;i++){
j=n-i;
while(j){
printf(" ");j--;
}
k=2*i-1;
while(k){
printf("*");k--;
if(k==0)printf("\n");
}
}
//printf("%d\n",i);
for(i=n-1;i>=1;i--){
j=n-i;
while(j){
printf(" ");j--;
}
k=2*i-1;
while(k){
printf("*");k--;
if(k==0)printf("\n");
}
}
计算好输出的空格与菱形数