C语言笔记

第六章利用数组处理数据

6.1打印输出杨辉三角形(输出10行)

void main(){

int i,j,k;

int a[10][10];

for(i=0,k=9;i<10;i++,k--){

for(j=0;j<10-k;j++){

if(j==0||i==j){

a[i][j]=1;

}else{

a[i][j]=a[i-1][j-1] + a[i-1][j];

}

printf("%4d",a[i][j]);

}

printf("\n");

}

}

6.2改变一组数据的顺序

void main(){

int a[8];

int i,j,temp;

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

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

getchar();

}

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

temp=a[i];

a[i]=a[7-i];

a[7-i]=temp;

}

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

printf("%5d",a[j]);

}

}

6.3排序好的数组,插入一个数,插入到对应的位置,保持数组的顺序

#include<stdio.h>

void main(){

int arr[8] = {2,5,39,89,123,147};

int number;

int temp,temp2,i,j;

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

printf("%5d",arr[i]);

}

printf("please put a number:\n");

scanf("%d",&number);

if(number>arr[5]){

arr[6]=number;

for(int i=0;i<7;i++){

printf("%5d",arr[i]);

}

}else{

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

if(arr[i]>number){

temp=arr[i];

arr[i]=number;

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

temp2=arr[j];

arr[j]= temp;

temp=temp2;

}

break;

}

}

}

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

printf("%5d",arr[i]);

}

}

6.4打印一个魔方阵(限制单数阶层3~15)

void main(){

int number;

int hang=0;

int lie=0;

printf("put a number beteen the one to fity:");

scanf("%d",&number);

int a[number][number];

for(int i=0;i<number;i++){

for(int j=0;j<number;j++){

a[i][j]=0;

printf("%5d",a[i][j]);

}

printf("\n");

}

lie=number/2;

a[hang][lie]=1;

for(int i=2;i<=number*number;i++){

if(hang!=0 && lie!=number-1){

if(a[hang-1][lie+1]==0 ){

a[hang-1][lie+1]=i;

hang--;

lie++;

}else{

a[hang+1][lie]=i;

hang++;

}

}else if(hang==0&&lie!=number-1){

if(a[number-1][lie+1]==0){

a[number-1][lie+1]=i;

hang=number-1;

lie++;

}else{

a[hang+1][lie];

hang++;

}

}else if(hang!=0&&lie==number-1){

if(a[hang-1][0]==0){

a[hang-1][0]=i;

hang--;

lie=0;

}else{

a[hang+1][lie];

hang++;

}

}else if(hang==0&&lie==number-1){

a[hang+1][number-1]=i;

hang++;

}

}

printf("----------\n");

for(int i=0;i<number;i++){

for(int j=0;j<number;j++){

printf("%5d",a[i][j]);

}

printf("\n");

}

}

6.5定义一个形参数组调用函数

void main(){

int num=5;

float sum,avar;

float score1[3]={5,10,15};

float score2[2]={20,10};

float avg(float arry[],int n);

// printf("put ten numbers:");

// for(int i=0;i<num;i++){

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

// }

printf("%5.2f\n",avg(score1,3));

printf("%5.2f",avg(score2,2));

}

float avg(float arry[],int n){

// float arry[num];

float sum,ary;

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

sum += arry[i];

}

 ary =sum/n;

 return ary;

}

注意:在定义二维数组时,必须指定列数,行数可以不指定

  形参数组的第1维可以与实参数组长度不同

6.6数组相关问题

//假设有N盏灯(N为不大于5000的正整数),从1到N按顺序依次编号,初始时全部处于开启状态;有M个人(M为不大于N的正整数)也从1到M依次编号。

//第一个人(1号)将灯全部关闭,第二个人(2号)将编号为2的倍数的灯打开,第三个人(3号)将编号为3的倍数的灯做相反处理(即,将打开的灯关闭,将关闭的灯打开)。依照编号递增顺序,以后的人都和3号一样,将凡是自己编号倍数的灯做相反处理。

//请问:当第M个人操作之后,哪几盏灯是关闭的,按从小到大输出其编号,其间用逗号间隔。

int main()

{

    int n,m;

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

    int led[n];

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

        led[i]=-1;//设-1为关闭状态

    }

    for(int i=2;i<=m;i++){//第一个人把灯全部关闭了,从第二个人开始算

            for(int j=2;j<=n;j++){

                 if(j%i==0){

                led[j-1] = -led[j-1];    

            }

            }

            

    }

    for(int a=0;a<n;a++){

        if(led[a]==-1){

            printf("%4d",(a+1));//把关闭状态的下标加1输出

        }

    }  

    return 0;

}

第七章 函数的使用

7.1利用函数转置一个3*3的二维数组

void main(){

int arr[3][3]={{11,21,31},{12,13,14},{21,22,23}};

int i,j;

void zhuan(int str[3][3]);

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

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

printf("%4d",arr[i][j]);

}

printf("\n");

}

zhuan(arr);

printf("after zhuan is:\n");

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

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

printf("%4d",arr[i][j]);

}

printf("\n");

}

}

void zhuan(int str[3][3]){

int i,j,temp;

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

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

temp=str[i][j];

str[i][j]=str[j][i];

str[j][i]=temp;

}

}

}

7.2利用函数存储字符串

void main()

{

void str_input(char arr[]);

void str_deleate(char arr[],char ch);

void str_out(char arr[]);

char str[20],c;

str_input(str);

//printf("%c",str);

printf("%s\n",str);

printf("put what you want deleate:");

scanf("%c",&c);

printf("%c\n",c);

str_deleate(str,c);

str_out(str);

}

void str_input(char arr[])

{

gets(arr);

}

void str_deleate(char arr[],char ch)

{

int i=0;

int j=0;

for(i=0;arr[i]!='\0';i++){

if(arr[i]!=ch){

arr[j]=arr[i];

j++;

}

}

arr[j]='\0';

}

void str_out(char arr[])

{

printf("%s\n",arr);

}

7.3 输入一个字符串,然后空格输出

void main(){

char arr[10];

void kongge(char str[]);

printf("please input a number:");

scanf("%s",arr);

kongge(arr);

}

void kongge(char str[]){

int i,j;

for(i=strlen(str);i>0;i--){

str[2*i]=str[i];

str[2*i-1]=' ';

}

printf("%s",str);

}

第八章指针使用

  1. 利用指针从大到小排序输出

void main(){

int a,b,c;

int *p1,*p2,*p3;

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

p1=&a;

p2=&b;

p3=&c;

void max_min(int *p1,int *p2,int *p3);

// void swap(int *p1,int *p2);

    max_min(p1,p2,p3);

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

}

void swap(int *p1,int *p2){

int temp;

temp=*p1;

*p1=*p2;

*p2=temp;

}

void max_min(int *p1,int *p2,int *p3){

void swap(int *p1,int *p2);

if(p1<p2)swap(p1,p2);

if(*p1<*p3)swap(p1,p3);

if(*p2<*p3)swap(p2,p3);

}

第八章 指针与结构体

8.1基础预备知识

定义指针是可以先赋予初值int *p=NULL;相当于0,有利于程序不出错

1)全局变量--内存中的静态存储区

2)非静态的局部变量--内存中的动态存储区--stack栈

3)临时使用的

4)动态存储区--堆区

Int *p=NULL;定义指针时先初始化,这是一个好习惯

获取当前时间的函数

#include<time.h>

void main()

{

time_t curtime;

time(&curtime);

printf("shijian=%s",ctime(&curtime));

}

8.2结构体变量(自定义的变量)

完整的结构体声明:struct 结构体名称{//名称可以不写,匿名结构体

成员列表1;

成员列表2;

成员列表3;

...}变量名列表;

void main(){

struct Cat{

char *name;//不一定要指针类型

int age;

char *color;

};

struct Cat cat1={"white",3,"little white"};//此方法也行,Cat是一个结构体数据类型,

//cat1是一个Cat

struct Cat cat2;//每一个变量有三个成员

//赋值相当于变量初始化,没有初始化的结构体变量是不能使用的

cat2.name="小花";

cat2.age=100;

cat2.color="花色";

printf("%s %d %s",cat1.name,cat1.age,cat1.color);

}

内存布局-->分配一块存储三个数据的内存

不同的结构体变量是相互独立的,更改cat1不会影响cat2,这两个变量的属性的地址三个都不一样

结构体可以直接赋值-->但是需要在定义完就赋值,按顺序赋值

如:cat1={“小白”,3,”白色”},cat2={“小花”,100,”花色”};

结构体变量默认是值传递

8.3结构体指针(指针类型的结构体变量)

#include<stdio.h>

#include<string.h>

struct Person

{ char name[20];

int count;

};

struct Person leader[3]={"li",0,"zhang",0,"wang",0};//结构体数组初始化

int main()

{

struct Person *p;

p=leader;

printf("%s%5d\n",p->name,p->count);//输出结构体数组元素1

p++;

printf("%s%5d\n",p->name,p->count);//输出结构体数组元素2

return 0;

}

8.4共用体

共用一个内存,大的类型更改会影响更小的变量的全部字节,占用内存小的变量更改会改变其他变量的一部分低位字节

定义格式为

Union 共用体名{

成员列表//跟结构体一样

};

8.5 C标准文件输入输出

文件输入流:存储文件

文件输出流:把内容读取出来

Gets /puts:输入和输出字符串

格式:int a[ ];

Gets(a);

Puts(a);

Getchar/putchar:得到一个字符和输出一个字符

格式:int a;

A=Getchar();

Putchar(a);

Printf/scanf:标准输入/标准输出

写入文件

void main()

{

FILE *fp=NULL; //创建一个文件指针

fp=fopen("d:/test100.txt","w+"); //打开该文件“w+”指令如果没有该文件,就创建一个,如果有,原先的内容会丢失

//“a+”可以叠加原先的内容

fprintf(fp,"/nhaobeijing\n"); //将内容写到文件中

fputs("hello,shanghai\n",fp);

fclose(fp); //关闭文件,必须要这一步,不然保存不了

printf("complate");

getchar();

}

void main()

{

FILE *fp=NULL;

char buff[1024];

//打开一个文件

fp = fopen("d:/test100.txt","r");

//把文件的一行写入到buff中

fscanf(fp,"%s",buff);

//输出这行 的内容

printf("%s",buff);

fclose(fp);

}

fgets(buff,1024,fp);//输出一行

//读取整个文件

//while(fgets(buff,1024,fp)!=NULL);//输出一行

//{

// printf("%s",buff);

// }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值