作业1:
展开的思路,按要求分析以下代码。
要求不要放到编译器中运行,自己手动分析出每条输出语句的结果,分析出结果后,再在编译器中执行验证结果
void main()
{
int num,num2,num3;
num=1;
num2=2;
num3=3;
num=++num2+ ++num3; // num = 3+4 = 7, ++num2 = 3, ++num3 = 4
printf("\n%d,%d,%d",num,num2,num3);//输出结果1:7,3,4
num=num2++ + num3++;
printf("\n%d,%d,%d",num,num2,num3); //输出结果2:8(3+5),4,4
num=++num2> num3++; //0 = 5 > 5
printf("\n%d,%d,%d",num,num2,num3); //输出结果3:0,5,6
num=num2-- && --num3; //1 = 5 && 5
printf("\n%d,%d,%d",num,num2,num3); //输出结果4:1,4,5
num = num2>num3 ? num2++ : num3++; //5 = 4>5 ? :num3++
printf("\n%d,%d,%d",num,num2,num3); //输出结果5:5,4,6
}
作业二:
编程实现:输入华氏温度F,要求输出对应的摄氏温度C,要求结果保留两位小数。计算公式为:C = 5/9*(F-32);
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc, const char *argv[])
{
float temper_F; //接收华氏温度
float temper_C; //输出摄氏温度
printf("请输入要转换的华氏温度:");
scanf(" %f", &temper_F);
//法1 ,若表达式为C = 5/9*(F-32),因为运算符是从左向右结合,5/9的结果是0
//将浮点型放在算式式左侧即可
temper_C = (temper_F-32)*5/9;
//法2
//temper_C = 5.0/9*(temper_F-32);
printf("华氏温度%.2f等于摄氏温度%.2f\n", temper_F, temper_C);
return 0;
}
作业三:
使用switch实现简易计算器:例如,输入一个表达式:3+5,程序输出结果为8
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main(int argc, const char *argv[])
{
double num1, num2, result; //保存数字
char opera; //保存输入的运算符
printf("请输入一个简易表达式,\n"
"格式为:数字 运算符 数字,运算符可以是+-*/\n");
scanf(" %lf %c %lf", &num1, &opera, &num2); //%前加空格,删去输入的多余空格
switch(opera) //不同的运算符,运算符不同,输入的运算符为字符型
{
case '*': result = num1*num2; break;
case '/': result = num1/num2; break;
case '+': result = num1+num2; break;
case '-': result = num1-num2; break;
default: printf("输入的运算符不是+-*/中的一个\n");
}
printf("%.3lf %c %.3lf = %.4lf\n", num1, opera, num2, result);
return 0;
}
作业四:
使用switch实现,要求输入一个日期,输出该日期是对应今年的第几天
例如输入:2023 1 20 输出结果:该日期是今年第20天
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define debug_ 0
int main(int argc, const char *argv[])
{
int year, month, day;
int cnt_day = 0;
#if debug_
while(1)
{
#endif
cnt_day = 0;
printf("请输入一个日期(格式:年 月 日):");
scanf("%d%d%d", &year, &month, &day);
//如果给scanf末尾加上\n,\n不表示等待换行符,而是读取并放弃连续的空白字符
//scanf("%d%d%d\n", &year, &month, &day);
switch(month)
{
//01 02 03 04 05 06 07 08 09 10 11 12
//31 28 31 30 31 30 31 31 30 31 30 31
case 12: cnt_day += 30; //利用case遇到break才退出的特性
case 11: cnt_day += 31;
case 10: cnt_day += 30;
case 9: cnt_day += 31;
case 8: cnt_day += 31;
case 7: cnt_day += 30;
case 6: cnt_day += 31;
case 5: cnt_day += 30;
case 4: cnt_day += 31;
case 3: cnt_day += 28;
case 2: cnt_day += 31;
case 1: cnt_day += day; break;
default: printf("输入的月份有误!\n");
}
#if debug_
printf("%d %d %d", year, month, day);
#endif
if(year<0 || month<0 || day <0 || day>31)
printf("输入的年或日不正确!\n");
else
if( ((year%4 == 0 && year%100 != 0) || year % 400 == 0) && month>2)
{
cnt_day++; //闰年二月多一天,+1
}
printf("该日期是今年第%d天\n", cnt_day);
#if debug_
}
#endif
return 0;
}