“%”:格式化字符串的起始标志。
“0”:表示使用零来填充输出字段的宽度。
“4”:表示输出字段的宽度为4个字符,如果输出的十六进制数不足4位,则在左边用零进行填充。
“x”:表示以十六进制的形式输出变量的值。
十六进制计算
#include <stdio.h>
struct w
{
char low;
char high;
};
union u
{
struct w byte;
short word;
} uw;
int main()
{
int result;
uw.word=0x1234;
printf("word value:%04x\n",uw.word);
printf("high byte:%02x\n",uw.byte.high);
printf("low byte:%02x\n",uw.byte.low);
uw.byte.low=0x74;
printf("word value:%04x\n",uw.word);
result=uw.word+0x2a34;
printf("the result:%04x\n",result);
}
**s1竟然会随着s2=s2+2的变化而变化。
#include <stdio.h>
int main()
{
char *s2="I love China!",**s1=&s2;
char *s3,c,*s4="w";
s3=&c;
*s3='H';
s2=s2+2;
printf("%s\t%c\t%s\t%c\n",s2,*s3,s4,**s1);
}
//输出:love China! H w l
题目:百马百担问题。有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马1担,编程计算所有可能的驮法?
输入
无
输出
hb=2,hm=30,hl=68
hb=5,hm=25,hl=70
hb=8,hm=20,hl=72
hb=11,hm=15,hl=74
hb=14,hm=10,hl=76
hb=17,hm=5,hl=78
hb=20,hm=0,hl=80
n=7
#include <stdio.h>
int main()
{
int hb,hm,hl,n=0; //hb,hm,hl分别为大中小马驮的担数
for(hb=0;hb<=100;hb+=3) //
{
for(hm=0;hm<=100;hm+=2) //
{
hl=100-hb-hm; //
if(hb/3+hm/2+2*hl==100) //
{
n++;
printf("hb=%d,hm=%d,hl=%d\n",hb/3,hm/2,hl*2);
}
}
}
printf("n=%d\n",n);
}
用起泡法对输入的10个字符排序后按从小到大的次序输出
#define N 10
#include <stdio.h>
char str[N];
void main()
{
int i,flag;
for(flag=1;flag==1;)
{
scanf("%s",str);
printf("%s",str);
flag=0;
printf("\n");
}
sort(str);
for(i=0;i<N;i++)
{
printf("%c",str[i]);
}
printf("\n");
}
sort(char str[N])
{
int i,j;
char t;
for(j=1;j<N;j++)
{
for(i=0;i<10-j;i++)
{
if(str[i]>str[i+1])
{
t=str[i];
str[i]=str[i+1];
str[i+1]=t;
}
}
}
}
求矩阵外边缘元素,该矩阵用一维数组表示。
#include <stdio.h>
add(int m,int n,int arr[]) //m行,n列
{
int i,j,sum;
for(i=0;i<m;i=i+m-1) //求第一行和最后一行的和
{
for(j=0;j<n;j++)
{
sum+=arr[i*n+j];
}
}
for(j=0;j<n;j+=n-1) //第一列和最后一列
{
for(i=1;i<m-1;i++) //从第二行到最后一行的前一行
{
sum+=arr[i*n+j];
}
}
return sum;
}
fread(&score[i], sizeof(float), 1, fp) != 1
表示从文件中读取一个 float 类型的数据,并将其存储到 score 数组的第 i 个位置上。如果成功读取了一个元素,则 fread() 返回值为1,条件判断结果为 false。如果读取失败或者已到达文件末尾,则 fread() 返回值不为1,条件判断结果为 true。
换句话说,这个条件判断用于检查读取文件是否成功。如果读取成功,继续读取下一个元素;如果读取失败或者到达文件末尾,将执行相应的错误处理逻辑。
feof(fp) 是一个文件操作函数,用于检查文件流 fp 的当前位置是否已经到达文件末尾(End-of-File)。
feof(fp) 函数返回一个非零值(true)表示文件流 fp 已经到达文件末尾;返回零(false)表示文件流 fp
还没有到达文件末尾。 在代码中的使用情景是判断 fread() 函数是否读取到了文件末尾。当 fread()
函数读取到文件末尾时,返回值不等于1,同时可以通过 feof(fp)
来进一步确认是否到达了文件末尾。如果返回值为非零值,表示已经到达文件末尾,可以根据需要进行相应的处理。
#include <stdio.h>
void load(float score[], int n) {
FILE *fp;
int i;
if ((fp = fopen("202001170218.txt", "rb")) == NULL) {
printf("cannot open infile\n");
return;
}
for (i = 0; i < n; i++) {
if (fread(&score[i], sizeof(float), 1, fp) != 1) {
if (feof(fp)) {
fclose(fp);
return;
}
printf("file read error\n");
}
}
fclose(fp);
}
void save(float score[], int n) {
FILE *fp;
int i;
if ((fp = fopen("202001170218.txt", "wb")) == NULL) {
printf("cannot open file\n");
return;
}
for (i = 0; i < n; i++) {
if (fwrite(&score[i], sizeof(float), 1, fp) != 1) {
printf("file write error\n");
}
}
fclose(fp);
}
void sort(float score[], int n) {
int i, j, k;
float t;
for (i = 0; i < n - 1; i++) {
k = i;
for (j = i + 1; j < n; j++) {
if (score[j] < score[k]) {
k = j;
}
}
t = score[k];
score[k] = score[i];
score[i] = t;
}
}
int Fail(float score[], int n) {
int i, k = 0;
for (i = 0; i < n; i++) {
if (score[i] < 60) {
k++;
}
}
return k;
}
int main() {
int i;
float score[10];
for (i = 0; i < 10; i++) {
scanf("%f", &score[i]);
}
save(score, 10);
load(score, 10);
sort(score, 10);
printf("The Fail number is %d\n", Fail(score, 10));
save(score, 10);
return 0;
}