C语言/C++常见习题问答集锦(五十) 之进制与结构体
程序之美
1、C语言写程序:输入一个正整数n(n<7),输出n行由大写字母A开始构成的三角形字符阵列图,输出示例
解法一:
#include <stdio.h>
int main()
{
char c='A';
int n;
scanf("%d",&n);
while(n)
{
int i;
for(i = 0; i < n; i++)
putchar(c++);
n--;
printf("\n");
}
return 0;
}
解法二:
#include <stdio.h>
int main()
{
int n, j, i;
char s = 'A';
scanf ("%d", &n);
for (i = n; i > 0; i--)
{
for (j = 1; j < i+1; j++)
{
putchar(s++ );
printf (" ");
}
printf("\n");
}
return 0;
}
运行结果为:
2、输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
/*习题7-8 字符串转换成十进制整数(15 分)
输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,
然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。
输入在一行中给出一个以#结束的非空字符串。
在一行中输出转换后的十进制数。题目保证输出在长整型范围内。*/
#include<stdio.h>
#include<string.h>
#include<math.h>
int main(void){
int a[100]={0};
char str[100];
gets(str);
int m,i,j,flag,sum,k;
m=strlen(str);
double y = 16;
j=0,flag=1;
for(i=0;i<m;i++)
{
if(str[i]>='0'&&str[i]<='9')
{
a[j]=str[i]-48;
//printf("a[%d]=%d\n",j,a[j]);
j++;
}
else if(str[i]>='A'&&str[i]<='F')
{
a[j]=str[i]-55;
//printf("大:a[%d]=%d\n",j,a[j]);
j++;
}
else if(str[i]>='a'&&str[i]<='f')
{
a[j]=str[i]-87;
//printf("小:a[%d]=%d\n",j,a[j]);
j++;
}
if(str[i]=='-'&&j==0) //判断第一个十六进制字符之前是否存在字符“-”
flag=-1;
}
sum=0,k=0;
for(i=j-1;i>=0;i--) //16进制的数字转化成10进制的数字
{
sum+=a[i]*pow(16,(double)k);
k++;
}
if(sum==0) //0不能输出-0
printf("0\n");
else{
sum=flag*sum;
printf("%d",sum);
}
return 0;
}
运行结果为:
3、从键盘录入10个学生的学号、姓名、数学成绩,将其中60分以上(含60分)的同学信息全部写入D:\my_data.txt文件中;再从文件中读出成绩,显示到屏幕上。
#include <stdio.h>
typedef struct _stu{
char id[64];
char name[32];
int score;
}STUDENT;
STUDENT stu[10];
int n = 0;
void saveData()
{
FILE *fp = fopen("D:\\my_data.txt","w");
if(fp == NULL)
return;
for(int i=0;i<n;i++)
{
if(stu[i].score >= 60)
fprintf(fp,"%s\t%s\t%f\n",stu[i].id,stu[i].name,stu[i].score);
}
fclose(fp);
}
void readData()
{
FILE *fp = fopen("D:\\my_data.txt","r");
if(fp == NULL)
return;
char buf[100];
n = 0;
while(fgets(buf,100,fp) != NULL)
{
sscanf(buf,"%s\t%s\t%f",stu[n].id,stu[n].name,&stu[n].score);
n++;
}
fclose(fp);
}
void input()
{
printf("请输入10个学生信息:");
n = 10;
for(int i=0;i<n;i++)
{
printf("请输入第%d个学生信息:",i+1);
scanf("%s %s %f",stu[i].id,stu[i].name,&stu[i].score);
}
}
void output()
{
printf("%10s%20s%10s\n","学号","姓名","数学成绩");
for(int i=0;i<n;i++)
printf("%10s%20s%10f\n",stu[i].id,stu[i].name,stu[i].score);
}
int main()
{
input();
saveData();
readData();
output();
return 0;
}