一.C语言学习
1.7-38 数列求和-加强版
给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+⋯+AA⋯A(N个A)。例如A=1, N=3时,S=1+11+111=123。
输入格式:
输入数字A与非负整数N。
输出格式:
输出其N项数列之和S的值。
输入样例:
1 3
输出样例:
123
答案:
include<stdio.h>
int main(){
int A,N;
int temp=0;
int a[100005];
scanf("%d%d",&A,&N);
if(N==0) printf("0");
for(int i=0;i<N;i++){
a[i]=(A(N-i)+temp)%10;//temp是进位的数字
temp=(A(N-i)+temp)/10;
}
if(temp!=0) printf("%d",temp);
for(int i=N-1;i>=0;i--){
printf("%d",a[i]);
}
return 0;
}
//本题主要应从数字进位入手,利用temp储存进位数字并相加
2.7-34 通讯录的录入与显示
通讯录中的一条记录包含下述基本信息:朋友的姓名、出生日期、性别、固定电话号码、移动电话号码。
本题要求编写程序,录入N条记录,并且根据要求显示任意某条记录。
输入格式:
输入在第一行给出正整数N(≤10);随后N行,每行按照格式姓名 生日 性别 固话 手机给出一条记录。其中姓名是不超过10个字符、不包含空格的非空字符串;生日按yyyy/mm/dd的格式给出年月日;性别用M表示“男”、F表示“女”;固话和手机均为不超过15位的连续数字,前面有可能出现+。
在通讯录记录输入完成后,最后一行给出正整数K,并且随后给出K个整数,表示要查询的记录编号(从0到N−1顺序编号)。数字间以空格分隔。
输出格式:
对每一条要查询的记录编号,在一行中按照姓名 固话 手机 性别 生日的格式输出该记录。若要查询的记录不存在,则输出Not Found。
输入样例:
3
Chris 1984/03/10 F +86181779452 13707010007
LaoLao 1967/11/30 F 057187951100 +8618618623333
QiaoLin 1980/01/01 M 84172333 10086
2 1 7
输出样例:
LaoLao 057187951100 +8618618623333 F 1967/11/30
Not Found
答案:
include<stdio.h>
int main(){
struct contacts
{//结构体函数,将不同类型的数据存放在一起
char name[11];
char birth[11];
char sex[2];
char tel[17];
char phone[17];
};
struct contacts person[11];
int N,n,k;//n是查询次数,k是要查询的记录编号
scanf("%d",&N);
for(int i=0;i<N;i++){
scanf("%s %s %s %s %s",person[i].name,person[i].birth,person[i].sex,person[i].tel,person[i].phone);
}
scanf("%d",&n);
for(int j=0;j<n;j++){//读取k的次数
scanf("%d",&k);
if(k>=0&&k<N){
printf("%s %s %s %s %s\n",person[k].name,person[k].tel,person[k].phone,person[k].sex,person[k].birth);
}
else printf("Not Found\n");
}
return 0;
}//结构体函数的运用
3.7-23 币值转换
输入一个整数(位数不超过9位)代表一个人民币值(单位为元),请转换成财务要求的大写中文格式。如23108元,转换后变成“贰万叁仟壹百零捌”元。为了简化输出,用小写英文字母a-j顺序代表大写数字0-9,用S、B、Q、W、Y分别代表拾、百、仟、万、亿。于是23108元应被转换输出为“cWdQbBai”元。
输入格式:
输入在一行中给出一个不超过9位的非负整数。
输出格式:
在一行中输出转换后的结果。注意“零”的用法必须符合中文习惯。
输入样例1:
813227345
输出样例1:
iYbQdBcScWhQdBeSf
输入样例2:
6900
输出样例2:
gQjB
答案:
include<stdio.h>
int main(){
int n;
int i=0;
int a[9]={0};
scanf("%d",&n);
if(n0) printf("a");
while(n){
a[i]=n%10;
i++;
n/=10;
}
int k=i-1;
char s[9]={'\0','S','B','Q','W','S','B','Q','Y'};
for(i=k;i>=0;i--){
if(a[i])//a[i]不等于0
printf("%c%c",a[i]+'a',s[i]);//利用数字与字母的转换
else if(i4){//万位上是0,如果其更大位还有数字则必须补上一个”W“,亿除外
if(a[5]||a[6]||a[7]) printf("W");
}
else if(a[i-1]&&i-1>=0) printf("a");//更小一位不等于0并且 其所在位置在个位及以上
}
return 0;
}//利用字符型数组、数字与字母间的转化完成此题
4.7-2 然后是几点
有时候人们用四位数字表示一个时间,比如 1106 表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。
读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 5 点 30 分表示为 530;0 点 30 分表示为 030。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。
输入格式:
输入在一行中给出 2 个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即 5 点 30 分表示为 530;0 点 30 分表示为 030。流逝的分钟数可能超过 60,也可能是负数。
输出格式:
输出不多于四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。
输入样例:
1120 110
输出样例:
1310
答案:
include<stdio.h>
int main(){
int a,past,b,m,h;
scanf("%d %d",&a,&past);
h=a/100;
m=a%100;
if(past>0){
m=h60+m+past;
b=(m/60)100+m%60;
printf("%d",b);
}
else{
m=h*60+m+past;
h=m/60;
m%=60;
printf("%d%d",h,m);
}
return 0;
}//过去的时间为正数或负数导致不能以同一种方式表达该条件下的答案,故而用两种方式(例如过去时间为负数时,答案按正数方式表达有可能使小时数不能正常-1
二.java学习
1.数组
笔记小结:
定义:数组指的是一种容器,可以同来存储同种数据类型的多个值
定义方式:
格式一:
数据类型 [] 数组名;
//例如
int [] array;
格式二:
数据类型 数组名 [];
//例如
int array [];
注意:不同的数据类型对应不同的默认值
整数类型:0
小数类型:0.0
布尔类型:false
字符类型:‘\u0000’
引用类型:null
2.静态数组初始化:
格式一:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,元素4...};
//例如
double[] arr = new double[]{1.1,1.2,1.3};
格式二:
数据类型[] 数组名 = {元素1,元素2,元素3,元素4...};
//例如
int[] array = {1,2,3,4,5};
3.动态数组初始化:
格式:
数据类型[] 数组名 = new 数据类型[数组的长度];
//例如
double[] arr = new double[10];
4.数组动态初始化与数组的静态初始化的区别:
语法不同
数组长度不同
赋值时机不同
注意:无论是何种数组,数组的最大长度为,数组的长度-1。例如:arr.length - 1
5.地址值:
含义:数组的地址值是指向数组对象的指针或引用
例如:
int[] arr = {1,2,3,4,5};
System.out.println(arr); //[I@6d03e736
/*
[ :表示现在打印的是一个数组。
I:表示现在打印的数组是int类型的。
@:仅仅是一个间隔符号而已。
6d03e736:就是数组在内存中真正的地址值。(十六进制的)
*/
6.索引:
含义:用来标识它在数组中的位置
例如:
arr[0]、arr[1]、……
特点:
起始值为 0
连续不间断
逐个+1增长。
7.数组元素访问
含义:根据索引访问数组中的值
格式:数组名[索引];
8.遍历
含义:依次取出元组中的元素
格式:
for(int i = 0; i < arr.length; i++){
//在循环的过程中,i依次表示数组中的每一个索引
sout(arr[i]);//就可以把数组里面的每一个元素都获取出来,并打印在控制台上了。
}
三.下周规划
继续学习java数组相关知识,整合C语言暑假学习的知识。