【入门1】顺序结构
B2002 Hello,World!
#include<stdio.h> //#include<stdio.h>是编译预处理指令
int main() //main作为主函数
{
printf("Hello,World!"); //printf是输出,scanf是输入
}
//补充
//一个C语言程序是由一个或多个函数组成
//在vs上scanf会报错
//两种方法解决:
//1.改为scanf_s
//2.添加#define _CRT_SECURE_NO_WARNINGS(放到第一行)
B2025 输出字符菱形
//方法一:
#include<stdio.h>
int main()
{
printf(" * \n");
printf(" *** \n");
printf("*****\n");
printf(" *** \n");
printf(" * ");
return 0;
}
//方法二:
#include<stdio.h>
int main()
{
int i,j=2,k;
char ch = '*';
for (i = 0; i < 5; i++) {
//正序输出
if (i <= 5 / 2)
{
j = 2 - i;
while(j--)
printf(" ");//生成空格
for (k = 2 * i + 1; k > 0; k--)
printf("%c", ch);
printf("\n");//记得换行
}//倒序输出
else
{
j = i - 2;
while(j--)
printf(" ");//生成空格
for (k = 9-2*i; k > 0; k--)
printf("%c", ch);
printf("\n");//记得换行
}
}
return 0;
}
P1000 超级玛丽游戏
#include<stdio.h>
int main()
{
printf(" ********\n");
printf(" ************\n");
printf(" ####....#.\n");
printf(" #..###.....##....\n");
printf(" ###.......###### ### ###\n");
printf(" ........... #...# #...#\n");
printf(" ##*####### #.#.# #.#.#\n");
printf(" ####*******###### #.#.# #.#.#\n");
printf(" ...#***.****.*###.... #...# #...#\n");
printf(" ....**********##..... ### ###\n");
printf(" ....**** *****....\n");
printf(" #### ####\n");
printf(" ###### ######\n");
printf("##############################################################\n");
printf("#...#......#.##...#......#.##...#......#.##------------------#\n");
printf("###########################################------------------#\n");
printf("#..#....#....##..#....#....##..#....#....#####################\n");
printf("########################################## #----------#\n");
printf("#.....#......##.....#......##.....#......# #----------#\n");
printf("########################################## #----------#\n");
printf("#.#..#....#..##.#..#....#..##.#..#....#..# #----------#\n");
printf("########################################## ############\n");
return 0;
}
P1001 A+B Problem
#include<stdio.h>
int main()
{
int a,b;
scanf("%d %d",&a,&b);//效果和scanf("%d%d),&a,&b);等价
printf("%d",a+b);
return 0;
}
//注意输入如果是scanf("%d,%d",&a,&b)那么在本地的输入还得加上,(英文下的',')
B2005 字符三角形
//方法一:
#include<stdio.h>
int main()
{ char ch;
scanf("%c",&ch);
printf(" %c\n",ch);
printf(" %c%c%c\n",ch,ch,ch);
printf("%c%c%c%c%c",ch,ch,ch,ch,ch);
return 0;
}
//方法二:
#include<stdio.h>
int main()
{
int i, j, k;
char ch;
scanf("%c",&ch);
for (i = 0; i < 3; i++) {
j = 2 - i;
while(j--)
printf(" ");//生成空格
for (k = 2 * i + 1; k > 0; k--)
printf("%c", ch);
printf("\n");//记得换行
}
return 0;
}
P5703 【深基2.例5】苹果采购
#include<stdio.h>
int main()
{ int amount,num;
scanf("%d %d",&amount,&num);//不要忘记了& 取地址符
printf("%d",amount*num);
return 0;
}
P5704 【深基2.例6】字母转换
//方法一:
#include<stdio.h>
int main()
{ //getchar()是单独输入一个字符并读取,在这用scanf也可以
printf("%c",getchar()-('a'-'A'));//查对应的ASCII码 不是Unicode
return 0;
}
//方法二:
//调用库函数的toupper
#include<stdio.h>
#include<ctype.h>//调用toupper需要
int main()
{
printf("%c", toupper(getchar()));
return 0;
}
//注意:
//1.关于c语言程序设计第五版中strupr也是转为大写的函数,但是在C99标准中被废弃了,strlwr同理
//2.转为小写的函数有tolower()
P5705 【深基2.例7】数字反转
#include<stdio.h>
int main()
{
double num;//双精度浮点数 float单精度浮点数 %f输入输出
scanf("%lf",&num);//输入
int n = (int)num;
double answer_head=10*(num-n);//先留下小数部分 由于说明了就一位浮点数,故乘10
int answer_tail=0;
while (n) {
answer_tail = answer_tail*10 + n % 10;
n /= 10;
}
printf("%1.f\.%03d",answer_head,answer_tail);//%03d代表输入三位,不足三位的0补齐,超过三位的不会溢出删除,而是原本输出
return 0;
}
//注意
// 为什么answer_head为double类型?因为无论是单精度还是双精度都是有所缺失,(原因就在于是二进制的转换造成的精度缺失)
//比如输入230.6时候 调试发现是230.599999
//如果answer是int类型,那么则为5而不是6
//有兴趣可以自己尝试字符串或者数组的形式做
P5706 【深基2.例8】再分肥宅水
#include<stdio.h>
int main()
{
double t;
int n;
scanf("%lf %d",&t,&n);
printf("%.3lf\n", 1.0 * t / n);//注意要1.0而不是1 相当于明确告诉编译时这是浮点型的运算
printf("%d", n * 2); //不要写成数学里的2n
return 0;
}
P5708 【深基2.习2】三角形面积
#include<stdio.h>
#include<math.h> //sqrt要调用math库
int main()
{
double a,b,c;
scanf("%lf %lf %lf",&a,&b,&c);//输入
double p=(a+b+c)/2.0;
double S=sqrt(p*(p-a)*(p-b)*(p-c));
printf("%.1lf",S); //注意留一位小数
return 0;
}
P5707 【深基2.例12】上学迟到
#include<stdio.h>
int main()
{
int s, v, hour, minute;
scanf("%d %d",&s,&v);//输入路程与速度
minute = s / v + 10;
if (s % v != 0)
minute++;//如果不是恰好,那就再加一分钟
hour = minute / 60;//耗费的小时时长
minute = minute % 60;//耗费的分钟时长
if (minute == 0)
hour = 8 - hour;//时长之差
else
hour = 7 - hour;
if (hour < 0)
hour += 24;//提前一天的考虑
printf("%02d:%02d",hour,60-minute);//不足的0补齐
return 0;
}
B2029 大象喝水
#include<stdio.h>
#define pi 3.14 //宏定义 在数组中哪怕是C99之前 也可以 #define p 3 int arr[p];
int main()
{
int h, r;
scanf("%d %d",&h,&r);
float sum = (20000 / (pi * r * r * h));
int sum1= (20000 / (pi * r * r * h));
if ((sum-sum1)!= 0)
sum1++;
printf("%d",sum1);
return 0;
}
//一点补充
//定义宏不占用内存,只有在使用时才分配内存
//宏定义不存在类型问题,它的参数也是无类型的
//字符串" "中不能使用宏定义
//预处理是在编译之前的处理,而编译工作的任务之一就是语法检查,预处理不做语法检查
//宏替换在预处理阶段进行,函数调用在编译后程序运行时进行,并且分配内存。预处理在编译之前,因此宏替换 不分配内存
//宏定义前面的替换必须是C语言合法的用户标识符 如 #define 0a 25 就是错误的
//重复定义的宏只有最后一个是有效的
//宏定义不是C语句,不必在行未加“;”号,如果加了连“;”号一起进行置换;
P1425 小鱼的游泳时间
#include<stdio.h>
int main()
{
int a, b, c, d;
scanf("%d %d %d %d",&a,&b,&c,&d);//输入 a:b c:d
// a c的时间差都在一天之内
int e = c - a;//表示小时
int f = d-b;//表示分钟
//情况处理
if (f < 0)
{
f+=60;
e--;
}
printf("%d %d",e,f);
return 0;
}
P1421 小玉买文具
#include<stdio.h>
int main()
{
double prize=1.9;
int a,b;
scanf("%d %d",&a,&b);
double money=a+0.1*b;
int total=money/prize;
printf("%d",total);
return 0;
}
P3954 [NOIP2017 普及组] 成绩
#include<stdio.h>
int main()
{
int A, B, C;// 作业成绩 小测成绩· 期末考试
scanf("%d %d %d",&A,&B,&C);
double total = A * 0.2 + B * 0.3 + C * 0.5;
printf("%.lf",total);//注意留一位小数点就行
return 0;
}