C语言代码片段
第二章
1.三数比较大小
c
#include<stdio.h>
/**
* 编写一个C程序,输入a,b,c三个值,输出三个数中的较大者
*/
int main()
{
//put your codes here.
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
printf("%d", a>b?(a>c?a:c):(b>c?b:c));
return 0;
}1
2.键盘输入x的值,求方程y=xx+2x-10所对应的y值。
c
#include<stdio.h>
/**
* 键盘输入x的值,求方程y=x*x+2*x-10所对应的y值。
*/
int main(int argc, char const *argv[])
{
/* code */
int x ;
scanf("%d",&x);
printf("%d",(x*x+2*x-10));
return 0;
}
第三章
1.计算将水从初始温度加热到最终温度所需的能量
c
#include<stdio.h>
/**
* 计算将水从初始温度加热到最终温度所需的能量
* 编写程序,计算将水从初始温度加热到最终温度所需的能量。程序应该提示用户输入水的重量(以千克为单位),以及水的初始温度和最终温度。计算能量的公式是:
* Q = M ×(最终温度 – 初始温度)× 4184
* 这里的M是以千克为单位的水的重量,温度以摄氏度为单位,而能量Q以焦耳为单位。
*
*/
int main(int argc, char const *argv[])
{
/* code */
int weight,statrTemperature,endTemperature;
scanf("%d %d %d",&weight,&statrTemperature,&endTemperature);
float Q = weight*(endTemperature-statrTemperature)*4184;
printf("%.2f焦耳",Q);
return 0;
}
2.根据体重计算可以喝汽水的罐数
c
#include<stdio.h>
/**
*
* 一个美国政府的研究实验室得出结论,认为在汽水中常用的人造甜味剂会导致实验室老鼠的死亡。
* 你的一个朋友在拼命的减肥,但是他不能放弃汽水。你的朋友想知道能够喝多少汽水而不会导致死亡。
* 请编写程序,帮他回答这个问题。已知实验时,杀死一只老鼠所用的人造甜味剂是5g,老鼠的重量为35g。
* 假设老鼠的致死量(lethal dose)成比例对应于人的致死量。一罐汽水350g,其中所含的人造甜味剂占0.1%。
* 输入你的朋友的体重(Kg),输出他最多可以喝的汽水的罐数。
*
*/
int main(int argc, char const *argv[])
{
/* code */
int weight;
scanf("%d",&weight);
// 致死量
float lethalDose =0.142857142857143*weight*1000;
int number =lethalDose/(0.1 * 0.01 * 350);
printf("喝%d罐汽水可杀死你!",number);
return 0;
}
3.分解9位长整数
c
#include<stdio.h>
#include<string.h>
/**
* 编写程序,输入一个9位的长整数,将其分解为三个三位的基本整数并输出,
* 其中个、十、百位为一个整数,千、万、十万位为一个整数,百万、千万、亿位为一个整数。
* 例如123456789分解为789、456和123。
*
*/
int main(int argc, char const *argv[])
{
/* code */
char str [100] ;
fgets(str, sizeof(str), stdin);
int length = strlen(str);
for (int i = length; i >0;)
{
if(i>=3){
i-=3;
int count = 0;
for (int j=i; j<i+3; j++)
{
if(str[j] == '0'){
count++;
}
}
if(count==3){
printf("0 ");
}else{
printf("%c%c%c ",str[i],str[i+1],str[i+2]);
}
} else if(i>=2){
i-=2;
printf("%c%c",str[i],str[i+1]);
}else{
i--;
printf("%c",str[i]);
}
}
return 0;
}
#第四章
1.函数求解
c
#include<stdio.h>
#include<string.h>
/**
* 分段函数
* f(x):
* x, x<1
* 2x-1, 10>x>=1
* 3x-11, x>=10
*
*/
int main(int argc, char const *argv[])
{
int x;
scanf("%d",&x);
if((10 > x) && (x >= 1)){
printf("y=2*x-1=%d",(2*x-1));
return 0;
}
if(x>=10){
printf("y=3*x-11=%d",(3*x-11));
return 0;
}
if(x<1){
printf("y=x=%d",x);
}
return 0;
}
2.计算成绩分数所在等级
c
#include<stdio.h>
#include<string.h>
/**
* 给出一百分制成绩,要求输出成绩等级’A’、’B’、’C’、’D’、’E’。
* 90分以上为‘A’,
* 80~89为‘B’,
* 70~79为‘C’,
* 60~69为‘D’,
* 60分以下为‘E’。
*
*/
typedef struct Grade
{
int topNum;
int lowNum;
char grade;
} Grade;
int main(int argc, char const *argv[])
{
int num;
scanf("%d",&num);
Grade grades [5] ={
{100,90,'A'},
{89,80,'B'},
{79,70,'C'},
{69,60,'D'},
{59,0,'E'}
};
for (int i = 0; i < 5; i++)
{
/* code */
Grade item = grades[i];
if((num>=item.lowNum)&&(num<=item.topNum)){
printf("%c",item.grade);
return 0;
}
}
return 0;
}
3.输出ISBN中所包含的出版地区的信息
c
#include <stdio.h>
#include <string.h>
/**
每本书的封底都有一串号码,比如978-7-111-34081-2,它叫做"国际标准书号"(International Standard Book Number,缩写为ISBN)。
它是全世界图书的编码,用来唯一代表一本书。目前ISBN是13位。从组成上看,13位的ISBN可以分为5个区:
第一区 EAN-UCC前缀 、第二区 组区号、第三区 出版者号、第四区 出版序号、第五区 校验码。
其中第二区 组区号从第4位数字开始。
这部分表明这本书是哪个国家或地区出版的。
0或1表示英语国家,2表示法语国家,3表示德语国家,4表示日本,5表示俄语国家,6表示伊朗,7表示中国大陆,89表示韩国,
957和986表示台湾,962和988表示香港,99936表示不丹。
输入一个13位ISBN。输入格式:978-7-111-34081-2
输入之后,输出ISBN中所包含的出版地区的信息。
比如:组区号为7,则输出” China”。
这里我们最低要求识别的地区包括:
0 English Region
1 English Region
2 French Region
4 Japan
7 China
89 South Korea
957 Taiwan
986 Taiwan
962 Hong Kong
988 Hong Kong
*
*/
typedef struct Group
{
/* data */
int flag;
int index;
} Group;
int main(int argc, char const *argv[])
{
char *groupCodes[] = {
"English Region", // 0 组区号为0
"English Region", // 1 组区号为1
"French Region", // 2 组区号为2
"Japan", // 3 组区号为4
"China", // 4 组区号为6
"China", // 5 组区号为7
"South Korea", // 6 组区号为89
"Taiwan", // 7 组区号为957
"Taiwan", // 8 组区号为986
"Hong Kong", // 9 组区号为962
"Hong Kong" // 10 组区号为988
};
// 组
Group groups [] = {
{0, 0},
{1, 1},
{2, 2},
{4, 3},
{6, 4},
{7, 5},
{89, 6},
{957, 7},
{986, 8},
{962, 9},
{988, 10},
};
// 提取组区号
char isbn[9];
fgets(isbn, sizeof(isbn), stdin);
int groupCode;
sscanf(isbn, "%*d-%d", &groupCode);
for (int i = 0; i < 12; i++)
{
if(groupCode == groups[i].flag){
char *name = groupCodes[i];
printf("%s",name);
return 0;
}
}
return 0;
}
第五章
1.九九乘法表
c
#include <stdio.h>
/**
九九乘法表
*/
int main(int argc, char const *argv[])
{
for (int i = 1; i < 10; i++)
{
/* code */
for (int j = 1; j<=i; j++)
{
/* code */
printf("%d*%d=%d ",j,i,i*j);
}
printf("\n");
}
return 0;
}
2.亲密数
c
#include <stdio.h>
/**
两个不同的自然数A和B,如果整数A的全部因子(包括1,不包括A本身)之和等于B;
且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。
输入某数,求某数以内(包括这个数)的全部亲密数。
*/
/**
* 获取因子之和
* @param number 需要获取因子之和的数
* @return sum 因子之和
*/
int getDivisorSum(int number){
int sum = 0;
for (int i = 0; i <=number/2; i++)
{
if(number%i == 0){
sum+=i;
}
}
return sum;
};
/**
* 获取亲密数
* @param limit 亲密数范围
*/
void getIntimacyNumber(int limit){
for (int i = 1; i < limit; i++)
{
/* code */
int numberB = getDivisorSum(i);
int sumB = getDivisorSum(numberB);
if(sumB == i && i!=numberB && i<numberB ){
printf("(%d,%d)",i,numberB);
}
}
}
int main(int argc, char const *argv[])
{
int num =0;
scanf("%d",&num);
getIntimacyNumber(num);
return 0;
}
3.求阶乘
c
#include <stdio.h>
int main(int argc, char const *argv[])
{
int number;
scanf("%d", &number);
long sum =0;
for (int i = 1; i <= number; i++)
{
long product =1;
for (int j = 1; j<=i; j++)
{
product= product*j;
}
sum+=product;
}
printf("%ld",sum);
return 0;
}
4.水仙花数
c
#include <stdio.h>
#include <math.h>
/**
* 水仙花数
*/
int main(int argc, char const *argv[])
{
for (int i = 100; i < 1000; i++)
{
int single = i%10;
int tens = (i/10)%10;
int hundreds = i/100;
int sum = (int)( pow(single, 3)+ pow(tens, 3)+ pow(hundreds, 3));
if(sum == i){
printf("%d ",sum);
}
}
return 0;
}
5.韩信点兵
c
#include <stdio.h>
#include <math.h>
int main(int argc, char const *argv[])
{
int i = 7;
while (1)
{
/* code */
if(i%5 == 1 && i%6 ==5 && i%7==4 && i%11 == 10){
printf("%d",i);
return 0;
}
i++;
}
return 0;
}
#第六章
1.约瑟夫问题
c
#include<stdio.h>
#include<stdlib.h>
/**
* 循环链表
*/
typedef struct LinkNode
{
int data;
struct LinkNode* pre;
struct LinkNode* next;
} LinkNode;
// 人数
#define PEOPLE_NUMBER 30
/**
* 初始化一个三十个节点的循环链表并且返回头节点
*/
LinkNode* initLinkNode(){
// 初始化头节点
LinkNode *headerNode = (LinkNode*)malloc(sizeof(LinkNode));
headerNode->data =1;
// 中继节点
LinkNode * relayNode =(LinkNode*)malloc(sizeof(LinkNode));;
for (int i = 2; i <=PEOPLE_NUMBER; i++)
{
// 创建节点
LinkNode *node = (LinkNode*)malloc(sizeof(LinkNode));
node->data=i;
node->next = NULL;
if(i==2){
headerNode->next = node;
node->pre =headerNode;
}
// 中继节点后移
if(relayNode !=NULL){
node->pre =relayNode;
relayNode->next = node;
}
relayNode=node;
}
relayNode->next =headerNode;
headerNode->pre = relayNode;
return headerNode;
}
/**
* 初始化排序数组
*/
int* initPeopleArray() {
int* array = malloc(PEOPLE_NUMBER * sizeof(int)); // 使用动态内存分配
// 初始化数组,设置所有人都标记为0,表示教徒
for (int i = 0; i < PEOPLE_NUMBER; i++) {
array[i] = 0;
}
return array;
}
/**
* 移除链表
* @param pretNode 前驱节点
* @param node 需要删除的节点
*/
int removePoint(LinkNode *node){
int index = node->data;
node->next->pre = node->pre;
node->pre->next = node->next;
return index-1;
}
/**
* 约瑟夫问题
* @param node 循环列表
* @param peopleArray 排序列表
*/
void josephProblem(LinkNode *node, int *peopleArray){
int i=1, num =30;
while (num>15)
{
node = node->next;
i++;
// 入海
if(i==9){
int index = removePoint(node);
peopleArray[index] = 1;
node = node->next;
i=1;
num--;
}
}
}
int main(int argc, char const *argv[])
{
LinkNode *node =initLinkNode();
int *peopleArray = initPeopleArray();
josephProblem(node, peopleArray);
for (int i = 0; i <PEOPLE_NUMBER; i++)
{
if(i==14){
printf("%d:%d\n",i+1,peopleArray[i]);
}else if(i==29){
printf("%d:%d",i+1,peopleArray[i]);
}
else{
printf("%d:%d ",i+1,peopleArray[i]);
}
}
return 0;
}
2.求整型矩阵主对角线元素之和
c
#include <stdio.h>
int main() {
int matrix[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
int i, sum = 0;
// 计算主对角线元素之和
for (i = 0; i < 3; i++) {
sum += matrix[i][i];
}
// 输出主对角线元素之和
printf("%d", sum);
return 0;
}
3.密码翻译
c
#include <stdio.h>
#include <string.h>
#define MAX_LEN 100
void decode_password(char* text, int len) {
int i;
for (i = 0; i < len; i++) {
if ('A' <= text[i] && text[i] <= 'Z') {
text[i] = 'Z' - (text[i] - 'A');
} else if ('a' <= text[i] && text[i] <= 'z') {
text[i] = 'z' - (text[i] - 'a');
}
}
}
int main() {
char text[MAX_LEN];
int len;
fgets(text, MAX_LEN, stdin);
len = strlen(text);
if (text[len-1] == '\n') {
text[len-1] = '\0';
len--;
}
decode_password(text, len);
printf("%s\n", text);
return 0;
}
4.杨辉三角形
c
#include <stdio.h>
int main() {
const int ROWS = 10;
int triangle[ROWS][ROWS];
// 初始化第一列和对角线为1
for (int i = 0; i < ROWS; i++) {
triangle[i][0] = 1;
triangle[i][i] = 1;
}
// 计算其它位置的值
for (int i = 2; i < ROWS; i++) {
for (int j = 1; j < i; j++) {
triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j];
}
}
// 输出杨辉三角形
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j <= i; j++) {
printf("%d ", triangle[i][j]);
}
printf("\n");
}
return 0;
}
第七章作业
1.计算函数
c
#include <stdio.h>
int getFactorial(int n){
int data = 1;
for (int i = 1; i <=n; i++)
{
/* code */
data=data*i;
}
return data;
}
double cmk(int m, int k){
double data= getFactorial(m)/(getFactorial(k)*getFactorial((m-k)));
return data;
}
int main(int argc, char const *argv[])
{
/* code */
int oneNumber,twoNumber;
scanf("%d %d", &oneNumber, &twoNumber);
printf("%0.f",cmk(oneNumber,twoNumber));
return 0;
}
2.求两个整数的最大公约数和最小公倍数
c
#include <stdio.h>
// 求两个整数的最大公约数
int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
// 求两个整数的最小公倍数
int lcm(int a, int b) {
return a * b / gcd(a, b);
}
int main() {
int num1, num2;
scanf("%d %d", &num1, &num2);
int greatestCommonDivisor = gcd(num1, num2);
int leastCommonMultiple = lcm(num1, num2);
printf("hcf=%d\n", greatestCommonDivisor);
printf("lcd=%d\n", leastCommonMultiple);
return 0;
}
3.数组行列转换
c
#include <stdio.h>
// 将3*3的二维整型数组进行转置
void transpose(int arr[][3]) {
for (int i = 0; i < 3; i++) {
for (int j = i; j < 3; j++) {
int temp = arr[i][j];
arr[i][j] = arr[j][i];
arr[j][i] = temp;
}
}
}
int main() {
int arr[3][3] = {{1, 2, 3}, {3, 4, 5}, {4, 5, 6}};
transpose(arr);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
4.字符反序输出
c
#include <stdio.h>
#include <string.h>
// 将输入的一个字符串按反序存放
void reverse(char str[]) {
int len = strlen(str);
for (int i = 0; i < len / 2; i++) {
char temp = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = temp;
}
}
int main() {
char str[100];
scanf("%s", str);
reverse(str);
printf("%s", str);
return 0;
}
5.冒泡算法实现
c
#include <stdio.h>
#include <string.h>
// 使用冒泡排序算法对输入的10个字符按由小到大顺序排列
void bubbleSort(char arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
char temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main() {
char arr[] = {'1', 'a', '3', 'x', 'v', '6', 'w', '8', '9', 'z'};
int n = sizeof(arr) / sizeof(arr[0]);
bubbleSort(arr, n);
for (int i = 0; i < n; i++) {
printf("%c ", arr[i]);
}
printf("\n");
return 0;
}
6.回文数
c
#include <stdio.h>
// 判断n是否回文数,是返回1,否则返回0
int huiwen(long n) {
long rev = 0;
long temp = n;
while (temp != 0) {
rev = rev * 10 + temp % 10;
temp /= 10;
}
if (rev == n) {
return 1;
} else {
return 0;
}
}
int main() {
for (long i = 1; i <= 300; i++) {
long square = i * i;
if (huiwen(i) && huiwen(square)) {
printf("%ld ", i);
}
}
return 0;
}
7.求学生年龄
c
#include <stdio.h>
int main() {
int age = 10;
for (int i = 2; i <= 5; i++) {
age += 2;
}
printf("%d", age);
return 0;
}
8.求n!用递归法求n!
c
#include <stdio.h>
// 递归函数求解阶乘
long factorial(long n) {
if (n == 0 || n == 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
int main() {
int n = 1;
scanf("%d",&n);
long result = factorial(n);
printf("%ld",result);
return 0;
}
9.阶乘
c
#include <stdio.h>
// 递归函数计算阶乘
int factorial(int n) {
if (n == 0 || n == 1) {
return 1;
} else {
return n * factorial(n - 1);
}
}
int main() {
int sum = 0;
for (int i = 1; i <= 10; i++) {
int fact = factorial(i);
sum += fact;
}
printf("%d\n", sum);
return 0;
}