?? cc.txt
字號:
for(i=1;i<N;i++)
{ for(j=1;j<=i;j++)
printf("%6d",a[i][j];
printf("\n");
}
printf("\n");
}
7.8鞍點
/*查找鞍點*/
#define N 10
#define M 10
main()
{ int i,j,k,m,n,flag1,flag2,a[N][M],max,maxi,maxj;
printf("\n輸入行數n:");
scanf("%d",&n);
printf("\n輸入列數m:");
scanf("%d",&m);
for(i=0;i<n;i++)
{ printf("第%d行?\n",i);
for(j=0;j<m,j++);
scanf("%d",&a[i][j];
}
for(i=0;i<n;i++)
{ for(j=0;j<m;j++)
printf("%5d",a[i][j]);
pritf("\n");
}
flag2=0;
for(i=0;i<n;i++)
{ max=a[i][0];
for(j=0;j<m;j++)
if(a[i][j]>max)
{ max=a[i][j];
maxj=j;
}
for (k=0,flag1=1;k<n && flag1;k++)
if(max>a[k][max])
flag1=0;
if(flag1)
{ printf("\n第%d行,第%d列的%d是鞍點\n",i,maxj,max);
flag2=1;
}
}
if(!flag2)
printf("\n 矩陣中無鞍點! \n");
}
7.9變量說明:top,bott:查找區間兩端點的下標;loca:查找成功與否的開關變量.
/*折半查找*/
#include<stdio.h>
#define N 15
main()
{ int i,j,number,top,bott,min,loca,a[N],flag;
char c;
printf("輸入15個數(a[i]>[i-1])\n);
scanf("%d",&a[0]);
i=1;
while(i<N)
{ scanf("%d",&a[i]);
if(a[i]>=a[i-1])
i++;
esle
{printf("請重輸入a[i]");
printf("必須大于%d\n",a[i-1]);
}
}
printf("\n");
for(i=0;i<N;i++)
printf("%4d",a[i]);
printf("\n");
flag=1;
while(flag)
{
printf("請輸入查找數據:");
scanf("%d",&number);
loca=0;
top=0;
bott=N-1;
if((number<a[0])||(number>a[N-1]))
loca=-1;
while((loca==0)&&(top<=bott))
{ min=(bott+top)/2;
if(number==a[min])
{ loca=min;
printf("%d位于表中第%d個數\n",number,loca+1);
}
else if(number<a[min])
bott=min-1;
else
top=min+1;
}
if(loca==0||loca==-1)
printf("%d不在表中\n",number);
printf("是否繼續查找?Y/N!\n");
c=getchar();
if(c=='N'||c=='n')
flag=0;
}
}
7.10/*統計字符數*/
main()
{ int i,j,uppn,lown,dign,span,othn;
char text[3][80];
uppn=lown=dign=span=othn=0;
for(i=0;i<3;i++)
{ printf("\n請輸入第%d行:\n",i);
gets(text[i]);
for(j=0;j<80 && text[i][j]!='\0';j++)
{if(text[i][j]>='A' && text[i][j]<='Z')
uppn+=1;
else if(text[i][j]>='a' && text[i][j]<='z')
lown+=1;
else if(text[i][j]>='1' && text[i][j]<='9')
dign+=1;
else if(text[i][j]=' ')
span+=1;
else
othn+=1;
}
}
for(i=0;i<3;i++)
printf("%s=n",text[i]);
printf("大寫字母數:%d\n",uppn);
printf("小寫字母數:%d\n",lown);
printf("數字個數:%d\n",dign);
printf("空格個數:%d\n",span);
printf("其它字符:%d\n",othn);
}
7.11/*打印圖案*/
main()
{static char a[5]={'*','*','*','*','*'};
int i,j,k;
char space=' ';
for(i=0;i<=5;i++)
{printf("\n");
for(j=1;j<=3*i;j++)
printf("%lc",space);
for(k=0;k<=5;k++)
printf("%3c",a[k];
}
}
7.12/*譯電文*/
#include<stdio.h>
main()
{int i,n;
char ch[80],tran[80];
printf("請輸入字符:");
gets(ch);
printf("\n密碼是%c",ch);
i=0;
while(ch[i]!='\0')
{if((ch[i]>='A')&&(ch[i]<='Z'))
tran[i]=26+64-ch[i]+1+64;
else if((ch[i]>='a')&&(ch[i]<='z'))
tran[i]=26+96-ch[i]+1+96;
else
tran[i]=ch[i];
i++;
}
n=i;
printf("\n原文是:");
for(i=0;i<n;i++)
putchar(tran[i]);
}
7.13/*連接兩個字符串(不用'stract')*/
main()
{
char s1[80],s2[40];
int i=0,j=0;
printf("\n請輸入字符串1:");
scanf("%s",s1);
printf("\n請輸入字符串2:");
scanf("%s",s2);
while(s1[i]!='\0')
i++;
while(s2[j]!='\0')
s1[i++]=s2[j++];
s1[i]='\0';
printf("\n連接后字符串為:%s",s1);
}
7.14/*字符串比較*/
#include<stdio.h>
main()
{int i,resu;
char s1[100],s2[100];
printf("請輸入字符串1:\n");
gets(s1);
printf("\n 請輸入字符串2:\n");
gets(s2);
i=0;
while((s1[i]==s2[i]) && (s1[i]!='\0'))i++;
if(s1[i]=='\0' && s2[i]=='\0')resu=0;
else
resu=s1[i]-s2[i];
printf(" %s與%s比較結果是%d",s1,s2,resu);
}
7.15/*字符串復制*/
#include<stdio.h>
main()
{
char from[80],to[80];
int i;
printf("請輸入字符串");
scanf("%s",from);
for(i=0;i<=strlen(from);i++)
to[i]=from[i];
printf("復制字符串為:%s\n",to);
}
第八章 函數
8.1(最小公倍數=u*v/最大公約數.)
hcf(u,v)
int u,v;
(int a,b,t,r;
if(u>v)
{t=u;u=v;v=t;}
a=u;b=v;
while((r=b%a)!=0)
{b=a;a=r;}
return(a);
}
lcd(u,v,h)
int u,v,h;
{int u,v,h,l;
scanf("%d,%d",&u,&v);
h=hcf(u,v);
printf("H.C.F=%d\n",h);
l=lcd(u,v,h);
printf("L.C.d=%d\n",l);
}
{return(u*v/h);}
main()
{int u,v,h,l;
scanf("%d,%d",&u,&v);
h=hcf(u,v);
printf("H.C.F=%d\n",h);
l=lcd(u,v,h);
printf("L.C.D=%d\n",l);
}
8.2求方程根
#include<math.h>
float x1,x2,disc,p,q;
greater_than_zero(a,b)
float a,b;
{
x1=(-b+sqrt(disc))/(2*a);
x2=(-b-sqrt(disc))/(2*a);
}
equal_to_zero(a,b)
float a,b;
{x1=x2=(-b)/(2*a);}
smaller_than_zero(a,b)
float a,b;
{p=-b/(2*a);
q=sqrt(disc)/(2*a);
}
main()
{
float a,b,c;
printf("\n輸入方程的系數a,b,c:\n");
scanf("%f,%f,%f",&a,&b,&c);
printf("\n 方程是:%5.2f*x*x+%5.2f*x+%5.2f=0\n",a,b,c);
disc=b*b-4*a*c;
printf("方程的解是:\n");
if(disc>0)
{great_than_zero(a,b);
printf("X1=%5.2f\tX2=%5.2f\n\n",x1,x2);
}
else if(disc==0)
{
zero(a,b);
printf("X1=%5.2f\tX2=%5.2f\n\n",x1,x2);
}
else
{
small_than_zero(a,b,c);
printf("X1=%5.2f+%5.2fi\tX2=%5.2f-%2.2fi\n",p,q,p,q);
}
}
8.3素數
/*判斷整數是否為素數*/
main()
{
int number;
printf("請輸入一個正整數:\n");
scanf("%d",&number);
if(prime(number))
printf("\n %d 是素數.",number);
else
printf("\n %d 不是素數",number);
}
int prime(number)/*此函數用于差別素數*/
int number;
{
int flag=1,n;
for(n=2;n<number/2 && flag==1;n++)
if(number%n==0)
flag=0;
return(flag);
}
8.4 /*矩陣的轉置*/
#define N 3
int array[N][N];
convert(array)
int array[3][3];
{ int i,j,t;
for(i=0;i<N;i++)
for(j=i+1;j<N;j++)
{ t=array[i][j];
array[i][j]=array[j][i];
array[j][i]=t;
}
}
main()
{
int i,j;
printf("輸入數組元素:\n");
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%d",&array[i][j];
printf("\n數組是:\n");
for(i=0;i<N;i++)
{ for(j=0;j<N;j++)
printf("%5d",array[i][j]);
printf("\n");
}
convert(array);
printf("轉置數組是:\n");
for(i=0;i<N;i++)
{ for(j=0;j<N;j++)
printf("%5d",array[i][j]);
printf("\n");
}
}
8.5/*字符串反序存放*/
main()
{
char str[100];
printf("輸入字符串:\n");
scanf("%s",str);
inverse(str);
printf("轉換后的字符串是: %s\n",str);
}
inverse(str)
char str[];
{
char t;
int i,j;
for(i=0,j=strlen(str);i<strlen(str)/2;i++,j--)
{
t=str[i];
str[i]=str[i-1];
str[i-1]=t;
}
}
8.6/*字符串聯接*/
char concatenate(string1,string2,string);
char string1[],string2[],string[];
{
int i,j;
for(i=0;string1[i]!='\0';i++)
string[i]=string1[i];
for(j=0;string2[j]!='\0';j++)
string[i+j]=string2[j];
string[i+j]='\0';
}
main()
{
char s1[100],s2[100],s[100];
printf("\n輸入字符串1:\n");
scanf("%s",s1);
printf("輸入字符串2:\n");
scanf("%s",s2);
concatenate(s1,s2,s);
printf("連接后的字符串:%s\n",s);
}
8.8/*在四個數字符中加空格*/
main()
{
char str[80];
printf("請輸入含有四個數字的字符串:\n");
scanf("%s",str);
insert(str);
}
insert(str)
char str[];
{
int i;
for(i=strlen(str);i>0;i--)
{ str[2*i]=str[i];
str[2*i-1]=' ';
}
printf("\n 結果是:\n %s",str);
}
8.9/*統計字母數字空格和其它字符數*/
int alph,digit,space,others;
main()
{
char text[80];
printf("\n輸入字符串:\n");
gets(text);
alph=0;
digit=0;
space=0;
others=0;
count(text);
printf("\n %d 字母,%d 數字,%d 空格,%d 其它字符\n");
}
count(str)
char str[];
{
int i;
for(i=0;str[i]!='\0';i++)
if((str[i]>='a' && str[i]<='z')||(str[i]>='A' && str[i]<='Z')
alph++;
else if(str[i]>'0' && str[i]<='9')
digit++;
else if(strcmp(str[i],' ')==0)
space++;
else
others++;
}
8.10/*輸出文本行的最長單詞*/
int alphabetic(c);
char c;
{
if((c>='a' && c<='z'||(c>='A' && c<='Z'))
return(1);
else
return(0);
}
/*尋找最長的詞*/
int longest (string)
char string[];
{
int len=0,i,length=0,flag=1,place,point;
for(i=0;i<=strlen(string);i++)
if(alphabctic(string[i]))
if(flag)
{
point=i;
flag=0;
}
else
len++;
else
{ flag=1;
if len>length)
{length=len;
place=point;
len=0;
}
}
return(place);
}
main()
{
int i;
char line[100];
printf("輸入一行文本\n");
gets(line);
printf("\n最長的單詞是:");
for(i=longest(line);alphabctic(line[i]);i++)
printf("%c",line[i];
printf("\n");
}
8.11/*起泡法排序*/
#define N 10
char str[N];
main()
{
int i,flag;
for(flag=1;flag==1;)
{
printf("\n輸入字符串,長度為10:\n");
scanf("%s",&str);
if(strlen(str)>N)
printf("超過長度,請重輸!");
else
flag=0;
}
sort(str);
printf("\n 排序結果:");
for(i=0;i<N;i++)
printf("%c",str[i]);
}
sort(str)
char str[N];
{
int i,j;
char t;
for(j=1;j<N;j++)
for(i=0;(i<N-j)&&(str[i]!='\0');i++)
if(str[i]>str[i+1])
{ t=str[i];
str[i]=str[i+1];
str[i+1]=t;
}
}
8.16/*十六進制轉換為十進制*/
#include<stdio.h>
#define MAX 1000
main()
{ int c,i,flag,flag1;
char t[MAX];
i=0;
flag=0;
flag1=1;
printf("\n輸入十六進制數:");
while((c=getchar())!='\0'&&i<MAX&&flag1)
{ if c>='0' && c<='9'||c>='a'&&c<='f'||c>='A'&&c<='F')
{flag=1;
t[i++]=c;
}
else if(flag)
{
t[i]='\0';
printf("\n 十進制數%d\n",htoi(t));
printf("繼續嗎?");
c=getchar();
if(c=='N'||c=='n')
flag1=0;
else
{flag=0;
i=0;
printf("\n 輸入十六進制數:");
}
}
}
}
htoi(s)
char s[];
{ int i,n;
n=0;
for(i=0;s[i]!='\0';i++)
{if(s[i]>='0'&&s[i]<='9')
n=n*16+s[i]-'0';
if(s[i]>='a'&&s[i]<='f')
n=n*16+s[i]-'a'+10;
if(s[i]>='A'&&s[i]<='F')
n=n*16+s[i]-'A'+10;
}
return(n);
}
8.17/*遞歸法將整數轉換成字符*/
#include<stdio.h>
void counvert(n)
int n;
{ int i;
if((i=n/10)!=0)
convert(i);
putchar(n%10+'0');
}
main()
{ int number;
printf("\n 輸入整數:");
scanf("%d",&number);
printf("\n 輸出是: ");
if(number<0)
{ putchar('-');
number=-number;
}
convert(number);
}
8.18/*計算某晶為該年的第幾天*/
main()
{
int year,month,day;
int days;
printf("\n 請輸入日期(年,月,日)\n");
scanf("%d,%d,%d",&year,&month,&day);
printf("\n %d年%d月%d日",year,month,day);
days=sum_day(month,day);
if(leap(year)&&month>=3)
days=days+1;
printf("是該年的%d天.\n",days);
}
static int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}
int(sum_day(month,day)
int month,day;
{
int i;
for(i=1;i<month;i++)
day+=day_tab[i];
return(day);
}
int leap(year)
int year;
{
int leap;
leap=year%4==0&&year%100!=0||year%400==0;
return(leap);
}
第九章 編譯預處理
9.1/*交換兩變量值*/
#define SWAP(a,b) t=b;b=a;a=t
main()
{
int a,b,t;
printf("請輸入兩個整數 a,b:");
scanf("%d,%d",&a,&b);
SWAP(a,b);
printf("交換結果為:a=%d,b=%d\n",a,b);
}
9.2/*求兩個整數相除的余數*/
#define SURPLUS(a,b) ((a)%(b))
main()
{
int a,b;
printf(" 請輸入兩個整數 a,b:");
scanf("%d,%d",&a,&b);
printf("a,b相除的余數為:%d\n",SURPLUS(a,b));
}
9.3/*輸入三角形的三條邊,求其面積*/
#include<math.h>
#defin S(a,b,c) ((a+b+c)/2)
#define AREA(a,b,c) (sqrt(S(a,b,c)*(S(a,b,c)-a)*(S(a,b,c)-b)*(s(a,b,c)-c)))
main()
{
float a,b,c;
printf("請輸入三角形的三條邊:");
scanf("%f,%f,%f",&a,&b,&c);
if(a+b>c && a+c>b && b+c>a)
printf("其面積為:%8.2f.\n",AREA(a,b,c));
else
printf("不能構成三角形!");
}
9.4/*判斷輸入年份是否為閏年*/
#define LEAP_YEAR(y) (y%4==0) && (y%100!=0)||(y%400==0)
main()
{
int year;
printf("\n請輸入某一年:");
scanf("%d",&year);
if(LEAP_YEAR(year))
printf("%d 是閏年.\n",year);
else
printf("%d 不是閏年.\n",year);
}
9.5解:展開后:
printf("value=%format\t",x);
printf("value=%format\t",x);putchar('\n');
printf("value=%format\t");printf("value=%format\t",x2);putchar('\n');
輸出結果:
value=5.000000ormat value=5.000000ormat
value=3.000000ormat value=8.000000ormat
9.8/*用函數方法,從三個數中找出最大值*/
main()
{
int a,b,c;
printf("請輸入三個整數:");
scanf("%d,%d,%d",&a,&b,&c);
printf("三個之中最大值為:%d\n",max(a,b,c));
}
max(x,y,z)
int x,y,z;
{
int t;
t=(x>y? x:y);
return(t>z? t:z);
}
9.10/*翻譯電碼*/
#include <stdio.h>
#define MAX 80
#define CHANGE 1
main()
{
char str[MAX];
int i;
printf("請輸入文本行:\n");
scanf("%s",str);
#if(CHANGE)
{
for (i=0;i<MAX;i++)
{
if(str[i]!='\0'
if(str[i]>='a' && str[i]<'z' || str[i]>='A'&&str[i]<'Z')
str[i]+=1;
else if(str[i]=='z' || str[i]=='Z')
str[i]-=25;
}
}
#endif
printf("輸出電碼為:\n%s",str);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -