加载中...

【C语言基础】运算符、表达式、语句

循环

程序设计,通过鞋码计算男人的脚长:

#include<stdio.h>
#define ADJ 7.31
int main()
{
  const double SCA=0.333;
  double shoe,foot;
  printf("请输入你的鞋码(<=0 end):");
  scanf("%lf",&shoe);
  while (shoe>0)
  {
    foot=SCA*shoe+ADJ;
    printf("你的脚长为:%.3lf!\n",foot);
    printf("请输入下一个数值(<=0 end):");
    scanf("%lf",&shoe);
  }
}
// 注意数据类型的对应,shoe和foot定义的为double类型,下面输入输出时用lf

基本运算符

赋值运算符

在编程语言中,一般赋值运算符为:"=",语法为:a=2;所表达的含义为将2赋值给a,赋值运算从右向左进行。在赋值运算中,右值只能是字面常量,常量本身就是其值;左侧是一个变量名,赋值运算左侧必须引用一个存储位置,最简单的办法就是使用变量名。

数据对象:用于存储值的数据存储区域统称为数据对象。

const限定符:不可修改变量,在上一篇文章中提及,const所修饰的变量,为不可修改变量,可以参与运算,输出打印,但其值不能被重新赋值。

一般变量的右值可以被修改:a=2;b=3;t=a;a=b;b=t;

此外,在c语言中可以进行多重赋值:a=b=c=10;赋值过程有左向右,10先赋值给c,然后c赋值给b,b赋值给a。

数学运算符

加法运算符:"+",如a=b+c;其中a,b,c都是可赋值变量
减法运算符:"-",减法同上

符号运算符:"-",其中减号还可以改变一个值的代数符号,如a=-12;这种表示方式为一元减法运算符。

乘法运算符:"*"
除法运算符:"/"

整数除法和浮点数除法不同。浮点数除法的结果是浮点数,而整数除法的结果是整数。整数是没有小数部分的数。这使得5除以3很让人头痛,因为实际结果有小数部分。在C语言中,整数除法结果的小数部分被丢弃,这一过程被称为截断(truncation)。

运算符优先级:在计算复杂的混合运算的式子时,C语言有明确规定,通过计算符优先级来解决操作顺序问题,正如普通运算,乘除的优先级高于加减,于是先计算乘除,然后再计算加减,计算完成后,在执行由左向右的赋值运算。

其他运算符

sizeof运算符和size_f类型、

sizeof运算符以字节为单位返回运算对象的大小,一个字节为八个比特位

%求模运算符

求模运算符用于正数运算,求模运算符给出左侧正数除以右侧正数的余数。

++递增运算符

递增运算符(increment operator)执行简单的任务,将其运算对象递增1。该运算符以两种方式出现。第1种方式,++出现在其作用的变量前面,这是前缀模式;第2种方式,++出现在其作用的变量后面,这是后缀模式。两种模式的区别在于递增行为发生的时间不同。

--递减运算符

--count; // 前缀形式的递减运算符
count--; // 后缀形式的递减运算符

类型转换

1.当类型转换出现在表达式时,无论是unsigned还是signed的char和short都会被自动转换成int,如有必要会被转换成unsigned int(如果short与int的大小相同,unsigned short就比int大。这种情况下,unsigned short会被转换成unsigned int)。在K&R那时的C中,float会被自动转换成double(目前的C不是这样)。由于都是从较小类型转换为较大类型,所以这些转换被称为升级(promotion)。
2.涉及两种类型的运算,两个值会被分别转换成两种类型的更高级别。
3.类型的级别从高至低依次是long double、double、float、unsignedlong long、long long、unsigned long、long、unsigned int、int。例外的情况是,当long 和 int 的大小相同时,unsigned int比long的级别高。之所以short和char类型没有列出,是因为它们已经被升级到int或unsigned int。
4.在赋值表达式语句中,计算的最终结果会被转换成被赋值变量的类型。这个过程可能导致类型升级或降级(demotion)。所谓降级,是指把一种类型转换成更低级别的类型。
5.当作为函数参数传递时,char和short被转换成int,float被转换成double。

程序联系

1.编写一个程序

把用分钟表示的时间转换成用小时和分钟表示的时间。使用#define或const创建一个表示60的符号常量或const变量。通过while循环让用户重复输入值,直到用户输入小于或等于0的值才停止循环。


#include<stdio.h>
#define T 60
int main()
{
  int time;
  printf("enter time:");
  scanf("%d",&time);
  while(time>0)
  {
    printf("transform %d hours %d minute\n",time/T,time%T);
    printf("once again enter time(enter 0 end):");
    scanf("%d",&time);
  }
  return 0;
}

2.编写一个程序

提示用户输入一个整数,然后打印从该数到比该数大10的所有整数(例如,用户输入5,则打印5~15的所有整数,包括5和15)。要求打印的各值之间用一个空格、制表符或换行符分开。

#include<stdio.h>
int main()
{
  int n,i=0;
  printf("enter a int number:");
  scanf("%d",&n);
  while(i<=10)
  {
    printf("%d\t",n+i);
    i++;
  }
  return 0;
}

3.编写一个程序

提示用户输入天数,然后将其转换成周数和天数。例如,用户输入18,则转换成2周4天。以下面的格式显示结果:
18 days are 2 weeks, 4 days.
通过while循环让用户重复输入天数,当用户输入一个非正值时(如0或-20),循环结束。

#include<stdio.h>
int main()
{
  int day;
  const int W=7;
  printf("enter day number:");
  scanf("%d",&day);
  while (day>0)
  {
    printf("%d days are %d weeks, %d days.\n",day,day/W,day%W);
    printf("once again enter day number:");
    scanf("%d",&day);
  }
  
   return 0;
 }

4.编写一个程序

提示用户输入一个身高(单位:厘米),并分别以厘米和英寸为单位显示该值,允许有小数部分。程序应该能让用户重复输入身高,直到用户输入一个非正值。其输出示例如下:
Enter a height in centimeters: 182
182.0 cm = 5 feet, 11.7 inches
Enter a height in centimeters (<=0 to quit): 168.7
168.0 cm = 5 feet, 6.4 inches
Enter a height in centimeters (<=0 to quit): 0 bye

#include<stdio.h>
int main()
{
  const float DW=2.54;
  float height,b,inches;
  int a,feet;
  printf("enter height(cm):");
  scanf("%f",&height);
// 英寸inches(长度单位,等于2.54厘米,1英尺feet等于12英寸)
  while (height>0)
  {
  a=(int)height;
  b=(float)a;
  inches=height/DW;
  feet=((int)inches)/12;
  inches=inches-feet*12;
  printf("%.1f cm = %d feet, %.1f inches\n",b,feet,inches);
  printf("enter height(cm):");
  scanf("%f",&height);
  }
  return 0;
}

5.计算20天里赚多少钱的程序

假设第1天赚$1、第2天赚$2、第3天赚$3,以此类推。修改程序,使其可以与用户交互,根据用户输入的数进行计算(即,用读入的一个变量来代替20)。

#include<stdio.h>
int main()
{
  int day,i,sum;
  i=0;
  sum=0;
  printf("enter day:");
  scanf("%d",&day);
  while(i<=day)
  {
    sum=sum+i;
    i=i+1;
  }
  printf("sum=%d\n",sum);
}

6.修改编程练习5的程序

使其能计算整数的平方和(可以认为第1天赚$1、第2天赚$4、第3天赚$9,以此类推,这看起来很不错)。C没有平方函数,但是可以用n * n来表示n的平方。

#include<stdio.h>
int main()
{
  int day,i,sum;
  i=0;
  sum=0;
  printf("enter day:");
  scanf("%d",&day);
  while(i<=day)
  {
    sum=sum+i*i;
    i=i+1;
  }
  printf("sum=%d\n",sum);
}

7.编写一个程序

提示用户输入一个double类型的数,并打印该数的立方值,自己设计一个函数计算并打印立方值。main()函数要把用户输入的值传递给该函数。

#include<stdio.h>
void math(a)
{
  printf("%d\n",a*a*a);
}

int main()
{
  int a;
  printf("a=:");
  scanf("%d",&a);
  math(a);

}

8.编写一个程序

显示求模运算的结果。把用户输入的第1个整数作为求模运算符的第2个运算对象,该数在运算过程中保持不变。用户后面输入的数是第1个运算对象。当用户输入一个非正值时,程序结束。其输出示例
如下:
This program computes moduli.
Enter an integer to serve as the second operand: 256
Now enter the first operand: 438
438 % 256 is 182
Enter next number for first operand (<= 0 to quit): 1234567
1234567 % 256 is 135
Enter next number for first operand (<= 0 to quit): 0
Done

#include<stdio.h>
int main()
{
  int a,b,c;
  printf("This program computes moduli.\n");
  printf("Now enter the first operand:\n");  
  scanf("%d",&b);
  fflush(stdin);
  printf("Enter an integer to serve as the second operand:\n");
  scanf("%d",&a);
  c=b%a;
  printf("%d %% %d is %d\n",b,a,c);
  return 0;
}

9.编写一个程序

要求用户输入一个华氏温度。程序应读取double类型的值作为温度值,并把该值作为参数传递给一个用户自定义的函数Temperatures()。该函数计算摄氏温度和开氏温度,并以小数点后面两位数字的精度显示3种温度。要使用不同的温标来表示这3个温度值。下面是华氏温度转摄氏温度的公式:摄氏温度 = 5.0 / 9.0 * (华氏温度 - 32.0)开氏温标常用于科学研究,0表示绝对零,代表最低的温度。下面是摄氏温度转开氏温度的公式:开氏温度 = 摄氏温度 + 273.16Temperatures()函数中用const创建温度转换中使用的变量。在main()函数中使用一个循环让用户重复输入温度,当用户输入 q 或其他非数字时,循环结束。scanf()函数返回读取数据的数量,所以如果读取数字则返回1,如果读取q则不返回1。可以使用==运算符将scanf()的返回值和1作比较,测试两值是否相等。

#include<stdio.h>
const float jd=273.16;
float c_temp,k_temp;
float h_temp;
void Temperatures();
int main(){
  printf("please enter h_temp:");
  while (scanf("%f",&h_temp)==1)
// scanf()函数返回读取数据的数量,所以如果读取数字则返回1,如果
// 读取q则不返回1。可以使用==运算符将scanf()的返回值和1作比较,测试两
// 值是否相等。
  {
    Temperatures();
    //c语言中函数只能有一个返回值,如果返回值大于一个,则要构建结构体
  }
}
void Temperatures()
{
  c_temp=5.0/9.0*(h_temp-32.0);
  k_temp=c_temp+jd;
  printf("c_temp=%.2f k_temp=%.2f h_temp=%.2f",c_temp,k_temp,h_temp);
}
posted @ 2022-07-28 14:09  不会编程的小学鸡  阅读(821)  评论(0编辑  收藏  举报