这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » 软件与操作系统 » 【学习会】一起学习C语言之多年之后再拾起

共19条 2/2 1 2 跳转至
院士
2018-06-01 19:05:44     打赏
11楼

5 数组

数组

#include<stdio.h>

int main(void)

{

         int uchida;

         int satoh;

         int sanaka;

         int hiraki;

         int masaki;

         int sum=0;

 

         puts(“请输入分数。”);

printf(“1号:”);      scanf(“%d”,&uchida);

printf(“2号:”);      scanf(“%d”,& satoh);

printf(“3号:”);      scanf(“%d”,&sanaka);

printf(“4号:”);      scanf(“%d”,& hiraki);

printf(“5号:”);      scanf(“%d”,& masaki);

 

sum+=uchida;

sum+=satoh;

sum+=sanaka;

sum+=hiraki;

sum+=masaki;

 

printf(“总分:%5d\n”,sum);

printf(“平均分:%5.1f\n”,(double)sum/5);

 

return(0);

}

数组:array

声明形式:int vc[5];

数组和for语句

#include<stdio.h>

int main(void)

{

         int vc[5];

        

         vc[0]=1;

         vc[1]=2;

         vc[2]=3;

         vc[3]=4;

         vc[4]=5;

 

         printf(“vc[0]=%d\n”,vc[0]);

         printf(“vc[1]=%d\n”,vc[1]);

         printf(“vc[2]=%d\n”,vc[2]);

         printf(“vc[3]=%d\n”,vc[3]);

         printf(“vc[4]=%d\n”,vc[4]);

 

         return(0);

}

for语句如下:

#include<stdio.h>

int main(void)

{

         int i;

         int vc[5];

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

                   vc[i]=i+1;

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

                   printf(“vc[%d]=%d\n”,i,vc[i]);

         return(0);

}

数组初始化

#include<stdio.h>

int main(void)

{

         int i;

         int vc[5]={1,2,3,4,5};

        

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

                   printf(“vc[%d]=%d\n”,i,vc[i]);

         return(0);

}

注意:初始值数量不足,自动用0对剩余元素初始化

      初始值超过元素个数会报错

      不能用赋值语句进行初始化 例:int vc[3]; vc={1,2,3};

数组的复制

#include<stdio.h>

int main(void)

{

         int i;

         int va[5]={15,20,30};

         int vb[5];

 

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

                   vb[i]=va[i];

 

         puts(“va vb”);

         puts(“-------”);

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

                   printf(“%3d%3d\n”,va[i],vb[i]);

 

         return(0);

}

输入数组元素的值

#include<stdio.h>

int main(void)

{

         int i;

         int vx[5];

        

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

                   printf(“vx[%d]”,i);

                   scanf(“%d”,&vx[i]);

         }

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

                   printf(“vx[%d]=%d\n”,i,vx[i]);

         return(0);

}

对数组进行倒序排列

#include<stdio.h>

int main(void)

{

         int i;

         int vx[5];

        

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

                   printf(“vx[%d]”,i);

                   scanf(“%d”,&vx[i]);

         }

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

                   int temp=vx[i];

                   vx[i]= vx[4-i];

                   vx[4-i]=temp;

         }

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

printf(“vx[%d]=%d\n”,i,vx[i]);

        

return(0);

}

使用数组进行成绩处理

对象式宏:#define指令 例:

#define NUMBER 5

赋值表达式  例:a=b=0

及格学生一览表

数组的元素个数

成绩分布图  例:

#include<stdio.h>

#define NUMBER 80

int main(void)

{

         int i,j;

         int num;

         int tensu[NUMBER];

         int bunpu[11]={0};

 

         printf(“请输入学生人数:”);

         do{

         scanf(“%d”,&num);

         if(num<1||num<NUMBER)

                   printf(“\a人数范围[1%d]:”, NUMBER);

}while(num<1||num<NUMBER);

 

puts(“请输入学生的分数:”);

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

         printf(“%2d号:”,i+1);

         do{

         scanf(“%d”,&tensu[i]);

         if(tensu[i]<0||tensu[i]>100)

                   printf(“\a分数范围[0100]”);

}while(tensu[i]<0||tensu[i]>100);

bunpu[tensu[i]/10]++;

}

 

puts(“\n□分布图□”);

printf(“     100”)

for(j=0;jMbunpu[10];j++)

         putchar(‘*’);

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

         printf(“%3d - %3d”,i*10,i*10+9);

         for(j=0;j<bunpu[i];j++)

                   putchar(‘*’);

         putchar(‘*’);

}

 

return(0);

}



院士
2018-06-03 13:36:07     打赏
12楼


5-2多维数组
矩阵---例:矩阵的和(二维数组)
#include<stdio.h>
int main(void)
{
         int i,j;
         int ma[2][3]={{1,2,3},{4,5,6}};
         int mb[2][3]={{6,3,4},{5,1,2}};
         int mc[2][3]={0};
        
         for(i=0;i<2;i++)
                   for(j=0;j<3;j++)
                            mc[i][j]=ma[i][j]+mb[i][j];
         for(i=0;i<2;i++){
                   for(j=0;j<3;j++)
                            printf(“%3d”,mc[i][j]);
                   putchar(‘\n’);
         }
         return(0);
}
二维以上称为多维数组
质数计算
质数计算程序:是否可以被小于该数的除1以为任何一个整数整除
大整数:unsigned long           输出类型的转换说明:%1u
break语句:跳出当前循环
例:如何计算出质数的程序演算,目的找出最快的计算方法
一、
#include<stdio.h>
int main(void)
{
         int i,no;
         unsigned long counter=0;
        
         for(n=2;no<=1000;no++){
             for(i=2;i<no;i++){
                   counter++;
                   if(no%i==0)
                            break;
             }
         if(no==i)
                   printf(“%d\n”,no);
        }
printf(“乘除运算的次数:%1u\n”,counter);
 
return(0);
}
二、排除偶数的计算
#include<stdio.h>
int main(void)
{
         int i,no;
         unsigned long counter=0;
         no=2;
        printf(“%d\n”,no++);
 
         for(;no<=1000;no+=2){
             for(i=2;i<no;i++){
                   counter++;
                   if(no%i==0)
                            break;
         }
         if(no==i)
                   printf(“%d\n”,no);
}
printf(“乘除运算的次数:%1u\n”,counter);
 
return(0);
}
三、排除偶数作为除数的计算
#include<stdio.h>
int main(void)
{
         int i,no;
         unsigned long counter=0;
         no=2;
printf(“%d\n”,no++);
 
         for(;no<=1000;no+=2){
             for(i=3;i<no;i+=2){
                   counter++;
                   if(no%i==0)
                            break;
             }
         if(no==i)
                   printf(“%d\n”,no);
        }
        printf(“乘除运算的次数:%1u\n”,counter);
         
        return(0);
}
四、判断依据改为小于该数的质数来整除
#include<stdio.h>
int main(void)
{
         int i,no;
         int prime[500];
         int ptr=0;
         unstgned long counter=0;
        
         prime[ptr++]=2;
         prime[ptr++]=3;
 
         for(no=5;no<=1000;no+=2){
                   for(i=1;i<ptr;i++){
                            counter++;
                            if(no%prime[i]==0)
                                     break;
}
if(ptr==i)
         prime[ptr++]=no;
}
for(i=0;i<ptr;i++)
         prntf(“%d\n”,prime[i]);
printf(“乘除运算的次数:%1u\n”,counter);
 
return(0);
}
五、用该数的平方根来整除作为判断依据
逗号运算符:a,b 顺次对a和b进行计算,并把b的计算结果作为表达式的值
#include<stdio.h>
int main(void)
{
         int i,no;
         int prime[500];
         int ptr=0;
         unstgned long counter=0;
        
         prime[ptr++]=2;
         prime[ptr++]=3;
 
         for(no=5;no<=1000;no+=2){
                   int flag=0;
                   for(i=1;counter++,prime[i]*prime[i]<=no;i++){
                            counter++;
                            if(no%prime[i]==0){
                                     flag=1;
                                     break;
                            }
                    }
                if(!flag)
                 prime[ptr++]=no;
        }
        for(i=0;i<ptr;i++)
         prntf(“%d\n”,prime[i]);
        printf(“乘除运算的次数:%1u\n”,counter);
 
return(0);
}



院士
2018-06-06 08:39:06     打赏
13楼

先做两题,也不知道对不对啊

1.

#include<stdio.h>

int main(void)

{

  int i,j,k;

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

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

  putchar(‘ ’);

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

  putchar(‘* ’);

putchar(‘\n’);

}

  return(0);

}

2.

#include<stdio.h>

int main(void)

{

  int i,j,ln;

  printf(“请输入层数:”);

  scanf(“%d”,&ln);

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

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

  putchar(‘ ’);

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

  putchar(‘* ’);

putchar(‘\n’);

}

  return(0);

}

 



院士
2018-06-06 09:18:22     打赏
14楼

随便编译了一下,怎么这么多错啊

刚刚安装了个编译器codeblocks,难道有什么问题??

好久都没编译过了,真是忘的差不多了编译出错.jpg


院士
2018-06-07 16:36:30     打赏
15楼

第6章 函数
6-1 什么是函数
main函数:每个C语言程序必须并且只能存在一个main函数
库函数:library function:printf、scanf、puts、putchar等函数
函数定义和函数调用
#include<stdio.h>
int maxof(int x, int y)
{
         if(x>y)
                   return(x);
         else
                   return(y);
}
 
int main(void)
{
         int na,nb
         puts(“请输入两个整数:”);
         printf(“整数1:”);scanf(“%d”,&na);
         printf(“整数2:”);scanf(“%d”,&nb);
         printf(“较大整数的值是%d。\n”,maxof(na,nb));
 
         return(0);
}
三个数中的最大值
#include<stdio.h>
int max3(int x, int y,int z)
{
         int max=x;
if(y>max)           max=y;
if(z>max)           max=z;
return(max);
}
 
int main(void)
{
         int na,nb,nc;
         puts(“请输入三个整数:”);
         printf(“整数1:”);scanf(“%d”,&na);
         printf(“整数2:”);scanf(“%d”,&nb);
         printf(“整数3:”);scanf(“%d”,&nc);
 
         printf(“较大整数的值是%d。\n”,max3(na,nb));
 
         return(0);
}
平方差
#include<stdio.h>
int sqr(int x)
{
         return(x*x);
}
int diff(int x, int y)
{
         return(x>y?x-y:y-x);
}
int main(void)
{
         int kx,ky,kx2,ky2;
         puts(“请输入两个整数:”);
         printf(“整数kx:”);scanf(“%d”,&kx);
         printf(“整数ky:”);scanf(“%d”,&ky);
        
         kx2=sqr(kx);
         ky2=sqr(ky);
         printf(“kx和ky的平方差是%d。\n”,dif(kx2,ky2));
 
         return(0);
}
幂
#include<stdio.h>
double power(double dx, int no)
{
         int I;
         double emp=1.0;
         for(i=1;i<=no;i++)
                   tmp*=dx;
         return(tmp);
}
 
int main(void)
{
         int n;
         double x;
         printf(“请输入一个实数:”);scanf(“%1f”,&x);
         printf(“请输入一个整数n:”);scanf(“%d”,&n);
        
         printf(“%.2f的%d次幂是%.2f。\n”,x,n,power(x,n));
 
         return(0);
}
值传递
double power(double dx,int no)
{
         double tmp=1.0;
         while(noà0)
                   tmp*=dx;
         return(tmp);
}
调用其他函数
int max4(int w, int x, int y, int z)
{
         return(maxof(maxof(w,x),maxof(y,z)));
}



院士
2018-06-08 17:00:39     打赏
16楼

6-2函数设计
没有返回值的函数
#include<stdio.h>
void put_stars(int no)
{
         while(noà0)
                   putchar(‘*’);
}
int main(void)
{
         int i, ln;
         printf(“三角形有几层:”);
         scanf(“%d”,&ln);
         for(i=1;i<=ln;i++)
         {
         put_stars(i);
         putchar(‘\n’);
}
return(0);
}
通用性
#include<stdio.h>
void put_nchar(int ch, int no)
{
         while(noà0)
                   putchar(ch);
}
int main(void)
{
         int i, ln;
         printf(“三角形有几层:”);
         scanf(“%d”,&ln);
         for(i=1;i<=ln;i++)
         {
         put_nchar(‘ ’,ln-1);
         put_nchar(‘*’,i);
         putchar(‘\n’);
}
return(0);
}
不含形参的函数
#include<stdio.h>
void scan_uint(void)
{
         int tmp;
do
{
         printf(“请输入一个非负整数:”);
         scanf(“%d”,&tmp);
         if(tmp<0)
                   puts(“\a请不要输入负整数。”);
}while(tmp<0);
         return(tmp);
}
int rev_int(int num)
{
         int tmp=0;
         if(num>0)
{
         do
         {
         tmp=tmp*10+num%10;
         num/=10;
}while(num>0);
}
return(tmp);
}
int main(void)
{
         int nx=scan_uint();
        
         printf(“该整数倒转后的值是%d。\n”,rev_int(nx));
        
return(0);
}
函数返回值的初始化
int nx=scan_uint();
作用域
大括号的范围内{……}
计算最高分的程序
#include<stdio.h>
#define NUMBER 5
int top(void);
int main(void)
{
         extern int tensu[];
         inti;
         printf(“请输入%d名学生的分数。\n”, NUMBER);
         for(i=0;i<NUMBER;i++)
{
                  printf(“%d:”,i+1);
scanf(“%d”,&tensu[i]);
}
printf(“最高分=%d\n]:”,top());
return(0);
}
int top(void)
{
         extern int tensu[];
         int i;
         int max=tensu[0];
for(i=1;i<NUMBER;i++);
         if(tensu[i]>max)
                   max=tensu[i];
return(max);
}
文件作用域
声明和定义
函数原型声明
int top(void);因为top函数定义在main函数之后,并没有实体,定义实体的是函数定义。
推荐:一般情况将main函数放在程序最后的位置
头文件和文件包含指令
#include<stdio.h>:其中<stdio.h>为头文件,#include为文件包含指令。



院士
2018-06-10 14:20:38     打赏
17楼

函数的通用性
可以处理任意数组
可以处理不同元素个数的数组
数组的传递
#include<stdio.h>
#difine NUMBER 5
int max_of(int vc[], int no)
{
         inti;
         int max=vc[0];
         for(i=1;i<no;i++)
                   if(vc[i] >max)
                   max=vc[i];
         return(max);
}
int main(void)
{
         int i;
         int eng[NUMBER];
         int mat[NUMBER];
         int max_e,max_m;
 
         printf(“请输入%d名学生的分数。\n”, NUMBER);
         for(i=0;i<NUMBER;i++)
                   {
                   printf(“[%d]英语:”, i+1);        scanf(“%d”,&eng[i]);
                   printf(“    数学:”,);             scanf(“%d”,&eng[i]);
                   }
         max_e=max_of(eng, NUMBER);
         max_m=max_of(mat, NUMBER);
 
         printf(“英语的最高分=%d\n”,max_e);
         printf(“数学的最高分=%d\n”,max_m);
 
         return(0);
}
对接收到的数组进行写入处理
#include<stdio.h>
void int_set(int vc[], int no)
{
         int i;
         for(i=0;i<no;i++)
         vc[i]=0;
}
int main(void)
{
         int i;
         int ary1[]={1,2,3,4,5};
         int ary2={3,2,1};
        
int_set(ary1,5);
         int_set(ary2,3);
 
         for(i=0;i<5;i++)          printf(“ary1[%d]=%d\n”,i,ary1[i]);
         for(i=0;i<3;i++)          printf(“ary2[%d]=%d\n”,i,ary2[i]);
 
         return(0);
}
const类型的修饰符
int max_of(const int vc[], int no)
{
         int i;
         int max=vc[0];
         for(i=1;i<no;i++)
         if(vc[i]>max)    
                   max=vc[i];
         return(max);
}
顺序查找
#include<stdio.h>
#define NUMBER 5
#define FAILED -1
int search(const int vc[], int key, int no)
{
         int i=0;
         while(1)
{
         if(i==no)
         return(FAILED);
         if(vc[i]==key)
         return(1);
         i++;
}
}
int main(void)
{
         int i, ky, idx;
         int vx[NUMBER];
         for(i=0;i<NUMBER;i++)
         {
                   printf(“vx[%d]:”,i);
                   scanf(“%d”,&vx[i]);
}
printf(“要查找的值:”);
scanf(“%d”,&ky);
 
idx=search(vx,ky,NUMBER);
if(idx==FAILED)
         puts(“\a查找失败。”);
else
         printf(“%d是数组的第%d号元素。\n”,ky,idx+1);
return(0);
}
哨兵查找法
#include<stdio.h>
#define NUMBER 5
#define FAILED -1
int search(const int vc[], int key, int no)
{
         int i=0;
         vc[no]=key;
         while(1)
{
         if(vc[i]==key)
         break;
         i++;
}
return(i==no? FAILED:i);
}
int main(void)
{
         int i, ky, idx;
         int vx[NUMBER+1];
         for(i=0;i<NUMBER;i++)
         {
                   printf(“vx[%d]:”,i);
                   scanf(“%d”,&vx[i]);
}
printf(“要查找的值:”);
scanf(“%d”,&ky);
 
idx=search(vx,ky,NUMBER);
if(idx==FAILED)
         puts(“\a查找失败。”);
else
         printf(“%d是数组的第%d号元素。\n”,ky,idx+1);
return(0);
}
表达式语句和空语句
int search(const int vc[], int key, int no)
{
         int i;
         vc[no]=key;
for(i=0;vc[i]!=key;i++)
;
return(i==no? FAILED:i);
}
多维数组的传递
#include<stdio.h>
void mat_add(const int ma[2][3], const in mb[2][3], int mc[2][3])
{
         int i,j;
         for(i=0;i<2;i++0)
                   for (j=0;j<3;j++)
                   mc[i][j]=ma[i][j]+mab[i][j];
}
int main(void)
{
         int i,j;
         int ma[2][3]={{1,2,3},{4,5,6}};
         int mb[2][3]={{6,3,4},{5,1,2}};
         int mc[2][3]={0};
        mat_add(ma,mb,mc);
         for(i=0;i<2;i++)
{
         for(j=0;j<3;j++)
         printf(“%3d”,mc[i][j]);
         putchar(‘\n’);
}       
         return(0);
}



院士
2018-06-12 17:01:05     打赏
18楼

6-3 作用域和存储期
作用域和标识符的可见性
#include<stdio.h>
int x=700;
void print_x(void)
{
         printf(“x=%d\n,”x);
}
int main(void)
{
         int i;
         int x=800;
         print_x();
         printf(“x=%d\n”,x);
         for(i=0;i<5;i++)
{
                   int x=i*100;
                   printf(“x=%d\n”,x);
}
         printf(“x=%d\n”,x);
return(0);
}
例中变量x的声明有三处:第一个在函数外声明,拥有文件作用域;后两个拥有块作用域。规则:块作用域会将文件作用域隐藏,内层块会将外层快隐藏。
存储期
存储类说明符 static
自动存储期
静态存储期:static定义的对象
#include<stdio.h>
int fx=0;
void func(void)
{
         static int          sx=0;
         int            ax=0;
         printf(“%3d%3d%3d\n”,ax++,sx++,fx++);
}
int main(void)
{
         int i;
         puts(“ ax sx fx”);
         puts(“--------------”);
         for(i=0;i<10;i++)
                   func();
         puts(“---------------”);
         return(0);
}
注:ax每次调用func()函数都会被赋值0;而其他两个数静态存储就不会每次都赋值。尤其注意sx,虽然func()函数每次也执行static int sx=0,但并不会赋值。
#include<stdio.h>
int fx;
int main(void)
{
         static int          sx;
         int            ax;
         printf(“ax=%d\n”,ax);
         printf(“sx=%d\n”,sx);
         printf(“fx=%d\n”,fx);
         return(0);
}
执行结果就是查看不赋值情况下的初始值,此时,sx和fx的值为0,ax的值随机。



院士
2018-06-14 16:58:56     打赏
19楼

7 基本数据类型

7-1 基本数据类型和数

基本数据类型

算数类型:整数类数据类型(枚举型、字符型、整型)、浮点型

基数

十进制、二进制、八进制、十六进制

基数转换

由八进制、十六进制、二进制数向十进制数转换:用每位数字乘以进制数幂次最后相加

由十进制数向八进制数、十六进制数、二进制数转换:用该数除以进制数得出商和余数,再用商继续除以进制数,一直除到商为0,将所得余数进行逆向排列。

7-2 整型和字符型

字符型和整型

整型:int(默认有符号)

有符号整型:signed int

无符号整型:unsigned int

char               范围         0~255

signed char                    -128~127

signed short int            -32768~32767         

signed int                        -32768~32767

signed long int               -2147483648~2147483647

unsigned char                0~255

unsigned short int        0~65535

unsigned int                            0~65535

unsigned long int          0~4294967295

<limits.h>头文件

定义了字符型和整型的最大最小值

字符型

char:没有声明有符号型还是无符号型,编译器定,随机

sizeof运算符:判断出数据类型的长度

size_t型和typedef声明

typedef声明来定义size_t

整型的灵活运用

整型常量

整型常量的数据类型:带后缀

内部表示和位

无符号整数的内部表示:以二进制数表示

有符号整数的内部表示:二进制补码:最高位为1则为负数,最高位为0则为正数

反码表示法和补码表示法

共同点:正数部分的位串相同、负数的最高位都是1

不同点:补码表示法可表示32个整数,反码表示法可表示31个整数

反码的求法:正数的反码逐位取反

补码的求法:正数的补码逐位取反后加1



共19条 2/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]