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

共21条 2/3 1 2 3 跳转至
院士
2018-05-31 14:12:32     打赏
11楼

4-3for语句

#include<stdio.h>

int main(void)

{

  int i,no;

  printf(“请输入一个整数:”);

  scanf(“%d”,i);

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

   printf(“%d”,i);

  putchar(‘\n’);

  return(0);

}

备注:for循环是我个人用的最多的语句,所以应该永远都不会忘了

do while for 统称为循环语句

固定次数的循环

#include<stdio.h>

int main(void)

{

  int i,no;

  printf(“请输入一个整数:”);

  scanf(“%d”,i);

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

putchar(‘*’);

  putchar(‘\n’);

  return(0);

}

例:输入几个数求合计值和平均值

#include<stdio.h>

int main(void)

{

  int i;

  int sum=0;

  int num,tmp;

  printf(“输入多少个整数:”);

  scanf(“%d”,num);

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

   {

   printf(“No.%d”,i+1);

scanf(“%d”,&tmp);

sum+=tmp;

}

  printf(“合计值:%d\n”,sum);

  printf(“平均值:%.2f\n”,(double)sum/num);

return(0);

}

4-4多重循环

九九乘法表

#include<stdio.h>

int main(void)

{

  int i,j;

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

{

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

  printf(“%3d”,i*j);

putchar(‘\n’);

   }

   return(0);

}

多重循环

#include<stdio.h>

int main(void)

{

  int cont;

  do{

  int num,i;

  do{

     printf(“请输入一个非负整数:”);

     scanf(“%d”,&num);

     if(num<0)

        puts(“\a请不要输入负整数。”);

     } while(num<0);

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

      putchar(‘*’);

   putchar(‘\n’);

  

   printf(“是否继续执行?【Yes0/No9】:”);

   scanf(“%d”,&cont);

}while(!cont);

return(0);

}

长方形

#include<stdio.h>

int main(void)

{

  int i,j;

  int width,height;

  puts(“让我们来描绘一个长方形。”);

  printf(“宽:”);    sanf(“%d”,&width);

  printf(“高:”);    sanf(“%d”,&height);

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

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

  putchar(‘*’);

putchar(‘\n’);

  }

  return(0);

}

直角三角形1

#include<stdio.h>

int main(void)

{

  int i,j,ln;

  printf(“三角形有几层:”);

  scanf(“%d”,&ln);

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

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);

}

4-5程序的组成元素和格式

关键字:32

auto          break        case          char          const        contunue

default     do              double      else           enum        extern

float          for             goto          if                int              long

register    return       short         signed      sizeof        long

struct       swith        tupedef    union        unsigned  void

volatile     while

标识符

分隔符

运算符

常量和字符串常量

自由的书写格式

连接相邻的字符串常量

缩进



院士
2018-05-31 14:28:54     打赏
12楼

楼主可以参考一下编辑栏里右上角的 代码语言 来插入源代码的格式,非常方便查看与学习参考。


院士
2018-06-01 19:05:44     打赏
13楼

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     打赏
14楼


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     打赏
15楼

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

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     打赏
16楼

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

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

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


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

第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     打赏
18楼

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     打赏
19楼

函数的通用性
可以处理任意数组
可以处理不同元素个数的数组
数组的传递
#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     打赏
20楼

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的值随机。



共21条 2/3 1 2 3 跳转至

回复

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