原因:未用MarkDown编辑器编写,容易乱码。
前言
在vs2022的编译环境中不能调用scanf函数,只能调用scanf_s函数用于输入
For语句中的间隔用分号“;”例如for(i=1;i<=n;i++)
scanf_s后边对应的数值应该取址符“&”
一.初识C源程序及其数据类型
例1.1 编写一个程序,实现从键盘输入两个整数,计算并输出两者乘积。
#include <stdio.h>
int multiply(int a,int b ) 即用户自定义函数 multiply(int a,int b)
{ 定义函数功能为 return (a*b)
return (a * b);
}
int main() 有且仅有一个main函数
{
int x, y, product; printf("please input two integers:"); scanf_s(" % d % d", &x, &y); 将转换后的数据送到变量地址列表所对应的变量中 product = multiply(x , y); 调用用户自定义函数multiply printf("The product is %d\n", product); return 0; 无返回值
}
可修改为
#include<stdio.h>
int main()
{
int x, y, product; printf("please input two integers:"); scanf_s("%d%d", &x, &y); product = x * y; printf("The product is %d\n", product); return 0;
}
例 1.2 日期格式转换
#include<stdio.h>
int main()
{
int year, month, day; printf("请按标准格式输入一个日期(YYYY-MM-DD):"); scanf_s("%d-%d-%d", &year, &month, &day); printf("中国日期格式:%d年%d月%d日\n",year,month,day); printf("美国日期格式:%d/%d/%d\n", month, day, year); printf("英国日期格式:%d/%d/%d\n", day, month, year); return 0;
}
例1.3作业等级的输入和输出
#include <stdio.h>
int main()
{
char grade1, grade2; <变量>=getchar(); grade1 = getchar(); 函数getchar用于从键盘读入一个用户输入的字符 getchar(); getchar()表示系统从输入缓冲区提取一个的字符但不赋给任何变量 grade2 = getchar(); putchar(<参数>); printf("The first grade is:");函数putchar是将给定的参数以单个字符的形式输出到显示器 putchar(grade1); 屏幕的当前位置上,其参数可以是字符常量、变量或表达式 putchar('\n'); printf("The second grade is:"); putchar(grade2); putchar('\n'); return 0;
}
例1.4计算圆的面积和周长
#include <stdio.h>
int main()
{
const double pi = 3.14159; const <数据类型><只读变量名>; 变量初始化 double r; 用const修饰符限定只读变量 增加了程序的可读性、 scanf_s("%lf", &r); 方便了程序的维护、增强了程序的正确性并减少误操作 printf("area=%.2f\n", pi * r * r); 计算圆的面积并输出 printf("permeter=%.2f\n", 2 * pi * r); 计算圆的周长并输出 return 0;
}
二.运算符与表达式
例2.1计算抛物运动的射程
#include <stdio.h>
#include <math.h> 引用数学函数 #include<stdio.h>;
int main()
{
const double pi = 3.14159; const <数据类型> <只读变量名>; const double g = 9.80; 用于定义只读变量 double v0; int theta; double R; printf("Please input v0 (m/s) and theta (degree):\n"); scanf_s("%lf%d", &v0, &theta); R = v0 * v0 * sin(2 * theta / 180.0 * pi)/g; C语言中sin函数的参数是弧度制 printf("The range is:%.2f (m)\n", R); 需要用pi将theta从角度制转换 return 0; 成弧度制。
}
例2.2验证丢番图的规则
#include <stdio.h>
#include <math.h>
int main()
{
int a, b; int x, y, z; int t; printf("please input a and b:"); scanf_s("%d%d", &a, &b); t = (int)sqrt(2 * a * b); printf("a=%d,b=%d\n", a, b); printf("2ab %s a perfect square number\n", t * t == 2 * a * b ? "is" : "is NOT"); x = a + t; y = b + t; z = a + b + t; printf("x=%d,y=%d,z=%d\n", x, y, z); printf("(%d,%d,%d) %s a solution of the Pythagorean Theorem equation\n", x, y, z, x * x + y * y == z * z ? "is" : "is NOT"); return 0;
}
三.程序流程控制
例3.1 求三角形面积。从键盘输入三角形3条边的边长,求三角形面积并输出至屏幕。
#include <stdio.h>
#include <math.h>
int main()
{
double a, b, c, p, s; printf("Please input three edges:"); scanf_s("%lf%lf%lf", &a, &b, &c); p = (a + b + c) / 2; s = sqrt(p * (p - a) * (p - b) * (p - c)); 调用数学函数 该例子我进行了修改 printf("s=%lf\n", s); return 0;
}
例3.2 年龄比较。从键盘读入两个人的年龄,比较并输出年长者的年龄。
#include <stdio.h>
int main()
{
int age1, age2; printf("Enter age of two persons:"); scanf_s("%d%d", &age1, &age2); if (age1 >= age2) { printf("The older age is %d\n:", age1); } if...else语句的使用 Else { printf("The older age is %d\n:", age2); } return 0;
}
例3.3 求三角形面积的改善
#include <stdio.h>
#include <math.h>
int main()
{
float a, b, c, p, s; printf("Enter three edges of a triangle:"); scanf_s("%f%f%f", &a, &b, &c); if(a > 0 && b > 0 && c > 0 && a + b > c && a + c > b && b + c > a) { p = (a + b + c) / 2; s = sqrt(p * (p - a) * (p - b) * (p - c)); printf("s=%f", s); } else { printf("error input!\n"); } return 0;
}
例3.4 直角三角形的判别
#include <stdio.h>
#include <math.h>
int main()
{
float a, b, c; printf("Enter three edges of triangle:"); scanf_s("%f%f%f", &a, &b, &c); if (a <= 0 || b <= 0 || c <= 0) { printf("error input!\n"); } else { if (a + b > c && a + c > b && b + c > a) { if (fabs(a * a + b * b - c * c) < 1E-2 || fabs(a * a + c * c - b * b) < 1E-2 || fabs(b * b + c * c - a * a) < 1E-2) { printf("%f,%f,%f is a right triangle\n",a,b,c); } else { printf("%f,%f,%f is a ordinary triangle\n",a,b,c); } } else { printf("%f,%f,%f is not a triangle\n",a,b,c); }
} return 0;
}
例3.5 月份天数计算。从键盘输入年份和月份,计算该月份的天数并输出。
#include <stdio.h>
int main()
{
int year, month, daysum; printf("Enter the year and the month:"); scanf_s("%d%d", &year, &month); switch (month) { case 1: case 3: switch(表达式) case 5: { case 7: case 常数表达式1: 语句系列1 case 8: case 常数表达式2: 语句系列2 case 10: ... case 12: case 常数表达式n: 语句系列n daysum = 31; } break; 首先计算switch后面表达式的值,然后与各 case 4: case分支的常量进行匹配,与哪个常量相等 case 6: 就该从该分支的语句序列开始执行,直至遇 case 9: 到break或者switch语句块的右大括号。 case 11: daysum = 30; break; case 2: if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) { daysum = 29; } else { daysum = 28; } } printf("%d.%d has %d days\n", year, month, daysum); return 0;
}
例3.6 求累加和。从键盘读入int型正整数n,计算累加和的值并输出。
#include <stdio.h>
int main()
{
int n, i, sum; printf("Enter a positive integer:"); while语句的利用 scanf_s("%d", &n); i = 1; while(表达式) sum = 0; { while (i <= n) 语句块 { { sum += i; 1.计算表达式的值。若为真,则转步骤二 i++; 否则退出循环,执行while的下一条语句 } 2.执行语句块,并返回步骤一 printf("累加和%d=%d", n, sum); return 0;
}
例3.7 求阶乘。从键盘读入正整数n,计算n!并输出。
#include <stdio.h>
int main()
{
int n, i; double fac; printf("Enter a positive integer:"); do while语句的利用 scanf_s("%d", &n); i= 1; fac = 1; do Do { { 语句块 fac *= i; }while(表达式); i++; 1.执行语句块,即循环体 } while (i <= n); 2.计算表达式。若为真,则转步骤一; printf("%d!=%lf", n, fac); 否则否则退出循环,执行下一语句。 return 0;
}
例3.8 数列求和已知一个数列如下,求该数列前1000项的和,并输出。
#include <stdio.h>
int main()
{
int sign, i; double item, sum; sum=0; sign = 1; for (i = 1; i <= 1000; i++) { item = sign / (2.0*i - 1); * 2.0 重点 double型 must 以小数形式 sum += item; sign = -sign; } printf("sum=%lf", sum);
}
例3.9 break与continue的使用比较。
代码一 break的使用
#include <stdio.h>
int main()
{
int i, n; for (i = 1; i <= 5; i++) { printf("Enter n:"); scanf_s("%d", &n); if (n < 0) break; break是结束本层循环体的的运行,并退出本层循环 printf("n=%d\n", n); } printf("The end!\n"); return 0;
}
代码二 continue的用法
例3.10 加法表打印。要求打印如下
#include <stdio.h>
int main()
{
int i, j; for (i = 1; i <= 9; i++) { for (j = 1; j <= i; j++) { printf("%d+%d=%2d ", i, j, i + j); } printf("\n"); } return 0;
}
例4.11 梯形打印。要求打印如下所示的等腰梯形
#include <stdio.h>
int main()
{
int i, j; for (i = 1; i <= 4; i++) { for (j = 1; j <= 4 - i; j++) { printf(" "); 两个内循环的嵌套和使用 } for (j = 1; j <= 2 * i + 1; j++) { printf("*"); } printf("\n"); } return 0;
}
例4.12 质数(素数)判断。从键盘输入一个正整数n,判断n是否为质数。
#include <stdio.h>
#include <math.h>
int main()
{
int n, i, k; do { printf("Enter a positive integer:"); scanf_s("%d", &n); } while (n <= 0); if (n == 1) { printf("%d is not a prime\n", n); 无语子,反复嵌套容易混乱。 } else { k = (int)sqrt(n); 使用到了(int)强制类型转换 for (i = 2; i <= k; i++) 和数学函数sqrt(n) { if (n % i == 0) { break; break的使用 } } if (i > k) { printf("%d is a prime", n); } else { printf(" % d is not a prime", n); } } return 0;
}
例4.13 穷举法:百钱百鸡问题。公鸡5钱1只,母鸡3钱1只,小鸡1钱3只。100钱买100只鸡。
问公鸡、母鸡、小鸡各几只?
#include <stdio.h>
int main()
{
int a, b, c; for (a = 0; a <= 20; a++) { for (b = 0; b <= 33; b++) { c = 100 - a - b; if (15 * a + 9 * b + c == 300) { printf("%d,%d,%d\n", a, b, c); } } }return 0;
}
四.函数的基本知识
例4.1定义函数totalCost,计算购买商品的总金额,其中买多个商品有一定的折扣。
#include <stdio.h>
double totalCost (int n, double p);
int main()
{
double price, bill; int number; printf("Enter the number of items purchased:"); scanf_s("%d", &number); printf("Enter the price per item (RMB):"); scanf_s("%lf", &price); bill = totalCost(number, price); printf("The totalCost of the items purchased is:%.lf RMB.\n", bill); return 0;
}
double totalCost(int n, double p)
{
const double DISCOUNT = 0.2; double total; if (n > 1) total = n * p * (1 - DISCOUNT); else total = n * p; return total;
}
例4.2 judgeprime函数定义的代码
int judgeprime(int n)
{
int i, k; int judge = 1; if (n == 1) judge = 0; k = (int)sqrt(n); for (i = 2; judge && i <= k; i++) if (n % i == 0) judge = 0; return judge;
}
例4.3 定义函数drawline,用于画一条由n个减号组成的横线。
void drawline()
{
const int n = 30; int i; for (i = 1; i <= n; i++) printf("-"); printf("\n"); return;
}
例4.4从键盘上读入一个整数m,如果m<=0,则给出相应的提示信息:如果m>0,则调用judge prime函数判断它是不是质数。
#include <stdio.h>
#include <math.h>
int judgeprime(int n);
int judgeprime(int n)
{
int i, k; int judge = 1; if (n == 1) judge = 0; k = (int)sqrt(n); for (i = 2; judge && i <= k; i++) if (n % i == 0) judge = 0; return judge;
}
int main()
{
int m, prime; scanf_s("%d", &m); if (m <= 0) { printf("error input!\n"); return 0; } prime = judgeprime(m); if (prime) printf("%d is a prime!\n", m); else printf("%d is not a prime!\n", m); return 0;
}
例4.5调用drawline函数实现划线功能。
#include <stdio.h>
void drawline();
void drawline()
{
const int n = 30; int i; for (i = 1; i <= n; i++) printf("-"); printf("\n"); return;
}
int main()
{
drawline(); printf("C is a beautiful language!\n"); drawline(); return 0;
}
例4.6 定义一个递归函数计算n!。主函数中读入任一非负整数,然后调用该函数。
#include <stdio.h>
double Fact(int n);
int main()
{
int n; double t; printf("Plese input n:\n"); scanf_s("%d", &n); if (n < 0) n = -n; t = Fact(n); printf("%d!=%lf", n, t); return 0;
}
double Fact(int n)
{
if (!n) return 1.0; return n * Fact(n - 1);
}
修改后
#include <stdio.h>
double Fact(int n);
int main()
{
int n; double t; printf("Plese input n:\n"); scanf_s("%d", &n); if (n < 0) n = -n; t = Fact(n); printf("%d!=%lf", n, t); return 0;
}
double Fact(int n)
{
if (n==0) { return 1.0; } else { return n * Fact(n - 1); }
}
例4.7 数制转换问题,将一个十进制整数转化成指定的的B(2<=B<=16)进制数。
-
#include <stdio.h>
void multibase(int n, int B);
void multibase(int n, int B)
{
int m; if (n) { multibase(n / B, B); m = n % B; if (m < 10) printf("%d", m); else printf("%c", m + 55); }
}
int main()
{
int n, B; do { scanf_s("%d%d", &n, &B); } while (n <= 0 || B <= 1 || B >16); printf("change result:\n"); multibase(n, B); printf("\n"); return 0;
}
例4.8找出2—100所有的质数,并统计个数
#include <stdio.h>
#include <math.h>
int count;
int judgeprime(int n);
int main()
{
int i; printf("The primes between 2 to 100:\n"); for(i=2;i<100;i++) if (judgeprime(i)) { printf("%d ", i); count++; } printf("The total number of primes:%d\n", count); return 0;
}
int judgeprime(int n)
{
int i; int judge = 1; if (n == 1) judge = 0; { int k = (int)sqrt(n); for (i = 2; judge && i <= k; i++) if (n % i == 0) judge = 0; } return judge;
}
例4.9利用静态局部变量求解1到5的阶乘。
#include <stdio.h>
int fun(int n);
int fun(int n)
{
static int f = 1; f = f * n; return f;
}
int main()
{
int i; for (i = 1; i <= 5; i++) { printf("%d!=%d ", i, fun(i)); }return 0;
}
例4.10求给定半径的圆形面积、给定半径的球形体积以及给定半径和高的圆柱体积。(有修改)
#include <stdio.h>
#include <math.h>
#define pi 3.14159
double getarea(double r);
double getvolumes(double r);
double getvolumec(double r, double h);
int main()
{
double r, h, s, v1, v2; printf("请输入所需半径 :"); scanf_s("%lf", &r); printf("请输入所需高:"); scanf_s("%lf", &h); s = getarea(r); v1 = getvolumes(r); v2 = getvolumec(r, h); printf("s=%lf\n", s); printf("v1=%lf\n", v1); printf("v2=%lf\n", v2); return 0;
}
double getarea(double r)
{
return (pi * pow(r, 2));
}
double getvolumes(double r)
{
return (pi * pow(r, 3) * 3 / 4);
}
double getvolumec(double r, double h)
{
return (pi * h * pow(r, 2));
}
数组
例子 5.1 使用一维数组存放不多于50个学生的成绩,并计算平均值。
#include <stdio.h>
int main()
{
float score[50] = { 0 }; int num; float sum = 0, average; int i; do { printf("Input the number of students:"); scanf_s("%d", &num); } while (num <= 0 || num > 50); printf("Input the score :"); for (i = 0; i < num; i++) { scanf_s("%f", &score[i]); sum += score[i]; } average = sum / num; printf("The average is :%5.2f\n", average); return 0;
}
例5.2 Fibonacci数列。有一对小兔子(一公一母),第2个月长大成大兔子,长到第3个月开始每个月就生一对小兔子(一公一母)。等这对兔子长到第3个月又开始生小兔子。假设所有的兔子都不会死,求出n个月后兔子的数目。
|时间|小兔子|大兔子|兔子总数|
|--|--|--|--|
|1 | 1 | 0 | 1 |
|2 | 0 | 1 | 1 |
|3 | 1 | 1 | 2 |
|4 | 1 | 2 | 3 |
|5 | 2 | 3 | 5 |
|..| .. | .. | ..|
| 8| 8 | 13 | 21 |
|..| .. | .. | ..|
功能为 return (a*b)
return (a * b);
}
int main() 有且仅有一个main函数
{
int x, y, product; printf("please input two integers:"); scanf_s(" % d % d", &x, &y); 将转换后的数据送到变量地址列表所对应的变量中 product = multiply(x , y); 调用用户自定义函数multiply printf("The product is %d\n", product); return 0; 无返回值
}
可修改为
#include<stdio.h>
int main()
{
int x, y, product; printf("please input two integers:"); scanf_s("%d%d", &x, &y); product = x * y; printf("The product is %d\n", product); return 0;
}
更多推荐
C语言程序设计部分基础代码(已用MD编辑器重写一篇博客)
发布评论