C语言入门20个简单程序|最新更新2021.7.13
Posted Eric%258436
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言入门20个简单程序|最新更新2021.7.13相关的知识,希望对你有一定的参考价值。
本文创作目的是写几个简单程序帮助学习C语言的同学练手,深化面向过程编程的思维方式。
如有错误,感谢指正
99乘法表
题目1:打印九九乘法表
发散思维,倒九九,竖九九。
#include <stdio.h>
void main() {
int i, j;
for (i = 1; i < 10; i++) {
for (j = 1; j < i + 1; j++) {
printf("%d+%d=%d\\t", i, j, i * j);
}
printf("\\n");
}
斐波那契兔子
题目2:已知一对兔子每一个月可以生一对小兔子,而一对兔子出生后第二个月就开始生小子。假如一年内没有发生死亡,则一对兔子一年内能繁殖成多少对?
本题解没有使用递归函数
#include <stdio.h>
void main() {
long f1, f2;
int i;
f1 = f2 = 1;
for (i = 1; i < 7; i++) {
printf("%12ld%12ld", f1, f2);
if (i % 4 == 0) printf("\\n");
f1 = f1 + f2;
f2 = f1 + f2;
}
}
100-200间素数判断
素数判断方法(初中奥赛会学近10种判断方法,建议补习,回头传给孩子)
本题解采用暴力循环
#include <stdio.h>
#include <math.h>
void main() {
int m, i, k, h = 0, leap = 1;
for (m = 101; m < 201; m++) {
k = sqrt(m + 1);
for (i = 2; i <= k; i++) {
if (m % i == 0) {
leap = 0;
break;
}
}
if (leap) {
printf("%-4d", m);
h++;
if (h % 10 == 0) {
printf("\\n");
}
}
leap = 1;
}
printf("\\nThe total is %d",h);
}
完全数问题
如果一个数恰好等于它的真因子之和,则称该数为“完全数”
#include<stdio.h>
int main() {
int i, j;
int sum;
for (i = 1; i <= 1000; i++) {
sum = 0;
for (j = 1; j < i; j++)
if (i % j == 0) {
sum += j;
}
if (sum == i) {
printf("%d\\n", i);
}
}
}
数组旋转问题
44数组逆时针旋转90°存储
想用获取键盘输入,自己写,改成55的自己练
#include <stdio.h>
int main() {
int b[4][4], i, j;
int a[4][4] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
b[3 - j][i] = a[i][j];
}
}
printf("rotated matrix:\\n");
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
printf("%6d", b[i][j]);
}
printf("\\n");
}
return 0;
}
杨辉三角
#include <stdio.h>
#define N 10
int main()
{
int arr[N][N] = { 0 };
int i = 0;
for (i = 0; i < N; i++)
{
int m = 0;
for (m = 0; m < N - i; m++)
{
printf(" ");
}
int j = 0;
for (j = 0; j <= i; j++)
{
if ((0 == j) || (i == j))
{
arr[i][j] = 1;
}
else
{
arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
}
printf("%4d", arr[i][j]);
}
printf("\\n");
}
return 0;
}
成绩数组
通过键盘输入3名学生4门课程的成绩, 分别求每个学生的平均成绩和每门课程的平均成绩。
要求所有成绩均放入一个4行5列的数组中,输入时同一人数据间用空格,不同人用回车
其中最后一列和最后一行分别放每个学生的平均成绩、每门课程的平均成绩及班级总平均分。
#include<stdio.h>
void main()
{
float a[4][5],sum1,sum2;
int i,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%f",&a[i][j]);
for(i=0;i<3;i++)
{
sum1=0;
for(j=0;j<4;j++)
{
sum1+=a[i][j];
}
a[i][4]=sum1/4;
}
for(j=0;j<5;j++)
{
sum2=0;
for(i=0;i<3;i++)
{
sum2+=a[i][j];
}
a[3][j]=sum2/3;
}
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
printf("%6.2f",a[i][j]);
}
printf("\\n");
}
}
字符串反转C语言实现
方式一:
char* reverseString(char* s) {
int len = strlen(s);
int i = 0;
char ch;
while (i < len / 2) {
ch = *(s + i);
*(s + i) = *(s + len - 1 - i);
*(s + len - 1 - i) = ch;
i++;
}
return s;
}
方式二
#include <stdio.h>
#include <string.h>
#define MAX_SIZE 1024
void reverse(char* str){
assert(str);
int ilen = strlen(str);
char* p = str + ilen - 1;
int itemp = 0;
while(str < p){
itemp = *p;
*p = *str;
*str = itemp;
p--;
str++;
}
}
方式三
//递归实现
void reverse_string(char* str, int len){
assert(str);
if (*str == '\\0'){
return;
}
reverse_string(str + 1, len - 1);
printf("%c", *str);
}
//方法二 递归,参数循环入栈,每次往后拷贝一个字符
void revers(char* in, char* out) {
if (in == NULL || out == NULL ) {
return;
}
if (*in == '\\0') {
return;
}
revers(in+1, out);
strncat(out, in, 1);
return;
}
int main(){
char str[MAX_SIZE];
printf(" 请输入字符串:\\n");
gets(str);
reverse(str);
prntf(" 反转后的字符串:\\n");
}
指针法
void invert(char *s){
int i.j,k;
char t;
k=strlen(s);
for(i=o.j=k-1;i<k/2;i++,j--)
{ t=*(s+i);*(s+i)=*(s+j);“(s+j)=t; }
}
main(){
FILE *fp;
char str[200],*p,i,j;
if((fp=fopen("p9_2.out","w"))==NULL)
{ printf("cannot open thefile\\n");
exit(O);
}
printf("input str:in");gets(str);
printf(”in%s",str);
fprintf(fp."%s",str);
invert(str);
printf("in%s",str);
fprintf(fp,"n%s",str);
fclose(fp);
从字符数组s中删除存放在c中的字符
#include <stdio.h>main()
{ char s[80],c;int j,k;
printf("InEnter a string: ");
gets(s);
printf("\\nEnter a character: ");
c=getchar( );
for(j=k=O;s[j]!= '\\O';j++)
if(s[j]!=c)
s[k++]=s[ij];
s[k]='\\O';
printf("\\n%s",s);
排序输出
编写一个voidsort(int *x,int n)实现将x数组中的n个数据从大到小排序。n及数组元素在主函数中输入。将结果显示在屏幕上并输出到文件p9 1.out中
#include<stdio.h>
void sort(int *x,int n){
int j,k,t;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1:j<n;j++){
if(x[j]>x[k]) k=j;
if(k!=i){
t=x[i];
x[i]=x[k];
x[k]=t;
}
}
}
void main()
{FILE *fp;
int *p.i,a[10];
fp=fopen("p9_ 1.out"w");
p=a;
printf("Input 10 numbers:");
for(i=0;i<10;i++)
scanf("%d",p++);
p=a;
sort(p,10);
for(;p<a+10;p++)
{ printf("%d ","p);
fprintf(fp,"%d ","p); }
system(' pause");
fclose(fp);
}
无序插入后排序
已知数组a中的元素已按由小到大顺序排列,以下程序的功能是将输入的一个数插入数组a中,插入后,数组a中的元素仍然由小到大顺序排列
main()
{ inta[10]={0,12,17,20,25,28,30}; /* a[0]为工作单元,从a[1]开始存放数据*/
int x,i,j=6; /*j为元素个数*/
printf("Enter a number: ");
scanf("%d",&x);
a[0]=x;
i=j; /*从最后一个单元开始*/
while(a[i]>x)
{ a[i+1]=a[i];i--; } /*将比x大的数往后移动一个位置*/
a[++i]=x;
j++; /*插入x后元素总个数增加*/
for(i=];i<=j;i++) printf("%8d" ,a[i]);
printf("\\n");
}
替换输出
编写函数replace(char *s,char c1,char c2)实现将s所指向的字符串中所有字符c1 用c2替换,字符串、字符c1和c2均在主函数中输入,将原始字符串和替换后的字符串显示在屏幕上,并输出到文件p10 2. out中
#include<stdio.h>
replace(char* s,char cl,char c2)
{while(*s!='\\0')
{ if(*s==c1)
*以上是关于C语言入门20个简单程序|最新更新2021.7.13的主要内容,如果未能解决你的问题,请参考以下文章