FaFu--练习复盘--1

news/2024/12/22 14:25:41/

1、输出图形及二维数组应用

1.1.输出图形

描述

        编写程序打印n行如下图形,其中1≤n≤500。

输入用例   

        7                           

输出用例 

具体实现

#include"stdio.h"
int main(){int n,i,j;scanf("%d",&n);for(i = 1; i<= n; i++){for (j = 1; j<= n-i; j++)printf(" ");for(j =1 ;j<=i; j++)printf("%c",'A'+(n-j)%26);for(j =1 ;j<=i-1; j++)printf("%c",'A'+(n+j-i)%26);printf("\n");}return 0;
}

  

1.2.旋转数字

描述

        编写程序打印n行如下菱形图形(1≤n≤99),图形有n行n列个整数,图形从第1行的中间开始,数字分别是1,2,……n*n-1,n*n,并且顺时针向中间转入,如果1个数据项宽度不足n*n位,用0补足到n*n位。

 输入用例

        7

输出用例

       

具体实现

#include "stdio.h"
const int N0 = 100;
struct Dir{int row,col;}dir[4] = {{1,1},{1,-1},{-1,-1},{-1,1}};int a[2*N0][2*N0] = {0};int main(){int n,i,j,m;scanf("%d",&n);int row,col,rowTest,colTest,d=0;row = 1;col = n;m = 0;i = n*n;while(i){i/=10;m++;}for(i = 1; i<= n*n; i++){a[row][col] = i;rowTest = row + dir[d].row;colTest = col + dir[d].col;if(rowTest < 1 || rowTest >= 2*n || colTest < 1 || colTest >= 2*n || a[rowTest][colTest] != 0){d = (d+1)%4;rowTest = row + dir[d].row;colTest = col + dir[d].col;}row = rowTest;col = colTest;}for( i = 1; i < 2*n ; i++){for (j = 1; j< 2*n; j++)if(i<=n && j<n+i || i>n && j<3*n-i){if(a[i][j] == 0)printf("%*c",m,' ');elseprintf("%0*d",m,a[i][j]);}printf("\n");        }return 0;
}

1.3求和

描述

        有1个n×n的矩阵,从左上到右下称为主斜线(倾角135º),从右上到左下称为次斜线(倾角45º),在主斜线上最大,次斜线上最小的元素称为该矩阵的斜线鞍点,求出该矩阵所有斜线鞍点的和。

        如5×5的矩阵:元素7为上面矩阵的一个斜线鞍点,元素10和19也是上面矩阵的斜线鞍点。

输入用例

5

3        2        5        98        10

44     12        1       12         8 

67     61        45      7         19 

12     21        33      56        3

35     36        78      98        19    

输出用例

36

具体实现

#include "stdio.h"
const int N0 = 105;
int a[N0][N0];
int n;
void readData(){int i,j;scanf("%d",&n);for(i =1 ; i<=n ; i++)for(j=1; j<=n; j++)scanf("%d",&a[i][j]);
}
bool masterMax(int i, int j){int p,q;for(p=1; p<=n ; p++)for(q=1; q<=n; q++)if(p-q == i-j && a[p][q] > a[i][j])return false;return true;
}
bool slaverMin(int i,int j){int p,q;for(p=1; p<=n ; p++)for(q=1; q<=n; q++)if(p+q == i+j && a[p][q] < a[i][j])return false;return true;
}
int main(){int i,j,total;readData();for(total = 0, i=1; i<=n; i++)for(j=1; j<=n; j++)if(masterMax(i,j) && slaverMin(i,j))total += a[i][j];printf("%d\n",total);return 0;
}

2、数组与结构体应用

 2.1.数组中的元素查找

描述

        一维数组a中有20个整数,编写程序在数组a中查找元素q,如果找到第一个等于q的元素,则输出该元素在数组中的下标;如果没找到则输出-1。

输入用例

5

3 21 5 98 44 12 64 7 66 96 76 67 61 2 13 16 9 78 56 69

输出用例

2

具体实现

#include <stdio.h>
#include<math.h>
int main (){int a[20];int i,q,flag=0;scanf("%d",&q);for (i=0;i<20;i++) scanf("%d",&a[i]);for(i=0;i<20;i++)if (a[i]==q){break;}	if (i<20) printf("%d",i);else printf("-1");return 0;} 

2.2.多重元素下标查找

描述

        一维数组a中有10个整数,编写程序在数组a中查找所有值等于q的元素,并输出这些元素在数组中的下标;如果没找到则输出-1。

输入用例

58

57 89 76 35 58 65 58 73 58 47

输出用例

4 6 8 

具体实现 

#include <stdio.h>
#include<math.h>
int main (){int a[10];int i,q,flag=0;scanf("%d",&q);for (i=0;i<10;i++) scanf("%d",&a[i]);for(i=0;i<10;i++)if (a[i]==q){printf("%d ",i);flag++;}	if (flag) ;//这有一个空语句else printf("-1");return 0;} 

2.3.极端偏差成绩查找

描述

        输入某班级n(0<n<100)个学生的成绩到数组a中,找出所有成绩中与平均值绝对偏差最大的学生成绩,并输出该学生的成绩。

输入用例

10

23 21 5 17 19 42 6 10 8 31

输出用例

42

#include <stdio.h>
#include<math.h>
int main ()
{int a[100];int i,n,c,k,sum=0,avg;scanf("%d",&n);for (i=0;i<n;i++) scanf("%d",&a[i]);for (i=0;i<n;i++) sum=sum+a[i];avg=sum/n;c=fabs(a[0]-avg);k=0;for (i=0;i<n;i++)if (fabs(a[i]-avg)>c){c=fabs(a[i]-avg);k=i;}printf("%d",a[k]);return 0;} 

2.4.学生成绩标准差计算 

描述

        输入某班级n(0<n<100)个学生的成绩到数组a中,编写程序求成绩的标准差,求标准差的公式如下:

        其中,表示学生的总平均成绩,表示第i个学生的成绩。 

输入用例

6

95 85 75 65 55 45

输出用例

18.708

具体实现

#include <stdio.h>
#include<math.h>
int main (){int a[100];int i,n,c,k;double st,sum=0,avg;scanf("%d",&n);for (i=0;i<n;i++) scanf("%d",&a[i]);for (i=0;i<n;i++) sum=sum+a[i];avg=sum/n;sum=0;for (i=0;i<n;i++){sum=sum+(a[i]-avg)*(a[i]-avg);}st=sqrt(sum/(n-1));printf("%.3lf",st);return 0;} 

2.5.次对角线元素求和

描述

        有一个5×5矩阵(即二维数组b),编写程序输出该矩阵次对角线上的所有元素之和。

输入用例

3          21        5        98        10

44        12        1        12        8

67        61        45      67        17

12        21        33      56        34

35        36        78      90        19

输出用例

123

具体实现

#include <stdio.h>
#include<math.h>int main (){int b[5][5];int i,j;long sum;for (i=0;i<5;i++)for(j=0;j<5;j++)scanf("%d",&b[i][j]);sum=0;for(i=0,j=5;i<5;i++){j--;sum=sum+b[i][j];}printf("%ld",sum);return 0;} 

2.6.矩阵对角线区域调整

描述

        有一个5×5矩阵(即二维数组b),编写程序将矩阵的左下三角(含主对角线)各元素加10,右上三角各元素(不含主对角线)减10。

输入用例

13 21 55 98 47

12 18 19 67 61

89 80 36 78 10

89 87 67 80 12

12 33 88 57 70

输出用例 

23 11 45 88 37

22 28 9  57 51

99 90 46 68 0

99 97 77 90 2

22 43 98 67 80 

具体实现 

#include <stdio.h>
#include<math.h>
int main (){int b[5][5];int i,j;for(i=0;i<5;i++){for(j=0;j<5;j++){scanf("%d",&b[i][j]);if(i<j){b[i][j]-=10;}else{b[i][j]+=10;}printf("%d ",b[i][j]);}printf("\n");}return 0;} 

2.7.二维数组先列后行降序排序

 描述

        有一个n行m列(0<n<20,0<m<20)的整型二维数组b,编写程序对二维数组b[n][m]先按列降序排序,再按行降序排序。

输入用例

4 5

21  3   5   98   10

44 12  1   12    8

67 61 45  67   17

35 36 78  90    19

输出用例

98  78  67 61  19

90  45  44  36  17

67  35  12  10  5

21  12   8    3   1

具体实现 

#include <stdio.h>
int main (){int b[20][20];int n,m,i,j,k,temp;scanf("%d%d",&n,&m); for (i=0;i<n;i++)for(j=0;j<m;j++)scanf("%d",&b[i][j]);for(k=0;k<m;k++)for(i=n-1;i>0;i--)for(j=0;j<i;j++)if(b[j][k]<b[j+1][k]){temp=b[j][k];b[j][k]=b[j+1][k];b[j+1][k]=temp;}for(k=0;k<n;k++)for(i=m-1;i>0;i--)for(j=0;j<i;j++)if(b[k][j]<b[k][j+1]){temp=b[k][j];b[k][j]=b[k][j+1];b[k][j+1]=temp;}for (i=0;i<n;i++){for(j=0;j<m;j++)printf("%d ",b[i][j]);printf("\n");}return 0;} 

2.8. 二维数组字符串升序排序

描述

        输入n个字符串(长度小于20)存入二维数组c中,编写程序对其进行排序(由小到大)并按次序输出。

输入用例

3

bcd

abd

abc

输出用例

abc

abd

bcd

具体实现

#include<stdio.h>
#include<string.h>
void myGets(char s[]){char ch;while((ch=getchar())!='\n' && ch!=EOF)*s++=ch;*s=0;
}
int main(){char c[20][20],temp[20];int n,i,j;scanf("%d",&n);getchar();for(i=0;i<n;i++)gets(c[i]);for(i=n-1;i>0;i--)for(j=0;j<i;j++)if(strcmp(c[j],c[j+1])>0){strcpy(temp,c[j]);strcpy(c[j],c[j+1]);strcpy(c[j+1],temp);}for(i=0;i<n;i++)puts(c[i]);return 0;  
}

2.9.删除小写字符形成新字符串

描述

        从键盘输入一个字符串s,删除其中所有的小写字符后形成一个新字符串,然后输出。

输入用例

www.163.com

输出用例

.163.

具体实现

#include <stdio.h>
#include <string.h>
int main (){char s[30];int i,j;gets(s);i=0;while (s[i]!='\0'){if(s[i]>='a' && s[i]<='z'){j=i;while (s[j]!='\0'){s[j]=s[j+1];j++;	}s[j-1]='\0';}else i++;}puts(s);	return 0;} 

2.10.恺撒密码加密 

描述

        朱迪斯·恺撒在其政府的秘密通信中使用恺撒密码进行信息加密,恺撒加密因而得其名。凯撒密码的基本思想是将待加密的信息(称为明文)中每个字母在字母表中向后移动常量key,得到加密信息(称为密文)。例如,假设字母表为小写英文字母表,key等于3,则对于明文computer systems将加密为frpsxwhu vbvwhpv。

输入用例

3

computer system

输出用例

frpsxwhu vbvwhpv

具体实现

#include <stdio.h>
#include <string.h>
int main (){char s[100]={0};int i,key;scanf("%d",&key);while(getchar()!='\n');gets(s); i=0;while (s[i]!='\0'){if ((s[i]>=65 && s[i]<=90)  ){s[i]=(s[i]+key-65)%26+65;}if (s[i]>=97 && s[i]<=122){s[i]=(s[i]+key-97)%26+97;	}i++;}puts(s);	return 0;} 

2.11.优秀学生信息输出

描述

        有n个学生,每个学生的数据包括学号、姓名和成绩,要求输出成绩优秀(大于等于90分)学生的信息(包括学号、姓名和整型成绩)。如果没有符合条件的,则输出“No”。

输入用例

3

1001 Make 86

1002 Linda 58

1003 Jone 90

输出用例

1003 Jone 90

具体实现 

#include <stdio.h>
#include <string.h>
int main (){struct student{int num;char name[10];int score;	};struct student stu[20];int n,i,flag=0;scanf("%d",&n);for (i=0;i<n;i++){scanf("%d%s",&stu[i].num,stu[i].name);scanf("%d",&stu[i].score);} for (i=0;i<n;i++)if (stu[i].score>=90){flag=1;printf("%d %s %d\n",stu[i].num,stu[i].name,stu[i].score);}if(flag==0) printf("No");return 0;} 

2.12.高分学生筛选输出

描述

        有n个学生,每个学生的数据包括学号、姓名和3门课程的成绩,要求输出平均成绩高于90分以上(包括90分)或全部课程成绩均在85分以上(包括85分)的学生信息(包括学号和姓名),如果没有符合条件的,则输出“No”。

输入用例

3

1001 Make 86 91 89

1002 Linda 78 78 80

1003 Jone 90  67 71

输出用例

1001 Make

具体实现

#include <stdio.h>
#include <string.h>
int main (){struct student{int num;char name[10];int score[3];float avg;};struct student stu[20];int n,i,sum,flag=0;scanf("%d",&n);for (i=0;i<n;i++){scanf("%d%s",&stu[i].num,stu[i].name);scanf("%d%d%d",&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);} for (i=0;i<n;i++){stu[i].avg=(stu[i].score[0]+stu[i].score[1]+stu[i].score[2])/3.0;if ((stu[i].avg>=90)||(stu[i].score[0]>=85 && stu[i].score[1]>=85 && stu[i].score[2]>=85)){flag=1;printf("%d %s\n",stu[i].num,stu[i].name);}}if(flag==0) printf("No");return 0;} 


http://www.ppmy.cn/news/1326460.html

相关文章

go 语言(九)----struct

定义一个结构体 type Book struct {title stringauth string }结构体使用 package mainimport "fmt"//定义一个结构体 type Book struct {title stringauth string }func main() {var book1 Bookbook1.title "Golang"book1.auth "zhang3"fmt…

MySQL中SELECT字句的顺序以及具体使用

目录 1.SELECT字句及其顺序 2.使用方法举例 3.HAVING和WHERE 1.SELECT字句及其顺序 *下表来自于图灵程序设计丛书&#xff0c;数据库系列——《SQL必知必会》 2.使用方法举例 *题目来源于牛客网 题目描述 现在运营想要查看不同大学的用户平均发帖情况&#xff0c;并期望结…

2024年MacBookPro电脑数据恢复软件EasyRecovery数据恢复

前天新入手了一台MacBook pro&#xff0c;第一次用Mac激动的心情简直难以言喻&#xff0c;可是随后这激动的心情顿时就烟消云散了&#xff0c;因为对Mac操作系统的不熟练&#xff0c;导致我删除了一份很重要的Word文件。MacBook pro如何恢复误删除的文件?就这件事我向朋友求助…

分布式ID(2):雪花算法生成ID

1 雪花算法简介 这种方案大致来说是一种以划分命名空间(UUID也算,由于比较常见,所以单独分析)来生成ID的一种算法,这种方案把64-bit分别划分成多段,分开来标示机器、时间等,比如在snowflake中的64-bit分别表示如下图(图片来自网络)所示: 41-bit的时间可以表示(1L&l…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用ForceIP强制修改网口IP功能(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Binning像素合并功能&#xff08;C#&#xff09; Baumer工业相机Baumer工业相机NEOAPI SDK和Force IP功能的技术背景Baumer工业相机通过NEOAPI SDK使用ForceIP强制修改网口IP功能1.引用合适的类文件2.通过NEOAPI SDK使用Force…

第十二篇【传奇开心果系列】Ant Design Mobile of React开发移动应用:内置组件实现酷炫CSS 动画

Ant Design Mobile of React 开发移动应用示例博文系列 第一篇【传奇开心果系列】Ant Design Mobile of React 开发移动应用:从helloworld开始 第二篇【传奇开心果系列】Ant Design Mobile of React 开发移动应用:天气应用 第三篇【传奇开心果系列】Ant Design Mobile of Reac…

【react】创建react项目+项目结构

使用create-react-app快速搭建开发环境 create-react-app是一个快速创建React开发环境的工具&#xff0c;底层由Webpack构建&#xff0c;封装了配置细节 npx create-react-app react_hm执行命令后开始创建 创建好执行cd react_hm npm start 当看到webpack compiled successfu…

飞天使-docker知识点13-查找docker run 启动时候命令与升级docker版本

文章目录 如果很久了&#xff0c;不记得之前docker run 命令然后在升级docker 版本 如果很久了&#xff0c;不记得之前docker run 命令 # 安装runlike安装包 pip install runlike# 运行命令 runlike -p <container_name> # 后面可以是容器名和容器id&#xff0c;-p参数是…