c语言判断一个数是否能够等于两个不同素数的乘积_C语言编程学习(经典)

这篇博客详细介绍了C语言的基础练习,包括运算符的运用,如加减乘除、自增自减、条件判断等,并通过实际例子展示了如何比较两个数、计算面积、判断素数、求解最大公约数和最小公倍数等。此外,还涵盖了常用语句的学习,如循环、条件判断和函数应用,以及字符串操作和预处理等内容,适合C语言初学者巩固基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C语言编程学习

1 运算符练习

1.1输出不同类型字符

#include<stdio.h>

main()

{

int a=33,b=12,c;

char d='a';

c=a+b;/*c=33+12*/

printf("line1-c的值是%dn",c);

c=a-b;/*c=33-12*/

printf("line2-c的值是%dn",c);

c=a/b;/*c=33/12*/

printf("line3-c的值是%dn",c);

c=a*b;/*c=33*12*/

printf("line4-c的值是%dn",c);

c=a%b;/*c=33除12余9*/

printf("line5-c的值是%dn",c);

c=a++;/*c=a+1=33,a赋值34*/

printf("line6-c的值是%dn",c);

c=a--;/*c=34,a赋值33*/

printf("line7-c的值是%dn",c);

c=++a;/*先增1再赋值,a=34,c=34*/

printf("line8-c的值是%dn",c);

a+=3;/*等同于a=a+3=37*/

printf("line9-a的值是%dn",a);

a+=3+5;/*先3+5再加上a,再赋值给a=45*/

printf("line10-a的值是%dn",a);

a+=b-=5;/*从右向左,b=b-5=7,a=45+b=52*/

printf("line11-a的值是%dn",a);

a+=a-=a/=a*=a;/*a=0*/

printf("line12-a的值是%dn",a);

a++,b=a++,c=++b;/*a=0+1=1,b=a=1,a=a+1=2,b=b+1=2,c=b=2*/

printf("line13的值是a=%d,b=%d,c=%d,d=%dn",a,b,c,d);

}

1.2比较两个数大小

#include"stdio.h"

main()

{

int a,b,c;

scanf("%d %d",&a,&b);

c=a>b?a:b;

printf("a=%d,b=%d,c=%d,n",a,b,c);

}

1.3方与圆面积计算

#include<stdio.h>

main()

{

float x,y,z,a,b;

scanf("%f%f",&x,&a);

y=3.14*x*2;

z=3.14*x*x;

b=a*a;

printf("圆的半径是%f,n圆的周长是%f,n圆的面积是%f,n正方形的面积是%f,n",x,y,z,b);

}

2 常用语句学习

2.1小写字母转大写,并输出ASCii码

#include"stdio.h"

void main()

{

char c1,c2,c3,c4;

scanf("%c,%c,%c,%c",&c1,&c2,&c3,&c4);

c1-=32;

c2-=32;

c3-=32;

c4-=32;

printf("%c,%5dn",c1,c1);

printf("%c,%5dn",c2,c3);

printf("%c,%5dn",c3,c3);

printf("%c,%5dns",c4,c4);

}

2.2计算1+2+…+n之和

方法1(while)

#include"stdio.h"

main()

{

int a=0;

long n;

printf("请输入一个正整数n");

scanf("%ld",&n);

while(n>0)

{a+=n;

n--;

}

printf("连加等于%ldn",a);

}

方法2(do while)

#include"stdio.h"

void main()

{

int n,sum=0;

printf("请输入n的值n");

scanf("%d",&n);

do

{

sum+=n;

n--;

}

while(n>0);

printf("sum=%dn",sum);

}

方法3(for)

#include"stdio.h"

void main()

{

int n,sum=0;

printf("请输入n的值n");

scanf("%d",&n);

for(;n>0;n--) sum+=n;

printf("sum=%dn",sum);

}

2.3计算1*2*…*n之积(阶乘算法)

方法1(while)

#include"stdio.h"

main()

{

int a=1;

long n;

printf("请输入一个正整数n");

scanf("%ld",&n);

while(n>0)

{a*=n;

n--;

}

printf("阶乘等于%ldn",a);

}

方法2(for)

#include"stdio.h"

void main()

{

int n,sum=1;

printf("请输入n的值n");

scanf("%d",&n);

for(;n>0;n--) sum*=n;

printf("sum=%dn",sum);

}

方法3(for省略循环体)

#include"stdio.h"

void main()

{

int n,sum;

printf("请输入n的值n");

scanf("%d",&n);

for(sum=1;n>0;sum*=n,n--);

printf("sum=%dn",sum);

}

2.4计算1*1+2*2…n*n之和(while)

#include"stdio.h"

main()

{

int a=0;

long n;

printf("请输入一个正整数n");

scanf("%ld",&n);

while(n>0)

{a=a+n*n;

n--;

}

printf("平方之和等于%ldn",a);

}

2.5求得一个正整数是几位数(while)

#include<stdio.h>

main()

{

long a=0,n;

printf("请输入一个正整数n");

scanf("%ld",&n);

while(n>0)

{

n=n/10;

a++;

}

printf("这个数是%ld位数n",a);

}

2.6求圆周率π的近似值(for)

描述:求4*(1-1/3+1/5-1/7+…+/(2n-1))

#include<stdio.h>

main()

{

float x=1,y=1,z=1,sum=0;

int i,n;

scanf("%d",&n);

for(i=1;i<=n;i++)

{

sum+=x;

y+=2;

z*=-1;

x=z/y;

}

printf("%fn",sum*4);

}

2.7输入成绩,求平均成绩,输出合格人数(for)

#include<stdio.h>

main()

{

float x,avg,sum=0;

int i,n,count=0;

printf("请输入学生总人数n");

scanf("%d",&n);

printf("请依次录入学生成绩n");

for(i=0;i<n;i++)

{

scanf("%f",&x);

if(x>=60)count++;

sum+=x;

}

avg=sum/n;

printf("共有%d个学生,平均成绩avg=%f,及格人数count=%dn",n,avg,count);

}

2.8判断一个数是不是素数(for枚举求余),不是素数输出最小因数值

方法1:

#include<stdio.h>

main()

{

int x,i;

scanf("%d",&x);

for(i=2;i<x;i++)

if(x%i==0)

{

printf("最小因数为%dn",i);break;

}

if(i<x)printf("%d不是素数,最小公因数为%dn",x,i);

else printf("%d是素数n",x);

}

方法2:

#include"stdio.h"

#include"math.h"

void main()

{

int m,i,k;

printf("请输入一个整数n");

scanf("%d",&m);

for(i=2,k=sqrt(m);i<=k;i++)

if(m%i==0)break;

if(k+1==i)

printf("%d是素数n",m);

else

printf("%d不是素数,最小公因数是%dn",m,i);

}

2.9罗列任意两个数以内全部素数

#include<stdio.h>

main()

{

int x,i,m,n;

printf("请输入取值范围n");

scanf("%d %d",&m,&n);

for(x=m;x<=n;x++)

{

for(i=2;i<x;i++)

if(x%i==0)break;

if(i>=x)printf("%d ",x);

}

printf("n",x);

}

2.10求任意两个数的最大公约数

#include<stdio.h>

main()

{

int x,y,gcd;

printf("请输入两个数n");

scanf("%d %d",&x,&y);

for(gcd=x;gcd>=1;gcd--)

if(x%gcd==0 && y%gcd==0)break;

printf("%d和%d的最大公约数是%dn",x,y,gcd);

}

2.11百m元钱买百n只鸡问题:公鸡5元,母鸡3元,小鸡0.5元。

X+y+z=n;

5x+3y+0.5z=m;

#include<stdio.h>

void main()

{

int x,y,z,m,n;

printf("请分别输入钱数和鸡数n");

scanf("%d %d",&m,&n);

for(x=0;x<=20;x++)

for(y=0;y<=33;y++)

{

z=n-x-y;

if(5*x+3*y+0.5*z==m)

printf("%d只公鸡,%d只母鸡,%d只小鸡n",x,y,z);

}

}

2.12判断if else语句嵌套练习:工龄与工资结算

#include"stdio.h"

void main()

{

int year;

float s0,s;

printf("依次输入工龄,工资n");

scanf("%d,%f",&year,&s0);

if(year>=20)

{

if(s0>2000)

s=s0+200;

else s=s0+180;

}

else

{

if(s0>1500)

s=s0+150;

else s=s0+120;

}

printf("s=%fn",s);

}

2.13判断并选择switch语句:星期的大写输出

#include"stdio.h"

void main()

{

int day;

printf("请输入1-7的数字n");

scanf("%d",&day);

switch(day)

{

case 1:printf("Mondayn");break;

case 2:printf("Tuesdayn");break;

case 3:printf("Wednesdayn");break;

case 4:printf("Thursdayn");break;

case 5:printf("Fridayn");break;

case 6:printf("Saturdayn");break;

case 7:printf("Sundayn");break;

default:printf("输入有误!n");

}

}

2.14根据输入的三角形三边长,判断是否构成三角形,并计算三角形面积。

#include"stdio.h"

#include"math.h"

void main()

{

float a,b,c,p,s;

printf("请输入三角形边长n");

scanf("%f,%f,%f",&a,&b,&c);

if(a+b>c&&a+c>b&&b+c>a)

{

p=(a+b+c)/2;

s=sqrt(p*(p-a)*(p-b)*(p-c));/*平方根函数,海伦公式:假设有一个三角形,边长分别为a、b、c,三角形的面积S可由以下公式求得:S=√[p(p-a)(p-b)(p-c)] 而公式里的p为半周长:p=(a+b+c)/2 */

printf("s=%.2fn",s);

}

else

printf("这三条边无法构成三角形n");

}

2.15输入一个数字年月日,输出这是今年的第几天

#include"stdio.h"

main()

{

int year,month,day,sum;

printf("请输入年,月,日n");

scanf("%d,%d,%d",&year,&month,&day);

sum=day;

switch(month-1)

{

case 11:sum+=30;

case 10:sum+=31;

case 9:sum+=30;

case 8:sum+=31;

case 7:sum+=31;

case 6:sum+=30;

case 5:sum+=31;

case 4:sum+=30;

case 3:sum+=31;

case 2:if((year%4==0&&year%100!=0)||year%400==0)sum+=29;/*判断闰年的公式:四年一闰,百年不闰,四百年再闰*/

else sum+=28;

case 1:sum+=31;

}

printf("这是今年的第%d天n",sum);

}

2.16输入一行字符串,分别统计字母和数字个数

#include"stdio.h"

void main()

{

char ch;

int inum=0,ilet=0;

while((ch=getchar())!='n')/*getchar()输入单个字符*/

{

putchar(ch);

if(ch>='a'&&ch<='z'||ch>='A'&&ch<='Z') ilet++;

if(ch>='0'&&ch<='9') inum++;

}

printf("中字母有%d个,数字有%d个n",ilet,inum);

}

2.17编写函数,输出乘法口诀表

#include"stdio.h"

void main()

{

int i,j,k;

for(i=1;i<=9;i++)

{

for(j=1;j<=i;j++)

printf("%d*%d=%2d ",j,i,i*j);

putchar('n');

}

}

2.18兔子繁殖计算Fibonacci数列

开始1对兔子,3个月后每个月都会生1对兔子,求每个月兔子总数。

#include"stdio.h"

void main()

{

int i,f1=1,f2=1,f,iMon;

printf("请输入整数月n");

scanf("%d",&iMon);

for(i=3;i<=iMon;i++)

{

f=f1+f2;

f1=f2;

f2=f;

}

printf("第%d个月时共有%d对%d只兔子!n",iMon,f,2*f);

}

2.19用公式计算π的近似值,π/4=1-1/3+1/5-1/7+...直到最后一项的绝对值小于10的-6次方。

#include"stdio.h"

#include"math.h"

void main()/*π/4=1-1/3+1/5-1/7+...*/

{

int s;

float n,t,pi=0;

for(n=1.0,t=1,s=1;fabs(t)>1e-6;n+=2,s=-s,t=s/n)pi+=t;

pi=pi*4;

printf("pi=%.6fn",pi);

}

2.20输入两个数m,n,求最大公约数和最小公倍数

#include"stdio.h"

#include"math.h"

void main()/*π/4=1-1/3+1/5-1/7+...*/

{

int m,n,k,a,b;

printf("请输入两个整数m,nn");

scanf("%d,%d",&m,&n);

a=m;

b=n;

while(k=m%n)/*辗转相除法*/

{

m=n;

n=k;

}

printf("%d和%d最大公约数为%dn",a,b,n);

printf("%d和%d最小公倍数为%dn",a,b,a*b/n);

}

2.21随机输入学生成绩,负数时结束。统计学生人数,最高成绩,最低成绩,计算平均成绩。

方法1(for循环)

#include<stdio.h>

void main()

{

int i;

float x,max,min,sum=0;

printf("请输入学生成绩n");

scanf("%f",&x);

max=min=x;

sum+=x;

for(i=1;x>0;i++)

{

scanf("%f",&x);

if(x<0)break;

sum+=x;

if(x>max)max=x;

if(x<min)min=x;

}

printf("学生总人数%d,最高成绩是%f,最低成绩是%f,平均成绩是%fn",i,max,min,sum/i);

}

方法2(while循环)

#include<stdio.h>

void main()

{

int i=0;

float x,max,min,sum=0;

printf("请输入成绩n");

scanf("%f",&x);

i++;

max=min=x;

sum+=x;

while(x>0)

{

if(x>max)max=x;

if(x<min)min=x;

scanf("%f",&x);

if(x<0)break;

i++;

sum+=x;

}

printf("总人数%d,最高成绩%f,最低成绩%f,平均成绩%fn",i,max,min,sum/i);

}

2.22若一个3位数等于其各位数的立方和,则该数为水仙花数,求3位数中所有的水仙花数。

#include<stdio.h>

void main()

{

int i,j,k,num;

for(num=100;num<1000;num++)

{

i=num%10;

j=num/10%10;

k=num/100%10;

if(num==i*i*i+j*j*j+k*k*k)printf("%dn",num);

}

}

2.23输入一个整数,逆序输出

#include<stdio.h>

void main()

{

int n,num=0;

printf("请输入整数n");

scanf("%d",&n);

while(n!=0)

{

num=num*10+n%10;/*求余得最低位*/

n/=10;/*除以10进一位*/

}

printf("%dn",num);

}

2.24编程输出三角形

#include<stdio.h>

void main()

{

int i,j,k;

for(i=1;i<=5;i++)

{

for(j=5-i;j>0;j--)

putchar('0');

for(k=i;k>0;k--)

putchar('*');

putchar('n');

}

for(i=4;i>=0;i--)

{

for(j=5-i;j>0;j--)

putchar('0');

for(k=i;k>0;k--)

putchar('*');

putchar('n');

}

}

3 数组学习

2.1两数字交换并输出最大/最小(if)

#include"stdio.h"

main()

{

int a,b,c;

scanf("%d %d",&a,&b);

if(a<b){c=a;a=b;b=c;}

else c=a;

printf("a=%d,b=%d,c=%d,n",a,b,c);

}

#include"stdio.h"

main()

{

int a,b,c;

scanf("%d %d",&a,&b);

c=a>b?a:b;

printf("a=%d,b=%d,c=%d,n",a,b,c);

}

#include"stdio.h"

main()

{

int a,b,c;

scanf("%d %d",&a,&b);

if(a>b)c=a;else c=b;

printf("a=%d,b=%d,c=%d,n",a,b,c);

}

3.1 求学生成绩平均值统计高于平均值人数

#include<stdio.h>

main()

{

int i,n,count=0;

float x[100],avg,sum=0;

printf("请输入学生人数n");

scanf("%d",&n);

printf("请分别输入学生成绩n");

for(i=0;i<n;i++)

{

scanf("%f",&x[i]);

sum+=x[i];

}

avg=sum/n;

printf("及格成绩如下:");

for(i=0;i<n;i++)

if(x[i]>avg)

{

count++;

printf("%f ",x[i]);

}

printf("n总成绩%fn平均成绩%fn及格人数%dn",sum,avg,count);

}

3.2数组初始化(fibonacci函数)

Int a[7]={1,2,3,4,5};前5个赋值,其他为0

Int a[ ]={1,2,3,4,5,6};默认6个数组

fibonacci函数:1,1,2,3,5,8,13,21****

求前n个fibonacci函数的值。

#include<stdio.h>

main()

{

int i,n,x[1000]={1,1};

printf("请输入fibonacci函数的数量n");

scanf("%d",&n);

printf("%d %d ",x[0],x[1]);

for(i=2;i<n;i++)

{

x[i]=x[i-1]+x[i-2];

printf("%d ",x[i]);

}

printf("n");

}

3.3求最大数和最小数

#include<stdio.h>

main()

{

int i,n;

float x[100],max,min;

printf("请输入学生人数n");

scanf("%d",&n);

printf("请分别输入学生成绩n");

for(i=0;i<n;i++)

scanf("%f",&x[i]);

max=x[0];

for(i=1;i<n;i++)

{

if(x[i]>max)max=x[i];

}/*找到最大值*/

min=x[0];

for(i=1;i<n;i++)

{

if(x[i]<min)min=x[i];

}/*找到最小值*/

printf("最高成绩为%fn最低成绩%fn",max,min);

更换位置:

min=x[0];

mini=0;

for(i=1;i<n;i++)

{

if(x[i]<min)

{

min=x[i];

mini=i;

}

}

t=x[i];

x[i]=min;

x[mini]=t;

3.4选择排序问题

逐一筛选法:

#include<stdio.h>

main()

{

int i,j,n,mini;

float x[100],max,min,t;

printf("请输入学生人数n");

scanf("%d",&n);

printf("请分别输入学生成绩n");

for(i=0;i<n;i++)

scanf("%f",&x[i]);

max=x[0];

for(i=1;i<n;i++)

{

if(x[i]>max)max=x[i];

}/*找到最大值*/

min=x[0];

for(i=1;i<n;i++)

{

if(x[i]<min)min=x[i];

}/*找到最小值*/

printf("最高成绩为%fn最低成绩%fn",max,min);

for(i=0;i<n-1;i++)

{

min=x[i];

mini=i;

for(j=i+1;j<n;j++)

if(x[j]<min)

{

min=x[j];

mini=j;

}

x[mini]=x[i];

x[i]=min;

}/*按从小到大排序*/

for(i=0;i<n;i++)

printf("%f ",x[i]);/*输出排列后顺序*/

printf("n");

}

3.5冒泡法排序

#include<stdio.h>

main()

{

int i,j,n;

float t,x[100];;

printf("请输入学生人数n");

scanf("%d",&n);

printf("请分别输入学生成绩n");

for(i=0;i<n;i++)

scanf("%f",&x[i]);

for(i=0;i<n-1;i++)

for(j=0;j<n-1-i;j++)

if(x[j]>x[j+1])

{

t=x[j];

x[j]=x[j+1];

x[j+1]=t;

}

printf("从小到大排序为:n");

for(i=0;i<n;i++)

printf("%f ",x[i]);

printf("n");

}

3.6二维数组输入和输出

#include<stdio.h>

main()

{

int i,j,n,m;

int x[100][100];

scanf("%d%d",&n,&m);

for(i=0;i<n;i++)

for(j=0;j<m;j++)

scanf("%d",&x[i][j]);

for(i=0;i<n;i++)

{

for(j=0;j<m;j++)

printf("%6d ",x[i][j]);

printf("n");

}

}

3.7二维数组找每一行最小值

#include<stdio.h>

main()

{

int i,j,n,m,mini,minj;

int x[100][100],min;

scanf("%d%d",&n,&m);

for(i=0;i<n;i++)

for(j=0;j<m;j++)

scanf("%d",&x[i][j]);

for(i=0;i<n;i++)

{

min=x[i][0];

for(j=0;j<m;j++)

if(min>x[i][j])

min=x[i][j];

printf("%dn",min);

}

printf("n");

for(i=0;i<n;i++)

{

for(j=0;j<m;j++)

printf("%6d ",x[i][j]);

printf("n");

}

}

3.8字符数组与字符串

#include<stdio.h>

main()

{

char x[6]={'a','b','c','d','0'},a[6]="abcd",b[6],d[10],e[]="adcd e";

int c[6]={97,98,99,100},i=0;

scanf("%s",d);

gets(b);

puts(b);

printf("%sn%sn%sn%sn%s%sn",x,a,b,c,d,e);

}

输入:gets(字符数组名);

输出:puts(字符数组名);

字符串复制:strcpy(字符数组1,字符串2);

字符串连接:strcat(字符数组1,字符串2);

字符串比较大小:strcmp(字符串1,字符串2);输出ASCII值.

统计字符数(不含0):Strlen(字符数组);

大写转小写:strlwr(字符串);

小写转大写:strupr(字符串);

4函数

4.1系统标准函数

#include<stdio.h>

4.2自定义函数

函数头

{函数体}

类型标识符 函数名(形参表列)

{声明部分

语句部分}

形参表列:-类型1 形参1,类型2 形参2,.....

类型标识符void表示没有运算结果(没有返回值)

省略代表整形int

实例:

#include<stdio.h>

main()

{

int x,y,c;

scanf("%d%d",&x,&y);

c=x>y?x:y;

printf("%dn",c);

}

4.3比较两个数分大小函数调用

#include<stdio.h>

int max(int a,int b)

{

int c;

c=a>b?a:b;

return c;

}

main()

{

int x,y;

scanf("%d%d",&x,&y);

printf("%dn",max(x,y));

}

4.4圆的面积

方法一:

#include<stdio.h>

float area(float r)

{

float s;

s=3.14*r*r;

return s;

}

main()

{

float x;

scanf("%f",&x);

printf("%fn",area(x));

}

方法二:

#include<stdio.h>

main()

{

float x;

float area(float);

scanf("%f",&x);

printf("%fn",area(x));

}

float area(float r)

{

float s;

s=3.14*r*r;

return s;

}

方法三:

#include<stdio.h>

main()

{

float x;

float area(float);

scanf("%f",&x);

printf("%fn",area(x));

}

#define PI 3.14

float area(float r)

{

float s;

s=PI*r*r;

return s;

}

4.5字符串复制strcpy(char a[],char b[])

#include<stdio.h>

void my_strcpy(char a[],char b[])

{

int i=0;

while(b[i]!='0')

{

a[i]=b[i];

i++;

}

a[i]='0';

}

4.6字符串大小比较strcmp(char a[],char b[])

int my_strcmp(char a[],char b[])

{

int i=0;

while(a[i]==b[i]&&a[i]!='0')i++;

return a[i]-b[i];

}

4.7递归求阶乘n!

#include<stdio.h>

long f(long n)

{

if(n==0)return 1;

return n*f(n-1);

}

main()

{

long n,m;

scanf("%ld",n);

m=f(n);

printf("%ldn",m);

}

4.8递归求f(x)=5-f(x-1)的值

#include<stdio.h>

int f(int x)

{

if(x>0)return 5-f(x-1);

return 0;

}

main()

{

int n;

scanf("%d",&n);

printf("%dn",f(n));

}

5预处理

5.1变量

默认auto局部变量:函数体内使用

全局static全局变量:程序开始至程序结束

register:类似auto,但存储空间在寄存器中

全局变量前加extern声明

举例:

#include<stdio.h>

int f(int i)

{

int c=0;

c+=i;

return c;

}

main()

{

int i,sum;

for(i=0;i<10;i++)sum=f(i);

printf("%dn",sum);

}

5.2宏定义

#define 标识符 字符串

5.2.1宏定义常量

#include<stdio.h>

main()

{

float x;

float area(float);

scanf("%f",&x);

printf("%fn",area(x));

}

#define PI 3.14

float area(float r)

{

float s;

s=PI*r*r;

return s;

}

5.2.2宏定义表达式

#include<stdio.h>

#define x 2

#define y 1+1

main()

{

int a,b;

a=x*4;

b=y*4;

printf("%d,%dn",a,b);

}

5.2.3宏定义变量表达式

#include<stdio.h>

#define x 2

#define y (x+1)

main()

{

int a,b;

a=x*4;

b=y*4;

printf("%d,%dn",a,b);

}

5.2.4宏定义语句

#include<stdio.h>

#define x 2

#define y(a,b) c=a+b;d=a-b;

main()

{

int a,b,c,d;

a=x*4;

b=x+4;

y(a,b);

printf("%d,%d,%d,%dn",a,b,c,d);

}

5.3声明

插入系统文件进行编译:

#include<stdio.h>在option目录下找

或者#include"stdio.h"在option和当前目录

5.4条件编译

#ifdef 标识符

程序段1

#else

程序段2

#endif

6指针

6.1概念

指针变量:

基类型 *指针变量名

例如:Int *p

#include"stdio.h"

main()

{

int a[6]={1,2,3,4},*p,i;

p=a;

for(i=0;i<3;i++)

{

printf("%dn",*p);

p++;

}

}

6.2指针字符串

#include"stdio.h"

main()

{

char a[6]="abcd";

char *p;int i;

p=a;

for(i=0;i<3;i++)

{

printf("%sn",p);/*每次从当前位置开始输出*/

p++;

}

}

*p为内容,*p+1内容+1,*(p+1)为地址+1,*a为a[0]

6.3用指针访问数组元素

#include"stdio.h"

main()

{

int a[5],*p, i;

p=a;

for(i=0;i<5;i++)

scanf("%d",p++);/* scanf("%d",a+i)*/

for(i=0;i<5;i++)

printf("%dn",a[i]);/*a[i]==*(a+i)*/

}

6.4字符串的指针和指向字符串的指针变量

#include"stdio.h"

main()

{

char c='x',*p=&c,*q="abcd",*m;

m="xyz";

printf("%c,%c,%s,%sn",*p,*q,q,q+1);

}

6.5字符(串)指针作为函数参数

#include"stdio.h"

main()

{

char *p,a[10];

scanf("%s",*p);/*p="abc"*/

scanf("%s",a);/*a="abc"*/

printf("%s,%sn",*p,a);

}

6.6二维数组与指针

#include"stdio.h"

main()

{

int *p,*q,a[4]={7,8,9,0},b[2][3]={1,2,3,4,5,6};

p=a+1;

q=b[0];

printf("%d,%d,%d,%dn",*p,*q+1,*a,**b);/*输出8,2,7,1*/

}

6.7指针数组与指针的指针

#include"stdio.h"

main()

{

int a[12]={1,2,3,4,5,6,7,8,9,10,11,12};

int *p[4]={a,a+3,a+6,a+9};

printf("%dn",p[2][2]);/*p[2][2]==*(p[2]+2)输出9*/

}

7结构体和共用体

定义格式:

struct 类型名{ 成员类型1 成员名1;成员类型2 成员名2;};

7.1结构体类型定义

struct t1{int x;float y;}a;/*无名类型*/

7.2结构体变量的定义与赋值

struct t1 a;

7.3成员运算符.

a.x=10;

a.y=20;

7.5指向结构体类型的指针

struct node{int a;float b;}x,*p;p=&x;

x.a等同p->a等同(*p).a

实例:

struct node{int a;int b;}a[10],*p=a;

p->a;p指向a[0]

p++;p指向a[1]

++p->a;先p->a,再对内容自增1

(++p)->a;p指向a[2]

7.6综合练习

#include<stdio.h>

struct s{int x,*y;}*p;

int data[5]={10,20,30,40,50};

struct s

array[5]={100,&data[0],200,&data[1],300,&data[2],400,&data[3],500,&data[4]};

main()

{p=array;

printf("%dn",p->x);/*100*/

printf("%dn",(*p).x);/*100*/

printf("%dn",*p->y);/*10*/

printf("%dn",*(*p).y);/*10*/

printf("%dn",++p->x);/*101*/

printf("%dn",(++p)->x);/*200*/

printf("%dn",p->x++);/*200*/

printf("%dn",p->x);/*201*/

printf("%dn",++(*p->y));/*21*/

printf("%dn",++*p->y);/*22*/

printf("%dn",*++p->y);/*30*/

printf("%dn",p->x);/*201*/

printf("%dn",*(++p)->y);/*30*/

printf("%dn",p->x);/*300*/

printf("%dn",*p->y++);/*30*/

printf("%dn",p->x);/*300*/

printf("%dn",*(p->y)++);/*40*/

printf("%dn",p->x);/*300*/

printf("%dn",*p++->y);/*50*/

printf("%dn",p->x);/*400*/

}

7.4结构体变量初始化

#include<stdio.h>

struct t1

{int x;

float y;};

struct t2

{char c;

struct t1 b;};

struct t1 a={10,1.5}

struct t2 b={'a',10,1.5}

7.5结构体数组

struct t1

{int x[10];

float y;}

struct t1 a,b[5];

例如:

#include<stdio.h>

struct t

{char name[10];

int age;};

main()

{

struct t student[10];

scanf("%s,%d",student[0].name,&student[0].age);

}

7.7共用体

与结构体不同在,选取最大空间。相同都是从头开始。

Union 类型名{成员类型1 成员1;成员类型2 成员2;}

与结构体定义一致。

#include"stdio.h"

union t1

{

int x;

float y;

};

struct t2

{

int x;

float y;

};

main()

{

union t1 a,*p;

a.x=10;

a.y=1.5;

p=&a;

p->x;

p->y;

printf("%dn",a.x);/*输出无效数字*/

struct t2 b,*q;

b.x=10;

b.y=1.5;

q=&b;

q->x;

q->y;

printf("%dn",b.x);/*输出10*/

}

7.8枚举类型

enum 类型名(枚举常量1,枚举常量2,枚举常量3);

Enum 类型名 变量;

变量=枚举常量1;

7.9用typedef定义类型

typedef 已有类型名 新的标识符;

typedef int integer;以后integer就当int用

7.10用typedef定义数组或指针

typedef int A[10];

typedef int *P;

A a,b;P p1,p2;

A、P是类型名,a、b是整形数组,p1、p2是整形指针;

7.11用typedef定义结构体、共用体、枚举等类型

typedef struct tagPoint

{

double x;

double y;

double z;

} Point;

8 位运算(&、|、^、~、>>、<<)

& 与 两个位都为1时,结果才为1

| 或 两个位都为0时,结果才为0

^ 异或 两个位相同为0,相异为1

~ 取反 0变1,1变0例如~5是-(5+1)等于-6;-6取反+(6-1).

<< 左移 各二进位全部左移若干位,高位丢弃,低位补0

>> 右移 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移)

*=、+=、-=、<<=、>>=、&=等自反运算符

493464a04bddb4d288b571e83d689afe.png

练习

1.输入字符和数字,分别统计个数

方法1:

#include"stdio.h"

main()

{

int count1=0,count2=0;

char c;

while((c=getchar())!='n')

if(c>='a'&&c<='z'||c>='A'&&c<='Z')count1++;

else if(c>='0'&&c<='9')count2++;

printf("%d个字母,%d个数字n",count1,count2);

}

方法2:

#include"stdio.h"

main()

{

int count1=0,count2=0,i=0;

char c[100];

gets(c);

while(c[i]!='0')

{

if(c[i]>='a'&&c[i]<='z'||c[i]>='A'&&c[i]<='Z')count1++;

else if(c[i]>='0'&&c[i]<='9')count2++;

i++;

}

printf("%d个字母,%d个数字n",count1,count2);

}

2.strcat函数的编写

#include"stdio.h"

main()

{

int i=0,j=0;

char a[100],b[100];

gets(a);

gets(b);

while(a[i]!='0')i++;

while(b[j]!='0')

{

a[i]=b[j];

i++;

j++;

}

a[i]='0';

puts(a);

}

3.从键盘输入10个证整数,输出最小值

方法1:

#include"stdio.h"

main()

{

int i,a[10],min;

for(i=0;i<10;i++)

scanf("%d",&a[i]);

min=a[0];

for(i=0;i<10;i++)

if(min>a[i])

min=a[i];

printf("%dn",min);

}

方法2:

#include"stdio.h"

main()

{

int i,x,min;

scanf("%d",&x);

min=x;

for(i=0;i<9;i++)

{

scanf("%d",&x);

if(min>x)

min=x;

}

printf("%dn",min);

}

4.从键盘输入10个字符,然后相反次序输出

#include"stdio.h"

main()

{

char a[10],i;

for(i=0;i<10;i++)

scanf("%c",&a[i]);

for(i=9;i>=0;i--)

printf("%c",a[i]);

printf("n");

}

5.键盘输入10个整数,求他们的平均值和整数个数

#include"stdio.h"

main()

{

int i,x,sum,count,agv;

sum=count=agv=0;

for(i=0;i<10;i++)

{

scanf("%d",&x);

sum+=x;

if(x>0)count++;

}

agv=sum/10.0;

printf("%d,%dn",agv,count);

}

韩国全2020-11-25学习完毕

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值