C语言:从最简单的C程序设计到选择结构与循环结构程序设计

文章目录

第1章 程序设计和C语言

1.1在屏幕上输出一条信息:

#include<stdio.h>

int main()
{
	printf("This is a C program.\n");
	return 0;
}

编译结果如下:
在这里插入图片描述

1.2求两个整数之和:

#include<stdio.h>

int main()
{
	int a,b,sum;
	printf("Please input two numbers:\n");
	scanf("%d%d",&a,&b);
	sum=a+b;
	printf("sum=%d\n",sum);
	return 0;
}

编译结果如下:
在这里插入图片描述

1.3求两个整数中的较大者:

#include<stdio.h>

int bigger(int x,int y);

int bigger(int x,int y)
{
	return(x>y?x:y);
}

int main()
{
	int a,b,c;
	printf("Please input two numbers:\n");
	scanf("%d%d",&a,&b);
	c=bigger(a,b);
	printf("bigger=%d\n",c);
	return 0;
}

编译结果如下:
在这里插入图片描述

第2章 算法------程序的灵魂

2.1求1-1/2+1/3-1/4+…+1/99-1/100的值:

S1:sign=1
S2:sum=1
S3:deno=2
S4:sign=(-1)sign
S5:term=sign
(1/deno)
S6:sum=sum+term
S7:deno=deno+1
S8:若deno≤100返回S4;否则算法结束
99次循环后sum的值就是所要求的结果

#include<stdio.h>

int main()
{
	int sign=1;
	double deno=2.0,sum=1.0,term;
	while(deno<=100)
	{
		sign=-sign;
		term=sign/deno;
		sum=sum+term;
		deno=deno+1;		
	}
	printf("%f\n",sum);
	return 0;
}

编译结果如下:
在这里插入图片描述

第3章 最简单的C程序设计

3.1给定一个大写字母,要求用小写字母输出:

#include <stdio.h>
int main ( )
{
   char c1,c2;
   c1='A'; //将字符‘A’的ASCII代码65放到c1中
   c2=c1+32;                  //将65+32的结果放到c2中     
   printf("%c\n",c2);        //用字符形式输出    
   printf("%d\n",c2); //用十进制形式输出
   return 0;
}

编译结果如下:
在这里插入图片描述

3.2给出三角形的三边长,求三角形面积:

#include<stdio.h>
#include<math.h>

int main()
{
	double a,b,c,s,area;
	printf("请输入三角形的三边长:");
	scanf("%lf%lf%lf",&a,&b,&c);
	s=(a+b+c)/2;
	area=sqrt(s*(s-a)*(s-b)*(s-c));
	printf("%lf\n",area);
}

编译结果如下:

在这里插入图片描述

3.3先后输出BOY三个字符:

#include<stdio.h>

int main()
{
	char a='B',b='O',c='Y';
	putchar(a);
	putchar(b);
	putchar(c);
	printf("\n");
	return 0;
}

编译结果如下:
在这里插入图片描述

3.4从键盘输入三个字符,然后把它们输出到屏幕上:

#include<stdio.h>

int main()
{
	char a,b,c;
	a=getchar();
	b=getchar();
	c=getchar();
	putchar(a);
	putchar(b);
	putchar(c);
	putchar('\n');
	return 0;
}

编译结果如下:
在这里插入图片描述
简化版:

#include<stdio.h>

int main()
{
	putchar(getchar());
	putchar(getchar());
	putchar(getchar());
	putchar('\n');
}
//C语言规定标识符只能由字母、数字和下划线3种字符组成,且第一个字符必须为字母或下划线

编译结果如下:

在这里插入图片描述

3.5C语言中如何输出字节数:

#include<stdio.h>

int main()

{
	int a;
	char stu;
	float b;
	printf("%d\n",sizeof(a));
	printf("%d\n",sizeof(stu));
	printf("%d\n",sizeof(b));
}

编译结果如下:
在这里插入图片描述

3.6输出字符型变量:

#include<stdio.h>

int main()

{
	char c='?';
	int a=2;
	printf("%d\n %c\n",c,c);
	printf("%s\n","China");
	//s格式符。用来输出一个字符串----printf("%s","CHINA");输出字符串:CHINA
	printf("%lf\n",(double)a);
	//(double)a      (将a转换成double类型)
}

编译结果如下:
在这里插入图片描述

3.7对于方程y=ax^2+bx+c,求其实根:

#include <stdio.h>
#include  <math.h>

int main ( ) 
{  
	double a,b,c,disc,x1,x2,p,q;
	printf("请输入a,b,c的值,并用空格隔开:\n");
	scanf("%lf%lf%lf",&a,&b,&c);
	disc=b*b-4*a*c;
	if(disc>=0)
	{
		p=-b/(2.0*a);
		q=sqrt(disc)/(2.0*a);
		x1=p+q;   
		x2=p-q;
		printf("x1=%7.2f\nx2=%7.2f\n",x1,x2);
		return 0;
	}
	else
	{
		printf("此方程无实根!");
	}

}

编译结果如下:
在这里插入图片描述

第4章 选择结构程序设计

4.1根据键盘输入的x值,输出相应y的值:

在这里插入图片描述

#include <stdio.h>
int main(void)
{
    float x,y;
	printf("请输入x的值:");
    scanf("%f", &x);
    if(x<1)
	{
		y = x;
	}        
    else if(x>=10)
	{
		y = 3*x-11;//注意乘号不能少!!!
	}    
    else
	{
		y = 2*x-1;
	}       
    printf("x = %f, y = %f\n", x, y);
    return 0;
}

编译结果如下:
在这里插入图片描述

4.2输入成绩等级,得到分数段:

int main()
{ 
	char grade;
    scanf("%c",&grade);
    printf("Your score:");
    switch(grade)
	{   
	   case 'A': printf("85~100\n");break;
       case 'B': printf("70~84\n");break;
       case 'C': printf("60~69\n");break;
       case 'D': printf("<60\n");break;    
	   default:  printf("enter data error!\n");
    }
    return 0;
}

编译结果如下:
在这里插入图片描述

4.3把十个数字按从小到大的顺序排序,并打印到屏幕上:


#include <stdio.h>

int main()
{
	int a[10];
	int j=0,i=0;
	printf("Input 10 numbers:\n");//输入10个数字,并用空格隔开
	printf("\n");
	for(i=0; i<10; i++)
	{
		scanf("%d",&a[i]);
	}
	printf("The result:");
	for(i=9; i>0; i--)
	{
		for(j=0; j<i; j++)
		{
			if(a[j] > a[j+1])
			{
				int temp = a[j];
				a[j] = a[j+1];
				a[j+1] = temp;
			}
		}
	}
	for(i=0; i<10; i++)
	{
	printf("%5d",a[i]);
	}
	printf("\n");
}

编译结果如下:
在这里插入图片描述

4.4编写程序,用getchar函数读入两个字符给c1、c2,然后判断两个字符是否属于大写字母,如果是则转换成小写字母,如果不是则不转换,输出最后得到的字符:

#include <stdio.h>
int main ( )
{
   char c1,c2;
   printf("输入两个字符c1,c2:\n");
   c1=getchar();
   c2=getchar();     
   if(c1>='A' && c1<='Z')
   {
		printf("%c\n",c1+32);       
   }
   else
   {
		printf("%c\n",c1);
   }
   if(c2>='A' && c2<='Z') 
   {
		printf("%c\n",c2+32); 
   }
   else
   {
		printf("%c\n",c2);
   }
   return 0;
}

编译结果如下:

在这里插入图片描述

4.5输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。(和4.4相似,但方法不同)

#include<stdio.h>

int main()

{
	char ch;
	printf("请输入一个字母:");
	scanf("%c",&ch);
	ch=(ch>='A'&&ch<='Z')?(ch+32):ch;
	printf("%c\n",ch);
	return 0;
}

编译结果如下:
在这里插入图片描述

4.6输入3个数a,b,c,要求按由小到大的顺序输出。

#include<stdio.h>

int main()

{
	int a,b,c,t;
	printf("请输入三个正整数:\n");
	scanf("%d%d%d",&a,&b,&c);
	if(a>b)
	{
		t=a;a=b;b=t;
	}
	if(a>c)
	{
		t=a;a=c;c=t;
	}
	if(b>c)
	{
		t=b;b=c;c=t;
	}
	printf("这三个正整数从小到大的排序是:\n%d\t%d\t%d\n",a,b,c);
}

编译结果如下:
在这里插入图片描述

4.7输入两个实数,按代数值由小到大的顺序输出这两个数。(和4.6相似,但方法不同)

#include<stdio.h>

int main()

{
	int a,b;
	printf("请输入两个正整数:");
	scanf("%d%d",&a,&b);
	if(a<b)
	{
		printf("这两个正整数从小到大的排序是:\n%d\t%d\n",a,b);
	}
	else
	{
		printf("这两个正整数从小到大的排序是:\n%d\t%d\n",b,a);
	}

}

编译结果如下:

在这里插入图片描述

第5章 循环结构程序设计

5.1有一个10×10的矩阵,要求输出其中值最大的那个元素的值,以及其所在的行号和列号

#include<stdio.h>

int main()
{
	int i, j, row = 0, colum = 0, max;
	int a[10][10] = {{1,2,3,4,-1,-2,0,23,1,5},{9,8,7,6,1,0,2,3,4,5},{-10,2,3,4,5,6,7,10,-5,2},{1,2,3,4,5,6,7,8,9,0},
		{2,3,4,5,6,1,65,43,23,21},{1,2,3,4,5,6,7,8,0,9},{2,1,3,43,-3,-4,-5,1,2,3},{1,2,3,4,-1,-2,-3,41,90,10},
		{1,2,3,32,43,1,2,32,43,11},{4,5,32,12,34,45,67,5,6,7}};
	max = a[0][0];
	printf("array a:\n");
	for (i = 0; i <= 9; i++)
	{
		for (j = 0; j <= 9; j++)
		{
			printf("%5d", a[i][j]);
		}
	printf("\n");
	}
	for (i = 0; i <= 9; i++)
	{
		for (j = 0; j <= 9; j++)
		{
			if (a[i][j] > max)
			{
				max = a[i][j];
				row = i;
				colum = j;
			}
		}
	}
	printf("max=%d\nrow=%d\ncolum=%d\n",max,row,colum);
	return 0;
}

编译结果如下:
在这里插入图片描述

5.2求1+2+3+…+100

//用for循环
#include<stdio.h>

int main()

{
	int i,sum;
	for(sum=0,i=1;i<=100;i++)
	{
		sum=sum+i;
	}
	printf("%d\n",sum);

}


//用while循环

#include<stdio.h>

int main()

{
	int i=1,sum=0;
	while(i<=100)
	{
		sum=sum+i;
		i++;
	}
	printf("%d\n",sum);
	return 0;
}

//用do...while...循环
#include<stdio.h>

int main()

{
	int i=1,sum=0;
	do
	{
		sum=sum+i;
		i++;
	}while(i<=100);
	printf("%d\n",sum);
	return 0;

}

5.3在全系1000学生中,征集慈善募捐,当总数达到10万元时就结束,统计此时捐款的人数,以及平均每人捐款的数目。

//break:::只能用于循环语句和switch语句之中,而不能单独使用

//continue:::有时并不希望终止整个循环的操作,而只希望提前结束本次循环,而接着执行下次循环。这时可以用continue语句

#include <stdio.h>
#define sum 100000
int main()
{
	float amount,aver,total;   
	int i;
    for (i=1,total=0;i<=1000;i++)                      
    {
		printf("please enter amount:");
        scanf("%f",&amount);
        total= total+amount;                         
        if (total>=sum) break;                                
    }
    aver=total / i ;  
	printf("num=%d\naver=%10.2f\n",i,aver);              
    return 0;
}

编译结果如下:
在这里插入图片描述

5.4

在这里插入图片描述

#include <stdio.h>
#include <math.h>

int main()
{  
	int sign=1; double pi=0,n=1,term=1;
    while(fabs(term)>=1e-6) 
    {  
		pi=pi+term;
        n=n+2; 
        sign=-sign; 
        term=sign/n;    
    }
    pi=pi*4;          
    printf("pi=%10.8f\n",pi);  
    return 0;
}

编译结果如下:
在这里插入图片描述

5.5求费波那西(Fibonacci)数列的前40个数。这个数列有如下特点:第1、2两个数为1、1。从第3个数开始,该数是其前面两个数之和。

这是一个有趣的古典数学问题:
有一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假设所有兔子都不死,问每个月的兔子总数为多少?

#include <stdio.h>
int main()
{ 
	int f1=1,f2=1,f3;  int i;
    printf("%12d\n%12d\n",f1,f2);
    for(i=1; i<=38; i++)
    {  
		f3=f1+f2;
	    printf("%12d\n",f3);
	    f1=f2;
	    f2=f3;
    }
    return 0;
}

编译结果如下:
在这里插入图片描述
代码可以改进为以下,使排版更清晰好看:

#include <stdio.h>
int main()
 {  int f1=1,f2=1;  int i;
     for(i=1; i<=20; i++)
    { printf("%12d %12d ",f1,f2);         
       if(i%2==0) printf("\n");
       f1=f1+f2;                       
       f2=f2+f1;                      
     }
     return 0;
 }

在这里插入图片描述

5.6输入一个大于3的整数n,判定它是否素数(prime,又称质数):

#include <stdio.h>

int main()
 { 
	int n,i;
    printf("n=");  
    scanf("%d",&n);
    for (i=2;i<=n-1;i++)
	{
		if(n%i==0) break;
	}
    if(i<n) 
	{
		printf("%d is not\n",n);
	}
    else 
	{
		printf("%d is prime.\n",n);
	}
    return 0;
}

编译结果如下:
在这里插入图片描述
*

5.7求100~n(n>100)间的全部素数:

#include <stdio.h>
int fun(int n)
{ 
	int i,j, count=0;
	printf("输入n:");
	scanf("%d", &n);
	printf("\nThe prime number between 100 to %d\n", n);

	for (i=100; i<=n; i++) 
	{
		for (j=2; j<i; j++)
		if (i%j == 0)
		break;
		if (j>=i)
		{ 
			count++; printf( count%15?"%5d":"\n%5d",i); 
		}
		}
	return count;
}
int main()
{ 
	int n, k;
	k = fun(n);
	printf("\nThe number of prime is : %d\n", k);
}

编译结果如下:
在这里插入图片描述

5.8译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。(非字母字符保持原状不变输入一行字符,要求输出其相应的密码)

解题思路:问题的关键有两个:
(1) 决定哪些字符不需要改变,哪些字符需要改变,如果需要改变,应改为哪个字符c=getchar();
处理的方法是:输入一个字符给字符变量c,先判定它是否字母(包括大小写),若不是字母,不改变c的值;若是字母,则还要检查它是否’W’到’Z’的范围内(包括大小写字母)。如不在此范围内,则使变量c的值改变为其后第4个字母。如果在’W’到’Z’的范围内,则应将它转换为A~D(或a~d)之一的字母。
(2) 怎样使c改变为所指定的字母?
办法是改变它的ASCII值
例如字符变量c的原值是大写字母’A’,想使c的值改变为’E’,只需执行“c=c+4”即可,因为’A’的ASCII值为65,而’E’ 的ASCII值为69,二者相差4

if(c>='W' && c<='Z' || c>='w' && c<='z')   
{
	c=c+4-26;
}
else  
{
	c=c+4;
}
#include<stdio.h>
int main()
{
	char c;
	c=getchar();                                          
	while(c!='\n')   
	{ 
		if((c>='a' && c<='z') || (c>='A' &&  c<='Z')) 
		{ 
			if(c>='W' && c<='Z' || c>='w' && c<='z') 
			{
				c=c-22;  
			} 
			else  
			{
				c=c+4;
			}   
		}
		printf("%c",c);  
		c=getchar(); 
	}
	printf("\n");
}

编译结果如下:
在这里插入图片描述
另一种解法:

#include<stdio.h>
int main()
{
	char c;
	while((c=getchar())!='\n')   
	{ 
		if((c>='A' && c<='Z') || (c>='a' && c<='z')) 
		{ 
			c=c+4; 
		}
	    if(c>='Z' && c<='Z'+4 || c>'z') 
		{
			c=c-26;         
		}
		printf("%c",c);          
	}
	printf("\n");
}

编译结果如下:
在这里插入图片描述

C语言优先级:

在这里插入图片描述

//如:
//a>b==c     等效于  (a>b)==c
//c>a+b        等效于  c>(a+b)
//!  → && → ||           (!为三者中最高)
//  !                    (高)
//算术运算符
//关系运算符
//  && 和 ||
//赋值运算符           (低)

猜你喜欢

转载自blog.csdn.net/weixin_45870610/article/details/107289218