C语言源程序Word下载.docx
- 文档编号:17068888
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:17
- 大小:19.82KB
C语言源程序Word下载.docx
《C语言源程序Word下载.docx》由会员分享,可在线阅读,更多相关《C语言源程序Word下载.docx(17页珍藏版)》请在冰豆网上搜索。
p=p+5)
p,p+1,p+2,p+3);
*(p+4)=*p+*(p+1)+*(p+2)+*(p+3);
*p,*(p+1),*(p+2),*(p+3),*(p+4));
(5):
{inta[3][5],(*p)[5];
for(p=a;
a+3;
p++)
*p,*p+1,*p+2,*p+3);
*(*p+4)=**p+*(*p+1)+*(*p+2)+*(*p+3);
**p,*(*p+1),*(*p+2),*(*p+3),*(*p+4));
(6):
{inta[3][5],*p[3],i;
i++)p[i]=a[i];
p[i],p[i]+1,p[i]+2,p[i]+3);
*(p[i]+4)=*(p[i])+*(p[i]+1)+*(p[i]+2)+*(p[i]+3);
*(p[i]),*(p[i]+1),*(p[i]+2),*(p[i]+3),*(p[i]+4));
(7):
int*f(inta,intb,intc,intd)
{ints;
s=a+b+c+d;
return&
s;
{inta[3][5],*p,i;
p=f(*(*(a+i)),*(*(a+i)+1),*(*(a+i)+2),*(*(a+i)+3));
*(*(a+i)+4)=*p;
(8):
intf(int*a,int*b,int*c,int*d)
s=*a+*b+*c+*d;
returns;
*(*(a+i)+4)=f(*(a+i),*(a+i)+1,*(a+i)+2,*(a+i)+3);
1.第一种方法:
输入十个数,用指针输出
{inta[10],*p;
请输入十个数:
a+10;
p++)scanf("
%d"
p);
请输出十个数:
p++)printf("
%d"
*p);
2.方法二:
#definepprintf
{inta[10],i;
p("
10;
i++)scanf("
a+i);
输出结果:
i++)p("
%-5d"
*(a+i));
将大写字母变成小写字母,小写字母变成大写字母:
{chara[81];
inti;
gets(a);
for(i=1;
a[i]!
='
\0'
;
{if(a[i]>
a'
&
a[i]<
z'
)a[i]-=32;
elseif(a[i]>
A'
Z'
)a[i]+=32;
}/*注意一定要加else,否则把小写字母变成大写字母*/
puts(a);
将二进制转化为十进制:
string.h>
voidmain()
{ints,t,i;
chara[16];
s=0;
t=1;
for(i=strlen(a)-1;
i>
=0;
i--)
{s+=(a[i]-48)*t;
t*=2;
\ns=%d"
s);
}
将数组中第一个元素和第二个元素颠倒顺序:
voidf(inta[],intn)
{intt;
t=a[0];
a[0]=a[1];
a[1]=t;
{inti,b[5]={1,2,3,4,5};
f(b,5);
5;
%d"
b[i]);
形参值的改变不会影响到实参:
voidf(intx,inty)
t=x;
x=y;
y=t;
f(b[0],b[1]);
用选择法将六个数进行排序(从小到大):
#include<
{inta[7],i,j,t;
7;
a[i]);
6;
{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("
a[i]);
编一个函数,将五个数倒序输出:
{intb[5]={1,2,3,4,5},i;
voidf(inta[],intn);
i++)printf("
{intt,i,j;
for(i=0,j=n-1;
=j;
i++,j--)
{t=a[i];
a[i]=a[j];
a[j]=t;
编程实现三角形:
{inti;
voidp(int,int);
=9;
{p(i,0);
p(10-i,1);
voidp(intn,intm)
n;
{if(m==1)printf("
*"
if(m==0)printf("
"
);
把a数组中的元素接到b数组中:
{chara[81],b[81];
inti,j;
gets(b);
for(i=strlen(a),j=0;
(a[i]=b[j])!
i++,j++)
puts(b);
求解满足条件1+2+3+…+n>
=500的最小n:
{intn=0,s=0;
do
{n++;
s+=n;
}while(s<
500);
n=%d\n"
n);
分析程序结果:
#definesscanf
{inta,b,c;
a=2;
b=-1;
c=2;
if(a<
b)
if(b<
0)
c=0;
else
c+=0;
%d\n"
c);
【解】第一个if条件不为真,则直接执行printf语句,输出为2.
注意:
else与前面最近的if语句匹配,所以本题不会执行else语句。
分析一下程序的运行结果:
{intn=2;
%d,%d,%d\n"
++n,n+=2,--n);
【解】n=2,执行printf()语句,其求值是从右向左进行的,先进行—n,返回1,n=1;
在进行++n,即n=3,最后进行++n,返回n=4.所以运行结果是4,3,1.
分析程序:
{inti,j,x=0;
2;
{x++;
for(j=0;
=3;
{if(j%2)continue;
x++;
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之间的三个数组成一位三位数,统计共有多少种这样的三位数:
{inti,j,k,count=0;
for(j=0;
if(i==j)continue;
else
for(k=0;
k<
k++)
if(k==i||k==j)continue;
elsecount++;
count=%d\n"
count);
输入1~99之间不能被2和3整除的数,按10个数一行的格式排列:
【解】从1到100循环,除掉其中能被2和3整除的数。
本题程序如下:
{inti,j=0;
100;
{if(i%2==0||i%3==0)continue;
%-4d"
i);
j++;
if(j%10==0)p("
输入一个正整数,把它的前后各位数字颠倒一下,并输出颠倒后的结果:
【解】先从高位到低位求出该书的各位数字,边求边输出,本题程序如下:
{intn,d;
输入一个正整数:
s("
n);
颠倒结果:
{d=n%10;
d);
n/=10;
}while(n!
=0);
\n\n"
在不知道字母的ASCII码的情况下,将用户输入的大写字母转化成小写字母:
{charc,ch;
输入一个大写字母:
%c"
c);
ch=c-'
+'
%c==>
%c\n"
c,ch);
将输入的数字字符转换成相应的数字并输出:
?
对于水中字符c,直接使用(int)c转换成相应的数字是不正确的,应使用c-‘0’转换。
{charc;
intd;
输入一个数字字符:
scanf("
d=c-'
0'
对应的数字为%d:
输出任意一个十进制对应的八进制数和十六进制数:
直接使用printf()的格式符输出八进制数和十六进制数。
输入一个整数:
i);
%d(10)<
=>
%o(8)\n"
i,i);
%x(16)\n\n"
编写一个程序,求任意输入字符的ASCII码:
输入一个字符:
i=(int)c;
/*强制转换*/
%c的ASCII码为%d\n"
c,i);
分析以下程序运行结果:
{intx=0,y=2,z=3;
switch(x)
{case0:
switch(y==2)
{case1:
break;
case2:
%"
case1:
switch(z)
{case1:
$"
default:
#"
【解】x=0,执行外层switch语句的case0部分,y==2为真,则执行里层switch语句的case1部分,输出“*”,遇到break语句,退出里层的switch语句,由于里层的switch语句之后没有break语句,所以转而执行外层switch语句的case1部分,这时z=3,故执行里层switch语句的default部分,输出“#”,整个程序执行完毕。
*#。
如果从键盘上输入a到z共26个字母,分析一下程序的运行结果:
intv0=0,v1=0;
do
{switch(c=getchar())
{case'
:
case'
case'
e'
E'
i'
I'
o'
O'
u'
U'
v1+=1;
default:
v0+=1;
}while(c!
\n'
%d,%d\n"
v0,v1);
【解】实际上v1统计元音字母的个数,v0统计总的字符的个数,由于最后输入的一个回车符也算是一个字符,故最后,v1=5,v0=27,所以输出为:
27,5.
(易错)分析一下程序的运行结果:
{intk=2;
switch(k)
k++);
case3:
case4:
Full!
【解】k=2,执行case2:
分支,k++返回k=3,屏幕输出2,后跟一空格。
由于没有break语句,继续执行case3:
分支,k++返回3,此时k=4,屏幕输出3,由于有一个break语句,退出switch语句。
所以最后运行结果是2,3.
用户输入日期,计算该日期是这一年的第几天:
【解】本题使用switch语句,每个case语句均不带break语句,这样在某个case的条件满足后从case语句开始依次执行到最后,从而达到累计各月天数的目的。
程序如下:
{inty,m,d,leap,days;
输入日期(格式:
年.月.日):
%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:
case9:
case8:
case7:
case6:
case5:
if(leap==1)days+=29;
/*闰年的情况*/
elsedays+=28;
case1:
\n%d.%d.%d是该年的第%d天\n\n"
y,m,d,days);
编程序将用户输入的十进制正整数转化成任意进制的整数:
【解】采用辗转相除法进行进制间的转换,将结果储存在一维数组num中,最后显示其值即可,本题程序如下:
charitc(intn)/*数字转换成字符表示,如10—>
...*/
if(n>
=0&
n<
=9)
c='
+n;
else
+n-10;
returnc;
{inti=0,base,n,j,num[20];
输入正十进制整数:
输入要转换的进制:
base);
{i++;
num[i]=n%base;
n/=base;
转换的结果:
for(j=i;
j>
=1;
j--)
itc(num[j]));
编写一个累加器,知道输入一个整数“0”结束:
{floats=0,d;
for(;
d!
)//或while
(1)即无条件循环,靠break语句终止循环过程
输入一个数:
scanf("
%f"
s=s+d;
累次结果:
%g\n"
将十进制数转化为二进制数:
{intx,a[16],i;
请输入一个十进制数:
\n\t"
x);
x>
{a[i]=x%2;
x/=2;
a[i]=x;
所求二进制数为:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 源程序