printf("\n");
}
2.方法二:
输入十个数,用指针输出
#include
#definepprintf
voidmain()
{inta[10],i;
p("请输入十个数:
\n");
for(i=0;i<10;i++)scanf("%d",a+i);
p("输出结果:
\n");
for(i=0;i<10;i++)p("%-5d",*(a+i));
}
将大写字母变成小写字母,小写字母变成大写字母:
#include
voidmain()
{chara[81];
inti;
gets(a);
for(i=1;a[i]!
='\0';i++)
{if(a[i]>='a'&&a[i]<='z')a[i]-=32;
elseif(a[i]>='A'&&a[i]<='Z')a[i]+=32;}/*注意一定要加else,否则把小写字母变成大写字母*/
puts(a);
}
将二进制转化为十进制:
#include
#include
voidmain()
{ints,t,i;chara[16];
gets(a);
s=0;t=1;
for(i=strlen(a)-1;i>=0;i--)
{s+=(a[i]-48)*t;t*=2;}
printf("\ns=%d",s);
}
将数组中第一个元素和第二个元素颠倒顺序:
#include
voidf(inta[],intn)
{intt;t=a[0];a[0]=a[1];a[1]=t;}
voidmain()
{inti,b[5]={1,2,3,4,5};
f(b,5);
for(i=0;i<5;i++)
printf("%d",b[i]);
形参值的改变不会影响到实参:
#include
voidf(intx,inty)
{intt;
t=x;x=y;y=t;}
voidmain()
{inti,b[5]={1,2,3,4,5};
f(b[0],b[1]);
for(i=0;i<5;i++)
printf("%d",b[i]);
}
用选择法将六个数进行排序(从小到大):
#include
voidmain()
{inta[7],i,j,t;
for(i=1;i<7;i++)scanf("%d",&a[i]);
for(i=1;i<6;i++)
{for(j=1;j<6-i;j++)
if(a[i]>a[j+i]){t=a[i];a[i]=a[j+i];a[j+i]=t;}
}printf("\n");
for(i=1;i<7;i++)
printf("%d",a[i]);
}
编一个函数,将五个数倒序输出:
#include
voidmain()
{intb[5]={1,2,3,4,5},i;
voidf(inta[],intn);
f(b,5);
for(i=0;i<5;i++)printf("%d",b[i]);
}
voidf(inta[],intn)
{intt,i,j;
for(i=0,j=n-1;i<=j;i++,j--)
{t=a[i];a[i]=a[j];a[j]=t;}
}
编程实现三角形:
#include
voidmain()
{inti;voidp(int,int);
for(i=1;i<=9;i++)
{p(i,0);p(10-i,1);printf("\n");}
}
voidp(intn,intm)
{inti;
for(i=0;i{if(m==1)printf("*");
if(m==0)printf("");}
}
把a数组中的元素接到b数组中:
#include
#include
voidmain()
{chara[81],b[81];
inti,j;
gets(a);gets(b);
for(i=strlen(a),j=0;(a[i]=b[j])!
='\0';i++,j++)
puts(a);puts(b);
}
求解满足条件1+2+3+…+n>=500的最小n:
#include
voidmain()
{intn=0,s=0;
do
{n++;
s+=n;
}while(s<500);
printf("n=%d\n",n);
}
分析程序结果:
#include
#definepprintf
#definesscanf
voidmain()
{inta,b,c;
a=2;b=-1;c=2;
if(a
if(b<0)
c=0;
else
c+=0;
p("%d\n",c);
}
【解】第一个if条件不为真,则直接执行printf语句,输出为2.
注意:
else与前面最近的if语句匹配,所以本题不会执行else语句。
分析一下程序的运行结果:
#include
voidmain()
{intn=2;
printf("%d,%d,%d\n",++n,n+=2,--n);
}
【解】n=2,执行printf()语句,其求值是从右向左进行的,先进行—n,返回1,n=1;在进行++n,即n=3,最后进行++n,返回n=4.所以运行结果是4,3,1.
分析程序:
#include
#definepprintf
#definesscanf
voidmain()
{inti,j,x=0;
for(i=0;i<2;i++)
{x++;
for(j=0;j<=3;j++)
{if(j%2)continue;x++;}
x++;
}
p("x=%d\n",x);
}
【解】外层for循环,i=0:
x++后x=1,进入里层for循环,其作用是j从0到3,j不为偶数时x增一,故该循环后x=3.又执行x++,之后x=4;i=1:
x++后x=5,进入里层for循环,该循环后x=7,。
又执行x++,之后x=8;里层循环结束。
所以输出为:
8.
※continue语句用来结束本次循环,即跳过循环体中尚未执行的语句。
用0到9之间的三个数组成一位三位数,统计共有多少种这样的三位数:
#include
voidmain()
{inti,j,k,count=0;
for(i=1;i<=9;i++)
for(j=0;j<=9;j++)
if(i==j)continue;
else
for(k=0;k<=9;k++)
if(k==i||k==j)continue;
elsecount++;
printf("count=%d\n",count);
}
输入1~99之间不能被2和3整除的数,按10个数一行的格式排列:
【解】从1到100循环,除掉其中能被2和3整除的数。
本题程序如下:
#include
#definepprintf
#definesscanf
voidmain()
{inti,j=0;
for(i=1;i<100;i++)
{if(i%2==0||i%3==0)continue;
p("%-4d",i);
j++;
if(j%10==0)p("\n");
}
p("\n");
输入一个正整数,把它的前后各位数字颠倒一下,并输出颠倒后的结果:
【解】先从高位到低位求出该书的各位数字,边求边输出,本题程序如下:
#include
#definepprintf
#definesscanf
voidmain()
{intn,d;
p("输入一个正整数:
");
s("%d",&n);
p("颠倒结果:
");
do
{d=n%10;
p("%d",d);
n/=10;
}while(n!
=0);
p("\n\n");
}
在不知道字母的ASCII码的情况下,将用户输入的大写字母转化成小写字母:
#include
#definepprintf
#definesscanf
voidmain()
{charc,ch;
p("输入一个大写字母:
");
s("%c",&c);
ch=c-'A'+'a';
p("%c==>%c\n",c,ch);
}
将输入的数字字符转换成相应的数字并输出:
?
对于水中字符c,直接使用(int)c转换成相应的数字是不正确的,应使用c-‘0’转换。
本题程序如下:
#include
voidmain()
{charc;intd;
printf("输入一个数字字符:
");
scanf("%c",&c);
d=c-'0';
printf("对应的数字为%d:
\n\n",d);
}
输出任意一个十进制对应的八进制数和十六进制数:
?
直接使用printf()的格式符输出八进制数和十六进制数。
本题程序如下:
#include
voidmain()
{inti;
printf("输入一个整数:
");
scanf("%d",&i);
printf("%d(10)<=>%o(8)\n",i,i);
printf("%d(10)<=>%x(16)\n\n",i,i);
}
编写一个程序,求任意输入字符的ASCII码:
#include
voidmain()
{charc;inti;
printf("输入一个字符:
");
scanf("%c",&c);
i=(int)c;/*强制转换*/
printf("%c的ASCII码为%d\n",c,i);
}
分析以下程序运行结果:
#include
#definepprintf
#definesscanf
voidmain()
{intx=0,y=2,z=3;
switch(x)
{case0:
switch(y==2)
{case1:
p("*");break;
case2:
p("%");break;
}
case1:
switch(z)
{case1:
p("$");
case2:
p("*");break;
default:
p("#");}
}
p("\n");
}
【解】x=0,执行外层switch语句的case0部分,y==2为真,则执行里层switch语句的case1部分,输出“*”,遇到break语句,退出里层的switch语句,由于里层的switch语句之后没有break语句,所以转而执行外层switch语句的case1部分,这时z=3,故执行里层switch语句的default部分,输出“#”,整个程序执行完毕。
所以输出为:
*#。
如果从键盘上输入a到z共26个字母,分析一下程序的运行结果:
#include
#definepprintf
#definesscanf
voidmain()
{charc;intv0=0,v1=0;
do
{switch(c=getchar())
{case'a':
case'A':
case'e':
case'E':
case'i':
case'I':
case'o':
case'O':
case'u':
case'U':
v1+=1;
default:
v0+=1;
}
}while(c!
='\n');
p("%d,%d\n",v0,v1);
}
【解】实际上v1统计元音字母的个数,v0统计总的字符的个数,由于最后输入的一个回车符也算是一个字符,故最后,v1=5,v0=27,所以输出为:
27,5.
(易错)分析一下程序的运行结果:
#include
#definepprintf
#definesscanf
voidmain()
{intk=2;
switch(k)
{case1:
p("%d\n",k++);break;
case2:
p("%d",k++);
case3:
p("%d\n",k++);break;
case4:
p("%d\n",k++);
default:
p("Full!
\n");}
}
【解】k=2,执行case2:
分支,k++返回k=3,屏幕输出2,后跟一空格。
由于没有break语句,继续执行case3:
分支,k++返回3,此时k=4,屏幕输出3,由于有一个break语句,退出switch语句。
所以最后运行结果是2,3.
用户输入日期,计算该日期是这一年的第几天:
【解】本题使用switch语句,每个case语句均不带break语句,这样在某个case的条件满足后从case语句开始依次执行到最后,从而达到累计各月天数的目的。
程序如下:
#include
#definepprintf
#definesscanf
voidmain()
{inty,m,d,leap,days;
p("输入日期(格式:
年.月.日):
");
s("%d.%d.%d",&y,&m,&d);
if((y%4==0&&y%100!
=0)||(y%400==0))leap=1;/*闰年*/
elseleap=0;
days=d;
switch(m-1)
{case12:
days+=31;
case11:
days+=30;
case10:
days+=31;
case9:
days+=30;
case8:
days+=31;
case7:
days+=31;
case6:
days+=30;
case5:
days+=31;
case4:
days+=30;
case3:
days+=31;
case2:
if(leap==1)days+=29;/*闰年的情况*/
elsedays+=28;
case1:
days+=31;
}
p("\n%d.%d.%d是该年的第%d天\n\n",y,m,d,days);
}
编程序将用户输入的十进制正整数转化成任意进制的整数:
【解】采用辗转相除法进行进制间的转换,将结果储存在一维数组num中,最后显示其值即可,本题程序如下:
#include
#definepprintf
#definesscanf
charitc(intn)/*数字转换成字符表示,如10—>...*/
{charc;
if(n>=0&&n<=9)
c='0'+n;
else
c='a'+n-10;
returnc;
}
voidmain()
{inti=0,base,n,j,num[20];
p("输入正十进制整数:
");
s("%d",&n);
p("输入要转换的进制:
");
s("%d",&base);
do
{i++;
num[i]=n%base;
n/=base;
}while(n!
=0);
p("转换的结果:
");
for(j=i;j>=1;j--)
p("%c",itc(num[j]));
p("\n");
}
编写一个累加器,知道输入一个整数“0”结束:
#include
voidmain()
{floats=0,d;
for(;d!
=0;)//或while
(1)即无条件循环,靠break语句终止循环过程
{printf("输入一个数:
");
scanf("%f",&d);
s=s+d;
}
printf("累次结果:
%g\n",s);
}
将十进制数转化为二进制数:
#include
voidmain()
{intx,a[16],i;printf("请输入一个十进制数:
\n\t");
scanf("%d",&x);
for(i=0;x>2;i++)
{a[i]=x%2;x/=2;}
a[i]=x;printf("\n");
printf("所求二进制数为:
\n\t");
for(;i>=0;i--)
printf("%d",a[i]);
printf("\n");}