您的位置:首页 > 编程语言 > C语言/C++

c语言详解+例子1

2015-07-31 14:36 337 查看
1、数据类型转换

/*数据类型转换

c语言规定,不同类型的数据需要转换成同一类型后才可以进行计算

注意:并不是所有类型的数据之间都可以进行转换。例如,指针和整型、实型、字符型之间不能进行类型转换

相同类型的数据在转换时有规则可循,如字符必先转换为整型(c语言规定字符类型数据和整型数据之间可以通用),short型转换为int型

(同属于整型),float型数据在运算时一律转换为双精度double型,以提高运算精度(同属于实型)。

不同类型的数据发生转换时,遵循低级向高级转换的原则,例如int型数据与double型数据进行运算时,是先将int型转换为double型后再

进行运算,结果为double型

此外,在一个赋值语句中,若发生类型转换,则是赋值语句右部(表达式一侧)的值转换成左部(目标一侧)的类型;

赋值运算符“=”的结合性是按照“自左向右”的规则执行

*/
int main(int argc,constchar * argv[])
{

// insert code here...

//定义变量并赋初值
int a=5;
char c='a';
float f=5.3;
double m=12.65;
double result;

//同类型数据间进行运算并输出结果
printf("a+c=%d\n",a+c);
printf("a+c=%c\n",a+c);
printf("f+m=%f\n",f+m);

//不同类型数据间进行运算并输出结果
printf("a+m=%f\n",a+m);
printf("c+f=%f\n",c+f);

//将上述四个变量进行混合运算,并输出结果
result=a+c*(f+m);
printf("double=%f\n",result);
return0;
}
2、转义字符



int main(int argc,constchar
* argv[])

{

//换行符‘\n’,用于输出换行

printf("How are you?\n");

printf("I am fine.\n\n");

//横向跳格符‘\t’,跳到下一个输入

printf("How are you?\t");

printf("I am fine.\n\n");

//退格符‘\b’,使当前的输出位置退一格,即输出的起始位置左移一位

printf("How are you?\n");

printf("\bI am fine.\n\n");

//回车符‘\r’。使当前输出位置回到本行开头

printf(" I am fine.");//I前面共16个空格

printf("\rHow are you?\n\n");

//多个转义字符的混合运用

printf("note:\n a s\ti\b\bk\rp\n");
return0;
}



3、关系非与或 (!、&& 、||)



int main(int argc,constchar * argv[])
{
int logic;
int a=1;
int b=2;
int c=3;
logic=a+b>c&&b<=c;
printf("logic=%d\n",logic);
logic=a>=b+c||b==c;
printf("logic=%d\n",logic);
logic=!(a<c)+b!=1&&(a+c)/2;
printf("logic=%d\n",logic);
return0;
}
输出结果为:0、0、1

4、自增自减运算符



int main(int argc,constchar * argv[])
{
int i,j,k;
int m,n,p;
i=8;
j=10;
k=12;
m=++i;
printf("i=%d\n",i);
printf("m=%d\n",m);
n=j--;
printf("j=%d\n",j);
printf("n=%d\n",n);
p=(++m)*(n++)+(--k);
printf("k=%d\n",k);
printf("p=%d\n",p);
return0;
}
输出结果为:i=9、m=9、j=9、n=10、k=11、p=111

5、普通位运算



//简单位运算

int main(int argc,constchar * argv[])
{
unsignedchar result;
int a,b,c,d;
a=2;
b=4;
c=6
d=8;
result=a&c;
printf("result=%d\n",result);
result=b|d;
printf("result=%d\n",result);
result=a^d;
printf("result=%d\n",result);
result=~a;
printf("result=%d\n",result);
return0;
}

答案是:2、12、10、253

6、位移运算



//简单位移运算
int main(int argc,constchar * argv[])
{
unsigned a,b,c,d;
int n;
a=64;
n=2;
b=a>>(6-n);
printf("b=%d\n",b);
c=a<<n;
printf("c=%d\n",c);
d=(a>>(n-1))|(a<<(n+1));
printf("d=%d\n",d);
return0;
}
结果为:4、256、544
无符号数左移一位除以2,低位补0、右移一位乘以2,高位补0

7、指针操作符



//指针操作

int main(int argc,constchar * argv[])
{
int *p;
int begin,end;
begin=10;
p=&begin;
end=*p;
printf("begin=%d\n",begin);
printf("end=%d\n",end);
printf("p=%d\n",p);
printf("*p=%d\n",*p);
return0;
}

8、if-else &switch



9、for语句



//利用for循环打印出菱形
int main(int argc,constchar * argv[])
{
int i,j,k;
for(i=0;i<=4;++i)
{

//当行数为i时,空格数是i的函数为4-i个
for(j=0;j<=3-i;++j)printf("
");

//星号数也为i的函数为2i+1个
for(k=0;k<=2*i;++k)printf("*");
printf("\n");
}
for(i=0;i<=3;++i)
{

//当行数为i时,空格数是i的函数为4-i个
for(j=0;j<=i;++j)printf(" ");

//星号数也为i的函数为2i+1个
for(k=0;k<=6-2*i;++k)printf("*");
printf("\n");
}
return0;
}
打印结果为:
*
***
*****
*******
*********
*******
*****
***
*
10、while & do-while







#include "math.h"
int main(int argc,constchar * argv[])
{

// //求最大公约数和最小公倍数利用辗转相除法while

// int x,y,num1,num2,temp;

// printf("请输入俩个数:\n");

// scanf("%d %d",&num1,&num2);

// x=num1;

// y=num2;

// while(y!=0)

// {

// temp=x%y;

// x=y;

// y=temp;

// }

// printf("它们的最大公约数是%d\n",x);

// printf("它们的最小公倍数是%d\n",num1*num2/x);

//求sin(x)=x-x^3/3!+x^5/5!-x^7/7!+...直到最后一项的绝对值小于1e-7时为止 do-while
double s,t,x;
int n;

printf("please enter x:");
scanf("%lf",&x);
t=x;
n=1;
s=x;
do{
n=n+2;
t=t*(-x*x)/((float)(n)-1)/((float)(n));
s+=t;
}while (fabs(t)>=1e-8);

printf("sin(%f)=%lf\n",x,s);
return0;
}

11、break & continue & exit();





#include "stdlib.h"
int main(int argc,constchar * argv[])
{

//10个球的面积 break & continue
int radius;
double area;
for(radius=1;radius<=10;++radius)
{
area=3.1416*radius*radius;
if(area>=120.0)break;
printf("square=%f\n",area);
}

printf("now radius=%d\n",radius-1);
for(radius=1;radius<=10;++radius)
{
area=3.1416*radius*radius;
if(area<120.0)continue;
printf("square=%f\n",area);
}

printf("now radius=%d\n",radius-1);

//exit()
输入月数,打印出1999年的该月有几天
int month;
int day;

printf("please enter the month number:");
scanf("%d",&month);
switch (month) {
case1:
case3:
case5:
case7:
case8:
case10:
case12:day=31;break;
case4:
case6:
case9:
case11:day=30;break;
case2:day=28;break;
default:exit(0);
}

printf("199.%d has %d days.\n",month,day);
return0;
}
12、利用上述实现功能:验证哥德巴赫猜想,即任一充分大的偶数,可以用俩个素数之和表示

#include <math.h>
int main(int argc,constchar * argv[])
{
int i,j,num;
int p,q,flagp,flagq;

printf("please input a plus integer:");
scanf("%d",&num);
if(((num%2)!=0)||(num<=4))printf("input
data error!\n");
else{
p=1;
do{
p=p+1;
q=num-p;
flagp=1;
flagq=1;
for(i=2;i<(int)(floor(sqrt((double)(p))));++i)
{
if((p%i)==0)
{
flagp=0;
break;
}
}
j=2;
while(j<=(int)(floor(sqrt((double)(q)))))
{
if((q%j)==0)
{
flagq=0;
break;
}
j++;
}
}while(flagp*flagq==0);
printf("%d=%d+%d\n",num,p,q);
}
return0;
}
参考结果:

please input a plus integer:39
input data error!
please input a plus integer:10
10=3+7

13、一维数组
除了基本类型数据(整型、字符型、实型),c语言还提供了构造类型的数据,它们有:构造类型、结构体类型、共用体类型。构造类型数据实际上是由基本数据类型按一定规则构成的,所以有时也称它们为导出类型。数组类型属于构造类型。



选择排序法的原理;从一堆数中先找出最小的将其标记;然后再在余下的数中找出最小的,标记并放在前一个标记数的后面;依次执行,完成排序。

//一维数组
选择排序

#include <stdio.h>
int main()
{
int i,j,min,temp;
int array[10];

printf("please input ten integer:\n");
for(i=0;i<10;++i)
{
printf("array[%d]=",i);
scanf("%d",&array[i]);
}

printf("the array is: ");
for(i=0;i<10;++i)
{
printf("%d ",array[i]);
}
printf("\n");

//选择排序
for(i=0;i<9;++i)
{
min=i;
for(j=i;j<10;++j)
{
if(array[min]>array[j])
{
min=j;
}
}
temp=array[i];
array[i]=array[min];
array[min]=temp;
}

printf("the sort result is:\n");
for(i=0;i<10;++i)
{
printf("%d ",array[i]);
}
printf("\n");
return0;
}

14、二维数组
二维数组的下标和一维数组一样均是从0开始。二维数组以行-列矩阵的形式存储。第一个下标代表行,第二个下标代表列,这意味着按照在内存中的实际存储顺序访问数组元素时,右边的下标比左边的下标的变化快一些。
a是一个二维数组
第0行首地址 (第0行第0列地址)a[0]、*(a+0)、*a
*(a+1) 第一行第0列地址
第一行第2列元素地址 *(a+1)+2、a[1]+2、&a[1][2]
取第一行第2列元素的值 a[1][2]、*(a[1]+2)、*(*(a+1)+2)

/*

4个学生每个学生学5门课程,要求输入课程名称,没个学生的学号和成绩

(1)求第一门课程的平均成绩

(2)找出俩们成绩不及格的学生的学号及成绩、平均成绩

*/
void aver(char course[6][10],int
stu[4][6]);
void low2(char course[6][10],int
stu[4][6]);
int main()
{

int i,j;

int stu[4][6]={0};

char course[6][10]={"",};

printf("请输入5门课程\n");

for(i=1;i<6;++i)
{

scanf("%s",course[i]);
}

printf("课程是:\n");

for(i=0;i<6;++i)
{

printf("%s\t",course[i]);
}

printf("\n");

for(i=0;i<4;++i)
{

printf("请输入第%d个学生的学号及成绩:\n",i+1);

for(j=0;j<6;++j)
{

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

for(i=0;i<6;++i)
{

printf("%s\t",course[i]);
}

printf("\n");

for(i=0;i<4;++i)
{

for(j=0;j<6;++j)
{

printf("%d\t",stu[i][j]);
}

printf("\n");
}

// aver(course, stu);

low2(course, stu);

return 0;
}
void aver(char course[6][10],int
stu[4][6])
{

int i;

int sum;

double avg;

int n;

printf("请输入求哪门课程的平均成绩\n");

scanf("%d",&n);

while (n>5||n<1) {

printf("课程号应该为(1-5)!\n请重新输入:\n");

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

for(i=0;i<4;++i)
{
sum+=stu[i]
;
}
avg=sum/4;

printf("the course is %s,the average is %5.2f\n",course
,avg);
}
void low2(char course[6][10],int
stu[4][6])
{

int i=0,j=0,k=0,n=0,num=0,sum=0;;

int s[4][2]={};

double avg;

for(i=0;i<4;++i)
{
num=0;

for(j=1;j<6;++j)
{

if(stu[i][j]<60)
{
num++;

if(s[k][0]!=i)
{
k++;
s[k][0]=i;
s[k][1]=num;
}else{
s[k][1]=num;
}
}
}
}
n=k;

for(k=0;k<=n;++k)
{
sum=0;

if(s[k][1]>2)
{

printf("学号为%d的学生有超过俩们的成绩不及格!\n该学生的成绩为:\n",stu[s[k][0]][0]);

for(j=1;j<6;++j)
{

printf("%s:%d\n",course[j],stu[s[k][0]][j]);
sum+=stu[s[k][0]][j];

}
avg=sum/5;

printf("学号为%d的学生的平均成绩为:%5.2f\n",stu[s[k][0]][0],avg);

printf("\n");

}
}
}

//矩阵倒置
int main()
{
int array[10][10];
int i,j,t,n;

printf("please enter the size of array :");
scanf("%d",&n);

printf("please input the number of array:\n");
for(i=0;i<n;++i)
{
for (j=0; j<n;++j) {
scanf("%d",&array[i][j]);
}
}

printf("原数组为:\n");
for(i=0;i<n;++i)
{
for (j=0; j<n;++j) {
printf("%d\t",array[i][j]);
}
printf("\n");
}
for(i=0;i<n;++i)
{
for (j=0; j<i;++j) {
t=array[i][j];
array[i][j]=array[j][i];
array[j][i]=t;
}
}

printf("数组转制后为:\n");
for(i=0;i<n;++i)
{
for (j=0; j<n;++j) {
printf("%d\t",array[i][j]);
}
printf("\n");
}
return
0;
}

//学生成绩操作
int main()
{

float score[3][4]={{55,56,70,60},{80,50,90,81},{90,99,100,98}};

// float s[12]={65,67,70,60,80,87,90,81,90,99,100,98};

// average(*score, 12);

// average(s, 12);

// search(score, 1);
low(score);

return
0;

}

void average(float *p,int n)
{
float* p_end;
float sum=0.0,aver=0.0;
p_end=p+n;
for(;p<p_end;++p)
{
sum+=*(p);
}
aver=sum/n;

printf("the average score is %5.2f\n",aver);
}
void search(float(*p)[4],int n)
{
int i=0;

printf("the score of NO.%d are:\n",n);
for(i=0;i<4;++i)
{
printf("%5.2f ",*(*(p+n)+i));
}
printf("\n");
}
void low(float (*p)[4])
{
int i=0,j=0,k=0,n=0;

// int s[10]={100};
for(i=0;i<3;++i)
{
for(j=0;j<4;++j)
{
if(*(*(p+i)+j)<60)
{

printf("the %d score of NO.%d is lower than 60!\n",j,i);
search(p, i);

// if(s[k]!=i)

// {

// s[k]=i;

// k++;

// }
}
}
}

// n=k;

// for(k=0;k<n;++k)

// {

// printf("the score of NO.%d is lower than 60!\n",s[k]);

// for(j=0;j<4;++j)

// {

// printf("%5.2f ",*(*(p+s[k])+j));

// }

// printf("\n");

// }
}

//打印平行四边形
char str[10][10]={' '};
int i,j,n;

printf("input the size of array:");
scanf("%d",&n);
for(i=0;i<n;++i)
{

// for(j=0;j<2*n;++j)

// {

// if(j<i)

// {

// str[i][j]=' ';

// }else if(j<n+i){

// str[i][j]='*';

// }

// }
for(j=i;j<n+i;++j)
{
str[i][j]='*';
}
}

printf("平行四边形str:\n");
for(i=0;i<n;++i)
{
for(j=0;j<2*n;++j)
{
printf("%c\t",str[i][j]);
}
printf("\n\n");
}

//通过二维数组打印空心菱形

// char array[15][15];

// int n=0,i=0,j=0;

// printf("input the size of array:");

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

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

// {

// for(j=0;j<n;++j)

// {

// if(i==0||i==n-1)

// {

// if(j==(n)/2)

// {

// array[i][j]='*';

// }else{

// array[i][j]=' ';

// }

// }else if(i==n/2){

// if(j==0||j==n-1)

// {

// array[i][j]='*';

// }else{

// array[i][j]=' ';

// }

// }else if(i<n/2){

// if(j<n/2)

// {

// if(j==n/2-i)

// {

//

// array[i][j]='*';

// }else{

// array[i][j]=' ';

// }

//

// }else{

// if(j==n/2+i)

// {

// array[i][j]='*';

// }else{

// array[i][j]=' ';

// }

// }

// }else{

// if(j<n/2)

// {

// if(j==i-n/2)

// {

//

// array[i][j]='*';

// }else{

// array[i][j]=' ';

// }

//

// }else{

// if(j==n/2+(n-1-i))

// {

// array[i][j]='*';

// }else{

// array[i][j]=' ';

// }

// }

// }

//

// }

// }

// printf("数组array:\n");

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

// {

// for(j=0;j<n;++j)

// {

// printf("%c\t",array[i][j]);

// }

// printf("\n\n");

// }

//打印一个n阶魔方阵,要求每一行每一列以及对角线之和均相等

//n阶魔方阵 (右上斜法)
int main()
{
int array[16][16]={0};
int i=0,j,k,m,n=0;
m=1;
while (m==1) {

printf("请输入n(0<n<15),n为奇数!\n");
scanf("%d",&n);
if(n!=0&&n<=15&&n%2!=0)
{
printf("矩阵阶数是%d\n",n);
m=0;
}
}
//建立魔方阵法一
j=n/2;
array[0][j]=1;
for(k=2;k<=n*n;++k)
{
i--;
j++;
if(i<0&&j>n-1)
{
i=i+2;
j--;
}else{
if(i<0)
{
i=n-1;
}
if(j>n-1)
{
j=0;
}
}
if(array[i][j]==0)
{
array[i][j]=k;
}else{
i=i+2;
j--;
array[i][j]=k;
}
}
//建立魔方阵法2

int s=1;
int a[NUM][NUM];
for(i=0;i<n;)
{
for(j=n/2;j<n;)
{
a[i][j]=s;
s++;
k=(n+i-1)%n;
l=(j+1)%n;
//判断下一个位置是否有值
if(a[k][l]==0)
{
i=k;
j=l;
}elseif(a[++i][j]!=0){
break;
}
}
}

for(i=0;i<n;++i)
{
for(j=0;j<n;++j)
{
printf("%d\t",array[i][j]);
}
printf("\n");
}
return0;
}

/*

螺旋方阵

*/

#include<stdio.h>

#define N 15
int main()
{
int i=0,j,n,k;

printf("请输入要显示的N*N的二维数组的宽度:\n");
scanf("%d",&n);
int sum=n*n;
int s=1;
int a

;

for(i=0;i<n/2;++i)
{
for(j=i;j<n-1-i;++j)
{
a[j][i]=s;
s++;
}
for(j=i;j<n-i-1;++j)
{
a[n-i-1][j]=s;
s++;
}
for(j=n-i-1;j>i;--j)
{
a[j][n-i-1]=s;
s++;
}
for(j=n-i-1;j>i;--j)
{
a[i][j]=s;
s++;
}
}
if(n%2==1)
{
a[n/2][n/2]=sum;
}
printf("%d*%d的二维数组:\n\n",n,n);
for(i=0;i<n;++i)
{
for(j=0;j<n;++j)
{
printf("%d\t",a[i][j]);
}
printf("\n\n\n");
}
}

/*

杨辉三角

*/

#include<stdio.h>

#define N 20
int main()
{
int i,j,n;

printf("请输入要显示的行数:\n");
scanf("%d",&n);
int a

;
a[0][0]=1;
for(i=1;i<n;++i)
{
for(j=0;j<n;++j)
{
if(0==j)
{
a[i][j]=1;
}else{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}

}
}

printf("生成的%d阶杨辉三角如下:\n",n);
for(i=0;i<n;++i)
{
for(j=0;j<=i;++j)
{
printf("%d\t",a[i][j]);
}
printf("\n");
}

}

/*

矩阵排序

*/

#include<stdio.h>

#define N 15
void exchange(int *p,int * q)
{
int temp;
temp=*p;
*p=*q;
*q=temp;
}
int main()
{
int i,j,n,k=0;
int a

={0};
int t=0;
int s=1;

printf("请输入N*N的矩阵的宽度,N应该为大于3的奇数!\n");
scanf("%d",&n);
while(n<4||n%2==0)
{

printf("您的输入有误!\n请重新输入N*N的矩阵的宽度,N应该为大于3的奇数!\n");
scanf("%d",&n);
}

printf("如果选择人为赋值请选1,默认赋值请选2:\n");
scanf("%d",&t);
while(t<1||t>2)
{

printf("您的选择有误!请重新选择赋值方式。\n如果选择人为赋值请选1,默认赋值请选2:\n");
scanf("%d",&t);
}
switch(t)
{
case1:
for(i=0;i<n;++i)
{
for(j=0;j<n;++j)
{
printf("请输入第%d行的第%d个数!\n",i+1,j+1);
scanf("%d",&a[i][j]);
}
}
break;
case2:
for(i=0;i<n;++i)
{
for(j=0;j<n;++j)
{
a[i][j]=s;
s++;
}
}
break;

default:break;
}
printf("您输入的矩阵为:\n");
for(i=0;i<n;++i)
{
for(j=0;j<n;++j)
{
printf("%d\t",a[i][j]);
}
printf("\n");
}

//冒泡排序
int a1[N*N]={0};
for(i=0;i<n;++i)
{
for(j=0;j<n;++j)
{
a1[k]=a[i][j];
k++;
}
}
for(i=0;i<k;++i)
{
for(j=0;j<k-i;++j)
{
if(a1[j]>a1[j+1])
{
exchange(&a1[j],&a1[j+1]);
}
}
}
for(i=0;i<n;++i)
{
for(j=0;j<n;++j)
{
a[i][j]=a1[k];
k--;
}
}
printf("排序后的矩阵为:\n");
for(i=0;i<n;++i)
{
for(j=0;j<n;++j)
{
printf("%d\t",a[i][j]);
}
printf("\n");
}
exchange(&a[0][0],&a[n/2][n/2]);
exchange(&a[0][0],&a[n-1][n-1]);
exchange(&a[0][n-1],&a[n-1][n-2]);
exchange(&a[n-1][0],&a[n-1][n-3]);
exchange(&a[n-1][n-1],&a[n-1][n-4]);
printf("改变后的矩阵为:\n");
for(i=0;i<n;++i)
{
for(j=0;j<n;++j)
{
printf("%d\t",a[i][j]);
}
printf("\n");
}

return0;
}
15、字符数组
在c语言中,文字信息作为字符串处理,而字符串又以字符数组对形式组织。字符数组需预先制定长度,以保证能存放足够长的文字信息。

//文本编辑器。空行退出

#define MAX 100

#define LEN 80
int main()
{
char text[MAX][LEN];
registerint t,i,j;//定义三个寄存器变量
for(t=0;t<MAX;++t)
{
printf("%d:",t);
gets(text[t]);
if(!text[t][0])break;
}
for(i=0;i<t;++i)
{
for(j=0;text[i][j];++j)
{
putchar(text[i][j]);
}
putchar('\n');
}
return0;
}
16、数组应用

//学生成绩查询
int main()
{
int selsect;
int i,j;
int score[5][7];
int avg=0;
int sum=0;
do{

printf("本程序有4项功能:\n");

printf("1、根据学号查询学生成句\n");

printf("2、根据考试号统计成绩\n");

printf("3、根据考试号和学号查询成绩\n");
printf("4、成绩录入\n");
printf("0、退出\n");

printf("请输入选择(0-4)\n");
scanf("%d",&selsect);
switch (selsect) {
case0:
printf("ok\n");
exit(0);
break;
case1:
printf("请输入学号:");
scanf("%d",&i);
for(j=1;j<7;j++)
{
printf("第%d科成绩是%d\n",j,score[i][j]);
sum+=score[i][j];
}
avg=sum/6;
printf("学生的平均成绩是%d\n",avg);
break;
case2:
printf("请输入考试号:");
scanf("%d",&j);
for(i=1;i<5;i++)
{
printf("第%d号学生的成绩是%d\n",i,score[i][j]);
sum+=score[i][j];
}
avg=sum/4;
printf("本科的平均成绩是%d\n",avg);
break;
case3:
printf("请输入学号和考试号:");
scanf("%d %d",&i,&j);
printf("第%d号学生的第%d科考试成绩是%d\n",i,j,score[i][j]);
break;
case4:
printf("请输入成绩\n");
for(i=1;i<5;++i)
{
for(j=1;j<7;j++)
{
scanf("%d",&score[i][j]);
}
}
break;
default:
break;
}
}while(1);
return0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: