二级培训C讲义wang9程序Word格式.docx
- 文档编号:21764227
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:14
- 大小:19.32KB
二级培训C讲义wang9程序Word格式.docx
《二级培训C讲义wang9程序Word格式.docx》由会员分享,可在线阅读,更多相关《二级培训C讲义wang9程序Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
{intid;
charname[8];
};
typedefstructstudentSTUDENT;
{STUDENTstudents[3]={{5,"
aaa"
},{3,"
bbb"
},{4,"
ccc"
}};
intid;
id=SearchByid(s,i);
puts(s1);
char*search(chars[][10],inti)
{char*p;
if(i>
4||i<
0)return(NULL);
p=s+i;
return(p);
例3、Hanoi
用道具演示Hanoi塔的搬迁步骤。
voidhanoi();
voidmove();
{hanoi(4,'
A'
'
B'
C'
}/*3个柱子用3个字符表示*/
voidmove(charget,charput)/*表示最基本的移动操作*/
{printf("
%c-->
%c\n"
get,put);
/*策略*/
voidhanoi(intn,charsource,charhelp,chartarget)
{if(n==1)move(source,target);
else
{hanoi(n-1,source,target,help);
move(source,target);
hanoi(n-1,help,source,target);
例3、矩阵相乘
分解问题,如何计算c[i][j],
图示乘法规律,引入循环变量k
{inta[2][3]={{1,2,3},{4,5,6}};
intb[3][2]={{1,2},{3,4},{5,6}};
intc[2][2],i,j,k;
for(i=0;
i<
2,i++)
for(j=0;
j<
2,j++)
{c[i][j]=0;
for(k=0;
3,k++)c[i][j]+=a[i][k]*b[k][j];
}
gets(字符数组名)返回值:
该数组的地址(一般无用)
与scanf()的操作差别
puts(字符数组名)返回值:
无意义
i=0;
while(s[i]!
\0'
{putchar(s[i]);
i++;
strcpy(目标,源数组名)返回值:
目标数组的地址
数组之间不可能直接赋值
strcpy(s1,s2)s1[]<
=s2[]
while(s2[i]!
{s1[i]=s2[i];
s1[i]='
数组空间大小需注意。
假设有chars1[10],s2[20];
(相继定义,则空间连续),且s2中字符串长度>
10,调用strcpy可能破坏s2[]中数据。
strcat(主数组名,子数组名)返回值:
主数组的地址
如主数组空间不够大,数据的改动涉及到数组之外,破坏是不可估计的。
strcmp(数组1名,数组2名)
返回值:
数组1的元素依次减数组2的元素。
<
0数组1小于数组2,
>
0数组1大于数组2,
=0数组1等于数组2
strlen(数组名)从数组始地址开始计数,直至遇到'
字符串长度不包括'
其正确性依赖于数据是否规范。
)i++;
strupr(数组名)转变数组元素为大写字符,返回值:
数组地址
strlwr(数组名)转变数组元素为小写字符,返回值:
例2、狼追兔子,兔子躲在环形分布的10洞中的哪几个洞安全?
(强盗杀人质,数学家如何求生)
分析
起始情况step=1;
current=0;
循环操作cave[current]=1;
step++;
current+=step;
终止条件step=1&
&
current=0
循环条件!
(step=1&
current=0)
循环结构用do...while不用while或for
#defineMAXLEN10
{intcave[MAXLEN];
inti,current,step;
for(i=0;
=MAXLEN-1;
i++)cave[i]=0;
step=1;
do
{cave[current]=1;
current%=10;
step%=10;
while(current!
=0||step!
=1);
i++)
if(cave[i]==0)printf("
%d,"
i);
例3:
求所有满足如下条件的三位数,它除以11的商等于它的各位数字的平方和。
例如550,除以11为50,5x5+5x5+0x0=50,打印所有满足条件的三位数。
#include<
stdio.h>
{inti,j,n,s;
for(i=110;
1000;
i=i+11)
{n=i;
j=n/11;
s=0;
whileAAAA
{BBBB
n=n/10;
if(j==s)printf("
%5d"
AAAA:
(n>
0)
BBBB:
s=s+(n%10)*(n%10);
例18、一元二次方程求解(用项目文件)
/**********AA.prj**********/
a1.c
a2.c
/**********A1.c**********/
#include"
stdio.h"
math.h"
externvoidsub1(floata,floatb,floatc);
externvoidsub2(floata,floatb,floatc);
externvoidsub3(floata,floatb,floatc);
{floata,b,c,x;
scanf("
%f,%f,%f"
a,&
b,&
c);
x=b*b-4*a*c;
if(x>
0)sub1(a,b,c);
if(x==0)sub2(a,b,c);
if(x<
0)sub3(a,b,c);
/**********A2.c**********/
voidsub1(floata,floatb,floatc)
x1=%f\n"
(-b+sqrt(b*b-4*a*c))/(2*a));
x2=%f\n"
(-b-sqrt(b*b-4*a*c))/(2*a));
voidsub2(floata,floatb,floatc)
x1=x2=%f\n"
-b/(2*a));
voidsub3(floata,floatb,floatc)
x1=%f+%fi\n"
-b/(2*a),sqrt(-b*b+4*a*c)/(2*a));
x2=%f-%fi\n"
利用静态变量组织函数
{.......
0){x1=sub1(a,b,c);
x2=sub1(a,b,c);
%f,%f\n"
x1,x2);
....
floatsub1(floata,floatb,floatc)
{staticinti=1;
if(i==1){i++;
return((-b+sqrt(b*b-4*a*c))/(2*a));
elsereturn((-b-sqrt(b*b-4*a*c))/(2*a));
例17、矩阵倒置
voidrotate();
{inta[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
inti,j;
4;
{for(j=0;
j++)
%2d"
a[i][j]);
rotate(a);
voidrotate(inta[][4])
{inti,j,temp;
for(j=i+1;
{temp=a[i][j];
a[i][j]=a[j][i];
a[j][i]=temp;
例15、求数组的鞍点
#defineROW3
#defineCOL4
{inti,j,k,max,max_j,min,min_i;
inta[ROW][COL]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
ROW;
{/*求第i行的最大值max,及其列下标max_j*/
max_j=0;
max=a[i][max_j];
for(j=1;
COL;
j++)
if(a[i][j]>
max){max=a[i][j];
max_j=j;
/*求第max_j列的最小值min,及其行下标min_i*/
min_i=0;
min=a[min_i][max_j];
k<
k++)
if(a[k][max_j]<
min){min=a[k][max_j];
min_i=k;
if(min_i==i)printf("
%d,%d:
%d\n"
i,max_j,max);
elseprintf("
%d:
NOPOINT\n"
结果:
0,3:
4
1:
NOPOINT
2:
例14、在有序的字符串中插入一个字符
string.h"
{charstr[80],c;
/*将c插入在第一个比它大的str[i]位置中原str[i]及其后元素后移*/
intlen,i,j;
gets(str);
len=strlen(str);
c=getchar();
str[i]<
=c&
str[i]!
i++);
/*找第一个比c大的str[i],若c最大,则i为len*/
for(j=len;
j>
i;
j--)str[j]=str[j-1];
/*str[i]...str[len-1]=>
str[i+1]...str[len]若i为len,循环不执行*/
str[i]=c;
str[len+1]='
puts(str);
例13、P97,例6.8题目稍作改动
将一个字符串中所有单词的首字符改为大写:
"
iamwq"
-->
IAmWq"
ctype.h"
#defineYES1
#defineNO0
{inti,inword;
charstring[80],c;
inword=NO;
gets(string);
(c=string[i])!
if(c=='
'
||c=='
\t'
)inword=NO;
if(inword==NO)
{if(islower(string[i]))string[i]-=32;
inword=YES;
puts(string);
例12、折半查找
查字典引出变量low、high、mid
x[mid]与待查数t的比较=0,>
0,<
#defineMAX10
#defineTRUE1
#defineFALSE0
{charx[MAX][20]={"
00"
"
111"
2"
33"
44"
55"
66"
777"
88"
99"
chartemp[20]="
intlow=0,high=MAX-1,mid;
intfound=FALSE;
while((low<
=high)&
(!
found))
{mid=(low+high)/2;
if(strcmp(temp,x[mid])<
0)high=mid-1;
if(strcmp(temp,x[mid])==0)found=TRUE;
if(strcmp(temp,x[mid])>
0)low=mid+1;
if(found)printf("
mid);
NOFOUND\n"
例11:
找出关键字在文件中出现的次数
#include"
#defineMAX30
#defineNKEYS3
structkey
{char*keyword;
intcount;
}keylist[NKEYS]={{"
do"
0},{"
while"
for"
0}};
FILE*fp;
{inti;
charword[MAX];
fp=fopen("
1.1"
r"
while((getword(word))!
=EOF)
{if((i=find(word,keylist,NKEYS))>
=0)
keylist[i].count++;
fclose(fp);
NKEYS;
if(keylist[i].count>
%s:
keylist[i].keyword,keylist[i].count);
intgetword(char*word)
{char*p;
if(feof(fp))return(EOF);
p=word;
while(((*p=fgetc(fp))=='
||*p=='
\n'
)&
!
feof(fp));
while((*++p=fgetc(fp))!
*p!
&
*p='
return
(1);
intfind(char*word,structkey*keylist,intn)
{inti;
n;
i++,keylist++)
if(strcmp(word,keylist->
keyword)==0)return(i);
return(-1);
例9:
用递归实现打印正负整数
main(){printd(-12345);
printd(intn)
if(n<
0){putchar('
n=-n;
if((i=n/10)!
=0)printd(i);
putchar(n%10+'
0'
例8:
用递归实现字符串的倒置、顺置
voidreverse(chars[]);
inti;
chars2[10]="
main()
{chars1[]="
abcdef"
reverse(s1);
puts(s2);
voidreverse(chars[])
{if(strlen(s)==1)s2[i++]=s[0];
else{reverse(s+1);
s2[i++]=s[0];
例7:
一维数组的应用。
找出一个字符串中的字母对的出现次数
{intcon[27][27],i,j,ch;
charstr[]="
helloworld"
wqwq\n"
for(i='
a'
z'
for(j='
con[i-'
][j-'
]=0;
while((ch=str[i])!
{if(ch>
ch<
str[i+1]>
str[i+1]<
con[ch-'
][str[i+1]-'
]++;
if(con[i-'
]!
%c%c:
i,j,con[i-'
]);
例5:
读程序,写结果
charinput[]="
SSSWILTECH1\1\1\11WALLMP1"
{inti,c;
for(i=2;
(c=input[i])!
{
switch(c)
1'
case1:
{while((c=input[++i])=='
\1'
c!
putchar('
S'
E'
L'
continue;
default:
putchar(c);
continue;
putchar('
SWITCHSWAMP
例3、递归
voidprt(intx);
main() {prt(5);
voidprt(intx)
if(x>
{for(i=0;
x;
i++)printf("
*"
{prt(x-1);
prt(x-1);
}}
******
******
******
******
******
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 培训 讲义 wang9 程序