第二章、c/c++快速入门
2.2顺序结构…
1.知识点及小技巧:
1)%g:用来输出实数,它根据数值的大小,自动选f格式或e格式(选择输出时占宽度较小的一种),且不输出无意义的0。即%g是根据结果自动选择科学记数法还是一般的小数记数法。
2)printf打印double类型数据时可以用**%m.nf调整打印格式,其中m表示宽度,n表示小数点后几位。
3)scanf对于%d等一般格式输入,以空白符(如空格、换行)为结束标志
对于%c格式(单个字符)的输入,不会跳过空格、换行。(其中空格的ASCII为32,‘\0’的ASCII为0)
对于%s格式(字符串)的输入,以空格和换行为读入结束标志
getchar()、putchar()用来输入、输出单个字符,getchar()可以识别换行符,
gets()用来输入一行字符串,识别换行符\n作为结束输入,
用gets()输入二维数组时,只需写一个中括号,如gets(a[i])
输入一维数组时,只需写数组名,不用加中括号
4)输出格式:%md、%0md、%m.nf
5)关于题目要求正负号变换的技巧:以一个标记变量为正负号转变的方式,例如初始时令p=1,循环一次后,在循环末尾令 p*=-1
6)关于ASCII码**:ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)一共有128个字符(0-127)
其中**’\0’对应的码为0,空格为32,A-Z(65-90),a-z(97-122),a比A大32。**
7) 字符串不能直接赋值,必须一个个字符复制
8)C语言中指针*p指向结构体类型时,访问域有两种语法:①(*p).data ②p->data
函数调用结构体类型的指针时,结构体定义必须在函数声明前面!
2.关于题目
1)比较三个数的大小----就是冒泡排序(我好蠢)
仔细思考,不要暴力求解(?)
if(a>b) {
temp=a;a=b;b=temp;
}
if(a>c) {
temp=c;c=a;a=temp;
}
if(b>c) {
temp=b;b=c;c=temp;
}
2)杨辉三角
关键点:利用二维数组
#include <cstdio>
int main() {
//输出杨辉三角
int n,i,j;
scanf("%d", &n); //n为层数
int a[10][10]={{0}}; //以二维数组计算各层结果
a[0][0]=1;
for(i=1;i<n;i++) { //计算杨辉三角
a[i][0]=1;
for(j=1;j<=i;j++) {
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
for(i=0;i<n;i++) { //打印杨辉三角
for(j=0;j<=i;j++) {
printf("%d",a[i][j]);
if(j<i) {
printf(" ");
}
}
printf("\n");
}
return 0;
}
3)解密—http://codeup.cn/problem.php?cid=100000569&pid=3
自己写的代码能通过样例,但OJ判断为error,
暂时还不知道问题在哪里!!!
#include <cstdio>
int main() {
char c,str[100];
int i=0;
scanf("%c", &c);
while(c != '\n') {
if(c>='A' && c<='Z') {
c=155-c;
str[i++]=c;
}else if(c>='a' && c<='z') {
c=219-c;
str[i++]=c;
} else {
str[i++]=c;
}
scanf("%c",&c);
}
str[i]='\0';
printf("%s\n",str);
return 0;
}
下面是别人写的
#include <stdio.h>
int main()
{
char a[100]; //存放密码
char b[100];//存放原文
int i;
gets(a);
for(i=0;a[i]!='\0';i++){
if(a[i]>='A'&&a[i]<='Z')
b[i]=90-a[i]+65;
else if(a[i]>='a'&&a[i]<='z')
b[i]=122-a[i]+97;
else b[i]=a[i];
}
b[i]='\0';
printf("%s\n",b);
return 0;
}
4)结构体—http://codeup.cn/problem.php?cid=100000572&pid=3
#include <cstdio>
struct data {
int num;
char name[10];
int grade01;
int grade02;
int grade03;
};
void input(struct data student[]);
void print(struct data student[]);
int main() {
struct data student[5];
struct data *p=student;
input(p);
print(p);
return 0;
}
void input(struct data student[]) {
for(int i=0;i<5;i++) {
scanf("%d %s %d %d %d",&student[i].num, &student[i].name,
&student[i].grade01,&student[i].grade02,&student[i].grade03);
}
}
void print(struct data student[]) {
for(int i=0;i<5;i++) {
printf("%d %s %d %d %d\n", student[i].num, student[i].name,
student[i].grade01, student[i].grade02, student[i].grade03);
}
}
5)结构体-http://codeup.cn/problem.php?cid=100000572&pid=4
#include <cstdio>
struct data {
int num;
char name[20];
int grade01;
int grade02;
int grade03;
double aver;
};
void input(struct data student[]);
void print(struct data student[]);
int main() {
struct data student[10];
struct data *p=student;
input(p);
// print(p);
double sum,aver01, aver02, aver03;
//计算三门学科成绩的平均值
for(int i=0;i<10;i++) {
sum += student[i].grade01;
}
aver01=sum/10.0;
sum=0;
for(int i=0;i<10;i++) {
sum += student[i].grade02;
}
aver02=sum/10.0;
sum=0;
for(int i=0;i<10;i++) {
sum += student[i].grade03;
}
aver03=sum/10.0;
//寻找平均分最高的人
int max=0; //存放平均分最高的人的位序
for(int i=0;i<9;i++) {
if(student[max].aver<=student[i].aver) {
max=i;
}
}
//输出
printf("%.2f %.2f %.2f \n", aver01, aver02, aver03);
printf("%d %s %d %d %d\n", student[max].num,student[max].name,
student[max].grade01,student[max].grade02,student[max].grade03);
return 0;
}
void input(struct data student[]) {
for(int i=0;i<10;i++) {
scanf("%d %s %d %d %d",&student[i].num, &student[i].name,
&student[i].grade01,&student[i].grade02,&student[i].grade03);
student[i].aver=(student[i].grade01+student[i].grade02+student[i].grade03)/3;
}
}
别人写的----求三门成绩的平均值–参考
https://blog.csdn.net/qq_42887760/article/details/84076506