C++ 语言课程笔记

C++ 语言课程笔记

C语言程序设计第四版——谭浩强著,此书中的代码题大部分已经在本文中展示,以及南开大学 C 语言上机题库 100 题的作答,如果有作答不正确的地方或者可优化的地方,欢迎指正,谢谢!

001 屏幕输出指定信息

【题目】要求再屏幕上输出以下一行信息

This is a C program.

【代码】

#include <stdio.h> 
​
int main(){printf("This is a C program.\n");return 0;
} 

002 求两个整数之和

【题目】a + b = ?

【代码】

#include <stdio.h> 
​
int main(){int a,b,sum;a = 123;b = 456;sum = a + b;printf("sum = %d\n",sum); return 0;
} 

003 求两个整数中较大者

【题目】求两个整数中较大者

【代码】

#include <stdio.h> 
​
int max(int x,int y);
​
int main(){int a,b,c;scanf("%d,%d",&a,&b);c = max(a,b);printf("max = %d\n",c);return 0;
} 
//求两个整数中较大者 
int max(int x,int y){return x>y?x:y; 
}

004 求三个整数中的最大者

【题目】编写一个 C 程序,输入 a,b,c 三个整数,输出其中最大者

【代码】

  • Example 01:

#include <stdio.h> 
​
int max(int x,int y,int z);
​
int main(){int a,b,c,d;scanf("%d,%d,%d",&a,&b,&c);d = max(a,b,c);printf("max = %d\n",d);return 0;
} 
//求3个整数中较大者 
int max(int x,int y,int z){int t;if(x>y) {if(x>z){t = x;}else {t = z;}}else if(y<z){t = z;}else{t = y;}return t; 
}
  • Example 02:对 01 代码进行了优化

#include <stdio.h> 
​
int max(int x,int y,int z);
​
int main(){int a,b,c,d;scanf("%d,%d,%d",&a,&b,&c);d = max(a,b,c);printf("max = %d\n",d);return 0;
} 
//求3个整数中较大者 
int max(int x,int y,int z){int max = x;if(max<y){max = y;}if(max<z){max = z;}return max; 
}

005 求1×2×3×4×5

【题目】求1×2×3×4×5

【代码】

#include <stdio.h> 
​
int factorial(int n);
​
int main(){int result;result = factorial(5); printf("1×2×3×4×5 = %d\n",result);return 0;
} 
//求1×2×3×4×5 (5! 阶乘)
int factorial(int n){int i=2,t=1;while(i<=n){t *= i;i++;}return t; 
}

006 求多项式1-1/2+1/3-1/4+...+1/99-1/100

【题目】求多项式1-1/2+1/3-1/4+...+1/99-1/100

【代码】

#include <stdio.h> 
​
double sum(int n);
​
int main(){printf("%lf\n",sum(100));return 0;
}
​
double sum(int n){int sign = 1;double result = 1.0;int i = 2;while(i<=n){sign = -sign;result += (double)sign/i;i++;}return result;
}

007 输出给定小写字母

【题目】给定一个大写字母,要求用小写字母输出

【代码】

#include <stdio.h> 
​
int main(){char c1,c2;c1 = 'A';c2 = c1 + 32;printf("%c\n",c2);printf("%d\n",c2);return 0;
}

008 从键盘输入字符输出

【题目】从键盘输入BOY 3个字符,然后把他们输出到屏幕

【代码】

#include <stdio.h> 
​
int main(){char a,b,c;a = getchar();b = getchar();c = getchar();putchar(a);putchar(b);putchar(c);putchar('\n');return 0;
}

009 输出任意小写字母

【题目】改写 007,从键盘上输入一个大写字母,在显示屏上显示对应的小写字母

【代码】

#include <stdio.h> 
​
int main(){char c1,c2;c1 = getchar();c2 = c1 + 32;putchar(c2);putchar('\n');return 0;
}

010 判别是否为大写字母

【题目】输入一个字符,判别它是否为大写字母,如果是,将它转换成小写字母;如果不是,则不转换。然后输出最后得到的字符

【代码】

#include <stdio.h> 
​
int main(){char c;scanf("%c",&c);c = (c>='A'&&c<='Z')?(c+32):c;printf("%c\n",c); return 0;
}

011 成绩按等级输出

【题目】要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70 ~ 84,C等60 ~ 69,D等为60分以下。成绩的等级由键盘输入

【代码】

#include <stdio.h> 
​
int main(){char grade;scanf("%c",&grade);printf("Your score:");switch(grade){case 'A': printf("85-100\n");break;case 'B': printf("70-84\n");break;case 'C': printf("60-69\n");break;case 'D': printf("<60\n");break;default:  printf("enter data error!\n");}return 0;
}

012 判断闰年

【题目】写一程序,判断某一年是否为闰年

【代码】

#include <stdio.h> 
#include <stdbool.h>
​
bool isLeap(int year);
​
int main(){int year;scanf("%d",&year);if(isLeap(year)){printf("%d is ",year);}else{printf("%d is not ",year);}printf("a leap year.\n");return 0;
}
​
bool isLeap(int year){bool leap = false;if((year%4==0 && year%100!=0)||(year%400==0)){leap = true;}return leap;
}

013 求1+2+3+...+100

【题目】

【代码】

  • Example 01:[ while 语句实现 ]

#include <stdio.h> int sum(int n);int main(){printf("%d\n",sum(100));return 0;
}int sum(int n){int result = 0;int i = 1;while(i<=n){result += i;i++;}return result;
}
  • Example 02:[ do...while 语句实现 ]

#include <stdio.h> int sum(int n);int main(){printf("%d\n",sum(100));return 0;
}int sum(int n){int result = 0;int i = 1;do{result += i;i++;}while(i<=n);return result;
}
  • Example 03:[ for 语句实现 ]

#include <stdio.h> int sum(int n);int main(){printf("%d\n",sum(100));return 0;
}int sum(int n){int result = 0;int i;for(i=1;i<=n;i++){result += i;}return result;
}

014 输出以下4*5的矩阵

【题目】输出以下4*5的矩阵

1 2 3 4 5

2 4 6 8 10

3 6 9 12 15

4 8 12 16 20

【代码】

#include <stdio.h> int main(){int i,j;for(i=1;i<=4;i++){for(j=1;j<=5;j++){printf("%d\t",i*j);if(j%5 == 0){printf("\n");}		}printf("\n");}return 0;
}

015 求最大公约数和最小公倍数

【题目】输入两个正整数m和n,求其最大公约数和最小公倍数

【思路】

  • 思路一:辗转相除法

    • 有两整数a和b:

    • ① a%b得余数c

    • ② 若c=0,则b即为两数的最大公约数

    • ③ 若c≠0,则a=b,b=c,再回去执行①

  • 思路二:相减法

    • 有两整数a和b:

    • ① 若a>b,则a=a-b

    • ② 若a<b,则b=b-a

    • ③ 若a=b,则a(或b)即为两数的最大公约数

    • ④ 若a≠b,则再回去执行①

  • 思路三:穷举法

    • ① i= a(或b)

    • ② 若a,b能同时被i整除,则i即为最大公约数,结束

    • ③ i–,再回去执行②

【代码】

  • Example 01:[ 辗转相除法求最大公约数 ]

#include <stdio.h> int main(){int m,n,a,b,c;scanf("%d,%d",&m,&n);a = m;b = n;// 辗转相除法求最大公约数 while(b){c = a%b;a = b;b = c;}printf("最大公约数为%d\n",a);//最小公倍数=两整数的乘积÷最大公约数printf("最小公倍数为%d\n",m*n/a);return 0;
}
  • Example 02:

#include <stdio.h> int gcd(int a,int b);int main(){int m,n;scanf("%d,%d",&m,&n);int a = gcd(m,n);printf("最大公约数为%d\n",a);//最小公倍数=两整数的乘积÷最大公约数printf("最小公倍数为%d\n",m*n/a);return 0;
}
//求最大公约数
int gcd(int a,int b)
{int c;// 辗转相除法求最大公约数 while(b){c = a%b;a = b;b = c;}return a;
}
  • Example 03:

#include <stdio.h> int gcd(int a,int b);int main(){int m,n;scanf("%d,%d",&m,&n);int a = gcd(m,n);printf("最大公约数为%d\n",a);//最小公倍数=两整数的乘积÷最大公约数printf("最小公倍数为%d\n",m*n/a);return 0;
}
//求最大公约数
int gcd(int a,int b)
{int g;if(b==0)g=a;else g=gcd(b,a%b);return g;
}
  • Example 04:[相减法]

#include <stdio.h> int gcd(int a,int b);int main(){int m,n;scanf("%d,%d",&m,&n);int a = gcd(m,n);printf("最大公约数为%d\n",a);//最小公倍数=两整数的乘积÷最大公约数printf("最小公倍数为%d\n",m*n/a);return 0;
}
//求最大公约数
int gcd(int a,int b)
{// 相减法求最大公约数 while(a != b){if(a>b){a -= b;}else{b -= a;}}return a;
}
  • Example 05:[穷举法]

#include <stdio.h> int gcd(int a,int b);int main(){int m,n;scanf("%d,%d",&m,&n);int a = gcd(m,n);printf("最大公约数为%d\n",a);//最小公倍数=两整数的乘积÷最大公约数printf("最小公倍数为%d\n",m*n/a);return 0;
}
//求最大公约数
int gcd(int a,int b)
{int c;// 穷举法求最大公约数 for(c=a;c>0;c--){if(a%c==0&&b%c==0){break;}}return c;
}

016 数组元素逆序输出

【题目】对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9 要求按逆序输出

【代码】

  • Example 01:( 直接赋初值)

#include <stdio.h> int main(){int i,a[10]={0,1,2,3,4,5,6,7,8,9};for(i=9;i>=0;i--){printf("%d ",a[i]);}printf("\n");return 0;
}
  • Example 02:( for 循环赋初值)

#include <stdio.h> int main(){int i,a[10];for(i=0;i<10;i++){a[i] = i;}for(i=9;i>=0;i--){printf("%d ",a[i]);}printf("\n");return 0;
}

017 数组求Fibonacci数列问题

【题目】使用数组求Fibonacci数列问题

【代码】

#include <stdio.h> 
#define _Max 20int main(){int i;int f[_Max]={1,1};for(i=2;i<_Max;i++){f[i] = f[i-2] + f[i-1];}for(i=0;i<_Max;i++){if(i%5==0){printf("\n");}printf("%12d",f[i]);}printf("\n");return 0;
}

018 对n个数升序排序

【题目】对n个数按升序排序

【代码】

  • Example 01:( 冒泡法排序 )

#include <stdio.h> 
#define N 5int main(){int a[N];int i,j,t;printf("input %d numbers:\n",N);for(i=0;i<N;i++){scanf("%d",&a[i]);}printf("\n");for(i=0;i<N-1;i++){for(j=0;j<N-1-i;j++){if(a[j]>a[j+1]){t = a[j];a[j] = a[j+1];a[j+1] = t;}}}for(i=0;i<N;i++){printf("%d ",a[i]);}printf("\n");return 0;
}

019 二维数组行列元素互换

【题目】将一个二维数组行与列的元素互换,存到另一个二维数组中,比如:

$$
a = \left[ \begin{matrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{matrix} \right] b = \left[ \begin{matrix} 1 & 4 \\ 2 & 5 \\ 3 & 6 \end{matrix} \right]
$$

【代码】

#include <stdio.h> 
#define M 2
#define N 3int main(){int a[M][N] = {{1,2,3},{4,5,6}};int b[N][M];int i,j;printf("array a:\n");for(i=0;i<M;i++){for(j=0;j<N;j++){printf("%5d",a[i][j]);b[j][i] = a[i][j];}printf("\n");}printf("array b:\n");for(i=0;i<N;i++){for(j=0;j<M;j++){printf("%5d",b[i][j]);}printf("\n");}return 0;
}

020 输出已知的字符串

【题目】输出一个已知的字符串。

【代码】

  • Example 01:利用字符数组

#include <stdio.h>int main(){char c[15] = {'I',' ','a','m'};int i;for(i=0;i<15;i++){printf("%c",c[i]);}printf("\n");return 0;
} 
  • Example 02:

#include <stdio.h>int main(){char c[15] = {"I am"};printf("%s\n",c);return 0;
} 
  • Example 03:使用 puts(str);

#include <stdio.h>int main(){char c[15] = {"I am"};puts(c);return 0;
} 

021 统计单词个数

【题目】输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。

【思路】

【代码】

#include <stdio.h> int main(){char string[81];int i,num = 0,word = 0;char c;gets(string);for(i=0;(c=string[i])!='\0';i++){if(c == ' '){word = 0;}else if(word == 0){word = 1;num++;}}printf("There are %d words in this line.\n",num);return 0;
}

022 字符串中找最大者

【题目】有3个字符串,要求找出其中最大者

【思路】

【代码】

#include <stdio.h>
#include <string.h> int main(){char str[3][20];	//定义二维字符数组 char string[20];	//定义一维字符数组,作为交换字符串时候的临时字符数组	 int i;for(i=0;i<3;i++){gets(str[i]);}if(strcmp(str[0],str[1])>0){strcpy(string,str[0]);}else{strcpy(string,str[1]);}if(strcmp(str[2],string)>0){strcpy(string,str[2]);}printf("\nThe largest string is:%s\n",string);return 0;
}

023 筛选法求素数

【题目】用筛选法求 100 之内的素数

【代码】

#include <string.h> int main(){int i,j,a[100];for(i=2;i<100;i++){a[i] = i;for(j=2;j<=i;j++){if(j<i && a[i]%j==0){break;}if(a[i] == j){printf("%5d",a[i]);}}}return 0;
}

024 选择法排序

【题目】用选择法对 10 个整数排序

【代码】

  • Example 01:

#include <stdio.h>
#include <string.h> int main(){int i,j,a[10],t;for(i=0;i<10;i++){scanf("%d",&a[i]);}for(j=1;j<10;j++){for(i=0;i<10-j;i++){if(a[i]>a[i+1]){t = a[i];a[i] = a[i+1];a[i+1] = t;}}}for(i=0;i<10;i++){printf("%5d",a[i]);}return 0;
}
  • Example 02:

#include <stdio.h>
#define N 10void sort(int array[],int n);int main(){int a[N];int i;for(i=0;i<N;i++){scanf("%d",&a[i]);}sort(a,N);for(i=0;i<N;i++){printf("%d ",a[i]);}printf("\n");return 0;
}void sort(int array[],int n){int i,j,k,t;for(i=0;i<n-1;i++){k = i;for(j=i+1;j<n;j++){if(array[j]<array[k]){k = j;}}t = array[k];array[k] = array[i];array[i] = t;}
}

025 对角线元素之和

【题目】求一个3×3矩阵对角线元素之和

【代码】

#include <stdio.h>
#include <string.h> int main(){int i,j,a[3][3],s1,s2;for(i=0;i<3;i++){for(j=0;j<3;j++){scanf("%d",&a[i][j]);}} s1 = a[0][0] + a[1][1] + a[2][2];s2 = a[0][2] + a[1][1] + a[2][0];printf("s1 = %d, s2 = %d\n",s1,s2);return 0;
}

026 用递归方法求 n!

【题目】用递归方法求 n!

【思路】

image-20200318165046564

【代码】

#include <stdio.h>
int fac(int n); int main(){int n;int y;scanf("%d",&n);y = fac(n);printf("%d!=%d\n",n,y);return 0;
}int fac(int n){int f;if(n<0){printf("n<0,data error!");}else if(n==0||n==1){f = 1;}else{f = fac(n-1)*n;}
}

027 Hanoi(汉诺)塔问题

【题目】

image-20200318170450483

【代码】

#include <stdio.h>void hanoi(int n,char one,char two,char three);
void move(char x,char y);int main(){int m;scanf("%d",&m);hanoi(m,'A','B','C');return 0;
}void hanoi(int n,char one,char two,char three){if(n == 1){move(one,three);}else{hanoi(n-1,one,three,two);move(one,three);hanoi(n-1,two,one,three);}
}void move(char x,char y){printf("%c->%c\n",x,y);
}

028 数组输出元素

【题目】输入10个数,要求输出其中值最大的元素和该数是第几个数。

【代码】

#include <stdio.h>
#define N 10int max(int x,int y);int main(){int a[N];int i,t,number = 0;printf("enter 10 integer numbers:");for(i=0;i<N;i++){scanf("%d",&a[i]);} printf("\n");t = a[0];for(i=1;i<N;i++){if(max(t,a[i])>t){t = max(t,a[i]);number = i;}}printf("The largest number is %d\nit is the %d number.\n",t,number+1);return 0;
}int max(int x,int y){return x>y?x:y;
}

029 删除字符串中指定字符

【题目】有一个字符串,内有若干个字符,现输入一个字符,要求程序将字符串中该字符删去。

【代码】

#include <stdio.h>
#define N 80void enterString(char str[]);
void deleteString(char str[],char ch);
void printString(char str[]);int main(){char c,str[N];enterString(str);scanf("%c",&c);  //要求删的字符deleteString(str,c);printString(str); return 0;
}void enterString(char str[]){gets(str);
}void deleteString(char str[],char ch){int i,j;for(i=0,j=0;str[i]!='\0';i++){if(str[i]!=ch){str[j++] = str[i];}}str[j] = '\0';
}void printString(char str[]){printf("%s\n",str);
}

030 指针访问整型变量

【题目】通过指针变量访问整型变量

【代码】

#include <stdio.h>int main(){int a = 100;int *p;p = &a;printf("*p = %d\n",*p);return 0;
}

031 逆序的三位数

【题目】

程序每次读入一个正三位数,然后输出逆序的数字。

注意,当输入的数字含有结尾的 0 时,输出不应带有前导的 0 。比如输入 700 ,输出应该是 7 。

提示:用 %10 可以得到个位数,用 /100 可以得到百位数...。将这样得到的三个数字合起来:百位 * 100 + 十位 * 10 + 个位,就得到了结果。

【输入格式】

每个测试是一个3位的正整数。

【输出格式】

输出逆序的数。

【输入样例】

123

【输出样例】

321

【时间限制】

500ms内存限制:32000kb

【参考代码】

  • C 版

#include <stdio.h>
int main()
{int t1,t2,mt1,mt2,mt3;scanf("%d",&t1);	//输入mt1=t1/100; mt2=(t1-mt1*100)/10; mt3=t1%10;t2=mt3*100+mt2*10+mt1;printf("%d\n",t2);	//输出return 0;
}

032 数位数

  • Example 01:先判断后执行

int main()
{int x;int count = 0;printf("请输入一个任意数:"); scanf("%d",&x); count++;x /= 10;while(x > 0){count++;x /= 10;}printf("该数有 %d 位!\n",count);return 0;
}
  • Example 02:先执行后判断

#include <stdio.h>
//数位数 
int main()
{int x;int count = 0;printf("请输入一个任意数:"); scanf("%d",&x); do{x /= 10;count++;}while(x>0);printf("该数有 %d 位!\n",count);return 0;
}

033 求阶乘n!

【题目】写一个程序,让用户输入n,然后计算输出n! 【代码】

  • Example 01:

#include <stdio.h>
//求阶乘n! 
//题目:写一个程序,让用户输入n,然后计算输出n! 
int main()
{int n;int i=1;int fact = 1;//阶乘 printf("请输入一个任意数n:"); scanf("%d",&n); /*	while(i<=n){fact *= i; i++;}*/for(i=2;i<=n;i++){fact *= i; }printf("%d!= %d\n",n,fact);return 0;
}
  • Example 02:

#include <stdio.h>int main()
{int n;int i=1;int fact = 1;//阶乘 printf("请输入一个任意数n:"); scanf("%d",&n); for(i=n;i>1;i--){fact *= i; }printf("%d!= %d\n",n,fact);return 0;
}

034 猜数游戏

【题目】系统随机生成数字,猜数字

#include <stdio.h>
#include <stdlib.h>
#include <time.h>//主函数 
int main(){srand(time(0));int number = rand()%100 + 1;//[0,100]int count = 0;int a = 0;printf("我已经想好了一个1到100之间的数。");do{printf("请猜这个1到100之间的数:");scanf("%d",&a);count++;if(a>number){printf("你猜的数大了\n"); } else if(a<number){printf("你猜的数小了\n"); }}while(a!=number);printf("太好了,你用了 %d 次就猜到了答案。\n",count);return 0;
}

035 整数逆序

  • 001 逻辑一样,但是这个地方用到了循环结构

#include <stdio.h>//主函数 
int main(){int x,digit;int result = 0;scanf("%d",&x);while(x>0){digit = x%10;result = result*10 + digit;x /= 10;}printf("%d",result);return 0;
}

036 判断素数

  • Example 01

#include <stdio.h>//主函数 
int main(){int x;int i;scanf("%d",&x);for(i=2;i<x;i++){if(x%i == 0){break;}}if(i<x){printf("%d 不是素数",x);}else{printf("%d 是素数",x);}return 0;
}

  • Example 02

#include <stdio.h>//主函数 
int main(){int x;int i;int isPrime = 1;scanf("%d",&x);for(i=2;i<x;i++){if(x%i == 0){isPrime = 0;break;}}if(isPrime == 1){printf("%d 是素数",x);}else{printf("%d 不是素数",x);}return 0;
}

  • Example 03:使用子函数调用的方式:去掉偶数,从3到x-1,每次加2

int isPrime(int x){int result = 1;int i;if(x == 1 || (x%2 == 0 && x != 2)){result = 0;}for(i=3;i<x;i+=2){if(x%i == 0){result = 0;break;}}return result;
}

  • Example 04:无须到x-1,到sqrt(x)就够了

int isPrime(int x){int result = 1;int i;if(x == 1 || (x%2 == 0 && x != 2)){result = 0;}for(i=3;i<sqrt(x);i+=2){if(x%i == 0){result = 0;break;}}return result;
}

注:sqrt(x) 返回类型 double,引入 #include <math.h>

  • Example 05:判断是否能被已知的且<x的素数整除

#include <stdio.h>int isPrime(int x,int knownPrimes[],int numberOfKnownPrimes);int main(){const int number = 100;int prime[number];prime[0] = 2;int j;for(j=1;j<number;j++){prime[j] = 0;}int count = 1;int i = 3;while(count < number){if(isPrime(i,prime,count)){prime[count++] = i;}i++;} for(i=0;i<number;i++){printf("%d",prime[i]);if((i+1)%5){printf("\t");}else{printf("\n");}}return 0;
}int isPrime(int x,int knownPrimes[],int numberOfKnownPrimes){int result = 1;int i;for(i=0;i<numberOfKnownPrimes;i++){if(x%knownPrimes[i]==0){result = 0;break;}}return result; 
}

037 输出100以内的素数

#include <stdio.h>//主函数 
int main(){int x;for(x=2;x<100;x++){int i;int isPrime = 1;for(i=2;i<x;i++){if(x%i == 0){isPrime = 0;break;}}if(isPrime==1){printf("%d ",x);}}printf("\n");return 0;
}

038 凑硬币

【题目】如何用1角、2角和5角的硬币凑出10元以下的金额呢?

【代码】

#include <stdio.h>//主函数 
int main(){int x;int one,two,five;scanf("%d",&x);for(one=1;one<x*10;one++){for(two=1;two<x*10/2;two++){for(five=1;five<x*10/5;five++){if(one+two*2+five*5==x*10){printf("%d 个1角 + %d 个2角 + %d 个5角 = %d 元\n",one,two,five,x);}}}}return 0;
}

039 求平均数

  • Example 01:

#include <stdio.h>int main(){int number;int sum = 0;int count = 0;do{scanf("%d",&number);if(number != -1){sum += number;count ++;}}while(number != -1);printf("%f\n",1.0*sum/count);	return 0;
}

  • Example 02:

#include <stdio.h>int main(){int number;int sum = 0;int count = 0;scanf("%d",&number);while(number != -1){sum += number;count ++;scanf("%d",&number);}printf("%f\n",1.0*sum/count);	return 0;
}

040 水仙花数

【题目】计算所有N位水仙花数

【说明】水仙花数是指一个N位正整数(N>=3),它的每个位上的数字的N次幂之和等于它本身。

【输入格式】

输入在一行中给出一个正整数N(3<=N<=7)

【输出格式】

按递增顺序输出所有N位水仙花数,每个数字占一行

【代码】

  • Example 01:

#include <stdio.h>int main()
{int n;int first = 1;int i = 1;	scanf("%d",&n);	while(i<n){first *= 10;i++;}//遍历100-999i = first;while(i<first*10){int t = i;int sum = 0;do{int d = t%10;t /= 10;int p = 1;int j = 0;//int p = d;//int j = 1;while(j<n){p *= d;j++;}sum += p;} while(t>0);if(sum == i){printf("%d\n",i);}i++;} return 0;
}

041 打印九九乘法表

  • Example 01:

#include <stdio.h>int main()
{int n;scanf("%d",&n); int i,j;i=1;while(i<=n){j=1;while(j<=i){printf("%d*%d=%d",j,i,i*j);if(i*j<10){printf("   ");}else{printf("  ");}j++;}printf("\n");i++;}return 0;
}

042 统计素数并求和

【题目】要求统计给定整数M和N区间内素数的个数并对它们求和。

【代码】

  • Example 01:

#include <stdio.h>int main()
{int m,n;int i;int count = 0;int sum = 0;scanf("%d %d",&m,&n); if(m==1){m=2;}for(i=m;i<=n;i++){int isPrime = 1;int k;for(k=2;k<i-1;k++){if(i%k == 0){isPrime = 0;break;}}//判断i是否素数if(isPrime){count++;sum += i;}		}printf("%d %d\n",count,sum);return 0;
}
  • Example 02:

#include <stdio.h>int isPrime(int i){int result = 1;int k;for(k=2;k<i-1;k++){if(i%k == 0){result = 0;break;}}return result;
}int main(){int m,n;int i;int count = 0;int sum = 0;scanf("%d %d",&m,&n); if(m==1){m=2;}for(i=m;i<=n;i++){//判断i是否素数if(isPrime(i)){count++;sum += i;}		}printf("%d %d\n",count,sum);return 0;
}

043 猜数游戏

【题目】

image-20200301210457942

【代码】

  • Example 01:

#include <stdio.h>int main()
{int number,n;int inp;int finished = 0;int cnt = 0;scanf("%d %d",&number,&n);do{scanf("%d",&inp);cnt++;if(inp<0){printf("Game Over\n");finished = 1;}else if(inp>number){printf("Too big\n");		}else if(inp<number){printf("Too small\n");}else{if(cnt==1){printf("Bingo!\n");} else if(cnt<=3){printf("Lucky You!\n");}else{printf("Good Guess!\n");}finished = 1;} if(cnt==n){if(!finished){printf("Game Over\n");finished = 1;}}} while(!finished);return 0;
}

044 求序列前N项和

【题目】计算序列2/1+3/2+5/3+8/5+...的前N项之和。

【代码】

  • Example 01:

#include <stdio.h>int main()
{int n;double dividend,divisor;double sum = 0.0;int i;double t;scanf("%d",&n);dividend = 2;divisor = 1;for(i=1;i<=n;i++){sum += dividend/divisor;t = dividend;dividend += divisor;divisor = t;} printf("%.2f\n",sum);return 0;
}

045 约分最简分式

【代码】

  • Example 01:

#include <stdio.h>int main()
{int dividend,divisor;scanf("%d/%d",&dividend,&divisor);int a = dividend;int b = divisor;int t;while(b>0){t = a%b;a = b;b = t;}printf("%d/%d\n",dividend/a,divisor/a);return 0;
}

046 念数字

【题目】输入一个整数,输出每个数字对应的拼音

【代码】

  • Example 01:

#include <stdio.h>int main()
{int x;scanf("%d",&x);if(x<0){printf("fu ");x = -x;}int mask = 1;int t = x;while(t>9){t /= 10;mask *= 10;}do{int d = x / mask;switch(d){case 0: printf("ling");break;case 1: printf("yi");break;case 2: printf("er");break;case 3: printf("san");break;case 4: printf("si");break;case 5: printf("wu");break;case 6: printf("liu");break;case 7: printf("qi");break;case 8: printf("ba");break;case 9: printf("jiu");break;}if(mask>9){printf(" ");}x %= mask;mask /= 10;}while(mask>0);printf("\n"); return 0;
}

047 求a的连续和

【题目】S = a + aa + aaa + ... +aaa...a(n个a)

例如:S = 2 + 22 + 222 (3个2)

【代码】

  • Example 01:

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

048 输出平均数和大于平均数的数

【代码】

  • Example 01:

#include <stdio.h>int main(){int x;double sum = 0;int count = 0;int number[100];	scanf("%d",&x);		while(x != -1){number[count] = x;sum += x;count ++;scanf("%d",&x);}if(count>0){printf("%f\n",sum/count);int i;for(i=0;i<count;i++){if(number[i]>sum/count){printf("%d\n",number[i]);}}}return 0;
}

注:数据超过100时咋办?

  • Plan A:采用动态的下标

  • Plan B:进行说明,if 判断

049 统计个数

【题目】写一个程序,输入数量不确定的[0,9]范围内的整数,统计每一种数字出现的次数,输入-1表示结束

【代码】

  • Example 01:

#include <stdio.h>int main(){int x;int count[10];int i;for(i=0;i<10;i++){count[i]=0;}scanf("%d",&x);while(x!=-1){if(x>=0&&x<=9){count[x]++;}scanf("%d",&x);}for(i=0;i<10;i++){printf("%d:%d\n",i,count[i]);}return 0;
}
  • Example 02:

#include <stdio.h>int main(){const int number = 10;int x;int count[number];int i;for(i=0;i<number;i++){count[i]=0;}scanf("%d",&x);while(x!=-1){if(x>=0&&x<=9){count[x]++;}scanf("%d",&x);}for(i=0;i<number;i++){printf("%d:%d\n",i,count[i]);}return 0;
}

050 搜索数字

【题目】查找数字是否在数组中,找到返回在数组中的位置,找不到返回-1

【代码】

  • Example 01:使用数组

#include <stdio.h>int search(int key,int a[],int length);//声明 int main(){int a[] = {2,4,6,7,1,3,};int x;int loc;printf("请输入一个数字:");scanf("%d",&x);loc = search(x,a,sizeof(a)/sizeof(a[0]));if(loc != -1){printf("%d在第%d个位置上\n",x,loc);} else{printf("%d不存在\n",x);}return 0;
}int search(int key,int a[],int length){int result = -1;int i;for(i=0;i<length;i++){if(a[i] == key){result = i;break;}}return result;
} 

051 素数表

【代码】

  • Example 01:

#include <stdio.h>int main(){const int maxNumber = 100;int isPrime[maxNumber];int i;int x;for(i=0;i<maxNumber;i++){isPrime[i] = 1;}for(x=2;x<maxNumber;x++){if(isPrime[x]){for(i=2;i*x<maxNumber;i++){isPrime[i*x] = 0;}}}for(i=2;i<maxNumber;i++){if(isPrime[i]){printf("%d\t",i);}}printf("\n");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/150931.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

DAMODEL丹摩智算平台实践CogVideoX

文章目录 前言 一、平台账号注册并登录 二、部署CogVideoX &#xff08;一&#xff09;简介 &#xff08;二&#xff09;部署 1. 创建实例 2. 配置环境和依赖 3.预制模型与配置文件 三、开始运行 总结 前言 该文章主要记录DAMODEL丹摩智算平台实践过程与心得体会&…

【YashanDB知识库】客户端字符集与数据库字符集兼容问题

本文转自YashanDB官网&#xff0c;具体内容请见https://www.yashandb.com/newsinfo/7352675.html?templateId1718516 问题现象 客户端yasql配置字符集为GBK&#xff0c;服务端yasdb配置字符集为UTF8&#xff0c;之后执行语句&#xff1a; 会发现&#xff1a; 期望是两个都…

FAT32取证分析

前言&#xff1a; 在正常工作中经常会有数据恢复或者取证分析的场景&#xff0c;数据是否能被恢复&#xff0c;主要还是看数据是否被覆盖&#xff0c;正常情况下文件虽然被删除&#xff0c;只是修对应的标志位&#xff0c;文件本身数据并不会被破坏&#xff0c;所以我们就可以…

【Java】1.初识Java

文章目录 1. 使用记事本创建.Java程序2. 使用IDEA创建第一个Java程序3. 标识符4. 关键字 1. 使用记事本创建.Java程序 先创建了HelloWorld.java这个文件。然后用Sublime Text记事本打开&#xff0c;输入以下代码。 winr&#xff0c;cmd输入D:切换到D盘&#xff0c;然后输入cd …

投资气膜场馆:开启未来体育发展的新纪元—轻空间

随着对体育设施建设的重视&#xff0c;气膜场馆作为一种创新的体育设施&#xff0c;正日益成为投资的热门选择。气膜场馆凭借其独特的优势和多重好处&#xff0c;不仅能提升体育场馆的功能性和经济性&#xff0c;更为地方经济发展注入了新的活力。 成本效益显著 气膜场馆具有快…

419. 棋盘上的战舰(C++)

题目 给你一个大小为 m x n 的矩阵 board 表示棋盘&#xff0c;其中&#xff0c;每个单元格可以是一艘战舰 X 或者是一个空位 . &#xff0c;返回在棋盘 board 上放置的 舰队 的数量。 舰队 只能水平或者垂直放置在 board 上。换句话说&#xff0c;舰队只能按 1 x k&#xff…

SimpleAIAgent:使用免费的glm-4-flash即可开始构建简单的AI Agent应用

SimpleAIAgent是基于C# Semantic Kernel 与 WPF构建的一款AI Agent探索应用。主要用于使用国产大语言模型或开源大语言模型构建AI Agent应用的探索学习&#xff0c;希望能够帮助到感兴趣的朋友。 接下来我想分享一下我的AI Agent应用实践。 翻译文本并将文本存入文件 第一个…

Transformer入门指南!14天速成

想系统而又透彻地入门和学习Transformer&#xff0c;可以按照以下思路(步骤): 1、首先&#xff0c;了解一些NLP领域的基本知识&#xff0c;比如文本是如何被表征的&#xff0c;序列文本信息的处理&#xff0c;基于(深度神经网络)的语言模型是如何处理自然语言的; 2、Transfor…

计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-21

计算机前沿技术-人工智能算法-大语言模型-最新论文阅读-2024-09-21 1. AIvril: AI-Driven RTL Generation With Verification In-The-Loop Authors: Mubashir ul Islam, Humza Sami, Pierre-Emmanuel Gaillardon, and Valerio Tenace AIVRIL: 人工智能驱动的RTL生成与验证内…

表观项目文章速递,平均IF=9.7

表观组学是研究基因组层面的表观遗传变化及其调控机制的一门学科&#xff0c;它在现代生物学研究中具有重要意义。传统的遗传学研究主要关注DNA序列的变化&#xff0c;而表观组学则着眼于在不改变DNA序列的情况下&#xff0c;如何通过化学修饰和染色质结构的改变进而影响基因表…

【开源免费】基于SpringBoot+Vue.JS墙绘产品展示交易平台(JAVA毕业设计)

本文项目编号 T 049 &#xff0c;文末自助获取源码 \color{red}{T049&#xff0c;文末自助获取源码} T049&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

Windows 10 on ARM, version 22H2 (updated Sep 2024) ARM64 AArch64 中文版、英文版下载

Windows 10 on ARM, version 22H2 (updated Sep 2024) ARM64 AArch64 中文版、英文版下载 基于 ARM 的 Windows 10 请访问原文链接&#xff1a;https://sysin.org/blog/windows-10-arm/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;s…

Ansible-playbook使用roles

文章目录 一、Ansible的内置目录及文件总览目录及文件解释production目录staging目录host_vars目录和group_vars目录library目录、module_utils目录、filter_plugins目录site.ymlroles目录roles/自定义角色名目录下roles/自定义角色名目录/tasks目录下roles/自定义角色名目录/h…

NLP技术在营业选址中的实践与探索

传统营业选址面临的问题 在电信业务的服务流程中&#xff0c;用户装机地址的准确性和清晰度对于整个服务体验和运营效率起着至关重要的作用。然而&#xff0c;在实际操作中&#xff0c;装机地址的确定往往面临诸多挑战&#xff0c;这些问题不仅影响用户的服务体验&#xff0c;也…

详解机器学习经典模型(原理及应用)——逻辑回归

一、什么是逻辑回归 逻辑回归模型是经典的统计模型&#xff0c;主要用于处理二分类问题&#xff08;预测一个事件发生与否的概率&#xff09;。得益于其简单性和高度可解释性&#xff0c;逻辑回归在业务中常被用作baseline之一。即便是上亿量级的数据&#xff0c;也能够在很短的…

Gattchart使用手册

一.组件概述 GanttChart是Delphi的一个交互式非数据库感知前端VCL组件&#xff0c;可以在gantt图表中可视化任务。该组件可用于调度许多资源和任务&#xff0c;并可用于多种项目场景&#xff0c;如项目管理、任务管理、生产调度或员工调度。该组件包括用于不同数据类型的pert图…

应用层 IV(万维网WWW)【★★】

&#xff08;★★&#xff09;代表非常重要的知识点&#xff0c;&#xff08;★&#xff09;代表重要的知识点。 一、WWW 的概念与组成结构 1. 万维网的概念 万维网 WWW&#xff08;World Wide Web&#xff09;并非某种特殊的计算机网络。万维网是一个大规模的、联机式的信息…

MSF工具使用教程

Metasploit 简介 Metasploit 是一个漏洞框架&#xff0c;拥有超过 1700 个漏洞利用程序&#xff0c;大大简化了渗透测试的工作&#xff0c;同时具有模块化的体系结构&#xff0c;渗透测试人员可以很方便的添加或修改exploit。 安装及维护 安装 使用 Rapid7 的一套快速安装项…

18769 不完整的排序

### 思路 1. 读取输入数据&#xff0c;获取T组数据。 2. 对每组数据&#xff0c;使用双指针法进行排序&#xff1a; - 定义两个指针 i 和 j&#xff0c;分别从数组的左端和右端开始。 - 当 i 指向正数且 j 指向负数时&#xff0c;交换它们。 - 移动指针&#xff0c;直…

比较器(算法中排序)

方式一&#xff1a;不常用 让实体类实现Comparable接口&#xff0c;泛型是需要比较的类型&#xff0c;同时重写compareTo方法 缺点&#xff1a;对代码有侵入性。 public class Student implements Comparable<Student> {private String name;private double score;// …